目标
使用kubeadm快速搭建K8S实验环境,即在单个主机上部署master节点主进程和node节点主进程。搭建过程约10分钟,文档经多次校验核对,如有错漏,欢迎指正。
详情请参考官方文档:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/
环境介绍
虚拟机(2Cores、4GB、20GB Disk space)
Centos8.2
Internet network
主机初始化
- 配置静态IP(略)
- 配置主机解析(可选)
# cat > /etc/hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.50.50 kubeadm
EOF
- 禁用firewalld
# systemctl stop firewalld.service
# systemctl disable firewalld
- 禁用selinux
# sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# setenforce 0
- 关闭swap
# sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# swapoff -a
- 配置系统允许桥接
# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
# sysctl --system
- 安装系统工具
# yum install yum-utils vim-enhanced net-tools ftp lrzsz bind-utils -y
安装Docker
- 导入阿里云docker软件源
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装docker-ce软件包
centos8必须指定版本,否则将会安装出错
# yum install docker-ce-3:18.09.1-3.el7 -y
- 配置docker
# mkdir -p /etc/docker
# cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": ["https://j0k4w4sd.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.50.51"]
}
EOF
# systemctl daemon-reload
# systemctl restart docker
# systemctl enable docker
安装kubeadm软件包
- 导入阿里云kubernetes软件源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF
- 安装kubeadm软件包
# yum install kubelet kubeadm kubectl --disableexcludes=kubernetes -y
# systemctl enable --now kubelet
使用kubeadm初始化kubernetes集群
kubeadm init --kubernetes-version=1.18.1 \
--apiserver-advertise-address=192.168.50.50 \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=Swap
- 配置kubectl
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件
# kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
- 允许master节点部署pod
# kubectl taint nodes --all node-role.kubernetes.io/master-
- 确认集群组件状态
这里需耐心等待1-2分钟初始化过程
[root@kubeadm ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-65f8bc95db-mbvgz 1/1 Running 0 26m
calico-node-mtzs5 1/1 Running 0 26m
coredns-546565776c-vmfkl 1/1 Running 0 27m
coredns-546565776c-zrw8r 1/1 Running 0 27m
etcd-kubeadm 1/1 Running 0 27m
kube-apiserver-kubeadm 1/1 Running 0 27m
kube-controller-manager-kubeadm 1/1 Running 0 27m
kube-proxy-8tr6d 1/1 Running 0 27m
kube-scheduler-kubeadm 1/1 Running 0 27m
创建第一个应用
- 生成部署配置yml
# cat > nginx-app.yml <<EOF
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
labels:
app: nginx
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: nginx
EOF
- 执行部署配置yml
# kubectl apply -f nginx-app.yml
- 查看pod状态
# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-6b474476c4-8cf4r 1/1 Running 0 26m
my-nginx-6b474476c4-8gqg9 1/1 Running 0 26m
my-nginx-6b474476c4-9cll9 1/1 Running 0 26m
my-nginx-6b474476c4-cpwk2 1/1 Running 0 26m
- 查看服务IP端口
# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 35m
my-nginx-svc ClusterIP 10.96.183.245 <none> 80/TCP 31m
- 验证服务可用性
# curl -i http://10.96.183.245
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sat, 25 Jul 2020 03:46:35 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT
Connection: keep-alive
ETag: "5c0692e1-264"
Accept-Ranges: bytes
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>