云网牛站
所在位置:首页 > Linux云服务器 > 将新的Kubernetes Worker节点加入现有集群

将新的Kubernetes Worker节点加入现有集群

2020-01-10 15:14:48作者:高风科稿源:云网牛站

初始设置Kubernetes集群后,最常见的操作是通过添加更多运行工作负载的节点(容器和Pod)来扩展集群。扩展群集的方式取决于群集引导过程中最初使用的工具,本文将演示如何使用kubeadm命令行工具向Kubernetes集群添加更多Worker节点。

 

在开始之前

需要有一个正常工作的Kubernetes集群,已配置并且正常工作的控制平面节点。

在Worker节点中安装的容器运行时(Docker,cri-o,containerd等)和Kubernetes工具(kubeadm和kubelet)。

如果使用防火墙(例如firewalld),则应在防火墙中打开端口10250、30000-32767和Pod网络附加组件所需的端口。

SSH访问要添加的计算机。

配置的kubectl用于检查节点在集群中是否可用。

然后可以按照以下标准步骤将现有的Kubernetes集群加入或添加新的Worker节点。

 

步骤1:获取加入Token

将新的工作程序节点加入Kubernetes集群时需要Token,当您使用kubeadm引导集群时,会生成Token,Token将在24小时后失效。

检查是否有Token,在控制节点上运行命令:

$ kubeadm token list

将新的Kubernetes Worker节点加入现有集群

如果Token已过期,请使用以下命令生成一个新Token:

sudo kubeadm token create

抓取Token使用以下方法生成:

$ kubeadm token list

您还可以生成Token并打印join命令:

kubeadm token create --print-join-command

 

步骤2:获取发现Token CA cert Hash

对于基于Token的发现,join命令通过将根哈希与提供的哈希进行匹配来验证根CA公钥,通过运行以下命令,在控制节点上获取发现Token CA cert Hash:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

 

步骤3:获取API Server Advertise地址

使用kubectl命令获取API服务器端点:

$ kubectl cluster-info

Kubernetes master is running at https://192.168.122.195:6443

KubeDNS is running at https://192.168.122.195:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Metrics-server is running at https://192.168.122.195:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy

如输出所示,我的API位于https://192.168.122.195:6443。

参考:安装及使用kubectl、kubectx和kubens轻松管理多个Kubernetes集群

 

步骤4:将新的Kubernetes Worker节点加入集群

kubeadm join命令用于引导Kubernetes工作者节点或其他控制平面节点,并将其加入集群,将工作程序节点加入集群的命令语法为:

kubeadm join [api-server-endpoint] [flags]

所需的常见参数是:

--token string:要使用的Token。

--discovery-token-ca-cert-hash:具有格式:<type>:<value>。

因此,我们完整的join命令将具有以下格式:

kubeadm join \

 <control-plane-host>:<control-plane-port> \

 --token <token> \

 --discovery-token-ca-cert-hash sha256:<hash>

例子:

sudo kubeadm join \

 192.168.122.195:6443 \

 --token nx1jjq.u42y27ip3bhmj8vj \

 --discovery-token-ca-cert-hash sha256:c6de85f6c862c0d58cc3d10fd199064ff25c4021b6e88475822d6163a25b4a6c

命令输出:

[preflight] Running pre-flight checks

[preflight] Reading configuration from the cluster...

[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'

[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.17" ConfigMap in the kube-system namespace

[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"

[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"

[kubelet-start] Starting the kubelet

[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

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.

等待节点的状态为“Ready”,检查控制节点:

$ watch kubectl get nodes

由于在配置和启动服务之前先拉出容器映像,此过程可能需要几分钟:

$ sudo docker ps

将新的Kubernetes Worker节点加入现有集群

 

步骤5:从群集中删除工作节点

要从集群中删除Kubernetes辅助节点,请执行以下操作。

1、从节点迁移pods:

kubectl drain  <node-name> --delete-local-data --ignore-daemonsets

2、防止节点安排使用新的Pod,将节点标记为不可计划:

kubectl cordon <node-name>

3、恢复通过“kubeadm join”对节点所做的更改,在要删除的工作节点上运行:

sudo kubeadm reset

4、一旦成功执行了kubeadm reset命令,就可以重做将新节点加入集群的相同过程。

 

相关主题

使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

精选文章
热门文章