自定义节点系统配置


节点系统配置是一个配置文件,您可以在节点池中为 Kubernetes 节点代理 (kubelet) 和低层级 Linux 内核配置 (sysctl) 指定自定义配置。

使用节点系统配置

如需使用节点系统配置,请执行以下操作:

  1. 创建配置文件。此文件包含 kubeletsysctl 配置。
  2. 您可以在创建集群时或在创建或更新节点池时添加配置

创建配置文件

编写 YAML 格式的节点系统配置文件。以下示例展示了如何为 kubeletsysctl 选项添加配置:

kubeletConfig:
  cpuManagerPolicy: static
linuxConfig:
 sysctl:
   net.core.somaxconn: '2048'
   net.ipv4.tcp_rmem: '4096 87380 6291456'

在此示例中:

  • cpuManagerPolicy: statickubelet 配置为使用静态 CPU 管理政策
  • net.core.somaxconn: '2048'socket listen() 积压输入量限制为 2048 字节。
  • net.ipv4.tcp_rmem: '4096 87380 6291456' 将 TCP 套接字的接收缓冲区的最小值、默认值和最大值分别设置为 4096 字节、87380 字节和 6291456 字节。

如果您只想为 kubeletsysctl 添加配置,请仅在配置文件中包含该部分。例如,如需添加 kubelet 配置,请创建以下文件:

kubeletConfig:
  cpuManagerPolicy: static

如需查看可添加到配置文件中的字段的完整列表,请参阅 Kubelet 配置选项Sysctl 配置选项部分。

将配置添加到节点池

创建配置文件后,使用 gcloud 命令行工具添加 --system-config-from-file 标志。您可以在创建集群时或者在创建或更新节点池时添加此标志。您无法使用 Google Cloud Console 添加节点系统配置。

如需添加节点系统配置,请运行以下命令:

创建集群

gcloud container clusters create CLUSTER_NAME \
    --system-config-from-file=SYSTEM_CONFIG_PATH

请替换以下内容:

  • CLUSTER_NAME:您的集群的名称
  • SYSTEM_CONFIG_PATH:包含 kubeletsysctl 配置的文件的路径

应用节点系统配置后,集群的默认节点池将使用您定义的设置。

创建节点池

gcloud container node-pools create POOL_NAME \
     --cluster CLUSTER_NAME \
     --system-config-from-file=SYSTEM_CONFIG_PATH

请替换以下内容:

  • POOL_NAME:您的节点池的名称
  • CLUSTER_NAME:您要向其中添加节点池的集群的名称
  • SYSTEM_CONFIG_PATH:包含 kubeletsysctl 配置的文件的路径

更新节点池

gcloud container node-pools update POOL_NAME \
    --cluster=CLUSTER_NAME
    --system-config-from-file=SYSTEM_CONFIG_PATH

请替换以下内容:

  • POOL_NAME:您要更新的节点池的名称
  • CLUSTER_NAME:您要更新的集群的名称
  • SYSTEM_CONFIG_PATH:包含 kubeletsysctl 配置的文件的路径

修改节点系统配置

如需修改节点系统配置,您可以使用所需的配置创建新的节点池,或更新现有节点池的节点系统配置。

通过创建节点池进行修改

如需通过创建节点池来修改节点系统配置,请执行以下操作:

  1. 使用所需的配置创建配置文件
  2. 将配置添加到新的节点池。
  3. 将您的工作负载迁移到新节点池。
  4. 删除旧节点池

通过更新现有节点池进行修改

如需通过更新现有节点池来修改节点系统配置,请使用所需的值更新节点系统配置。更新节点系统配置会使用新配置替换节点池的系统配置。如果您在更新期间省略了任何参数,则这些参数将被设置为各自的默认值。

如果您要将节点系统配置重置为默认值,请使用 kubeletsysctl 的空值更新配置文件。例如:

kubeletConfig: {}
linuxConfig:
  sysctl: {}

删除节点系统配置

如需移除节点系统配置,请执行以下操作:

  1. 创建节点池
  2. 将您的工作负载迁移到新节点池。
  3. 删除节点池,其中包含旧版节点系统配置。

Kubelet 配置选项

下表显示了您可以修改的 kubelet 选项。

Kubelet 配置设置 限制 默认设置 说明
cpuManagerPolicy 值必须为 nonestatic none 此设置用于控制 kubelet 的 CPU 管理器政策。默认值为 none,这是默认的 CPU 关联方案,除了操作系统调度工具自动提供之外,没有其他关联性。

将该值设置为 static 可允许将具有整数 CPU 请求的保证 QoS 类中的 Pod 分配给专用 CPU 使用。
cpuCFSQuota 值必须为 truefalse true 此设置会强制执行 Pod 的 CPU 限制。将该值设置为 false 表示忽略 Pod 的 CPU 限制。

在某些情况下,如果 Pod 对 CPU 限制敏感,则可能会忽略 CPU 限制。停用 cpuCFSQuota 的风险在于,恶意 Pod 可能会消耗比预期更多的 CPU 资源。
cpuCFSQuotaPeriod 值必须是时长 "100ms" 此设置会设置 CPU CFS 配额时长值 cpu.cfs_period_us,该值用于指定 Cgroup 对 CPU 资源的访问频率应重新分配的时长。此选项允许您调节 CPU 节流行为。

Sysctl 配置选项

如需调节系统的性能,您可以修改以下内核属性:

  • net.core.netdev_max_backlog
  • net.core.rmem_max
  • net.core.wmem_default
  • net.core.wmem_max
  • net.core.optmem_max
  • net.core.somaxconn
  • net.ipv4.tcp_rmem
  • net.ipv4.tcp_wmem
  • net.ipv4.tcp_tw_reuse
  • net.ipv6.conf.all.disable_ipv6
  • net.ipv6.conf.default.disable_ipv6

如需详细了解这些属性,请参阅 Linux 内核 sysctl 文档

不同的 Linux 命名空间对于给定 sysctl 可能具有唯一的值,而其他 Linux 命名空间对于整个节点都是全局性的。使用节点系统配置来更新 sysctl 选项可确保 sysctl 在节点及每个命名空间中进行全局应用,从而使每个 Pod 在每个 Linux 命名空间中都具有相同的 sysctl 值。

后续步骤