1. 检查工作(所有节点)
检查kubelet、crictl、containerd运行状态是否正常
2. 部署动作(master节点)
此时,kubelet和containerd应该处于正常运行状态,只不过内部会因为K8S核心组件未部署,会有一些报错日志
2.1. 生成证书(部署K8S时不用做,只是后续证书失效后才需要)
sudo kubeadm init phase kubelet-start
sudo kubeadm init phase certs all
cd /etc/kubernetes/
mkdir backup
mv admin.conf controller-manager.conf kubelet.conf scheduler.conf backup
kubeadm init phase kubeconfig all
2.2. 生成kubeadm部署的相关配置
生成kubeadm的默认配置
kubeadm config print init-defaults > kubeadm-config.yaml
修改 kubeadm-config.yaml的内容(重点关注标红部分,没有就新增,有就修改)
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.0.0.24
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/containerd/containerd.sock
imagePullPolicy: IfNotPresent
name: csitest-centos8-0001
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.25.5
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16
scheduler: {}
其中:
advertiseAddress: 10.0.0.24为你master节点与其他节点通信的地址。
criSocket: unix:///var/run/containerd/containerd.sock为containerd配置的对外提供服务的sock地址
name: csitest-centos8-0001为主master节点的hostname
imageRepository: registry.aliyuncs.com/google_containers表示你拉取镜像的地址前缀,一般国内都用阿里的
kubernetesVersion: 1.25.5表示K8S版本号
podSubnet: 10.244.0.0/16一般在yaml都不会自带,所以需要你添加,因为我常用flannel网络插件,所以用flannel的这个默认地址。
2.3. 镜像拉取
先用kubeadm config images list --config kubeadm-config.yaml命令,查看拉取的镜像是否跟你要的一致。
你确定好没问题以后,执行命令正式拉取:
kubeadm config images pull --config kubeadm-config.yaml
确定镜像拉取完后,再进行下一步。
注意:这里拉取的pause的镜像地址,需要与之前“构建containerd配置”这一节的pause地址保持一致
2.4. 部署master节点
执行命令进行master的部署:
kubeadm init --config kubeadm-config.yaml
执行成功后,将配置提供给kubectl使用(kubectl命令执行的时候会自动去~/.kube目录下读取config文件用于和apiserver通信):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
记录node节点的加入口令:
kubeadm token create --print-join-command
例如会返回如下结果:
kubeadm join 10.0.0.24:6443 --token j5f6gk.ngt79gdeg3sxnr3q --discovery-token-ca-cert-hash sha256:db7de7cf051863b87337d091d6a532a7affaf5ac2b61102c519bdd14de916de0
这样其他node节点需要加入K8S集群,就需要用到这段kubeadm join的语句了。
3. CNI网络配置(master节点)
下载yaml:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
部署flannel:
kubectl apply -f kube-flannel.yml
注意:
- 如果下载flannel镜像较慢或者无公网,则自行下载后,再导入。Yaml也是同理。
- 一般来说kube-flannel.yml内容无需修改,只要使用的flannel默认地址和podSubnet: 10.244.0.0/16保持一致就行。
- 如果有公网但无法访问githubusercontent.com,可以自行配置/etc/hosts,例如通过api.ipshu.com查询真实IP,输入raw.githubusercontent.com查询到真实IP地址(例如:185.199.111.133),那么就将185.199.111.133 raw.githubusercontent.com添加到/etc/hosts中
4. 部署动作(node节点)
4.1. 准备工作
在master节点上,将配置信息分发到各个node节点上,方便其他节点使用kubectl
scp $HOME/.kube/config root@csitest-centos8-0002:~/
scp $HOME/.kube/config root@csitest-centos8-0003:~/
scp $HOME/.kube/config root@csitest-centos8-0004:~/
4.2. 加入集群
执行之前的kubeadm join命令,例如:
kubeadm join 10.0.0.24:6443 --token j5f6gk.ngt79gdeg3sxnr3q --discovery-token-ca-cert-hash sha256:db7de7cf051863b87337d091d6a532a7affaf5ac2b61102c519bdd14de916de0
实际命令以之前打印的命令为准。
4.3. 检查工作
确认节点均为ready。