kubernetes kubelet 配置

简介: kubernetes kubelet 配置

kubernetes kubelet 配置

tags: kubelet

文章目录

kubernetes kubelet 配置

1. 背景

2. 配置模式

2.1 kubeadm 配置 kubelet

2.1.1 使用时的工作流程kubeadm init

2.1.2 使用时的工作流程kubeadm join

2.2 systemd 配置 kubelet drop-in 文件

3. 配置注意

1. 背景

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


由于 kubelet 是一个守护进程,它需要由某种 init 系统或服务管理器来维护。当使用 DEB 或 RPM 安装 kubelet 时,systemd 被配置为管理 kubelet。您可以改用其他服务管理器,但需要手动配置。


一些 kubelet 配置细节需要在集群中涉及的所有 kubelet 中相同,而其他配置方面需要基于每个 kubelet 进行设置,以适应给定机器的不同特征(例如操作系统、存储和网络) . 您可以手动管理 kubelet 的配置,但 kubeadm 现在提供了一种Kubelet ConfigurationAPI 类型来 集中管理您的 kubelet 配置

2. 配置模式

2.1 kubeadm 配置 kubelet

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

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


如果您希望您的服务使用子网10.96.0.0/12作为服务的默认子网,您可以将--service-cidr参数传递给 kubeadm:

kubeadm init --service-cidr 10.96.0.0/12

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

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

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

2.1.1 使用时的工作流程kubeadm init

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


为了解决 提供特定于实例的配置详细信息的第二种模式,kubeadm 将环境文件写入到/var/lib/kubelet/kubeadm-flags.env,其中包含一个标志列表,以便在 kubelet 启动时传递给它。标志在文件中显示如下:

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

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

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

systemctl daemon-reload && systemctl restart kubelet

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

2.1.2 使用时的工作流程kubeadm join

当你运行时kubeadm join,kubeadm 使用 Bootstrap Token 凭证来执行 TLS 引导,它会获取下载 kubelet-configConfigMap 所需的凭证并将其写入/var/lib/kubelet/config.yaml. 动态环境文件的生成方式与kubeadm init.接下来,kubeadm运行以下两条命令将新配置加载到 kubelet 中:

systemctl daemon-reload && systemctl restart kubelet

kubelet 加载新配置后,kubeadm 写入 KubeConfig 文件/etc/kubernetes/bootstrap-kubelet.conf,其中包含 CA 证书和 Bootstrap Token。kubelet 使用这些来执行 TLS Bootstrap 并获得一个唯一的凭证,该凭证存储在/etc/kubernetes/kubelet.conf.


当/etc/kubernetes/kubelet.conf文件被写入时,kubelet 已经完成了 TLS Bootstrap。Kubeadm在完成 TLS Bootstrap 后删除该文件/etc/kubernetes/bootstrap-kubelet.conf。


/etc/kubernetes/kubelet.conf内容示例:

在这里插入代码片[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"
# This is a file that "kubeadm init" and "kubeadm join" generate at runtime, populating
the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably,
# the user should use the .NodeRegistration.KubeletExtraArgs object in the configuration files instead.
# KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

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


用于 TLS Bootstrap 的 KubeConfig 文件是/etc/kubernetes/bootstrap-kubelet.conf,但仅在/etc/kubernetes/kubelet.conf不存在时使用。

具有唯一 kubelet 身份的 KubeConfig 文件是/etc/kubernetes/kubelet.conf.

包含 kubelet 的 Component Config 的文件是/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 在标志链中是最后一个,并且在设置冲突的情况下具有最高优先级。

2.2 systemd 配置 kubelet drop-in 文件

kubeadm附带有关 systemd 应如何运行 kubelet 的配置。请注意,kubeadm CLI 命令永远不会触及这个插入文件。


这个由kubeadm DEB或 RPM 包安装的配置文件被写入 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 并被 systemd 使用。它增强了 kubelet.service RPM或 kubelet.service DEB的基础:

3. 配置注意

由于硬件、操作系统、网络或其他主机特定参数的差异,一些主机需要特定的 kubelet 配置:


由 kubelet 配置标志指定的 DNS 解析文件的路径--resolv-conf可能因操作系统而异,或者取决于您是否使用 systemd-resolved. 如果此路径错误,则 kubelet 配置错误的 Node 上的 DNS 解析将失败。


Node API 对象.metadata.name默认设置为机器的主机名,除非您使用云提供商。--hostname-override如果您需要指定与机器主机名不同的节点名称,您可以使用该标志来覆盖默认行为。


目前,kubelet 无法自动检测容器运行时使用的 cgroup 驱动,但 的值--cgroup-driver必须与容器运行时使用的 cgroup 驱动相匹配,以保证 kubelet 的健康。


--container-runtime-endpoint=<path>要指定容器运行时,您必须使用标志设置其端点 。


您可以通过在服务管理器中配置单个 kubelet 的配置来指定这些标志,例如 systemd。


参考:


Configuring each kubelet in your cluster using kubeadm


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
人工智能 缓存 Kubernetes
ACK GIE配置建议
Gateway with Inference Extension是基于Kubernetes社区Gateway API及其扩展规范实现的增强型组件,支持四层/七层路由服务,并面向生成式AI推理场景提供负载均衡优化、服务管理简化等能力,适用于AI推理服务的高可用部署与性能优化。在不同的场景使用ACK Gateway with Inference Extension时,可能需要根据业务需求和高可用需要对网关和推理扩展进行不同的配置调整。本文主要介绍在实际业务场景中针对ACK GIE的配置建议,以获得更好的使用效果。
417 23
|
JSON Kubernetes API
深入理解Kubernetes配置:编写高效的YAML文件
深入理解Kubernetes配置:编写高效的YAML文件
|
10月前
|
Prometheus Kubernetes 监控
Kubernetes监控:Prometheus与AlertManager结合,配置邮件告警。
完成这些步骤之后,您就拥有了一个可以用邮件通知你的Kubernetes监控解决方案了。当然,所有的这些配置都需要相互照应,还要对你的Kubernetes集群状况有深入的了解。希望这份指南能帮助你创建出适合自己场景的监控系统,让你在首次发现问题时就能做出响应。
601 22
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
1490 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
Kubernetes 监控 Java
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收
|
Kubernetes 监控 API
在K8S中,什么是 Minikube、Kubectl、Kubelet?
在K8S中,什么是 Minikube、Kubectl、Kubelet?
|
Kubernetes 网络性能优化 调度
在K8S中,Kubernets资源限制是如何配置的,是否根据Qos?
在K8S中,Kubernets资源限制是如何配置的,是否根据Qos?
|
Kubernetes 调度 Perl
在K8S中,Pod多副本配置了硬亲和性,会调度到同⼀个节点上吗?
在K8S中,Pod多副本配置了硬亲和性,会调度到同⼀个节点上吗?
|
存储 Kubernetes Linux
Kubernetes 的配置资源 ConfigMap(01部分)
Kubernetes 的配置资源 ConfigMap(01部分)
|
Kubernetes API Docker
在K8S中,如何查看kubelet组件的日志?
在K8S中,如何查看kubelet组件的日志?

热门文章

最新文章

推荐镜像

更多