k8s基本部署要求
每个节点的时间必须同步。
要求各节点的防火墙必须关闭
禁用swap设备,k8s要求必须关闭swap,除非安装时强行忽略此错误
确保所有节点的ID为唯一的。
准备工作 一个Master节点,三个Worker节点.
HostName
IP
k8s-master01
172.16.11.71
k8s-node01
172.16.11.81
k8s-node02
172.16.11.82
k8s-node03
172.16.11.83
部署Docker kubeadm部署k8s要求所有主机上预先安装有docker环境。
安装Docker服务 1 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
启动docker并设置为开机启动 1 systemctl start docker && systemctl enable docker
注意:若IPtables规则在安装docker前没有清除,可以在安装完docker后清除规则然后重启docker服务。
修改cgoupfs为systemd 默认安装docker的cgroup dirve为cgroupfs ,需要将其改为systemd
1 2 3 4 5 6 cat << EOF >> /etc/docker/daemon.json { "registry-mirrors": ["https://gy97ij1m.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF
重启docker服务 1 2 systemctl daemon-reload systemctl restart docker
部署k8s 部署k8s要求在各节点上部署以下组件:
master:kube-apiserver,kube-controller-manager,kube-scheduler,etcd
worker:kubelet,kube-proxy,docker
但是本次是以k8s官方提供的kubeadm来进行部署,kubeadm将每一个组件运行为pod的方式来部署,因此在master节点上也需要部署docker和kubelet。
所以每个节点都需要部署docker,kubelet,kubeadm。主节点上还需要部署kubectl。
配置阿里云k8s源 1 2 3 4 5 6 apt-get update && apt-get install -y apt-transport-https curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF apt-get update
查看所有版本的kubeadm 1 apt-cache madison kubeadm
选择出所要安装的版本,并安装 在所有节点上安装kubeadm、kubectl、kubelet
1 2 3 4 apt-get install kubeadm=1.21.2-00 kubectl=1.21.2-00 kubelet=1.21.2-00 -y systemctl enable kubelet
初始化控制平面节点 安装完kubeadm后需要先对初始化集群的控制平面,但是在初始化之前,需要将所有节点注册到DNS中,确保主机名能被DNS解析,此处使用hosts文件直接做解析。
修改hosts文件 1 2 3 4 5 6 cat << EOF >> /etc/hosts 172.16.11.71 k8s-master01 kube-api 172.16.11.81 k8s-node01 172.16.11.82 k8s-node02 172.16.11.83 k8s-node03 EOF
初始化控制平面 使用kubeadm init初始化集群。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 kubeadm init --apiserver-advertise-address=172.16.11.71 \ --control-plane-endpoint=kube-api \ --kubernetes-version=v1.21.2 \ --pod-network-cidr=10.244.0.0/16 \ --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
初始化集群会做很多步骤:
preflight: 进行预检测,如果检测不通过操作将终止。
生成各种证书,每个组件相互间通信使用https进行。
生成kubeconfig配置文件。
启动kubelet。
创建控制平面。
上传配置
上传证书
生成引导令牌,以方便其他节点加入。
初始化控制平面后会生成以下信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME /.kube sudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/config sudo chown $(id -u):$(id -g) $HOME /.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of control-plane nodes by copying certificate authorities and service account keys on each node and then running the following as root: kubeadm join kube-api:6443 --token 4oo3c2.ur24gwcotgi9pwt8 \ --discovery-token-ca-cert-hash sha256:0a2facf32492adf109c3eb0d45fa03e27b080298e3ae7ee4ef7063052c8cd626 \ --control-plane Then you can join any number of worker nodes by running the following on each as root: kubeadm join kube-api:6443 --token 4oo3c2.ur24gwcotgi9pwt8 \ --discovery-token-ca-cert-hash sha256:0a2facf32492adf109c3eb0d45fa03e27b080298e3ae7ee4ef7063052c8cd626
按照所生成的提示信息操作 在用户家目录下创建出config
1 2 3 mkdir -p $HOME /.kube sudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/config sudo chown $(id -u):$(id -g) $HOME /.kube/config
安装flannel网络插件
1 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
使用令牌将各work节点加入到k8s集群中
1 2 kubeadm join kube-api:6443 --token 4oo3c2.ur24gwcotgi9pwt8 \ --discovery-token-ca-cert-hash sha256:0a2facf32492adf109c3eb0d45fa03e27b080298e3ae7ee4ef7063052c8cd626
查看各节点状态
1 2 3 4 5 6 7 root@k8s-master01:~ NAME STATUS ROLES AGE VERSION k8s-master01 Ready control-plane,master 17m v1.21.1 k8s-node01 Ready <none> 2m51s v1.21.1 k8s-node02 Ready <none> 2m46s v1.21.1 k8s-node03 Ready <none> 2m43s v1.21.1