树叶云kubernetes教程:Kubernetes 使用kubeadm配置集群中的每个kubelet

使用 kubeadm 配置集群中的每个 kubelet

Note: Dockershim 自 1.24 版起已从 Kubernetes 项目中删除。

FEATURE STATE: Kubernetes v1.11 [stable]

kubeadm CLI 工具的生命周期与 kubelet 解耦;kubelet 是一个守护程序,在 Kubernetes 集群中的每个节点上运行。 当 Kubernetes 初始化或升级时,kubeadm CLI 工具由用户执行,而 kubelet 始终在后台运行。

由于kubelet是守护程序,因此需要通过某种初始化系统或服务管理器进行维护。 当使用 DEB 或 RPM 安装 kubelet 时,配置系统去管理 kubelet。 你可以改用其他服务管理器,但需要手动地配置。

集群中涉及的所有 kubelet 的一些配置细节都必须相同, 而其他配置方面则需要基于每个 kubelet 进行设置,以适应给定机器的不同特性(例如操作系统、存储和网络)。 你可以手动地管理 kubelet 的配置,但是 kubeadm 现在提供一种 ​KubeletConfiguration ​API 类型 用于集中管理 kubelet 的配置。

Kubelet 配置模式 

以下各节讲述了通过使用 kubeadm 简化 kubelet 配置模式,而不是在每个节点上手动地管理 kubelet 配置。

将集群级配置传播到每个 kubelet 中 

你可以通过 ​kubeadm init​ 和 ​kubeadm join​ 命令为 kubelet 提供默认值。 有趣的示例包括使用其他容器运行时或通过服务器设置不同的默认子网。

如果你想使用子网 ​10.96.0.0/12​ 作为服务的默认网段,你可以给 kubeadm 传递 ​--service-cidr​ 参数:

kubeadm init --service-cidr 10.96.0.0/12

现在,可以从该子网分配服务的虚拟 IP。 你还需要通过 kubelet 使用 ​--cluster-dns​ 标志设置 DNS 地址。 在集群中的每个管理器和节点上的 kubelet 的设置需要相同。 kubelet 提供了一个版本化的结构化 API 对象,该对象可以配置 kubelet 中的大多数参数,并将此配置推送到集群中正在运行的每个 kubelet 上。 此对象被称为 ​KubeletConfiguration​。 ​KubeletConfiguration ​允许用户指定标志,例如用骆峰值代表集群的 DNS IP 地址,如下所示:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
clusterDNS:
- 10.96.0.10

提供特定于某实例的配置细节 

由于硬件、操作系统、网络或者其他主机特定参数的差异。某些主机需要特定的 kubelet 配置。 以下列表提供了一些示例。

  • 由 kubelet 配置标志 ​--resolv-conf​ 指定的 DNS 解析文件的路径在操作系统之间可能有所不同, 它取决于你是否使用 ​systemd-resolved​。 如果此路径错误,则在其 kubelet 配置错误的节点上 DNS 解析也将失败。
  • 除非你使用云驱动,否则默认情况下 Node API 对象的 ​.metadata.name​ 会被设置为计算机的主机名。 如果你需要指定一个与机器的主机名不同的节点名称,你可以使用 ​--hostname-override​ 标志覆盖默认值。
  • 当前,kubelet 无法自动检测容器运行时使用的 cgroup 驱动程序, 但是值 ​--cgroup-driver​ 必须与容器运行时使用的 cgroup 驱动程序匹配,以确保 kubelet 的健康运行状况。
  • 要指定容器运行时,你必须用 ​--container-runtime-endpoint=<path>​ 标志来指定端点。

你可以在服务管理器(例如 systemd)中设定某个 kubelet 的配置来指定这些参数。

使用 kubeadm 配置 kubelet 

如果自定义的 ​KubeletConfiguration ​API 对象使用像 ​kubeadm ... --config some-config-file.yaml​ 这样的配置文件进行传递,则可以配置 kubeadm 启动的 kubelet。

通过调用 ​kubeadm config print init-defaults --component-configs KubeletConfiguration​, 你可以看到此结构中的所有默认值。

使用 kubeadm init 时的工作流程 

当调用 ​kubeadm init​ 时,kubelet 的配置会被写入磁盘 ​/var/lib/kubelet/config.yaml​, 并上传到集群 ​kube-system​ 命名空间的 ​kubelet-config​ ConfigMap。 kubelet 配置信息也被写入 ​/etc/kubernetes/kubelet.conf​,其中包含集群内所有 kubelet 的基线配置。 此配置文件指向允许 kubelet 与 API 服务器通信的客户端证书。 这解决了将集群级配置传播到每个 kubelet 的需求。

针对为特定实例提供配置细节的第二种模式, kubeadm 的解决方法是将环境文件写入 ​/var/lib/kubelet/kubeadm-flags.env​,其中包含了一个标志列表, 当 kubelet 启动时,该标志列表会传递给 kubelet 标志在文件中的显示方式如下:

KUBELET_KUBEADM_ARGS="--flag1=value1 --flag2=value2 ..."

除了启动 kubelet 时所使用的标志外,该文件还包含动态参数,例如 cgroup 驱动程序以及是否使用其他容器运行时套接字(​--cri-socket​)。

将这两个文件编组到磁盘后,如果使用 systemd,则 kubeadm 尝试运行以下两个命令:

systemctl daemon-reload && systemctl restart kubelet

如果重新加载和重新启动成功,则正常的 ​kubeadm init​ 工作流程将继续。

使用 kubeadm join 时的工作流程 

当运行 ​kubeadm join​ 时,kubeadm 使用 Bootstrap Token 证书执行 TLS 引导,该引导会获取一份证书, 该证书需要下载 ​kubelet-config​ ConfigMap 并把它写入 ​/var/lib/kubelet/config.yaml​ 中。 动态环境文件的生成方式恰好与 ​kubeadm init​ 完全相同。

接下来,​kubeadm ​运行以下两个命令将新配置加载到 kubelet 中:

systemctl daemon-reload && systemctl restart kubelet

在 kubelet 加载新配置后,kubeadm 将写入 ​/etc/kubernetes/bootstrap-kubelet.conf​ KubeConfig 文件中, 该文件包含 CA 证书和引导程序令牌。 kubelet 使用这些证书执行 TLS 引导程序并获取唯一的凭据,该凭据被存储在 ​/etc/kubernetes/kubelet.conf​ 中。

当 ​/etc/kubernetes/kubelet.conf​ 文件被写入后,kubelet 就完成了 TLS 引导过程。 Kubeadm 在完成 TLS 引导过程后将删除 ​/etc/kubernetes/bootstrap-kubelet.conf​ 文件。

kubelet 的 systemd drop-in 文件 

kubeadm ​中附带了有关系统如何运行 kubelet 的 systemd 配置文件。 请注意 kubeadm CLI 命令不会修改此文件。

通过 ​kubeadm ​DEB 包 或者 RPM 包 安装的配置文件被写入 ​/etc/systemd/system/kubelet.service.d/10-kubeadm.conf​ 并由 systemd 使用。 它对原来的 RPM 版本 ​kubelet.service​ 或者 DEB 版本 ​kubelet.service​ 作了增强:

[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# 这是 "kubeadm init" 和 "kubeadm join" 运行时生成的文件,动态地填充 KUBELET_KUBEADM_ARGS 变量
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# 这是一个文件,用户在不得已下可以将其用作替代 kubelet args。
# 用户最好使用 .NodeRegistration.KubeletExtraArgs 对象在配置文件中替代。
# KUBELET_EXTRA_ARGS 应该从此文件中获取。
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

此文件指定由 kubeadm 为 kubelet 管理的所有文件的默认位置。

  • 用于 TLS 引导程序的 KubeConfig 文件为 ​/etc/kubernetes/bootstrap-kubelet.conf​, 但仅当 ​/etc/kubernetes/kubelet.conf​ 不存在时才能使用。
  • 具有唯一 kubelet 标识的 KubeConfig 文件为 ​/etc/kubernetes/kubelet.conf​。
  • 包含 kubelet 的组件配置的文件为 ​/var/lib/kubelet/config.yaml​。
  • 包含的动态环境的文件 ​KUBELET_KUBEADM_ARGS​ 是来源于 ​/var/lib/kubelet/kubeadm-flags.env​。
  • 包含用户指定标志替代的文件 ​KUBELET_EXTRA_ARGS ​是来源于 ​/etc/default/kubelet​(对于 DEB),或者 ​/etc/sysconfig/kubelet​(对于 RPM)。 ​KUBELET_EXTRA_ARGS ​在标志链中排在最后,并且在设置冲突时具有最高优先级。

Kubernetes 可执行文件和软件包内容 

Kubernetes 版本对应的 DEB 和 RPM 软件包是:

软件包名称描述
kubeadm给 kubelet 安装 /usr/bin/kubeadm CLI 工具和 kubelet 的 systemd drop-in 文件。
kubelet安装 /usr/bin/kubelet 可执行文件。
kubectl安装 /usr/bin/kubectl 可执行文件。
cri-tools从 cri-tools git 仓库中安装 /usr/bin/crictl 可执行文件。
kubernetes-cni从 plugins git 仓库中安装 /opt/cni/bin 可执行文件。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/209587.html<

(0)
运维的头像运维
上一篇2025-04-09 13:09
下一篇 2025-04-09 13:11

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注