
!TIP 二进制部署
k8s- 部署kube-controller-manager
转载请注明出处:https://janrs.com/12dz 有任何问题欢迎在底部评论区发言。
kube-controller-mangae 作为 kube-apiserver 的控制器,需要访问 kube-apiserver 的服务,所以需要 kube-apiserver
的 ca 机构为其签发客户端 client 证书。
这里 kube-controller 部署在 kube-apiserver 的服务器上,不单独部署。
ip 设置成 kube-apiserver 的一样的就行。
!NOTE
CN参数表示用户名,必须设置为k8s中设定的system:kube-controller-managerO参数表示用户组,必须设置为k8s中设定的system:kube-controller-managerkubernetes内置的ClusterRoleBindings中,system:kube-controller-manager赋予kube-controller-manager工作所需的权限。kube-controller-manager同样作为客户端,不需要设置hosts参数。
cat > /ssl/apiserver-controller-client-csr.json <<EOF
{
"CN": "system:kube-controller-manager",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Beijing",
"L": "Beijing",
"O": "system:kube-controller-manager",
"OU": "system"
}
]
}
EOF
cd /ssl/ && \
cfssl gencert \
-ca=apiserver-ca.pem \
-ca-key=apiserver-ca-key.pem \
-config=ca-config.json \
-profile=client apiserver-controller-client-csr.json | \
cfssljson -bare apiserver-controller-client && \
ls apiserver-controller-client* | \
grep apiserver-controller-clientscp /ssl/apiserver-controller-client*.pem root@172.16.222.121:/etc/kubernetes/pki/apiserver/ && \
scp /ssl/apiserver-controller-client*.pem root@172.16.222.122:/etc/kubernetes/pki/apiserver/ && \
scp /ssl/apiserver-controller-client*.pem root@172.16.222.123:/etc/kubernetes/pki/apiserver/!NOTE 二进制安装的
kube-controller-manager没有操作其他命名空间的资源,需要赋予一些权限。 这里我直接赋予了最高权限的集群角色:cluster-admin,省的再研究需要啥权限了。 如果角色权限太大,自行裁剪权限。
cat > /etc/kubernetes/init_k8s_config/controller-bind-cluster-admin-clusterrole.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: controller-bind-cluster-admin
subjects:
- kind: User
name: system:kube-controller-manager
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
EOF
kubectl apply -f /etc/kubernetes/init_k8s_config/controller-bind-cluster-admin-clusterrole.yaml!NOTE
kube-controller-manager是使用kubeconfig跟kube-apiserver进行通信的。 在kubeconfig配置文件中会包含了kube-controller-manager的客户端client证书信息以及身份信息。 需要在每台服务器都创建该请求文件。 以下操作在每台master服务器创建,ip地址设置为本地的kube-apiserver的服务地址ip。
设置集群参数
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/apiserver/apiserver-ca.pem \
--embed-certs=true \
--server=https://172.16.222.121:6443 \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置客户端认证参数
kubectl config set-credentials system:kube-controller-manager \
--client-certificate=/etc/kubernetes/pki/apiserver/apiserver-controller-client.pem \
--client-key=/etc/kubernetes/pki/apiserver/apiserver-controller-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置上下文参数
kubectl config set-context system:kube-controller-manager \
--cluster=kubernetes \
--user=system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置当前上下文参数
kubectl config use-context system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置集群参数
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/apiserver/apiserver-ca.pem \
--embed-certs=true \
--server=https://172.16.222.122:6443 \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置客户端认证参数
kubectl config set-credentials system:kube-controller-manager \
--client-certificate=/etc/kubernetes/pki/apiserver/apiserver-controller-client.pem \
--client-key=/etc/kubernetes/pki/apiserver/apiserver-controller-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置上下文参数
kubectl config set-context system:kube-controller-manager \
--cluster=kubernetes \
--user=system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置当前上下文参数
kubectl config use-context system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置集群参数
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/apiserver/apiserver-ca.pem \
--embed-certs=true \
--server=https://172.16.222.123:6443 \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置客户端认证参数
kubectl config set-credentials system:kube-controller-manager \
--client-certificate=/etc/kubernetes/pki/apiserver/apiserver-controller-client.pem \
--client-key=/etc/kubernetes/pki/apiserver/apiserver-controller-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置上下文参数
kubectl config set-context system:kube-controller-manager \
--cluster=kubernetes \
--user=system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig设置当前上下文参数
kubectl config use-context system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig!NOTE 每台
master服务器都要创建。每台服务器的启动配置文件一样。 需要注意的是:参数--service-cluster-ip-range设置的值必须要跟kube-apiserver设置的一致。 注意:以下配置中,日志等级设置为:6。产生的日志的速度会非常快。学习部署后可以修改为:2。
cat > /etc/kubernetes/config/controller.conf <<EOF
KUBE_CONTROLLER_MANAGER_OPTS="--port=0 \
--secure-port=10257 \
--bind-address=127.0.0.1 \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig \
--service-cluster-ip-range=10.68.0.1/16 \
--cluster-name=kubernetes \
--cluster-signing-cert-file=/etc/kubernetes/pki/apiserver/apiserver-ca.pem \
--cluster-signing-key-file=/etc/kubernetes/pki/apiserver/apiserver-ca-key.pem \
--root-ca-file=/etc/kubernetes/pki/apiserver/apiserver-ca.pem \
--allocate-node-cidrs=true \
--cluster-cidr=10.100.0.0/16 \
--cluster-signing-duration=87600h \
--leader-elect=true \
--controllers=*,bootstrapsigner,tokencleaner \
--horizontal-pod-autoscaler-sync-period=10s \
--tls-cert-file=/etc/kubernetes/pki/apiserver/apiserver-controller-client.pem \
--tls-private-key-file=/etc/kubernetes/pki/apiserver/apiserver-controller-client-key.pem \
--alsologtostderr=true \
--logtostderr=false \
--log-dir=/var/log/kubernetes/controller/ \
--v=4"
EOF!NOTE 需要在每台
master服务器创建。每台服务器的启动项一样。
cat > /usr/lib/systemd/system/kube-controller-manager.service <<'EOF'
[Unit]
Description=Kubernetes Controller Manager Service
Documentation=https://github.com/kubernetes/kubernetes
After=kube-apiserver.service
Wants=kube-apiserver.service
[Service]
EnvironmentFile=-/etc/kubernetes/config/controller.conf
ExecStart=/usr/local/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_OPTS
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF启动服务
systemctl daemon-reload && \
systemctl start kube-controller-manager使用 kubectl 查看 kube-apiserver 是否可以访问到 kube-controller-manager
kubectl get cs显示
!NOTE 可以看到
kube-controller-manager的STATUS为Healthy。kube-scheduler的状态为Unhealthy是因为还没部署。接下来开始部署。
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
scheduler Unhealthy Get "https://127.0.0.1:10259/healthz": dial tcp 127.0.0.1:10259: connect: connection refused
controller-manager Healthy ok
etcd-0 Healthy {"health":"true","reason":""}
etcd-2 Healthy {"health":"true","reason":""}
etcd-1 Healthy {"health":"true","reason":""}正常启动且没有任何错误,设置开机自动启动服务。
systemctl enable kube-controller-manager停止服务
systemctl stop kube-controller-manager查看状态
systemctl status kube-controller-manager查看服务运行日志
journalctl -l --no-pager -u kube-controller-manager转载请注明出处:https://janrs.com/12dz 有任何问题欢迎在底部评论区发言。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。