K8S 集群添加或删除节点

less than 1 minute read

Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。 节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。 每个节点包含运行 Pods 所需的服务; 这些节点由控制面负责管理。

通常集群中会有若干个节点;而在一个学习用或者资源受限的环境中,你的集群中也可能 只有一个节点。

节点上的组件包括 kubelet、 容器运行时以及 kube-proxy。

K8S 集群添加新节点

添加 master 节点

Step 1)上传控制平面证书,kubeadm 会把控制平面证书文件保存在 kube-system 命名空间下一个名为 kubeadm-certs 的 secret 中

$ kubeadm init phase upload-certs --upload-certs

该命令会自动生成一个新的控制面证书密钥(即 certificate key),新 master 加入集群需要使用这个 certificate key 以自动完成控制面证书复制。certificate key 是用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。

如果存在多种容器运行时的集群执行上面的命令会报错,kubeadm init phase 不支持传入 --cri-socket 参数。

可以用如下的方式:

  1. 打印用于 ‘kubeadm init’ 的默认 init 配置文件 kubeadm-config

    $ kubeadm config print init-defaults > kubeadm-config.yaml
    
  2. advertiseAddress 修改为 master ip 地址,删除 ClusterConfiguration 段的配置

  3. 生成 certificate key

    $ kubeadm init phase upload-certs --upload-certs --config kubeadm-config.yaml
    [upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
    [upload-certs] Using certificate key:
    1bc6223367a3ba58645eff7d64ede4e5f49804eb4ba3dbe04aac0ea52f83702a
    

Step 2)创建引导令牌并打印作为控制平面加入集群所需的完整 ‘kubeadm join’ 参数

$ kubeadm token create --print-join-command --certificate-key 1bc6223367a3ba58645eff7d64ede4e5f49804eb4ba3dbe04aac0ea52f83702a
kubeadm join 192.168.20.17:6443 --token tyh701.zk5atsbriqjtp7ji --discovery-token-ca-cert-hash sha256:69b775501c9439b807e64a99df1d075f175cd1d8a06c1a882d1da7badbf7a503 --control-plane --certificate-key 1bc6223367a3ba58645eff7d64ede4e5f49804eb4ba3dbe04aac0ea52f83702a

Step 3)新节点上执行上面生成的 ‘kubeadm join’ 命令加入集群

$ kubeadm join 192.168.20.17:6443 --token tyh701.zk5atsbriqjtp7ji --discovery-token-ca-cert-hash sha256:69b775501c9439b807e64a99df1d075f175cd1d8a06c1a882d1da7badbf7a503 --control-plane --certificate-key 1bc6223367a3ba58645eff7d64ede4e5f49804eb4ba3dbe04aac0ea52f83702a

添加 worker 节点

Step 1)创建引导令牌并打印作为工作节点加入集群所需的完整 ‘kubeadm join’ 参数

$ kubeadm token create --print-join-command
kubeadm join 192.168.20.17:6443 --token 68ktls.euz56gf9y3et5138 --discovery-token-ca-cert-hash sha256:69b775501c9439b807e64a99df1d075f175cd1d8a06c1a882d1da7badbf7a503

Step 2)新节点上执行上面生成的 ‘kubeadm join’ 命令加入集群

$ kubeadm join 192.168.20.17:6443 --token 68ktls.euz56gf9y3et5138 --discovery-token-ca-cert-hash sha256:69b775501c9439b807e64a99df1d075f175cd1d8a06c1a882d1da7badbf7a503

K8S 集群删除节点

Step 1)驱逐该节点上面的 Pod

$ kubectl drain my-node --delete-local-data --force --ignore-daemonsets

Step 3)删除该节点

$ kubectl delete node my-node