8.6. 노드에서 Linux cgroup 버전 구성
OpenShift Container Platform 4.14부터 OpenShift Container Platform은 클러스터에서 Linux 제어 그룹 버전 2 (cgroup v2)를 사용합니다. OpenShift Container Platform 4.13 또는 이전 버전에서 cgroup v1을 사용하는 경우 OpenShift Container Platform 4.14 이상으로 마이그레이션하면 cgroup 설정이 버전 2로 자동으로 업데이트되지 않습니다. OpenShift Container Platform 4.14 이상을 새로 설치하면 기본적으로 cgroup v2가 사용됩니다. 그러나 설치 시 Linux 제어 그룹 버전 1 (cgroup v1)을 활성화할 수 있습니다.
cgroup v2는 Linux cgroup API의 현재 버전입니다. cgroup v2는 통합 계층 구조, 더 안전한 하위 트리 위임, pressure stayll Information 과 같은 새로운 기능, 향상된 리소스 관리 및 격리를 포함하여 cgroup v1에 비해 몇 가지 개선 사항을 제공합니다. 그러나 cgroup v2에는 cgroup v1과 다른 CPU, 메모리, I/O 관리 특성이 있습니다. 따라서 일부 워크로드는 cgroup v2를 실행하는 클러스터의 메모리 또는 CPU 사용량에 약간의 차이가 있을 수 있습니다.
필요에 따라 cgroup v1과 cgroup v2 간에 변경할 수 있습니다. OpenShift Container Platform에서 cgroup v1을 활성화하면 클러스터의 모든 cgroup v2 컨트롤러 및 계층이 비활성화됩니다.
- cgroup 파일 시스템에 의존하는 타사 모니터링 및 보안 에이전트를 실행하는 경우 에이전트를 cgroup v2를 지원하는 버전으로 업데이트합니다.
- cgroup v2를 구성하고 Pod 및 컨테이너 모니터링을 위한 독립 실행형 데몬 세트로 cAdvisor를 실행하는 경우 cAdvisor를 v0.43.0 이상으로 업데이트합니다.
Java 애플리케이션을 배포하는 경우 다음 패키지와 같이 cgroup v2를 완전히 지원하는 버전을 사용합니다.
- OpenJDK / HotSpot: jdk8u372, 11.0.16, 15 이상
- nodejs 20.3.0 이상
- IBM Semeru Runtimes: jdk8u345-b01, 11.0.16.0, 17.0.4.0, 18.0.2.0 이상
- IBM SDK Java Technology Edition 버전(IBM Java): 8.0.7.15 이상
8.6.1. Linux cgroup 구성
node.config
오브젝트를 편집하여 Linux 제어 그룹 버전 1 (cgroup v1) 또는 Linux 제어 그룹 버전 2 (cgroup v2)를 활성화할 수 있습니다. 기본값은 cgroup v2입니다.
Telco에서 PerformanceProfile
을 사용하여 짧은 대기 시간, 실시간 및 DPDK(Data Plane Development Kit) 워크로드를 사용하는 클러스터는 cgroup v2 지원 부족으로 인해 cgroups v1로 자동으로 되돌립니다. PerformanceProfile
을 사용하는 경우 cgroup v2를 활성화하는 것은 지원되지 않습니다.
사전 요구 사항
- 버전 4.12 이상을 사용하는 실행 중인 OpenShift Container Platform 클러스터가 있어야 합니다.
- 관리 권한이 있는 사용자로 클러스터에 로그인했습니다.
프로세스
노드에서 cgroup v1을 활성화합니다.
node.config
오브젝트를 편집합니다.$ oc edit nodes.config/cluster
spec.cgroupMode
매개변수를 편집합니다.node.config
오브젝트의 예apiVersion: config.openshift.io/v2 kind: Node metadata: annotations: include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" include.release.openshift.io/single-node-developer: "true" release.openshift.io/create-only: "true" creationTimestamp: "2022-07-08T16:02:51Z" generation: 1 name: cluster ownerReferences: - apiVersion: config.openshift.io/v2 kind: ClusterVersion name: version uid: 36282574-bf9f-409e-a6cd-3032939293eb resourceVersion: "1865" uid: 0c0f7a4c-4307-4187-b591-6155695ac85b spec: cgroupMode: "v1" 1 ...
- 1
- cgroup
v1
또는 cgroup v2의v2
를 활성화하려면 v1을 지정합니다.
검증
머신 구성에서 새 머신 구성이 추가되었는지 확인합니다.
$ oc get mc
출력 예
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 00-worker 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-master-container-runtime 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-master-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-worker-container-runtime 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-worker-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 97-master-generated-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 99-worker-generated-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 99-master-generated-registries 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 99-master-ssh 3.2.0 40m 99-worker-generated-registries 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 99-worker-ssh 3.2.0 40m rendered-master-23d4317815a5f854bd3553d689cfe2e9 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 10s 1 rendered-master-23e785de7587df95a4b517e0647e5ab7 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m rendered-worker-5d596d9293ca3ea80c896a1191735bb1 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m rendered-worker-dcc7f1b92892d34db74d6832bcc9ccd4 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 10s
- 1
- 예상대로 새 머신 구성이 생성됩니다.
새
kernelArguments
가 새 머신 구성에 추가되었는지 확인합니다.$ oc describe mc <name>
cgroup v2의 출력 예
apiVersion: machineconfiguration.openshift.io/v2 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker name: 05-worker-kernelarg-selinuxpermissive spec: kernelArguments: systemd_unified_cgroup_hierarchy=1 1 cgroup_no_v1="all" 2 psi=1 3
cgroup v1의 출력 예
apiVersion: machineconfiguration.openshift.io/v2 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker name: 05-worker-kernelarg-selinuxpermissive spec: kernelArguments: systemd.unified_cgroup_hierarchy=0 1 systemd.legacy_systemd_cgroup_controller=1 2
노드를 확인하여 노드의 스케줄링이 비활성화되어 있는지 확인합니다. 변경 사항이 적용 중임을 나타냅니다.
$ oc get nodes
출력 예
NAME STATUS ROLES AGE VERSION ci-ln-fm1qnwt-72292-99kt6-master-0 Ready,SchedulingDisabled master 58m v1.28.5 ci-ln-fm1qnwt-72292-99kt6-master-1 Ready master 58m v1.28.5 ci-ln-fm1qnwt-72292-99kt6-master-2 Ready master 58m v1.28.5 ci-ln-fm1qnwt-72292-99kt6-worker-a-h5gt4 Ready,SchedulingDisabled worker 48m v1.28.5 ci-ln-fm1qnwt-72292-99kt6-worker-b-7vtmd Ready worker 48m v1.28.5 ci-ln-fm1qnwt-72292-99kt6-worker-c-rhzkv Ready worker 48m v1.28.5
노드가
Ready
상태로 돌아간 후 해당 노드의 디버그 세션을 시작합니다.$ oc debug node/<node_name>
디버그 쉘 내에서
/host
를 root 디렉터리로 설정합니다.sh-4.4# chroot /host
sys/fs/cgroup/cgroup2fs
또는sys/fs/cgroup/tmpfs
파일이 노드에 있는지 확인합니다.$ stat -c %T -f /sys/fs/cgroup
cgroup v2의 출력 예
cgroup2fs
cgroup v1의 출력 예
tmpfs