我是Kubernetes的新手,我想全力以赴如何在已经运行的集群中管理ComponentConfig。

例如:
最近,我在运行Ubuntu的测试环境中初始化了kubeadm集群。当我这样做时,我发现CoreDNS位于CrashLoopBackoff中,事实证明是这样的,因为Ubuntu配置为使用systemd-resolved,因此resolv.conf中配置了回送解析器。阅读coredns的文档后,我发现解决方案是通过命令行参数或在配置中更改kubelet的resolvConf参数。

那么,如何在kubeadm管理的群集中正确执行此操作?

阅读[文档中的本页] [1]时,我并没有真正的头绪,因为它似乎是为初始化新集群或加入新节点而设计的。

当然,在这种特殊情况下,我可以使用“Kubeadm reset”并使用--config参数再次对其进行初始化,但这似乎不是正在运行的集群的正确解决方案。

因此,在深入研究之后,我发现了一些信息:

  • 我可以直接在节点上更改/var/lib/kubelet/kubeadm-flags.env,但是AFAICT仅对特定于节点的更改有意义。
  • kube系统 namespace 中有一个ConfigMap,名为kubelet-config-1.14。对于即将加入群集的节点来获得正确的配置,这似乎很有希望-但是更改CM是否会影响已经在运行的Kubelet?
  • 我可以更改/var/lib/config/kubelet.yaml中正在运行的配置的编码版本,但AFAIU会被kubelet本身定期(?)或至少在kubeadm升级期间覆盖。
  • 似乎有一个选项可以在node对象中指定一个configmap,以让kubelet从那里动态加载配置,但是鉴于已经存在一个configmap,更改它似乎更为明智。

  • 通过更改上述CM,随后运行kubeadm upgrade something和重新启动计算机,我似乎获得了一些成功(因为重新启动kubelet不能解决CoreDNS问题……但也许我不耐烦)。

    所以我现在问:
  • 建议使用推荐的方法来对kubelet配置(或我可能会通过kubeadm-config.yaml影响的任何其他配置)进行更改,并且该配置对于特定于节点的情况而言是安全升级的吗?
  • 如果这涉及到运行kubeadm ... config --config-我该如何提取现有的Kubeadm-config并将其反馈回kubeadm?

  • 我对指向正确文档的指针感到完全满意,只是我自己没有找到正确的线索。

    TIA

    最佳答案

    您所寻找的内容在official documentation中有很好的描述。

    配置Kubelet的基本工作流程如下:

  • 编写包含Kubelet配置的YAML或JSON配置文件。
  • 将此文件包装在ConfigMap中,然后将其保存到Kubernetes控制平面。
    更新Kubelet的相应Node对象以使用此ConfigMap。

  • 另外,从Kubernetes v1.11开始默认启用了DynamicKubeletConfig Feature Gate,但是您需要一些其他步骤来激活它。您需要记住,必须在节点上将Kubelet的--dynamic-config-dir标志设置为可写目录。

    关于kubernetes - 如何通过kubeadm更改kubelet配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57841803/

    10-16 09:17