5.3. Linux 제어 그룹 버전 2(cgroups v2) 활성화
머신 구성을 사용하여 클러스터의 특정 노드에서 Linux 제어 그룹 버전 2 (cgroups v2)를 활성화할 수 있습니다. cgroups v2를 활성화하는 OpenShift Container Platform 프로세스는 모든 cgroups 버전 1 컨트롤러 및 계층을 비활성화합니다.
OpenShift Container Platform cgroups 버전 2 기능은 개발자 프리뷰에 있으며 현재 Red Hat에서 지원하지 않습니다.
사전 요구 사항
- 버전 4.10 이상을 사용하는 실행 중인 OpenShift Container Platform 클러스터가 있습니다.
- 관리 권한이 있는 사용자로 클러스터에 로그인했습니다.
구성하려는 노드의
node-role.kubernetes.io
값이 있습니다.$ oc describe node <node-name>
출력 예
Name: ci-ln-v05w5m2-72292-5s9ht-worker-a-r6fpg Roles: worker Labels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/instance-type=n1-standard-4 beta.kubernetes.io/os=linux failure-domain.beta.kubernetes.io/region=us-central1 failure-domain.beta.kubernetes.io/zone=us-central1-a kubernetes.io/arch=amd64 kubernetes.io/hostname=ci-ln-v05w5m2-72292-5s9ht-worker-a-r6fpg kubernetes.io/os=linux node-role.kubernetes.io/worker= 1 #...
- 1
- 이 값은 필요한 노드 역할입니다.
절차
노드에서 cgroup v2를 활성화합니다.
worker-cgroups-v2.yaml
과 같은 머신 구성 파일 YAML을 생성합니다.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: "worker" 1 name: worker-enable-cgroups-v2 spec: kernelArguments: - systemd.unified_cgroup_hierarchy=1 2 - cgroup_no_v1="all" 3
새 머신 구성을 생성합니다.
$ oc create -f worker-enable-cgroups-v2.yaml
머신 구성에서 새 구성이 추가되었는지 확인합니다.
$ oc get MachineConfig
출력 예
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 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-23e785de7587df95a4b517e0647e5ab7 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m rendered-worker-5d596d9293ca3ea80c896a1191735bb1 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m worker-enable-cgroups-v2 3.2.0 10s
노드에서 영향을 받는 각 노드의 스케줄링이 비활성화되어 있는지 확인합니다. 이는 변경 사항이 적용됨을 나타냅니다.
$ oc get nodes
출력 예
NAME STATUS ROLES AGE VERSION ci-ln-fm1qnwt-72292-99kt6-master-0 Ready master 58m v1.24.0 ci-ln-fm1qnwt-72292-99kt6-master-1 Ready master 58m v1.24.0 ci-ln-fm1qnwt-72292-99kt6-master-2 Ready master 58m v1.24.0 ci-ln-fm1qnwt-72292-99kt6-worker-a-h5gt4 Ready,SchedulingDisabled worker 48m v1.24.0 ci-ln-fm1qnwt-72292-99kt6-worker-b-7vtmd Ready worker 48m v1.24.0 ci-ln-fm1qnwt-72292-99kt6-worker-c-rhzkv Ready worker 48m v1.24.0
노드가
Ready
상태로 돌아간 후sys/fs/cgroup/cgroup/cgroup.controllers 파일이 노드에 있는지 확인하여 cgroup
v2가 활성화되어 있는지 확인할 수 있습니다. 이 파일은 cgroup v2에서 생성합니다.해당 노드의 디버그 세션을 시작합니다.
$ oc debug node/<node_name>
sys/fs/cgroup/cgroup.controllers
파일을 찾습니다. 이 파일이 있으면 해당 노드에서 cgroups v2가 활성화됩니다.출력 예
cgroup.controllers cgroup.stat cpuset.cpus.effective io.stat pids cgroup.max.depth cgroup.subtree_control cpuset.mems.effective kubepods.slice system.slice cgroup.max.descendants cgroup.threads init.scope memory.pressure user.slice cgroup.procs cpu.pressure io.pressure memory.stat
추가 리소스
- 설치 중에 cgroups v2 활성화에 대한 자세한 내용은 설치 프로세스의 설치 구성 매개 변수 섹션에 있는 선택적 매개변수 표를 참조하십시오.
5.3.1. 노드에 실시간 커널 추가
일부 OpenShift Container Platform 워크로드에는 높은 수준의 결정이 필요합니다. Linux는 실시간 운영 체제가 아니지만 Linux 실시간 커널에는 운영 체제에 실시간 기능을 제공하는 선점 형 스케줄러가 포함되어 있습니다.
OpenShift Container Platform 워크로드에 이러한 실시간 기능이 필요한 경우 머신을 Linux 실시간 커널로 전환할 수 있습니다. OpenShift Container Platform, 4.11의 경우 MachineConfig
객체를 사용하여 이 전환을 수행할 수 있습니다. 머신 구성 kernelType
설정을 realtime
으로 변경하는 것처럼 간단하지만 변경을 수행하기 전에 몇 가지 고려해야 할 사항이 있습니다.
- 현재 실시간 커널은 작업자 노드에서만 지원되며 RAN (Radio Access Network) 사용만 지원됩니다.
- 다음 단계는 Red Hat Enterprise Linux for Real Time 8에서 인증 된 시스템을 사용하는 베어 메탈 설치에 완전히 지원됩니다.
- OpenShift Container Platform에서 실시간 지원은 특정 서브스크립션으로 제한됩니다.
- 다음 단계는 Google Cloud Platform에서의 사용도 지원됩니다.
전제 조건
- 실행중인 OpenShift Container Platform 클러스터 (버전 4.4 이상)가 있어야합니다.
- 관리 권한이 있는 사용자로 클러스터에 로그인합니다.
절차
실시간 커널의 머신 구성을 만듭니다.
realtime
커널 유형의MachineConfig
개체가 포함된 YAML 파일 (예:99-worker-realtime.yaml
)을 만듭니다. 다음 예에서는 모든 작업자 노드에 대해 실시간 커널을 사용하도록 클러스터에 지시합니다.$ cat << EOF > 99-worker-realtime.yaml apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: "worker" name: 99-worker-realtime spec: kernelType: realtime EOF
머신 구성을 클러스터에 추가합니다. 다음을 입력하여 머신 구성을 클러스터에 추가합니다.
$ oc create -f 99-worker-realtime.yaml
실시간 커널을 확인합니다 : 영향을 받는 각 노드가 재부팅되면 클러스터에 로그인하고 다음 명령을 실행하여 실시간 커널이 구성된 노드 세트의 일반 커널을 대체하고 있는지 확인합니다.
$ oc get nodes
출력 예
NAME STATUS ROLES AGE VERSION ip-10-0-143-147.us-east-2.compute.internal Ready worker 103m v1.24.0 ip-10-0-146-92.us-east-2.compute.internal Ready worker 101m v1.24.0 ip-10-0-169-2.us-east-2.compute.internal Ready worker 102m v1.24.0
$ oc debug node/ip-10-0-143-147.us-east-2.compute.internal
출력 예
Starting pod/ip-10-0-143-147us-east-2computeinternal-debug ... To use host binaries, run `chroot /host` sh-4.4# uname -a Linux <worker_node> 4.18.0-147.3.1.rt24.96.el8_1.x86_64 #1 SMP PREEMPT RT Wed Nov 27 18:29:55 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
커널 이름에는
rt
및 "PREEMPT RT"라는 텍스트가 포함되어 이것이 실시간 커널임을 나타냅니다.일반 커널로 돌아가려면
MachineConfig
객체를 삭제합니다.$ oc delete -f 99-worker-realtime.yaml
5.3.2. journald 설정 구성
OpenShift Container Platform 노드에서 journald
서비스 설정을 구성해야하는 경우 적절한 구성 파일을 수정하고 해당 파일을 머신 구성으로 적절한 노드 풀에 전달하여 이를 수행할 수 있습니다.
이 프로세스에서는 /etc/systemd/journald.conf
파일에서 journald
속도 제한 설정을 수정하고 이를 작업자 노드에 적용하는 방법을 설명합니다. 해당 파일을 사용하는 방법에 대한 정보는 journald.conf
man 페이지를 참조하십시오.
사전 요구 사항
- 실행 중인 OpenShift Container Platform 클러스터가 있어야 합니다.
- 관리 권한이 있는 사용자로 클러스터에 로그인합니다.
절차
필요한 설정과 함께
/etc/systemd/journald.conf
파일을 포함하는 Butane 구성 파일40-worker-custom-journald.bu
를 만듭니다.참고Butane에 대한 자세한 내용은 “Butane 을 사용하여 머신 구성 생성”을 참조하십시오.
variant: openshift version: 4.11.0 metadata: name: 40-worker-custom-journald labels: machineconfiguration.openshift.io/role: worker storage: files: - path: /etc/systemd/journald.conf mode: 0644 overwrite: true contents: inline: | # Disable rate limiting RateLimitInterval=1s RateLimitBurst=10000 Storage=volatile Compress=no MaxRetentionSec=30s
Butane을 사용하여 작업자 노드로 전달할 구성이 포함된
MachineConfig
개체 파일40-worker-custom-journald.yaml
을 생성합니다.$ butane 40-worker-custom-journald.bu -o 40-worker-custom-journald.yaml
머신 구성을 풀에 적용합니다.
$ oc apply -f 40-worker-custom-journald.yaml
새 머신 구성이 적용되고 노드가 저하된 상태에 있는지 확인합니다. 이 작업을 수행하는 데 몇 분 정도 걸릴 수 있습니다. 각 노드에 새 머신 구성이 성공적으로 적용되어 작업자 풀에 진행중인 업데이트가 표시됩니다.
$ oc get machineconfigpool NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-35 True False False 3 3 3 0 34m worker rendered-worker-d8 False True False 3 1 1 0 34m
변경 사항이 적용되었는지 확인하려면 작업자 노드에 로그인합니다.
$ oc get node | grep worker ip-10-0-0-1.us-east-2.compute.internal Ready worker 39m v0.0.0-master+$Format:%h$ $ oc debug node/ip-10-0-0-1.us-east-2.compute.internal Starting pod/ip-10-0-141-142us-east-2computeinternal-debug ... ... sh-4.2# chroot /host sh-4.4# cat /etc/systemd/journald.conf # Disable rate limiting RateLimitInterval=1s RateLimitBurst=10000 Storage=volatile Compress=no MaxRetentionSec=30s sh-4.4# exit
추가 리소스
5.3.3. RHCOS에 확장 기능 추가
RHCOS는 모든 플랫폼에서 OpenShift Container Platform 클러스터에 공통적인 기능 세트를 제공하도록 설계된 최소한의 컨테이너 지향 RHEL 운영 체제입니다. RHCOS 시스템에 소프트웨어 패키지를 추가하는 것은 일반적으로 권장되지 않지만 MCO는 RHCOS 노드에 최소한의 기능 세트를 추가하는 데 사용할 수있는 extensions
기능을 제공합니다.
현재 다음 확장 기능을 사용할 수 있습니다.
-
usbguard:
usbguard
확장 기능을 추가하면 간섭적인 USB 장치의 공격으로부터 RHCOS 시스템을 보호합니다. 자세한 내용은 USBGuard를 참조하십시오. -
Kerberos :
kerberos
확장을 추가하면 사용자와 시스템이 네트워크에 대한 자신을 식별할 수 있는 메커니즘을 제공하여 관리자가 구성한 영역 및 서비스에 대한 정의로 제한된 액세스를 받을 수 있습니다. Kerberos 클라이언트를 설정하고 Kerberized NFS 공유를 마운트하는 방법을 포함하여 Kerberos 사용을 참조하십시오.
다음 프로세서에서는 머신 구성을 사용하여 RHCOS 노드에 하나 이상의 확장 기능을 추가하는 방법을 설명합니다.
사전 요구 사항
- 실행중인 OpenShift Container Platform 클러스터 (버전 4.6 이상)가 있어야합니다.
- 관리 권한이 있는 사용자로 클러스터에 로그인합니다.
절차
확장 기능을 위한 머신 구성을 만듭니다.
MachineConfig
extensions
개체를 포함하는 YAML 파일 (예 :80-extensions.yaml
)을 만듭니다. 이 예에서는 클러스터에usbguard
확장 기능을 추가하도록 지시합니다.$ cat << EOF > 80-extensions.yaml apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker name: 80-worker-extensions spec: config: ignition: version: 3.2.0 extensions: - usbguard EOF
머신 구성을 클러스터에 추가합니다. 다음을 입력하여 머신 구성을 클러스터에 추가합니다.
$ oc create -f 80-extensions.yaml
이렇게하면 모든 작업자 노드에
usbguard
의 rpm 패키지가 설치됩니다.확장 기능이 적용되었는지 확인합니다.
$ oc get machineconfig 80-worker-extensions
출력 예
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 80-worker-extensions 3.2.0 57s
새 머신 구성이 적용되고 노드가 저하된 상태에 있는지 확인합니다. 이 작업을 수행하는 데 몇 분 정도 걸릴 수 있습니다. 각 머신에 새 머신 구성이 성공적으로 적용되면 작업자 풀에 진행중인 업데이트가 표시됩니다.
$ oc get machineconfigpool
출력 예
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-35 True False False 3 3 3 0 34m worker rendered-worker-d8 False True False 3 1 1 0 34m
확장 기능을 확인합니다. 확장 기능이 적용되었는지 확인하려면 다음을 실행하십시오.
$ oc get node | grep worker
출력 예
NAME STATUS ROLES AGE VERSION ip-10-0-169-2.us-east-2.compute.internal Ready worker 102m v1.24.0
$ oc debug node/ip-10-0-169-2.us-east-2.compute.internal
출력 예
... To use host binaries, run `chroot /host` sh-4.4# chroot /host sh-4.4# rpm -q usbguard usbguard-0.7.4-4.el8.x86_64.rpm
5.3.4. 머신 구성 매니페스트에 사용자 정의 펌웨어 Blob 로드
/usr/lib
의 펌웨어 Blob의 기본 위치는 읽기 전용이므로 검색 경로를 업데이트하여 사용자 지정 펌웨어 Blob을 찾을 수 있습니다. 이를 통해 RHCOS에서 Blob을 관리하지 않는 경우 머신 구성 매니페스트에서 로컬 펌웨어 Blob을 로드할 수 있습니다.
절차
검색 경로를 업데이트하여 로컬 스토리지에 쓰기 가능한 Butane 구성 파일인
98-worker-firmware-blob.bu
를 생성합니다. 다음 예제에서는 로컬 워크스테이션의 사용자 지정 Blob 파일을/var/lib/firmware
아래에 있는 노드에 배치합니다.참고Butane에 대한 자세한 내용은 “Butane 을 사용하여 머신 구성 생성”을 참조하십시오.
사용자 정의 펌웨어 Blob용 Butane config 파일
variant: openshift version: 4.11.0 metadata: labels: machineconfiguration.openshift.io/role: worker name: 98-worker-firmware-blob storage: files: - path: /var/lib/firmware/<package_name> 1 contents: local: <package_name> 2 mode: 0644 3 openshift: kernel_arguments: - 'firmware_class.path=/var/lib/firmware' 4
- 1
- 펌웨어 패키지가 복사되는 노드에서 경로를 설정합니다.
- 2
- Butane을 실행하는 시스템의 로컬 파일 디렉터리에서 읽은 콘텐츠가 있는 파일을 지정합니다. 로컬 파일의 경로는
files-dir
디렉터리를 기준으로 하며, 다음 단계에서 Butane과 함께--files-dir
옵션을 사용하여 지정해야 합니다. - 3
- RHCOS 노드에서 파일에 대한 권한을 설정합니다.
0644
권한을 설정하는 것이 좋습니다. - 4
firmware_class.path
매개 변수는 로컬 워크스테이션에서 노드의 루트 파일 시스템으로 복사된 사용자 지정 펌웨어 Blob을 찾을 위치를 커널 검색 경로를 사용자 지정합니다. 이 예에서는 사용자 지정 경로로/var/lib/firmware
를 사용합니다.
Butane을 실행하여
98-worker-firmware-blob.yaml
이라는 로컬 워크스테이션에서 펌웨어 Blob 사본을 사용하는MachineConfig
오브젝트 파일을 생성합니다. 펌웨어 blob에는 노드에 전달할 구성이 포함되어 있습니다. 다음 예제에서는--files-dir
옵션을 사용하여 로컬 파일 또는 파일이 있는 워크스테이션의 디렉터리를 지정합니다.$ butane 98-worker-firmware-blob.bu -o 98-worker-firmware-blob.yaml --files-dir <directory_including_package_name>
다음 두 가지 방법 중 하나로 노드에 구성을 적용합니다.
-
클러스터가 아직 실행되지 않은 경우 매니페스트 파일을 생성한 후
<installation_directory>/openshift
디렉터리에MachineConfig
개체 파일을 추가한 다음 클러스터를 계속 작성합니다. 클러스터가 이미 실행중인 경우 다음과 같은 파일을 적용합니다.
$ oc apply -f 98-worker-firmware-blob.yaml
머신 구성을 완료하기 위해
MachineConfig
오브젝트 YAML 파일이 생성됩니다.
-
클러스터가 아직 실행되지 않은 경우 매니페스트 파일을 생성한 후
-
향후
MachineConfig
오브젝트를 업데이트해야 하는 경우 Butane 구성을 저장합니다.
추가 리소스