返回

Kubernetes之kube-controller-manager高可用部署攻略

后端

前提条件

  • 3个Master节点,每个节点至少有4GB内存和2个CPU内核。
  • Kubernetes版本为1.23.5。
  • etcd集群已经搭建完成。
  • kube-apiserver已经搭建完成。
  • kube-scheduler已经搭建完成。

部署步骤

  1. 在每个Master节点上创建kube-controller-manager的systemd unit文件。
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://kubernetes.io/docs/home/
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
ExecStart=/usr/local/bin/kube-controller-manager \\
  --bind-address=127.0.0.1 \\
  --cluster-name=kubernetes \\
  --kubeconfig=/etc/kubernetes/controller-manager.conf \\
  --leader-elect=true \\
  --port=10252 \\
  --service-cluster-ip-range=10.32.0.0/24 \\
  --use-service-account-credentials=true
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
  1. 将systemd unit文件复制到每个Master节点上。
scp /etc/systemd/system/kube-controller-manager.service root@master1:/etc/systemd/system/
scp /etc/systemd/system/kube-controller-manager.service root@master2:/etc/systemd/system/
scp /etc/systemd/system/kube-controller-manager.service root@master3:/etc/systemd/system/
  1. 在每个Master节点上启用并启动kube-controller-manager服务。
systemctl enable kube-controller-manager
systemctl start kube-controller-manager
  1. 检查kube-controller-manager是否正在运行。
systemctl status kube-controller-manager

如果kube-controller-manager正在运行,您应该会看到类似以下的输出:

● kube-controller-manager.service - Kubernetes Controller Manager
     Loaded: loaded (/etc/systemd/system/kube-controller-manager.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-03-13 16:32:32 UTC; 4s ago
       Docs: https://kubernetes.io/docs/home/
   Main PID: 28714 (kube-controll)
      Tasks: 19 (limit: 512)
     Memory: 9.2M
        CPU: 199ms
   CGroup: /system.slice/kube-controller-manager.service
           ├─28714 kube-controll
           └─28715 kube-controll

Mar 13 16:32:32 master1 systemd[1]: Started Kubernetes Controller Manager.

验证

您可以通过以下命令来验证kube-controller-manager是否正常工作:

kubectl get componentstatuses

如果kube-controller-manager正在正常工作,您应该会看到类似以下的输出:

NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok

故障转移测试

您可以通过以下步骤来测试kube-controller-manager的高可用性:

  1. 在其中一个Master节点上停止kube-controller-manager服务。
systemctl stop kube-controller-manager
  1. 检查其他两个Master节点上的kube-controller-manager服务是否仍然正在运行。
systemctl status kube-controller-manager

您应该会看到其他两个Master节点上的kube-controller-manager服务仍然正在运行,并且其中一个节点已经成为新的leader节点。

  1. 在停止kube-controller-manager服务的Master节点上重新启动kube-controller-manager服务。
systemctl start kube-controller-manager
  1. 检查kube-controller-manager服务是否已经恢复正常工作。
systemctl status kube-controller-manager

您应该会看到kube-controller-manager服务已经恢复正常工作,并且该节点已经重新加入到集群中。

结论

通过本文的介绍,您已经了解了如何在Kubernetes集群中部署kube-controller-manager,以实现高可用性。您已经学会了如何在每个Master节点上创建systemd unit文件、复制systemd unit文件到每个Master节点、启用并启动kube-controller-manager服务、检查kube-controller-manager是否正在运行、验证kube-controller-manager是否正常工作,以及进行故障转移测试。希望本文对您有所帮助,如果您有任何问题,请随时与我联系。