前面已经把所有Master节点组件安装完成,并且配置了Bootstrapping自动为Node节点签发证书,所以Node节点的Kubelet证书(kubelet.kubeconfig)不需要再手动配置,可以采用Bootstrap自动生成。但是有一些证书还是需要手动发送到Node节点,比如请求kubelet.kubeconfig证书的bootstrap.kubeconfig证书等。
Master01节点将Node节点所用的证书复制到各个Node节点(本次示例Master节点也会部署kubelet和kube-proxy):
所有节点创建相关目录:
所有节点配置Kubelet Service:
# vim /usr/lib/systemd/system/kubelet.service [Unit] Description=Kubernetes Kubelet Documentation=https://github.com/kubernetes/kubernetes After=docker.service Requires=docker.service [Service] ExecStart=/usr/local/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target
所有节点配置Kubelet Service的配置文件(也可以写到kubelet.service):
如果读者的Runtime为Docker,请使用如下Kubelet的配置:
所有节点创建Kubelet的配置文件(注意修改的地方,完整文件见本书下载资源):
# vim /etc/kubernetes/kubelet-conf.yml apiVersion: kubelet.config.k8s.io/v1beta1 ... clusterDNS: - 192.168.0.10 # 更改该IP为读者Service网段的第10个IP ... clusterDomain: cluster.local
启动所有节点Kubelet:
# systemctl daemon-reload # systemctl enable --now kubelet
此时系统日志/var/log/messages显示只有如下信息为正常,因为还没有安装CNI插件:
Unable to update cni config: no networks found in /etc/cni/net.d
如果有很多报错日志,不只是CNI的报错,或者有大量看不懂的报错,说明Kubelet的配置有误,需要检查Kubelet的配置。
查看集群状态:
# kubectl get node
以同样的方式生成kube-proxy的证书。以下操作只在Master01执行:
修改--server=https://10.0.0.236:16443为读者自己的VIP地址和端口,如果不是高可用集群,改为Master节点IP:6443即可。
将kubeconfig发送至其他节点:
所有节点添加kube-proxy的配置和Service文件:
所有节点创建kube-proxy的配置文件,如果更改了集群Pod的网段,就需要更改kube-proxy.yaml的clusterCIDR为自己的Pod网段(完整文件见本书下载资源):
# vim /etc/kubernetes/kube-proxy.yaml apiVersion: kubeproxy.config.k8s.io/v1alpha1 bindAddress: 0.0.0.0 ... clusterCIDR: 172.16.0.0/12 # 此处改为读者自己的Pod网段 ... udpIdleTimeout: 250ms
所有节点启动kube-proxy:
# systemctl daemon-reload # systemctl enable --now kube-proxy