kubernetes部署kube-controller-manager服务

本文档介绍部署高可用 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

转载于:https://www.cnblogs.com/xuyingzhong/p/9761770.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `kubectl get pods -n kube-system` 指令会查询 `kube-system` 命名空间中的所有 Pod。这个命令的输出将会列出该命名空间中的每个 Pod 的名称、状态、重启次数和其他信息。如果您希望查看其他命名空间中的 Pod,可以将 `-n kube-system` 替换为目标命名空间的名称。 例如: ``` $ kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-86c58d9df4-26tzj 1/1 Running 0 6d coredns-86c58d9df4-m8nh9 1/1 Running 0 6d etcd-minikube 1/1 Running 0 6d kube-apiserver-minikube 1/1 Running 0 6d kube-controller-manager-minikube 1/1 Running 0 6d kube-proxy-6xm7h 1/1 Running 0 6d kube-scheduler-minikube 1/1 Running 0 6d storage-provisioner 1/1 Running 0 6d ``` ### 回答2: kubectl get pods -n kube-system 是一个命令,用于在 Kubernetes 集群中获取 kube-system 命名空间中的所有 Pod。Kubernetes 使用命名空间来对不同组件进行分类和组织,kube-system 命名空间是用于部署和管理 Kubernetes 系统组件的默认命名空间。 在运行该命令后,系统会返回 kube-system 命名空间中所有的 Pod 的详细信息,包括 Pod 的名称、运行状态、所属节点、IP 地址等。这些信息有助于管理员和开发人员检查和监控 Kubernetes 系统的运行状态。 通过使用 -n kube-system 参数,我们指定了要获取的 Pod 所在的命名空间。命名空间的概念使得在 Kubernetes 集群中可以同时运行多个不同的应用或系统组件,每个命名空间都是相互隔离的。 用这个命令可以查看 kube-system 命名空间中的 Pod,由于 kube-system 命名空间中部署了一些关键的系统组件,如 kube-proxy、coredns、metrics-server 等,检查它们的运行状态是非常重要的。如果发现其中某个 Pod 处于异常状态或者失败,可能会影响整个集群的正常运行。 总之,kubectl get pods -n kube-system 是一个方便的命令,用于查看 Kubernetes 系统组件的状态和运行情况,有助于管理员和开发人员监控集群的健康状态。 ### 回答3: `kubectl get pods -n kube-system` 是一个 Kubernetes 命令行工具(kubectl)的命令。这个命令的作用是获取命名空间为 kube-system 的所有 Pod(容器)。以下是对这个命令的解释和一些相关信息: `kubectl get pods` 是用于获取 Kubernetes 集群中的所有 Pod 的命令。通过使用 `-n` 标志,我们可以指定要获取的 Pod 所属的命名空间。在这里,我们使用 `kube-system` 作为命名空间。 命名空间是 Kubernetes 中一种用于隔离和组织资源的概念。命名空间可以帮助管理员对不同的组件和功能进行分类和管理。命名空间有默认的系统命名空间,如 `kube-system`,用于管理 Kubernetes 自身的组件和功能。这些组件包括 kube-proxy、kube-dns、kube-scheduler、kube-controller-manager 等。 `kubectl get pods -n kube-system` 命令将返回位于 `kube-system` 命名空间的所有 Pod 的列表。列表中将包含每个 Pod 的名称、状态、重启次数、运行时间等信息。这些信息可以帮助管理员监控和管理集群中的容器。 总之,`kubectl get pods -n kube-system` 是一个用于在 Kubernetes 集群中获取 `kube-system` 命名空间下所有 Pod 信息的命令。这个命令是管理 Kubernetes 集群的常用操作之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值