Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >二进制部署k8s教程08 - 部署controller-manager

二进制部署k8s教程08 - 部署controller-manager

原创
作者头像
janrs.com
发布于 2023-03-08 13:13:24
发布于 2023-03-08 13:13:24
5640
举报

!TIP 二进制部署 k8s - 部署 kube-controller-manager


转载请注明出处:https://janrs.com/12dz 有任何问题欢迎在底部评论区发言。

部署 kube-controll-manager

kube-controller-mangae 作为 kube-apiserver 的控制器,需要访问 kube-apiserver 的服务,所以需要 kube-apiserver

ca 机构为其签发客户端 client 证书。

这里 kube-controller 部署在 kube-apiserver服务器上,不单独部署。

ip 设置成 kube-apiserver 的一样的就行。

1.创建 ssl 证书

1-1.创建 csr 请求文件

!NOTE CN 参数表示用户名,必须设置为 k8s 中设定的 system:kube-controller-manager O 参数表示用户组,必须设置为 k8s 中设定的 system:kube-controller-manager kubernetes 内置的 ClusterRoleBindings 中,system:kube-controller-manager 赋予 kube-controller-manager 工作所需的权限。 kube-controller-manager 同样作为客户端,不需要设置 hosts 参数。

代码语言:shell
AI代码解释
复制
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-client

1-2.分发证书

代码语言:shell
AI代码解释
复制
scp /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/

2.绑定 cluster-admin 集群角色

!NOTE 二进制安装的 kube-controller-manager 没有操作其他命名空间的资源,需要赋予一些权限。 这里我直接赋予了最高权限的集群角色:cluster-admin,省的再研究需要啥权限了。 如果角色权限太大,自行裁剪权限。

代码语言:shell
AI代码解释
复制
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

3.创建 kubeconfig

!NOTE kube-controller-manager 是使用 kubeconfigkube-apiserver 进行通信的。 在 kubeconfig 配置文件中会包含了 kube-controller-manager 的客户端 client 证书信息以及身份信息。 需要在每台服务器都创建该请求文件。 以下操作在每台 master 服务器创建,ip 地址设置为本地的 kube-apiserver 的服务地址 ip

3-1.在 master-01 创建

设置集群参数

代码语言:shell
AI代码解释
复制
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

设置客户端认证参数

代码语言:shell
AI代码解释
复制
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

设置上下文参数

代码语言:shell
AI代码解释
复制
kubectl config set-context system:kube-controller-manager \
--cluster=kubernetes \
--user=system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig

设置当前上下文参数

代码语言:shell
AI代码解释
复制
kubectl config use-context system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig

3-2.在 master-02 创建

设置集群参数

代码语言:shell
AI代码解释
复制
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

设置客户端认证参数

代码语言:shell
AI代码解释
复制
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

设置上下文参数

代码语言:shell
AI代码解释
复制
kubectl config set-context system:kube-controller-manager \
--cluster=kubernetes \
--user=system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig

设置当前上下文参数

代码语言:shell
AI代码解释
复制
kubectl config use-context system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig

3-3.在 master-03 创建

设置集群参数

代码语言:shell
AI代码解释
复制
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

设置客户端认证参数

代码语言:shell
AI代码解释
复制
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

设置上下文参数

代码语言:shell
AI代码解释
复制
kubectl config set-context system:kube-controller-manager \
--cluster=kubernetes \
--user=system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig

设置当前上下文参数

代码语言:shell
AI代码解释
复制
kubectl config use-context system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/kubeconfig/controller.kubeconfig

4.启动服务

4-1.创建启动配置文件

!NOTE 每台 master 服务器都要创建。每台服务器的启动配置文件一样。 需要注意的是:参数 --service-cluster-ip-range 设置的值必须要跟 kube-apiserver 设置的一致。 注意:以下配置中,日志等级设置为:6 。产生的日志的速度会非常快。学习部署后可以修改为:2

代码语言:shell
AI代码解释
复制
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

4-2.创建服务启动项

!NOTE 需要在每台 master 服务器创建。每台服务器的启动项一样。

代码语言:shell
AI代码解释
复制
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

4-3.启动服务

启动服务

代码语言:shell
AI代码解释
复制
systemctl daemon-reload && \
systemctl start kube-controller-manager

5.验证

使用 kubectl 查看 kube-apiserver 是否可以访问到 kube-controller-manager

代码语言:shell
AI代码解释
复制
kubectl get cs

显示

!NOTE 可以看到 kube-controller-managerSTATUSHealthykube-scheduler 的状态为 Unhealthy 是因为还没部署。接下来开始部署。

代码语言:text
AI代码解释
复制
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":""}

6.设置开机启动

正常启动且没有任何错误,设置开机自动启动服务。

代码语言:shell
AI代码解释
复制
systemctl enable kube-controller-manager

7.其他操作

停止服务

代码语言:shell
AI代码解释
复制
systemctl stop kube-controller-manager

查看状态

代码语言:shell
AI代码解释
复制
systemctl status kube-controller-manager

查看服务运行日志

代码语言:shell
AI代码解释
复制
journalctl -l --no-pager  -u kube-controller-manager

至此。kube-controller-manager 部署成功。

转载请注明出处:https://janrs.com/12dz 有任何问题欢迎在底部评论区发言。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
二进制部署k8s教程09 - 部署scheduler
kube-scheduler 作为 kube-apiserver 的调度器,需要访问 kube-apiserver 的服务,所以需要 kube-apiserver 的 ca
janrs.com
2023/03/08
3780
二进制部署k8s教程07 - 部署kubectl
kubectl 作为 kube-apiserver 的客户端工具,需要访问 kube-apiserver 的服务,所以需要 kube-apiserver 的 ca
janrs.com
2023/03/08
3620
第四篇(二进制部署k8s集群---master集群部署)
本文在以下主机上操作部署k8s集群 k8s-master1:192.168.206.31 k8s-master2:192.168.206.32 k8s-master3:192.168.206.33
@凌晨
2020/11/23
7570
二进制部署k8s教程11 - 部署kubelet[手动颁发证书模式]
在 node 节点上,kubelet 是需要对外提供服务的。在 k8s 中,调用 kubelet 服务的也只有 kube-apiserver。
janrs.com
2023/03/08
9030
二进制部署k8s教程12 - 部署kube-proxy
kube-proxy 主要作为 k8s 的网络代理与负载均衡,只负责定时通过 kube-apiserver 从 etcd 数据库获取 service
janrs.com
2023/03/08
6530
Kubernetes高可用集群二进制部署(四)部署kubectl和kube-controller-manager、kube-scheduler
kube.config`` 为kubectl的配置文件,包含访问 `apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书
鱼找水需要时间
2023/08/03
3770
Kubernetes高可用集群二进制部署(四)部署kubectl和kube-controller-manager、kube-scheduler
搭建k8s高可用集群 - 二进制方式
这五台机器均需事先安装好Docker,由于安装过程比较简单这里不进行介绍,可以参考官方文档:
端碗吹水
2020/09/23
2K1
搭建k8s高可用集群 - 二进制方式
k8s二进制集群安装-二进制安装
可以在http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/ 找到各版本kernel安装包
堕落飞鸟
2022/02/25
1.9K2
二进制安装Kubernetes(k8s) v1.23.6 ---(上)
1.23.3 和 1.23.4 和 1.23.5 和 1.23.6 文档以及安装包已生成。
小陈运维
2022/04/21
1.6K0
二进制方式部署k8s集群
这次部署是使用的二进制方式进行安装,部署的版本是v1.13.1,使用了三台机器做的k8s集群,没有对master做成集群,表如下:
dogfei
2020/07/31
2K0
二进制部署k8s教程16 - 部署kubelet[TLS引导方式]
(https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/bootstrap-tokens/)
janrs.com
2023/03/08
6010
k8s二进制集群安装-containerd
可以在http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/ 找到各版本kernel安装包
堕落飞鸟
2022/06/07
2K2
Kubernetes-v1.24版安装部署之Mater节点安装部署
Kubernetes Master节点部署三个服务:kube-apiserver、kube-controller-manager、kube-scheduler和一个命令工具kubectl.
王先森sec
2023/04/24
5170
二进制安装Kubernetes(k8s) v1.23.3 ---(上)
1.环境 主机名称 IP地址 说明 软件 Master01 10.0.0.21 master节点 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、 kubelet、kube-proxy、nfs-client Master02 10.0.0.22 master节点 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、 kubelet、kube-proxy、nfs-client
小陈运维
2022/02/15
2.9K0
K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群
本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansible 和之前的步骤差不多都是和kubeadm步骤一样,不过这次所有kubelet全部走bootstrap不会像之前master上的kubelet生成证书,另外证书换成openssl生成
Jetpropelledsnake21
2019/04/01
2.1K0
K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群
二进制安装Kubernetes(k8s) v1.23.3 ---(下)
在新版的Kubernetes中系统资源的采集均使用Metrics-server,可以通过Metrics采集节点和Pod的内存、磁盘、CPU和网络的使用率
小陈运维
2022/02/15
1.4K1
二进制安装Kubernetes(k8s) v1.23.4 ---(上)
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2022/03/01
2.5K0
天不生Kubernetes,运维万古如长夜|生产级K8s高可用集群实战一
----Kubernetes解决了诸多运维难题,是目前主流的基础架构平台,也是容器编排领域的事实标准,可谓“天不生Kubernetes,运维万古如长夜”。如此流行的Kubernetes,该如何掌握、又该如何应用到生产中呢?本系列文章会详细讲述。
CNCF
2020/02/26
1.8K0
010.Kubernetes二进制部署kube-controller-manager
本实验部署一个三实例 kube-controller-manager 的集群,启动后将通过竞争选举机制产生一个 leader 节点,其它节点为阻塞状态。当 leader 节点不可用时,阻塞的节点将再次进行选举产生新的 leader 节点,从而保证服务的可用性。
木二
2019/11/18
1K0
010.Kubernetes二进制部署kube-controller-manager
深入玩转K8S之手动部署KubernetesV1.11版本及常见问题解答
最开始通过Kubeadm静默黑盒(自动)来安装,为什么这么说呢因为我们是通过Kubeadm自动安装的,并不知道做了那些具体的操作。这也是为什么写这篇手动部署的原因,是为了让大家更好的了解下和体验下两者区别以及部署流程
DevinGeng
2019/04/09
8930
深入玩转K8S之手动部署KubernetesV1.11版本及常见问题解答
推荐阅读
相关推荐
二进制部署k8s教程09 - 部署scheduler
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档