本文档介绍部署高可用 kube-controller-manager 集群的步骤。

该集群包含 3 个节点,启动后将通过竞争选举机制产生一个 leader 节点,其它节点为阻塞状态。当 leader 节点不可用后,剩余节点将再次进行选举产生新的 leader 节点,从而保证服务的可用性。

以下是非认证的的配置文件(用127.0.0.1连接kube-apiserver):

cat > /lib/systemd/system/kube-controller-manager.service <<"EOF"
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
[Service]
ExecStart=/usr/local/bin/kube-controller-manager \
--address=127.0.0.1 \
--master=http://127.0.0.1:8080 \
--allocate-node-cidrs=true \
--service-cluster-ip-range=10.254.0.0/16 \
--cluster-cidr=172.30.0.0/16 \
--cluster-name=kubernetes \
--leader-elect=true \
--cluster-signing-cert-file=/etc/kubernetes/ca/ca.pem \
--cluster-signing-key-file=/etc/kubernetes/ca/ca-key.pem \
--service-account-private-key-file=/etc/kubernetes/ca/ca-key.pem \
--root-ca-file=/etc/kubernetes/ca/ca.pem \
--v=2
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF

这个简单很多,但是以后可能会取消,如果要使用认证授权的方式看下面:

------------------------------------------------------------------

为保证通信安全,本文档先生成 x509 证书和私钥,kube-controller-manager 在如下两种情况下使用该证书:

与 kube-apiserver 的安全端口通信时;
在安全端口(https,10252) 输出 prometheus 格式的 metrics;

创建 kube-controller-manager 证书和私钥

cat > kube-controller-manager-csr.json <<EOF
{
"CN": "system:kube-controller-manager",
"key": {
"algo": "rsa",
"size": 2048
},
"hosts": [
"127.0.0.1",
"192.168.111.10",
"192.168.111.11",
"192.168.111.12"
],
"names": [
{
"C": "CN",
"ST": "ChongQing",
"L": "ChongQing",
"O": "system:kube-controller-manager",
"OU": "yunwei"
}
]
}
EOF cfssl gencert -ca=/etc/kubernetes/ca/ca.pem \
-ca-key=/etc/kubernetes/ca/ca-key.pem \
-config=/etc/kubernetes/ca/ca-config.json \
-profile=kubernetes kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager

创建和分发 kubeconfig 文件

kubeconfig 文件包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书;

kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ca/ca.pem \
--embed-certs=true \
--server=https://192.168.111.9:8443 \
--kubeconfig=kube-controller-manager.kubeconfig

kubectl config set-credentials system:kube-controller-manager \
--client-certificate=/etc/kubernetes/ca/kube-controller-manager.pem \
--client-key=/etc/kubernetes/ca/kube-controller-manager-key.pem \
--embed-certs=true \
--kubeconfig=kube-controller-manager.kubeconfig

kubectl config set-context system:kube-controller-manager \
--cluster=kubernetes \
--user=system:kube-controller-manager \
--kubeconfig=kube-controller-manager.kubeconfig

kubectl config use-context system:kube-controller-manager --kubeconfig=kube-controller-manager.kubeconfig

分发 kubeconfig 到所有 master 节点:

# scp kube-controller-manager.kubeconfig 192.168.111.11:/etc/kubernetes/
# scp kube-controller-manager.kubeconfig 192.168.111.12:/etc/kubernetes/

创建和分发 kube-controller-manager systemd unit 文件:

cat > /lib/systemd/system/kube-controller-manager.service <<"EOF"
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes [Service]
ExecStart=/usr/local/bin/kube-controller-manager \
--port=0 \
--secure-port=10252 \
--kubeconfig=/etc/kubernetes/kube-controller-manager.kubeconfig \
--service-cluster-ip-range=10.254.0.0/16 \
--cluster-signing-cert-file=/etc/kubernetes/ca/ca.pem \
--cluster-signing-key-file=/etc/kubernetes/ca/ca-key.pem \
--root-ca-file=/etc/kubernetes/ca/ca.pem \
--service-account-private-key-file=/etc/kubernetes/ca/ca-key.pem \
--leader-elect=true \
--feature-gates=RotateKubeletServerCertificate=true \
--controllers=*,bootstrapsigner,tokencleaner \
--horizontal-pod-autoscaler-use-rest-clients=true \
--horizontal-pod-autoscaler-sync-period=10s \
--tls-cert-file=/etc/kubernetes/ca/kube-controller-manager.pem \
--tls-private-key-file=/etc/kubernetes/ca/kube-controller-manager-key.pem \
--use-service-account-credentials=true \
--alsologtostderr=true \
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--v=2
Restart=on
Restart=on-failure
RestartSec=5
User=k8s [Install]
WantedBy=multi-user.target
EOF

-------------------------------------------------

启动kube-controller-manager

# systemctl daemon-reload&&for SERVICES in kube-controller-manager;do systemctl enable $SERVICES; systemctl start $SERVICES; systemctl status $SERVICES; done

查看输出的 metric
注意:以下命令在 kube-controller-manager 节点上执行。

kube-controller-manager 监听 10252 端口,接收 https 请求:

# ss -lnpt|grep kube-controll

# curl http://127.0.0.1:10252/metrics |head

测试 kube-controller-manager 集群的高可用
停掉一个或两个节点的 kube-controller-manager 服务,观察其它节点的日志,看是否获取了 leader 权限。
查看当前的 leader
kubectl get endpoints kube-controller-manager --namespace=kube-system -o yaml

最新文章

  1. virtualBox安装Centos7之后
  2. ex2-注释和井号
  3. POI2005Bank notes银行货币
  4. finally语句总是不会被执行?
  5. Eclipse 配置Tomcat
  6. Git图文教程:从零到上传GitHub项目
  7. iOS开发——适配篇&amp;iOS9适配
  8. SignalR: The new old thing
  9. richTextBox设置选中的字体属性
  10. ORA-00845 Oracle 启不来修改 MEMORY_TARGET
  11. CodeCounter代码统计
  12. Google C++测试框架系列:入门
  13. 【MyBatis】MyBatis自动生成代码查询之爬坑记
  14. python---购物车---更新
  15. COSO企业风险管理框架2017版发布!看看有哪些变化?
  16. Docker安装rabbitmq
  17. 03-es6语法 Promise 和 es8语法 async await 的了解和基本使用
  18. Django框架详细介绍---Form表单
  19. Pytorch1.0入门实战一:LeNet神经网络实现 MNIST手写数字识别
  20. Linux下su 与 su - 区别

热门文章

  1. HMS Core Keyring携手航班管家和高铁管家,打造美好出行体验
  2. [ NOIP2013 D2-T3 ] 华容道
  3. CF375D Tree and Queries 题解
  4. 基于openeuler的openssl编程
  5. linux下使用shell命令通过wpa_cli控制wpa_supplicant连接wifi
  6. Codeforces Round #744 (Div. 3) G题题解
  7. 2021CCPC华为云挑战赛 部分题题解
  8. 树行DP小结
  9. oracle修改CHARACTERSET
  10. Linux&C open creat read write lseek 函数用法总结