在《OpenShift 4 - 如何用Machine Config Operator修改集群节点CoreOS的配置》一文中提到在OpenShift的Machine Config Controller中包括一个名为Kubelet Config Controller的子组件,该组件接收基于CRD的KubeletConfig配置对象并将其实施于适用节点的Kubelet环境中,也就是说OpenShift 4集群中Node节点的Kubelete环境是通过该组件实现配置的。
在安装OpenShift集群过程中会在Ignition中提供缺省的KubeConfig配置,我们可以在安装后修改节点Kubelet使用的配置,从而修改Kubelet的运行参数。
$ oc get node -l node-role.kubernetes.io/worker
NAME STATUS ROLES AGE VERSION
ip-10-0-150-145.ap-southeast-1.compute.internal Ready worker 3h32m v1.18.3+6c42de8
ip-10-0-190-1.ap-southeast-1.compute.internal Ready worker 3h32m v1.18.3+6c42de8
$ oc describe node <WORKER_NODE> | grep Allocatable -A7
Allocatable:
attachable-volumes-aws-ebs: 25
cpu: 15500m
ephemeral-storage: 114381692328
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 63991700Ki
pods: 250
$ oc get machineconfig
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE
00-master 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 6h
00-worker 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 6h
01-master-container-runtime 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 6h
01-master-kubelet 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 6h
01-worker-container-runtime 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 6h
01-worker-kubelet 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 6h
99-master-ea3d87d1-a5df-4137-a3a3-849915e40cdd-registries 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 6h
99-master-ssh 2.2.0 6h9m
99-worker-cdf0041e-c96c-401d-9881-5c8243a58991-registries 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 6h
99-worker-ssh 2.2.0 6h9m
rendered-master-2613a048ee6bb4b27621cfff3c44a676 99eb744f5094224edb60d88ca85d607ab151ebdf 2.2.0 6h
rendered-master-c5bfe43313bf45eb9abd3e8422421b6d 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 3h30m
rendered-worker-46a5c3ba1b88f2b312aa349e71f4a0fa 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 3h30m
rendered-worker-c74c310336d86b894dec0c5b49743ebd 99eb744f5094224edb60d88ca85d607ab151ebdf 2.2.0 6h
$ oc describe machineconfig 01-worker-kubelet | grep '\--config'
--config=/etc/kubernetes/kubelet.conf \
$ oc debug node/ip-10-0-150-145.ap-southeast-1.compute.internal
Starting pod/ip-10-0-150-145ap-southeast-1computeinternal-debug ...
To use host binaries, run `chroot /host`
sh-4.2# chroot /host
sh-4.4# more /etc/kubernetes/kubelet.conf
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
x509:
clientCAFile: /etc/kubernetes/kubelet-ca.crt
anonymous:
enabled: false
cgroupDriver: systemd
cgroupRoot: /
clusterDNS:
7. 172.30.0.10
clusterDomain: cluster.local
containerLogMaxSize: 50Mi
maxPods: 250
kubeAPIQPS: 50
kubeAPIBurst: 100
rotateCertificates: true
serializeImagePulls: false
staticPodPath: /etc/kubernetes/manifests
systemCgroups: /system.slice
systemReserved:
cpu: 500m
memory: 1Gi
ephemeral-storage: 1Gi
featureGates:
LegacyNodeRoleBehavior: false
NodeDisruptionExclusion: true
RotateKubeletServerCertificate: true
SCTPSupport: true
ServiceNodeExclusion: true
SupportPodPidsLimit: true
serverTLSBootstrap: true
sh-4.2# exit
sh-4.2# exit
apiVersion: machineconfiguration.openshift.io/v1
kind: KubeletConfig
metadata:
name: set-max-pods
spec:
machineConfigPoolSelector:
matchLabels:
custom-kubelet: large-pods
kubeletConfig:
maxPods: 500
$ oc get machineconfigpool worker --show-labels
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE LABELS
worker rendered-worker-1e4ff665b30dd1099a34d6e636654353 True False False 2 2 2 0 8h machineconfiguration.openshift.io/mco-built-in=
$ oc label machineconfigpool worker custom-kubelet=large-pods
$ oc create -f change-maxPods-cr.yaml
$ oc get kubeletconfig
NAME AGE
set-max-pods 7s
NAME STATUS ROLES AGE VERSION
ip-10-0-150-145.ap-southeast-1.compute.internal Ready worker 7h19m v1.18.3+6c42de8
ip-10-0-190-1.ap-southeast-1.compute.internal Ready,SchedulingDisabled worker 7h19m v1.18.3+6c42de8
ip-10-0-190-1.ap-southeast-1.compute.internal NotReady,SchedulingDisabled worker 7h19m v1.18.3+6c42de8
ip-10-0-190-1.ap-southeast-1.compute.internal NotReady,SchedulingDisabled worker 7h19m v1.18.3+6c42de8
ip-10-0-190-1.ap-southeast-1.compute.internal Ready,SchedulingDisabled worker 7h19m v1.18.3+6c42de8
ip-10-0-190-1.ap-southeast-1.compute.internal Ready,SchedulingDisabled worker 7h19m v1.18.3+6c42de8
ip-10-0-190-1.ap-southeast-1.compute.internal Ready worker 7h19m v1.18.3+6c42de8
ip-10-0-190-1.ap-southeast-1.compute.internal Ready worker 7h19m v1.18.3+6c42de8
ip-10-0-150-145.ap-southeast-1.compute.internal Ready worker 7h19m v1.18.3+6c42de8
ip-10-0-150-145.ap-southeast-1.compute.internal Ready,SchedulingDisabled worker 7h19m v1.18.3+6c42de8
ip-10-0-150-145.ap-southeast-1.compute.internal Ready,SchedulingDisabled worker 7h19m v1.18.3+6c42de8
ip-10-0-190-1.ap-southeast-1.compute.internal Ready worker 7h20m v1.18.3+6c42de8
ip-10-0-190-1.ap-southeast-1.compute.internal Ready worker 7h20m v1.18.3+6c42de8
ip-10-0-150-145.ap-southeast-1.compute.internal Ready,SchedulingDisabled worker 7h20m v1.18.3+6c42de8
ip-10-0-150-145.ap-southeast-1.compute.internal Ready,SchedulingDisabled worker 7h20m v1.18.3+6c42de8
ip-10-0-150-145.ap-southeast-1.compute.internal Ready,SchedulingDisabled worker 7h20m v1.18.3+6c42de8
ip-10-0-150-145.ap-southeast-1.compute.internal Ready worker 7h21m v1.18.3+6c42de8
$ oc get machineconfig
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE
00-master 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 8h
00-worker 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 8h
01-master-container-runtime 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 8h
01-master-kubelet 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 8h
01-worker-container-runtime 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 8h
01-worker-kubelet 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 8h
99-master-ea3d87d1-a5df-4137-a3a3-849915e40cdd-registries 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 8h
99-master-ssh 2.2.0 8h
99-worker-cdf0041e-c96c-401d-9881-5c8243a58991-kubelet 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 30m
99-worker-cdf0041e-c96c-401d-9881-5c8243a58991-registries 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 8h
99-worker-ssh 2.2.0 8h
rendered-master-2613a048ee6bb4b27621cfff3c44a676 99eb744f5094224edb60d88ca85d607ab151ebdf 2.2.0 8h
rendered-master-c5bfe43313bf45eb9abd3e8422421b6d 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 5h35m
rendered-worker-1e4ff665b30dd1099a34d6e636654353 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 30m
rendered-worker-46a5c3ba1b88f2b312aa349e71f4a0fa 0157b684b81eb5cbbe4e37d7b7e018ce5d5967d2 2.2.0 5h35m
rendered-worker-c74c310336d86b894dec0c5b49743ebd 99eb744f5094224edb60d88ca85d607ab151ebdf 2.2.0 8h
$ oc get kubeletconfig set-max-pods -o yaml
。。。
status:
conditions:
- lastTransitionTime: "2020-09-05T15:37:47Z"
message: Success
status: "True"
type: Success
$ oc describe node <WORKER_NODE> | grep Allocatable -A7
Allocatable:
attachable-volumes-aws-ebs: 25
cpu: 15500m
ephemeral-storage: 114381692328
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 63991700Ki
pods: 500
OpenShift 4的集群适用了CRI-O作为其容器运行环境,节点CRI-O的配置文件etc/crio/crio.conf。若要修改节点的CRI-O的配置参数,需要用到OpenShift中的CRD类型对象ContainerRuntimeConfig保存定制的配置参数。当OpenShift发现有新的ContainerRuntimeConfig后,会根据其内容生成对应的r名为ender-xxxx的MachineConfig对象,此后OpenShift的MachineConfigController会将MachineConfig对象发送到所有相关对点的MachineConfigDaemon,再由它完成该节点配置的修改。
sh-4.4# cat /etc/crio/crio.conf | grep -v "#" | sed '/^$/d' |grep -i pids_limit
pids_limit = 1024
$ oc label machineconfigpool master debug-crio=config-log-and-pid
machineconfigpool.machineconfiguration.openshift.io/master labeled
apiVersion: machineconfiguration.openshift.io/v1
kind: ContainerRuntimeConfig
metadata:
name: set-log-and-pid
spec:
machineConfigPoolSelector:
matchLabels:
debug-crio: config-log-and-pid
containerRuntimeConfig:
pidsLimit: 2048
logLevel: debug
$ oc create -f ContainerRuntimeConfig.yaml
containerruntimeconfig.machineconfiguration.openshift.io/set-log-and-pid created
$ oc get ContainerRuntimeConfig
NAME AGE
set-log-and-pid 5s
$ oc get MachineConfigs | grep rendered
rendered-master-1eac183c39006eab3480e3acfc9ba8db 99eb744f5094224edb60d88ca85d607ab151ebdf 2.2.0 27h
rendered-master-d08c556ab53f07069ff0c46e741de224 99eb744f5094224edb60d88ca85d607ab151ebdf 2.2.0 50s
rendered-worker-92b2d6fba537bbf64d3493dcc2b6a207 99eb744f5094224edb60d88ca85d607ab151ebdf 2.2.0 27h
$ python3 -c "import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))" $(oc get MachineConfig/rendered-master-d08c556ab53f07069ff0c46e741de224 -o YAML | grep -B4 crio.conf | grep source | tail -n 1 | cut -d, -f2) | grep pid
pids_limit = 2048
$ oc get node -l node-role.kubernetes.io/master -w
NAME STATUS ROLES AGE VERSION
ip-10-0-134-103.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-178-236.ap-southeast-1.compute.internal Ready,SchedulingDisabled master 26h v1.18.3+012b3ec
ip-10-0-221-178.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-134-103.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-221-178.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-178-236.ap-southeast-1.compute.internal NotReady,SchedulingDisabled master 26h v1.18.3+012b3ec
ip-10-0-178-236.ap-southeast-1.compute.internal NotReady,SchedulingDisabled master 26h v1.18.3+012b3ec
ip-10-0-134-103.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-221-178.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-178-236.ap-southeast-1.compute.internal Ready,SchedulingDisabled master 26h v1.18.3+012b3ec
ip-10-0-178-236.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-178-197.ap-southeast-1.compute.internal Ready worker 26h v1.18.3+012b3ec
ip-10-0-221-178.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-221-178.ap-southeast-1.compute.internal Ready,SchedulingDisabled master 26h v1.18.3+012b3ec
ip-10-0-157-96.ap-southeast-1.compute.internal Ready worker 26h v1.18.3+012b3ec
ip-10-0-178-236.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-221-178.ap-southeast-1.compute.internal NotReady,SchedulingDisabled master 26h v1.18.3+012b3ec
ip-10-0-221-178.ap-southeast-1.compute.internal Ready,SchedulingDisabled master 26h v1.18.3+012b3ec
ip-10-0-221-178.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-134-103.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-134-103.ap-southeast-1.compute.internal Ready,SchedulingDisabled master 26h v1.18.3+012b3ec
ip-10-0-178-236.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-221-178.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
ip-10-0-134-103.ap-southeast-1.compute.internal NotReady,SchedulingDisabled master 26h v1.18.3+012b3ec
ip-10-0-134-103.ap-southeast-1.compute.internal Ready,SchedulingDisabled master 26h v1.18.3+012b3ec
ip-10-0-134-103.ap-southeast-1.compute.internal Ready master 26h v1.18.3+012b3ec
https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.5/html-single/scalability_and_performance/index
https://docs.openshift.com/container-platform/4.5/scalability_and_performance/recommended-host-practices.html
https://www.redhat.com/en/blog/red-hat-openshift-container-platform-4-now-defaults-cri-o-underlying-container-engine