6.3. 管理节点
OpenShift Container Platform 使用 KubeletConfig 自定义资源(CR)来管理节点的配置。通过创建 KubeletConfig
对象的实例,会创建一个受管机器配置来覆盖节点上的设置。
不支持为更改配置而登录远程机器。
6.3.1. 修改节点 复制链接链接已复制到粘贴板!
要对集群或机器池进行配置更改,您必须创建自定义资源定义(CRD)或 kubeletConfig
对象。OpenShift Container Platform 使用 Machine Config Controller 来监控是否通过 CRD 进行了更改,以将更改应用到集群。
因为 kubeletConfig
对象中的字段直接从上游 Kubernetes 传递给 kubelet,所以对这些字段的验证直接由 kubelet 本身处理。有关这些字段的有效值,请参阅相关的 Kubernetes 文档。kubeletConfig
对象中的无效值可能会导致集群节点不可用。
流程
为您要配置的节点类型,获取与静态 CRD (Machine Config Pool) 关联的标签。执行以下步骤之一:
检查所需机器配置池的当前标签。
例如:
oc get machineconfigpool --show-labels
$ oc get machineconfigpool --show-labels
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CONFIG UPDATED UPDATING DEGRADED LABELS master rendered-master-e05b81f5ca4db1d249a1bf32f9ec24fd True False False operator.machineconfiguration.openshift.io/required-for-upgrade= worker rendered-worker-f50e78e1bc06d8e82327763145bfcf62 True False False
NAME CONFIG UPDATED UPDATING DEGRADED LABELS master rendered-master-e05b81f5ca4db1d249a1bf32f9ec24fd True False False operator.machineconfiguration.openshift.io/required-for-upgrade= worker rendered-worker-f50e78e1bc06d8e82327763145bfcf62 True False False
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为所需的机器配置池添加自定义标签。
例如:
oc label machineconfigpool worker custom-kubelet=enabled
$ oc label machineconfigpool worker custom-kubelet=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为您的配置更改创建一个
kubeletconfig
自定义资源(CR)。例如:
custom-config CR 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CR 对象。
oc create -f <file-name>
$ oc create -f <file-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc create -f master-kube-config.yaml
$ oc create -f master-kube-config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
大多数 Kubelet 配置选项 可由用户设置。不允许覆盖下列选项:
- CgroupDriver
- ClusterDNS
- ClusterDomain
- StaticPodPath
如果单个节点包含超过 50 个镜像,pod 调度可能会在节点间进行平衡。这是因为节点上的镜像列表默认简写为 50。您可以通过编辑 KubeletConfig
对象来禁用镜像限制,并将 nodeStatusMaxImages
的值设置为 -1
。
6.3.2. 更新引导镜像 复制链接链接已复制到粘贴板!
Machine Config Operator (MCO)使用引导镜像来启动 Red Hat Enterprise Linux CoreOS (RHCOS) 节点。默认情况下,OpenShift Container Platform 不管理引导镜像。
这意味着集群中的引导镜像不会随集群一起更新。例如,如果您的集群最初使用 OpenShift Container Platform 4.12 创建,集群用来创建节点的引导镜像是相同的 4.12 版本,即使集群是更新的版本。如果以后将集群升级到 4.13 或更高版本,新节点将继续使用相同的 4.12 镜像扩展。
这个过程可能会导致以下问题:
- 启动节点的额外时间
- 证书过期问题
- 版本偏移问题
要避免这些问题,您可以将集群配置为在更新集群时更新引导镜像。通过修改 MachineConfiguration
对象,您可以启用此功能。目前,更新引导镜像的功能仅适用于 Google Cloud Platform (GCP)集群作为技术预览功能,且不支持 Cluster CAPI Operator 受管集群。
Google Cloud Platform (GCP)集群上的更新引导镜像功能只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
要查看集群中使用的当前引导镜像,请检查机器集:
使用引导镜像引用的机器集示例
- 1
- 此引导镜像与最初安装的 OpenShift Container Platform 版本相同,在本例中为 OpenShift Container Platform 4.12,无论集群的当前版本是什么。在机器集中表示引导镜像的方式取决于平台,因为
providerSpec
字段的结构与平台不同。
如果您将集群配置为更新引导镜像,机器集中引用的引导镜像与集群的当前版本匹配。
先决条件
-
已使用功能门启用
TechPreviewNoUpgrade
功能集。如需更多信息,请参阅附加资源部分中的"使用功能门启用功能"。
流程
运行以下命令,编辑名为
cluster
的MachineConfiguration
对象,以启用引导镜像的更新:oc edit MachineConfiguration cluster
$ oc edit MachineConfiguration cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:为所有机器集配置引导镜像更新功能:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:为特定机器集配置引导镜像更新功能:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示如果机器集中没有适当的标签,请运行以下命令来添加键/值对:
oc label machineset.machine ci-ln-hmy310k-72292-5f87z-worker-a update-boot-image=true -n openshift-machine-api
$ oc label machineset.machine ci-ln-hmy310k-72292-5f87z-worker-a update-boot-image=true -n openshift-machine-api
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令来获取引导镜像版本:
oc get machinesets <machineset_name> -n openshift-machine-api -o yaml
$ oc get machinesets <machineset_name> -n openshift-machine-api -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用引导镜像引用的机器集示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 此引导镜像与当前的 OpenShift Container Platform 版本相同。
6.3.2.1. 禁用更新的引导镜像 复制链接链接已复制到粘贴板!
要禁用更新的引导镜像功能,请编辑 MachineConfiguration
对象,以便 machineManagers
字段是一个空数组。
如果您在使用新的引导镜像版本创建了某些节点后禁用此功能,则任何现有节点会保留其当前引导镜像。关闭这个功能不会将节点或机器集回滚到原始安装的引导镜像。机器集会保留启用该功能时出现的引导镜像版本,并在将来升级到新的 OpenShift Container Platform 版本时不会再次更新。
流程
通过编辑
MachineConfiguration
对象禁用更新的引导镜像:oc edit MachineConfiguration cluster
$ oc edit MachineConfiguration cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
machineManagers
参数设为空数组:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 删除
machineManager
下列出的参数,并添加[]
个字符来禁用引导镜像更新。
6.3.3. 将 control plane 节点配置为可以调度 复制链接链接已复制到粘贴板!
您可以将 control plane 节点配置为可以调度,这意味着允许在 master 节点上放置新的 pod。默认情况下,control plane 节点不可调度。
您可以将 master 设置为可调度,但必须保留 worker 节点。
您可以在裸机集群中部署没有 worker 节点的 OpenShift Container Platform。在这种情况下,control plane 节点会被标记为可以调度。
您可以通过配置 mastersSchedulable
字段来允许或禁止调度 control plane 节点。
当您将 control plane 节点从默认的不可调度配置为可以调度时,需要额外的订阅。这是因为 control plane 节点随后变为 worker 节点。
流程
编辑
schedulers.config.openshift.io
资源。oc edit schedulers.config.openshift.io cluster
$ oc edit schedulers.config.openshift.io cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
mastersSchedulable
字段。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 设置为
true
以允许调度 control plane 节点,或设置为false
以禁止调度 control plane 节点。
- 保存文件以使改变生效。
6.3.4. 设置 SELinux 布尔值 复制链接链接已复制到粘贴板!
OpenShift Container Platform 允许您在 Red Hat Enterprise Linux CoreOS (RHCOS) 节点上启用和禁用 SELinux 布尔值。以下流程解释了如何使用 Machine Config Operator (MCO) 修改节点上的 SELinux 布尔值。此流程使用 container_manage_cgroup
作为示例布尔值。您可以将这个值修改为您需要的任何布尔值。
先决条件
- 已安装 OpenShift CLI(oc)。
流程
使用
MachineConfig
对象创建新 YAML 文件,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建新的
MachineConfig
对象:oc create -f 99-worker-setsebool.yaml
$ oc create -f 99-worker-setsebool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对 MachineConfig
对象应用任何更改将导致所有受影响的节点在应用更改后安全重启。
6.3.5. 为节点添加内核参数 复制链接链接已复制到粘贴板!
在一些特殊情况下,您可能需要为集群中的一组节点添加内核参数。进行此操作时应小心谨慎,而且您必须先清楚了解所设参数的影响。
不当使用内核参数会导致系统变得无法引导。
您可以设置的内核参数示例包括:
-
nosmt:在内核中禁用对称多线程 (SMT)。多线程允许每个 CPU 有多个逻辑线程。您可以在多租户环境中考虑使用
nosmt
,以减少潜在的跨线程攻击风险。禁用 SMT 在本质上相当于选择安全性而非性能。 systemd.unified_cgroup_hierarchy:启用 Linux 控制组版本 2 (cgroup v2)。cgroup v2 是内核控制组的下一个版本,它包括了多个改进。
重要cgroup v1 是一个已弃用的功能。弃用的功能仍然包含在 OpenShift Container Platform 中,并将继续被支持。但是,这个功能会在以后的发行版本中被删除,且不建议在新的部署中使用。
有关 OpenShift Container Platform 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行注记中已弃用和删除的功能部分。
Enforcing=0:将 Security Enhanced Linux(SELinux)配置为以 permissive 模式运行。在 permissive 模式中,系统会象 enforcing 模式一样加载安全策略,包括标记对象并在日志中记录访问拒绝条目,但它并不会拒绝任何操作。虽然不建议在生产环境系统中使用 permissive 模式,但 permissive 模式会有助于调试。
警告不支持在生产环境中禁用 RHCOS 上的 SELinux。在节点上禁用 SELinux 后,必须在生产集群中重新设置前重新置备它。
如需内核参数的列表和描述,请参阅 Kernel.org 内核参数。
在以下流程中,您要创建一个用于标识以下内容的 MachineConfig
对象:
- 您要添加内核参数的一组机器。本例中为具有 worker 角色的机器。
- 附加到现有内核参数末尾的内核参数。
- 指示机器配置列表中应用更改的位置的标签。
先决条件
- 具有正常运行的 OpenShift Container Platform 集群的管理特权。
流程
列出 OpenShift Container Platform 集群的现有
MachineConfig
对象,以确定如何标记您的机器配置:oc get MachineConfig
$ oc get MachineConfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个用于标识内核参数的
MachineConfig
对象文件(例如05-worker-kernelarg-selinuxpermissive.yaml
)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建新机器配置:
oc create -f 05-worker-kernelarg-selinuxpermissive.yaml
$ oc create -f 05-worker-kernelarg-selinuxpermissive.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查机器配置以查看是否添加了新配置:
oc get MachineConfig
$ oc get MachineConfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查节点:
oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以发现,在应用更改时每个 worker 节点上的调度都会被禁用。
前往其中一个 worker 节点并列出内核命令行参数(主机上的
/proc/cmdline
中),以检查内核参数确实已发挥作用:oc debug node/ip-10-0-141-105.ec2.internal
$ oc debug node/ip-10-0-141-105.ec2.internal
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您应看到
enforcing=0
参数已添加至其他内核参数。
6.3.6. 在节点上启用交换内存使用 复制链接链接已复制到粘贴板!
在节点上启用交换内存只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
启用交换内存仅适用于容器原生虚拟化 (CNV) 用户或用例。
启用交换内存可能会对工作负载性能和资源不足处理造成负面影响。不要在 control plane 节点上启用交换内存。
要启用交换内存,请创建一个 kubeletconfig
自定义资源(CR)来设置 swapbehavior
参数。您可以设置有限或无限的交换内存:
有限:使用
LimitedSwap
值来限制可以使用的交换内存工作负载量。任何不是由 OpenShift Container Platform 管理的节点上的工作负载都可以使用交换内存。LimitedSwap
行为取决于节点是否使用 Linux 控制组 版本 1(cgroups v1) 或 版本 2(cgroup v2) 运行:- cgroup v2:OpenShift Container Platform 工作负载可以使用内存和交换的任意组合(如果设置)到 pod 的内存限值。
- cgroup v1:OpenShift Container Platform 工作负载无法使用交换内存。
-
无限:使用
UnlimitedSwap
值来允许工作负载在请求时尽可能多地使用 swap 内存,最多使用系统限制。
由于 kubelet 在没有此配置的情况下不会启动交换内存,因此您必须在 OpenShift Container Platform 中启用交换内存前在节点上启用交换内存。如果节点上没有交换内存,则在 OpenShift Container Platform 中启用交换内存不会起作用。
先决条件
- 您有一个正在运行的 OpenShift Container Platform 集群,它使用版本 4.10 或更高版本。
- 以具有管理特权的用户身份登录集群。
您已在集群中启用了
TechPreviewNoUpgrade
功能集(请参阅 NodesWorking with cluster Enabling features using feature gates)。 注意启用
TechPreviewNoUpgrade
功能集将无法撤消,并防止次版本更新。不建议在生产环境集群中使用这些功能集。-
如果节点上启用了 cgroup v2,则必须通过设置
swapaccount=1
内核参数来启用节点上的交换核算。
流程
对要允许交换内存的机器配置池应用自定义标签。
oc label machineconfigpool worker kubelet-swap=enabled
$ oc label machineconfigpool worker kubelet-swap=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建自定义资源(CR)来启用和配置 swap 设置。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在机器上启用交换内存。
6.3.7. 关于配置并行容器镜像拉取 复制链接链接已复制到粘贴板!
为了帮助控制带宽问题,您可以配置可以同时拉取的工作负载镜像数量。
默认情况下,集群会并行拉取镜像,允许多个工作负载同时拉取镜像。并行拉取多个镜像可以提高工作负载启动时间,因为工作负载可以拉取所需的镜像,而无需相互等待。但是,同时拉取太多镜像可能会使用过量网络带宽,并导致整个集群中的延迟问题。
默认设置允许无限并发镜像拉取。但是,您可以配置可并行拉取的最大镜像数。您还可以强制串行镜像拉取,这意味着一次只能拉取一个镜像。
要控制可以同时拉取的镜像数量,请使用 kubelet 配置来设置 maxParallelImagePulls
来指定限制。在完成当前拉取前,会保留超过这个限制的额外镜像拉取(pull)。
要强制串行镜像拉取,请使用 kubelet 配置将 serializeImagePulls
字段设置为 true
。
6.3.7.1. 配置并行容器镜像拉取 复制链接链接已复制到粘贴板!
您可以使用 kubelet 配置控制工作负载可同时拉取的镜像数量。
您可以设置可拉取或强制工作负载一次拉取镜像的最大数量。
先决条件
- 有一个正在运行的 OpenShift Container Platform 集群。
- 以具有管理特权的用户身份登录集群。
流程
通过运行类似如下的命令,将自定义标签应用到要配置并行拉取的机器配置池。
oc label machineconfigpool <mcp_name> parallel-pulls=set
$ oc label machineconfigpool <mcp_name> parallel-pulls=set
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建自定义资源 (CR) 来配置并行镜像拉取。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令创建新机器配置:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令检查机器配置以查看是否添加了新配置:
oc get MachineConfig
$ oc get MachineConfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查
parallel
机器配置池中的节点是否已更新:oc get machineconfigpool
$ oc get machineconfigpool
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE parallel rendered-parallel-3904f0e69130d125b3b5ef0e981b1ce1 False True False 1 0 0 0 65m master rendered-master-7536834c197384f3734c348c1d957c18 True False False 3 3 3 0 140m worker rendered-worker-c634a80f644740974ceb40c054c79e50 True False False 2 2 2 0 140m
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE parallel rendered-parallel-3904f0e69130d125b3b5ef0e981b1ce1 False True False 1 0 0 0 65m master rendered-master-7536834c197384f3734c348c1d957c18 True False False 3 3 3 0 140m worker rendered-worker-c634a80f644740974ceb40c054c79e50 True False False 2 2 2 0 140m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新节点时,验证是否配置了并行拉取(pull)最大值:
运行以下命令,为节点打开
oc debug
会话:oc debug node/<node_name>
$ oc debug node/<node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将
/host
设置为 debug shell 中的根目录:chroot /host
sh-5.1# chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查
kubelet.conf
文件:cat /etc/kubernetes/kubelet.conf | grep -i maxParallelImagePulls
sh-5.1# cat /etc/kubernetes/kubelet.conf | grep -i maxParallelImagePulls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
maxParallelImagePulls: 3
maxParallelImagePulls: 3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.8. 手动将 control plane 节点从一个 RHOSP 主机迁移到另一个 RHOSP 主机 复制链接链接已复制到粘贴板!
如果没有在集群中启用 control plane 机器集,您可以运行将 control plane 节点从一个 Red Hat OpenStack Platform (RHOSP)节点移动到另一个 Red Hat OpenStack Platform (RHOSP)节点的脚本。
在用户置备的基础架构上运行的集群上不启用 control plane 机器集。
有关 control plane 机器集的详情,请参考"使用 control plane 机器集管理 control plane 机器"。
先决条件
-
环境变量
OS_CLOUD
是对在clouds.yaml
文件中具有管理凭证的clouds
条目的引用。 -
环境变量
KUBECONFIG
是指包含管理 OpenShift Container Platform 凭证的配置。
流程
- 在命令行中运行以下命令:
如果脚本完成,control plane 机器将迁移到一个新的 RHOSP 节点。