前面部署Master节点中由于没有部署网络插件,所以节点状态显示“NodeNotReady”状态。接下来的内容我们就来具体部署下网络插件。在Kubernetes“一切皆容器”的设计理念指导下,网络插件也会以独立Pod的方式运行在系统中,所以部署起来也很简单只需要执行“kubectl apply”指令即可,例如以Weave网络插件为例:
# kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d \'\n\') serviceaccount/weave-net created clusterrole.rbac.authorization.k8s.io/weave-net created clusterrolebinding.rbac.authorization.k8s.io/weave-net created role.rbac.authorization.k8s.io/weave-net created rolebinding.rbac.authorization.k8s.io/weave-net created daemonset.apps/weave-net created部署完成后通过“kubectl get”命令重新检查Pod的状态:
# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-66bff467f8-l4wt6 1/1 Running 0 116m coredns-66bff467f8-rcqx6 1/1 Running 0 116m etcd-kubernetesnode01 1/1 Running 0 116m kube-apiserver-kubernetesnode01 1/1 Running 0 116m kube-controller-manager-kubernetesnode01 1/1 Running 0 116m kube-proxy-wjct7 1/1 Running 0 116m kube-scheduler-kubernetesnode01 1/1 Running 0 116m weave-net-746qj 2/2 Running 0 14m可以看到,此时所有的系统Pod都成功启动了,而刚才部署的Weave网络插件则在kube-system下面新建了一个名叫“weave-net-746qj”的Pod,而这个Pod就是容器网络插件在每个节点上的控制组件。
到这里,Kubernetes的Master节点就部署完成了,如果你只需要一个单节点的Kubernetes,那么现在就可以使用了。但是在默认情况下,Kubernetes的Master节点是不能运行用户Pod的,需要通过额外的操作进行调整,在本文的最后将会介绍到它。
06、部署Worker节点为了构建一个完整的Kubernetes集群,这里还需要继续介绍如何部署Worker节点。实际上Kubernetes的Worker节点和Master节点几乎是相同的,它们都运行着一个kubelet组件,主要的区别在于“kubeadm init”的过程中,kubelet启动后,Master节点还会自动启动kube-apiserver、kube-scheduler及kube-controller-manager这三个系统Pod。
在具体部署之前与Master节点一样,也需要在所有Worker节点上执行前面“安装kubeadm及Decker环境”小节中的所有步骤。之后在Worker节点执行部署Master节点时生成的“kubeadm join”指令即可,具体如下:
root@kubenetesnode02:~# kubeadm join 10.211.55.6:6443 --token jfulwi.so2rj5lukgsej2o6 --discovery-token-ca-cert-hash sha256:d895d512f0df6cb7f010204193a9b240e8a394606090608daee11b988fc7fea6 --v=5 ... This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details. Run \'kubectl get nodes\' on the control-plane to see this node join the cluster.完成集群加入后为了便于在Worker节点执行kubectl相关命令,需要进行如下配置:
#创建配置目录 root@kubenetesnode02:~# mkdir -p $HOME/.kube #将Master节点中$/HOME/.kube/目录中的config文件拷贝至Worker节点对应目录 root@kubenetesnode02:~# scp root@10.211.55.6:$HOME/.kube/config $HOME/.kube/ #权限配置 root@kubenetesnode02:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config之后可以在Worker或Master节点执行节点状态查看命令“kubectl get nodes”,具体如下:
root@kubernetesnode02:~# kubectl get nodes NAME STATUS ROLES AGE VERSION kubenetesnode02 NotReady <none> 33m v1.18.4 kubernetesnode01 Ready master 29h v1.18.4通过节点状态显示此时Work节点还处于NotReady状态,具体查看节点描述信息如下:
root@kubernetesnode02:~# kubectl describe node kubenetesnode02 ... Conditions: ... Ready False ... KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized ...根据描述信息,发现Worker节点NotReady的原因也在于网络插件没有部署,继续执行“部署Kubernetes网络插件”小节中的步骤即可。但是要注意部署网络插件时会同时部署kube-proxy,其中会涉及从k8s.gcr.io仓库获取镜像的动作,如果无法访问外网可能会导致网络部署异常,这里可以参考前面安装Master节点时的做法,通过国内镜像仓库下载后通过tag的方式进行标记,具体如下:
#从阿里云拉取必要镜像 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.20.0 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 #将镜像重新打tag docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.20.0 k8s.gcr.io/kube-proxy:v1.20.0 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2 如若一切正常,则继续查看节点状态,命令如下: root@kubenetesnode02:~# kubectl get node NAME STATUS ROLES AGE VERSION kubenetesnode02 Ready <none> 7h52m v1.20.0 kubernetesnode01 Ready master 37h v1.20.0