kube-controller-manager 集群
创建 kube-controller-manager 证书和私钥
创建证书签名请求:
1 | cd /opt/k8s/work |
- hosts 列表包含所有 kube-controller-manager 节点 IP;
- CN 和 O 均为
system:kube-controller-manager
,kubernetes 内置的 ClusterRoleBindingssystem:kube-controller-manager
赋予 kube-controller-manager 工作所需的权限。
生成证书和私钥:
1 | cd /opt/k8s/work |
将生成的证书和私钥分发到所有 master 节点:
1 | cd /opt/k8s/work |
创建和分发 kubeconfig 文件
kube-controller-manager 使用 kubeconfig 文件访问 apiserver,该文件提供了 apiserver 地址、嵌入的 CA 证书和 kube-controller-manager 证书:
1 | cd /opt/k8s/work |
分发 kubeconfig 到所有 master 节点:
1 | cd /opt/k8s/work |
创建 kube-controller-manager systemd unit 模板文件
1 | cd /opt/k8s/work |
--port=0
:关闭监听非安全端口(http),同时--address
参数无效,--bind-address
参数有效;--secure-port=10252
、--bind-address=0.0.0.0
: 在所有网络接口监听 10252 端口的 https /metrics 请求;--kubeconfig
:指定 kubeconfig 文件路径,kube-controller-manager 使用它连接和验证 kube-apiserver;--authentication-kubeconfig
和--authorization-kubeconfig
:kube-controller-manager 使用它连接 apiserver,对 client 的请求进行认证和授权。kube-controller-manager
不再使用--tls-ca-file
对请求 https metrics 的 Client 证书进行校验。如果没有配置这两个 kubeconfig 参数,则 client 连接 kube-controller-manager https 端口的请求会被拒绝(提示权限不足)。--cluster-signing-*-file
:签名 TLS Bootstrap 创建的证书;--experimental-cluster-signing-duration
:指定 TLS Bootstrap 证书的有效期;--root-ca-file
:放置到容器 ServiceAccount 中的 CA 证书,用来对 kube-apiserver 的证书进行校验;--service-account-private-key-file
:签名 ServiceAccount 中 Token 的私钥文件,必须和 kube-apiserver 的--service-account-key-file
指定的公钥文件配对使用;--service-cluster-ip-range
:指定 Service Cluster IP 网段,必须和 kube-apiserver 中的同名参数一致;--leader-elect=true
:集群运行模式,启用选举功能;被选为 leader 的节点负责处理工作,其它节点为阻塞状态;--controllers=*,bootstrapsigner,tokencleaner
:启用的控制器列表,tokencleaner 用于自动清理过期的 Bootstrap token;--horizontal-pod-autoscaler-*
:custom metrics 相关参数,支持 autoscaling/v2alpha1;--tls-cert-file
、--tls-private-key-file
:使用 https 输出 metrics 时使用的 Server 证书和秘钥;--use-service-account-credentials=true
: kube-controller-manager 中各 controller 使用 serviceaccount 访问 kube-apiserver;
创建和分发 kube-controller-mananger systemd unit 文件
替换模板文件中的变量,为各节点创建 systemd unit 文件:
1 | cd /opt/k8s/work |
- NODE_NAMES 和 NODE_IPS 为相同长度的 bash 数组,分别为节点名称和对应的 IP;
分发到所有 master 节点:
1 | cd /opt/k8s/work |
- 文件重命名为 kube-controller-manager.service;
启动 kube-controller-manager 服务
1 | source /opt/k8s/bin/environment.sh |
- 启动服务前必须先创建工作目录;
检查服务运行状态
1 | source /opt/k8s/bin/environment.sh |
确保状态为 active (running)
,否则查看日志,确认原因:
1 | journalctl -u kube-controller-manager |
查看当前的 leader
1 | [root@node1 ~]# kubectl get endpoints kube-controller-manager --namespace=kube-system -o yaml |
kube-scheduler 集群
创建 kube-scheduler 证书和私钥
创建证书签名请求:
1 | cd /opt/k8s/work |
- hosts 列表包含所有 kube-scheduler 节点 IP;
- CN 和 O 均为
system:kube-scheduler
,kubernetes 内置的 ClusterRoleBindingssystem:kube-scheduler
将赋予 kube-scheduler 工作所需的权限;
生成证书和私钥:
1 | cd /opt/k8s/work |
将生成的证书和私钥分发到所有 master 节点:
1 | cd /opt/k8s/work |
创建和分发 kubeconfig 文件
kube-scheduler 使用 kubeconfig 文件访问 apiserver,该文件提供了 apiserver 地址、嵌入的 CA 证书和 kube-scheduler 证书:
1 | cd /opt/k8s/work |
分发 kubeconfig 到所有 master 节点:
1 | cd /opt/k8s/work |
创建 kube-scheduler 配置文件
1 | cd /opt/k8s/work |
--kubeconfig
:指定 kubeconfig 文件路径,kube-scheduler 使用它连接和验证 kube-apiserver;--leader-elect=true
:集群运行模式,启用选举功能;被选为 leader 的节点负责处理工作,其它节点为阻塞状态;
替换模板文件中的变量:
1 | cd /opt/k8s/work |
- NODE_NAMES 和 NODE_IPS 为相同长度的 bash 数组,分别为节点名称和对应的 IP;
分发 kube-scheduler 配置文件到所有 master 节点:
1 | cd /opt/k8s/work |
- 重命名为 kube-scheduler.yaml;
创建 kube-scheduler systemd unit 模板文件
1 | cd /opt/k8s/work |
为各节点创建和分发 kube-scheduler systemd unit 文件
替换模板文件中的变量,为各节点创建 systemd unit 文件:
1 | cd /opt/k8s/work |
分发 systemd unit 文件到所有 master 节点:
1 | cd /opt/k8s/work |
- 重命名为 kube-scheduler.service;
启动 kube-scheduler 服务
1 | source /opt/k8s/bin/environment.sh |
- 启动服务前必须先创建工作目录;
检查服务运行状态
1 | source /opt/k8s/bin/environment.sh |
确保状态为 active (running)
查看当前的 leader
1 | [root@node1 ~]# kubectl get endpoints kube-scheduler --namespace=kube-system -o yaml |