5.3. 配置 MCO 相关的自定义资源
除了管理 MachineConfig 对象外,MCO 管理两个自定义资源(CR):KubeletConfig 和 ContainerRuntimeConfig。这些 CR 可让您更改节点级别的设置,这会影响到 Kubelet 和 CRI-O 容器运行时服务的行为。
5.3.1. 创建 KubeletConfig CRD 来编辑 kubelet 参数 复制链接链接已复制到粘贴板!
kubelet 配置目前被序列化为 Ignition 配置,因此可以直接编辑。但是,在 Machine Config Controller (MCC) 中同时添加了新的 kubelet-config-controller 。这可让您使用 KubeletConfig 自定义资源 (CR) 来编辑 kubelet 参数。
因为 kubeletConfig 对象中的字段直接从上游 Kubernetes 传递给 kubelet,kubelet 会直接验证这些值。kubeletConfig 对象中的无效值可能会导致集群节点不可用。有关有效值,请参阅 Kubernetes 文档。
请考虑以下指导:
-
编辑现有的
KubeletConfigCR 以修改现有设置或添加新设置,而不是为每个更改创建一个 CR。建议您仅创建一个 CR 来修改不同的机器配置池,或用于临时更改,以便您可以恢复更改。 -
为每个机器配置池创建一个
KubeletConfigCR,带有该池需要更改的所有配置。 -
根据需要,创建多个
KubeletConfigCR,每个集群限制为 10。对于第一个KubeletConfigCR,Machine Config Operator (MCO) 会创建一个机器配置,并附带kubelet。对于每个后续 CR,控制器会创建另一个带有数字后缀的kubelet机器配置。例如,如果您有一个带有-2后缀的kubelet机器配置,则下一个kubelet机器配置会附加-3。
如果要将 kubelet 或容器运行时配置应用到自定义机器配置池,则 machineConfigSelector 中的自定义角色必须与自定义机器配置池的名称匹配。
例如,由于以下自定义机器配置池名为 infra,因此自定义角色也必须是 infra :
如果要删除机器配置,以相反的顺序删除它们,以避免超过限制。例如,在删除 kubelet-2 机器配置前删除 kubelet-3 机器配置。
如果您有一个带有 kubelet-9 后缀的机器配置,并且创建了另一个 KubeletConfig CR,则不会创建新的机器配置,即使少于 10 个 kubelet 机器配置。
KubeletConfig CR 示例
oc get kubeletconfig
$ oc get kubeletconfig
NAME AGE set-max-pods 15m
NAME AGE
set-max-pods 15m
显示 KubeletConfig 机器配置示例
oc get mc | grep kubelet
$ oc get mc | grep kubelet
... 99-worker-generated-kubelet-1 b5c5119de007945b6fe6fb215db3b8e2ceb12511 3.2.0 26m ...
...
99-worker-generated-kubelet-1 b5c5119de007945b6fe6fb215db3b8e2ceb12511 3.2.0 26m
...
以下流程演示了如何配置 worker 节点上的每个节点的最大 pod 数量。
先决条件
为您要配置的节点类型获取与静态
MachineConfigPoolCR 关联的标签。执行以下步骤之一:查看机器配置池:
oc describe machineconfigpool <name>
$ oc describe machineconfigpool <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc describe machineconfigpool worker
$ oc describe machineconfigpool workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果添加了标签,它会出现在
labels下。
如果标签不存在,则添加一个键/值对:
oc label machineconfigpool worker custom-kubelet=set-max-pods
$ oc label machineconfigpool worker custom-kubelet=set-max-podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
查看您可以选择的可用机器配置对象:
oc get machineconfig
$ oc get machineconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,与 kubelet 相关的配置为
01-master-kubelet和01-worker-kubelet。检查每个节点的最大 pod 的当前值:
oc describe node <node_name>
$ oc describe node <node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc describe node ci-ln-5grqprb-f76d1-ncnqq-worker-a-mdv94
$ oc describe node ci-ln-5grqprb-f76d1-ncnqq-worker-a-mdv94Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
Allocatable小节中找到value: pods: <value>:输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过创建一个包含 kubelet 配置的自定义资源文件,设置 worker 节点上的每个节点的最大 pod:
重要以特定机器配置池为目标的 kubelet 配置也会影响任何依赖的池。例如,为包含 worker 节点的池创建 kubelet 配置也适用于任何子集池,包括包含基础架构节点的池。要避免这种情况,您必须使用仅包含 worker 节点的选择表达式创建新的机器配置池,并让 kubelet 配置以这个新池为目标。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意kubelet 与 API 服务器进行交互的频率取决于每秒的查询数量 (QPS) 和 burst 值。如果每个节点上运行的 pod 数量有限,使用默认值(
kubeAPIQPS为50,kubeAPIBurst为100)就可以。如果节点上有足够 CPU 和内存资源,则建议更新 kubelet QPS 和 burst 速率。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为带有标签的 worker 更新机器配置池:
oc label machineconfigpool worker custom-kubelet=set-max-pods
$ oc label machineconfigpool worker custom-kubelet=set-max-podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
KubeletConfig对象:oc create -f change-maxPods-cr.yaml
$ oc create -f change-maxPods-cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
KubeletConfig对象是否已创建:oc get kubeletconfig
$ oc get kubeletconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE set-max-pods 15m
NAME AGE set-max-pods 15mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据集群中的 worker 节点数量,等待每个 worker 节点被逐个重启。对于有 3 个 worker 节点的集群,这个过程可能需要大约 10 到 15 分钟。
验证更改是否已应用到节点:
在 worker 节点上检查
maxPods值已更改:oc describe node <node_name>
$ oc describe node <node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 找到
Allocatable小节:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,
pods参数应报告您在KubeletConfig对象中设置的值。
验证
KubeletConfig对象中的更改:oc get kubeletconfigs set-max-pods -o yaml
$ oc get kubeletconfigs set-max-pods -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这应该显示
True状态和type:Success,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.2. 创建 ContainerRuntimeConfig CR 以编辑 CRI-O 参数 复制链接链接已复制到粘贴板!
您可以为与特定机器配置池(MCP)关联的节点更改与 OpenShift Container Platform CRI-O 运行时关联的一些设置。通过使用 ContainerRuntimeConfig 自定义资源(CR),您可以设置配置值并添加一个标签以匹配 MCP。然后,MCO 会使用更新的值重建关联节点上的 crio.conf 和 storage.conf 配置文件。
要使用 ContainerRuntimeConfig CR 恢复实现的更改,您必须删除 CR。从机器配置池中删除标签不会恢复更改。
您可以使用 ContainerRuntimeConfig CR 修改以下设置:
PIDs limit :在
ContainerRuntimeConfig中设置 PID 限值将被弃用。如果需要 PIDs 限制,建议在KubeletConfigCR 中使用podPidsLimit字段。默认的podPidsLimit值为4096,默认的pids_limit值为0。如果podPidsLimit低于pids_limit,则有效的容器 PID 限制由podPidsLimit中设置的值定义。注意CRI-O 标志应用到容器的 cgroup 上,而 Kubelet 标志则在 pod 的 cgroup 中设置。请相应地调整 PID 限值。
-
日志级别:
logLevel参数设置 CRI-Olog_level参数,即日志消息的详细程度。默认为info(log_level = info)。其他选项包括fatal、panic、error、warn、debug和trace。 -
Overlay 大小:
overlaySize参数设置 CRI-O Overlay 存储驱动程序size参数,这是容器镜像的最大大小。 -
最大日志大小 :在
ContainerRuntimeConfig中设置最大日志大小被弃用。如果需要最大日志大小,建议在KubeletConfigCR 中使用containerLogMaxSize字段。 -
容器运行时 :
defaultRuntime参数将容器运行时设置为runc或crun。默认为runc。
您应该为每个机器配置池有一个ContainerRuntimeConfig CR,并为该池分配所有配置更改。如果要将相同的内容应用到所有池,则所有池只需要 oneContainerRuntimeConfig CR。
您应该编辑现有的 ContainerRuntimeConfig CR,以修改现有设置或添加新设置,而不是为每个更改创建新 CR。建议您只创建一个新的 ContainerRuntimeConfig CR 来修改不同的机器配置池,或者用于临时的更改,以便您可以恢复更改。
您可以根据需要创建多个 ContainerRuntimeConfig CR,每个集群的限制为 10。对于第一个 ContainerRuntimeConfig CR,MCO 会创建一个机器配置并附加 containerruntime。对于每个后续 CR,控制器会创建一个带有数字后缀的新 containerruntime 机器配置。例如,如果您有一个带有 -2 后缀的 containerruntime 机器配置,则下一个 containerruntime 机器配置会附加 -3。
如果要删除机器配置,应该以相反的顺序删除它们,以避免超过限制。例如,您应该在删除 containerruntime-2 机器配置前删除 containerruntime-3 机器配置。
如果您的机器配置带有 containerruntime-9 后缀,并且创建了 anotherContainerRuntimeConfig CR,则不会创建新的机器配置,即使少于 10 个 containerruntime 机器配置。
显示多个 ContainerRuntimeConfig CR 示例
oc get ctrcfg
$ oc get ctrcfg
输出示例
NAME AGE ctr-overlay 15m ctr-level 5m45s
NAME AGE
ctr-overlay 15m
ctr-level 5m45s
显示多个 containerruntime 机器配置示例
oc get mc | grep container
$ oc get mc | grep container
输出示例
以下示例将 log_level 字段设置为 debug,并将覆盖大小设置为 8 GB:
ContainerRuntimeConfig CR 示例
流程
使用 ContainerRuntimeConfig CR 更改 CRI-O 设置:
为
ContainerRuntimeConfigCR 创建 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
ContainerRuntimeConfigCR:oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证是否已创建 CR:
oc get ContainerRuntimeConfig
$ oc get ContainerRuntimeConfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE overlay-size 3m19s
NAME AGE overlay-size 3m19sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查是否创建了新的
containerruntime机器配置:oc get machineconfigs | grep containerrun
$ oc get machineconfigs | grep containerrunCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
99-worker-generated-containerruntime 2c9371fbb673b97a6fe8b1c52691999ed3a1bfc2 3.2.0 31s
99-worker-generated-containerruntime 2c9371fbb673b97a6fe8b1c52691999ed3a1bfc2 3.2.0 31sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 监控机器配置池,直到所有系统都显示为 ready 状态:
oc get mcp worker
$ oc get mcp workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-169 False True False 3 1 1 0 9h
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-169 False True False 3 1 1 0 9hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证设置是否在 CRI-O 中应用:
打开到机器配置池中节点的
oc debug会话,并运行chroot /host。oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow chroot /host
sh-4.4# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
crio.conf文件中的更改:crio config | grep 'log_level'
sh-4.4# crio config | grep 'log_level'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
log_level = "debug"
log_level = "debug"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 'storage.conf' 文件中的更改:
head -n 7 /etc/containers/storage.conf
sh-4.4# head -n 7 /etc/containers/storage.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.3. 使用 CRI-O 为 Overlay 设置默认的最大容器根分区大小 复制链接链接已复制到粘贴板!
每个容器的根分区显示底层主机的所有可用磁盘空间。按照以下说明,为所有容器的 root 磁盘设置最大分区大小。
要配置最大 Overlay 大小以及其他 CRI-O 选项,您可以创建以下 ContainerRuntimeConfig 自定义资源定义 (CRD):
流程
创建配置对象:
oc apply -f overlaysize.yml
$ oc apply -f overlaysize.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要将新的 CRI-O 配置应用到 worker 节点,请编辑 worker 机器配置池:
oc edit machineconfigpool worker
$ oc edit machineconfigpool workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据在
ContainerRuntimeConfigCRD 中设置的matchLabels名称添加custom-crio标签:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保存更改,然后查看机器配置:
oc get machineconfigs
$ oc get machineconfigsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新的
99-worker-generated-containerruntime和rendered-worker-xyz对象被创建:输出示例
99-worker-generated-containerruntime 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.2.0 7m42s rendered-worker-xyz 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.2.0 7m36s
99-worker-generated-containerruntime 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.2.0 7m42s rendered-worker-xyz 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.2.0 7m36sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建这些对象后,监控机器配置池以了解要应用的更改:
oc get mcp worker
$ oc get mcp workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow worker 节点将
UPDATING显示为True,以及机器数量、更新的数字和其他详情:输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-xyz False True False 3 2 2 0 20h
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-xyz False True False 3 2 2 0 20hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 完成后,worker 节点会从
UPDATING转换回False,UPDATEDMACHINECOUNT数与MACHINECOUNT数匹配:输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-xyz True False False 3 3 3 0 20h
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-xyz True False False 3 3 3 0 20hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 worker 机器,您会看到新的 8 GB 最大大小配置适用于所有 worker:
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在容器内,您会看到 root 分区现在为 8 GB:
输出示例
~ $ df -h Filesystem Size Used Available Use% Mounted on overlay 8.0G 8.0K 8.0G 0% /
~ $ df -h Filesystem Size Used Available Use% Mounted on overlay 8.0G 8.0K 8.0G 0% /Copy to Clipboard Copied! Toggle word wrap Toggle overflow