如何使用配置文件启动 kube-controller-manager?

How can I start kube-controller-manager with config file?

我正在使用 hyperkube 启动 kube-controller-manager docker 容器。为了轮换 kubernetes CA,我遵循了 this doc。我必须将 KCM client-cacluster-signing-cert 指向不同的证书。自动化很难,因为 KCM 进程使用命令行参数。

我没有看到任何选项 here。有谁知道将命令行参数迁移到 kube-controller-managerconfig.yaml 文件的方法?

注意:我的问题是关于使用配置文件启动 KCM 进程,就像我们为 kubelet 启动 KCM 进程一样 here

有两种可能的方式通过提供 YAML 文件来启动具有自定义设置的 kube-controller-manager。

方法一

kube-controller-manager 在您的控制平面中作为 pod 运行。它的配置文件位于 /etc/kubernetes/manifestskube-controller-manager.yaml 中。通过像这样添加 .spec.containers.command

spec:
  containers:
  - command:
    - kube-controller-manager
    - --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
...

您可以更改默认值。

然后你将不得不重新启动docker(或containerd)

sudo systemctl restart docker (or containerd)

或者,如果您只想重新启动 kube-controller-manager

docker restart kube-controller-mamnager

方法#2

您可以像这样将 ClusterConfiguration 更改为 extraArgs [reference]:

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
controllerManager:
  extraArgs:
    cluster-signing-key-file: /home/johndoe/keys/ca.key
    deployment-controller-sync-period: "50"

为此,您必须提取当前的集群配置

kubeadm config view > kubeadm-config.yaml

相应地编辑此文件,然后升级控制平面

kubeadm upgrade apply --config kubeadm-config.yaml

现在,回答你的问题 - kube-controller-manager 不支持 --config 或任何其他允许你将 YAML 文件作为参数传递的标志(你可以检查所有可用的标志 here).

只有以上两种可能的解决方案。