Kubernetes 如何通过kubeadm更改kubelet配置

Kubernetes 如何通过kubeadm更改kubelet配置,kubernetes,kubeadm,Kubernetes,Kubeadm,我对Kubernetes还相当陌生,我正试图了解如何在已经运行的集群中管理组件配置 例如: 最近,我在运行Ubuntu的测试环境中初始化了一个kubeadm集群。当我这么做的时候,我发现CoreDNS处于一种崩溃的回退状态,这是因为Ubuntu被配置为使用systemd resolved,因此resolv.conf配置了一个回退解析器。在阅读了coredns的文档之后,我发现一个解决方案是更改kubelet的resolvConf参数-通过命令行参数或在配置中 那么,如何在kubeadm管理的集群

我对Kubernetes还相当陌生,我正试图了解如何在已经运行的集群中管理组件配置

例如: 最近,我在运行Ubuntu的测试环境中初始化了一个kubeadm集群。当我这么做的时候,我发现CoreDNS处于一种崩溃的回退状态,这是因为Ubuntu被配置为使用systemd resolved,因此resolv.conf配置了一个回退解析器。在阅读了coredns的文档之后,我发现一个解决方案是更改kubelet的resolvConf参数-通过命令行参数或在配置中

那么,如何在kubeadm管理的集群中正确地做到这一点呢

在阅读[文档中的这一页][1]时,我并没有真正得到任何线索,因为它似乎是为初始化新集群或加入新节点而定制的

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

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

  • 我可以直接在节点上更改
    /var/lib/kubelet/kubeadm flags.env
    ,但这仅适用于特定于节点的更改
  • kube系统命名空间中有一个名为
    kubelet-config-1.14
    的ConfigMap。对于即将加入集群的节点来说,这似乎很有希望获得正确的配置——但是更改该CM会影响已经运行的Kubelet吗
  • /var/lib/config/kubelet.yaml
    中有一个运行配置的封送版本,我可以对其进行更改,但在AFAIU中,kubelet本身会定期(?)或至少在kubeadm升级期间覆盖该版本
  • 似乎有一个选项可以在node对象中指定configmap,让kubelet从那里动态加载配置,但是考虑到已经存在一个configmap,更改该配置似乎更明智 通过改变前面提到的CM,运行
    kubeadm升级一些东西
    ,然后重新启动机器(因为重新启动kubelet并没有解决CoreDNS问题……但也许我已经不耐烦了),我似乎取得了一些成功

    因此,我现在要问:

  • 对kubelet配置(或我可能通过kubeadm config.yaml影响的任何其他配置)进行更改的推荐的方法是什么,在配置不特定于节点的情况下,该方法是有效的且升级安全的
  • 如果这涉及到运行
    kubeadm。。。config--config
    -如何提取现有的Kubeadm配置,并将其反馈给Kubeadm 我很高兴能找到正确的文档,只是我自己没有找到正确的线索


    TIA

    中详细描述了您正在寻找的内容

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

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

    此外,从Kubernetes v1.11开始,默认情况下会启用功能门,但您需要一些额外的步骤来激活它。您需要记住,Kubelet的--dynamic config dir标志必须设置为节点上的可写目录。

    中详细描述了您要查找的内容

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

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

    此外,从Kubernetes v1.11开始,默认情况下会启用功能门,但您需要一些额外的步骤来激活它。您需要记住,Kubelet的--dynamic config dir标志必须设置为节点上的可写目录。

    好吧,这就是我在初始问题的第4项中提到的,对我来说,这不是正确的解决方案。我看到了两个问题:第一,它复制了已经存在的东西(这是kubeadm编写的ConfigMap),第二,我需要为每个节点执行此操作(而配置不是特定于节点的)。撇开重复不谈,这是否意味着我必须在两个地方进行更改,以便稍后将其应用于使用kubeadm添加的节点?@PatrickSchönfeld 1)它不会复制任何值,因为新配置完全覆盖了--config提供的配置,并且被命令行标志覆盖2)为了将ConfigMap应用于新节点,只有一个地方需要修改:您只需在节点规范中添加
    configSource
    部分。这就是我在初始问题的第4项中提到的,对我来说,这不是正确的解决方案。我看到了两个问题:第一,它复制了已经存在的东西(这是kubeadm编写的ConfigMap),第二,我需要为每个节点执行此操作(而配置不是特定于节点的)。撇开重复不谈,这是否意味着我必须在两个地方进行更改,以便稍后将其应用于使用kubeadm添加的节点?@PatrickSchönfeld 1)它不会复制任何值,因为新配置完全覆盖了--config提供的配置,并且被命令行标志覆盖2)只有一个地方需要修改才能为新节点应用ConfigMap:您只需将
    configSource
    部分添加到节点规范中。