5.3. 配置 MCO 相关的自定义资源
				除了管理 MachineConfig 对象外,MCO 管理两个自定义资源(CR):KubeletConfig 和 ContainerRuntimeConfig。这些 CR 可让您更改节点级别的设置,这会影响到 Kubelet 和 CRI-O 容器运行时服务的行为。
			
5.3.1. 创建 KubeletConfig CR 以编辑 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 kubeletconfigNAME AGE set-kubelet-config 15m
NAME                      AGE
set-kubelet-config        15m显示 KubeletConfig 机器配置示例
oc get mc | grep kubelet
$ oc get mc | grep kubelet... 99-worker-generated-kubelet-1 b5c5119de007945b6fe6fb215db3b8e2ceb12511 3.4.0 26m ...
...
99-worker-generated-kubelet-1                  b5c5119de007945b6fe6fb215db3b8e2ceb12511   3.4.0             26m
...以下流程演示了如何配置每个节点的最大 pod 数量、每个节点的最大 PID 以及 worker 节点上的最大容器日志大小。
先决条件
- 为您要配置的节点类型获取与静态 - 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 worker- Copy 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-kubelet-config - $ oc label machineconfigpool worker custom-kubelet=set-kubelet-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
流程
- 查看您可以选择的可用机器配置对象: - oc get machineconfig - $ oc get machineconfig- Copy 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-mdv94- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 在 - Allocatable小节中找到- value: pods: <value>:- 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 根据需要配置 worker 节点: - 创建一个类似如下的 YAML 文件,其中包含 kubelet 配置: 重要- 以特定机器配置池为目标的 kubelet 配置也会影响任何依赖的池。例如,为包含 worker 节点的池创建 kubelet 配置也适用于任何子集池,包括包含基础架构节点的池。要避免这种情况,您必须使用仅包含 worker 节点的选择表达式创建新的机器配置池,并让 kubelet 配置以这个新池为目标。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 
											使用 podPidsLimit在任何 pod 中设置最大 PID 数量。
- 
											使用 containerLogMaxSize在轮转容器日志文件前设置容器日志文件的最大大小。
- 使用 - maxPods设置每个节点的最大 pod。注意- 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-kubelet-config - $ oc label machineconfigpool worker custom-kubelet=set-kubelet-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建 - KubeletConfig对象:- oc create -f change-maxPods-cr.yaml - $ oc create -f change-maxPods-cr.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
验证
- 验证 - KubeletConfig对象是否已创建:- oc get kubeletconfig - $ oc get kubeletconfig- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - NAME AGE set-kubelet-config 15m - NAME AGE set-kubelet-config 15m- Copy 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-kubelet-config -o yaml - $ oc get kubeletconfigs set-kubelet-config -o yaml- Copy 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 修改以下设置:
				
- 
							日志级别: logLevel参数设置 CRI-Olog_level参数,即日志消息的详细程度。默认为info(log_level = info)。其他选项包括fatal、panic、error、warn、debug和trace。
- 
							Overlay 大小:overlaySize参数设置 CRI-O Overlay 存储驱动程序size参数,这是容器镜像的最大大小。
- 
							容器运行时 : 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>.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 验证是否已创建 CR: - oc get ContainerRuntimeConfig - $ oc get ContainerRuntimeConfig- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - NAME AGE overlay-size 3m19s - NAME AGE overlay-size 3m19s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检查是否创建了新的 - containerruntime机器配置:- oc get machineconfigs | grep containerrun - $ oc get machineconfigs | grep containerrun- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - 99-worker-generated-containerruntime 2c9371fbb673b97a6fe8b1c52691999ed3a1bfc2 3.4.0 31s - 99-worker-generated-containerruntime 2c9371fbb673b97a6fe8b1c52691999ed3a1bfc2 3.4.0 31s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 监控机器配置池,直到所有系统都显示为 ready 状态: - oc get mcp worker - $ oc get mcp worker- Copy 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 9h- Copy 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 /host- Copy 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.conf- Copy 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.yml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 要将新的 CRI-O 配置应用到 worker 节点,请编辑 worker 机器配置池: - oc edit machineconfigpool worker - $ oc edit machineconfigpool worker- Copy 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 machineconfigs- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 新的 - 99-worker-generated-containerruntime和- rendered-worker-xyz对象被创建:- 输出示例 - 99-worker-generated-containerruntime 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.4.0 7m42s rendered-worker-xyz 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.4.0 7m36s - 99-worker-generated-containerruntime 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.4.0 7m42s rendered-worker-xyz 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.4.0 7m36s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建这些对象后,监控机器配置池以了解要应用的更改: - oc get mcp worker - $ oc get mcp worker- Copy 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 20h- Copy 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 20h- Copy 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 
5.3.4. 为 CRI-O 的默认功能创建一个置入文件
					您可以为与特定机器配置池(MCP)关联的节点更改与 OpenShift Container Platform CRI-O 运行时关联的一些设置。通过使用控制器自定义资源 (CR),您可以设置配置值并添加标签以匹配 MCP。然后,Machine Config Operator (MCO) 会使用更新的值重建关联节点上的 crio.conf 和 default.conf 配置文件。
				
默认情况下,OpenShift Container Platform 的早期版本包含特定的机器配置。如果您升级到更新的 OpenShift Container Platform 版本,则会保留这些机器配置,以确保在同一 OpenShift Container Platform 版本上运行的集群具有相同的机器配置。
					您可以根据需要创建多个 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 相关系统配置示例
cat /proc/1/status | grep Cap
$ cat /proc/1/status | grep Capcapsh --decode=<decode_CapBnd_value>
$ capsh --decode=<decode_CapBnd_value> - 1
- 将<decode_CapBnd_value>替换为您要解码的特定值。