【发布时间】:2020-01-10 12:00:03
【问题描述】:
我对 Kubernetes 还很陌生,我正在努力思考如何在已经运行的集群中管理 ComponentConfigs。
例如: 最近在运行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-system 命名空间中有一个名为
kubelet-config-1.14的 ConfigMap。这对于即将加入集群以获得正确配置的节点来说似乎很有希望 - 但是更改该 CM 会影响已经运行的 Kubelet 吗? -
/var/lib/config/kubelet.yaml中有一个运行配置的编组版本,我可以更改它,但 AFAIU 会定期(?)或至少在 kubeadm 升级期间被 kubelet 本身覆盖。 - 似乎有一个选项可以在节点对象中指定一个 configmap,让 kubelet 从那里动态加载配置,但鉴于已经有一个现有的 configmap,更改它似乎更明智。
我似乎通过更改上述 CM、之后运行 kubeadm upgrade something 并重新启动机器的某种组合取得了成功(因为重新启动 kubelet 并没有解决 CoreDNS 问题......但也许我要不耐烦)。
所以我现在问:
- 工作并正在升级的 kubelet 配置(或我可以通过 kubeadm-config.yaml 影响的任何其他配置)进行更改的推荐方法是什么? -在配置不是特定于节点的情况下安全吗?
- 如果这涉及到运行
kubeadm ... config --config- 我如何提取现有的 Kubeadm-config 以将其反馈给 kubeadm?
我对指向正确文档的指针非常满意,只是我自己没有找到正确的线索。
TIA
【问题讨论】:
标签: kubernetes kubeadm