18장. 성능 프로필을 사용하여 낮은 대기 시간을 위한 호스팅 제어 평면 조정
성능 프로필을 적용하여 호스팅된 제어 평면을 낮은 지연 시간으로 조정합니다. 성능 프로필을 사용하면 인프라 및 애플리케이션 컨테이너의 CPU를 제한하고 지연에 민감한 프로세스에 대해 대규모 페이지, 하이퍼스레딩 및 CPU 파티션을 구성할 수 있습니다.
18.1. 호스팅된 제어 평면에 대한 성능 프로필 생성 링크 복사링크가 클립보드에 복사되었습니다!
PPC(Performance Profile Creator) 도구를 사용하여 클러스터 성능 프로필을 만들 수 있습니다. PPC는 노드 튜닝 연산자의 기능입니다.
PPC는 클러스터에 대한 정보와 사용자가 제공한 구성을 결합하여 하드웨어, 토폴로지, 사용 사례에 적합한 성능 프로필을 생성합니다.
다음은 클러스터에서 성능 프로필을 만들고 적용하기 위한 고급 워크플로입니다.
-
must-gather명령을 사용하여 클러스터에 대한 정보를 수집합니다. - PPC 도구를 사용하여 성과 프로필을 만듭니다.
- 클러스터에 성능 프로필을 적용합니다.
18.1.1. PPC에 대한 호스팅된 제어 평면 클러스터에 대한 데이터 수집 링크 복사링크가 클립보드에 복사되었습니다!
PPC(Performance Profile creator) 툴에는 must-gather 데이터가 필요합니다. 클러스터 관리자로서 must-gather 명령을 실행하여 클러스터에 대한 정보를 캡처합니다.
사전 요구 사항
-
관리 클러스터에 대한
클러스터 관리자역할 액세스 권한이 있습니다. -
OpenShift CLI(
oc)를 설치합니다.
프로세스
다음 명령을 실행하여 관리 클러스터
kubeconfig파일을 내보냅니다.$ export MGMT_KUBECONFIG=<path_to_mgmt_kubeconfig>다음 명령을 실행하여 모든 네임스페이스의 모든 노드 풀을 나열합니다.
$ oc --kubeconfig="$MGMT_KUBECONFIG" get np -A출력 예
NAMESPACE NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE clusters democluster-us-east-1a democluster 1 1 False False 4.17.0 False True-
출력에서는
NodePool리소스가 정의된 관리 클러스터의 네임스페이스클러스터가표시됩니다. -
NodePool리소스의 이름(예:demcluster-us-east-1a)입니다. -
이
NodePool이 속한HostedCluster입니다. 예를 들어,democluster.
-
출력에서는
관리 클러스터에서 다음 명령을 실행하여 사용 가능한 비밀을 나열합니다.
$ oc get secrets -n clusters출력 예
NAME TYPE DATA AGE builder-dockercfg-25qpp kubernetes.io/dockercfg 1 128m default-dockercfg-mkvlz kubernetes.io/dockercfg 1 128m democluster-admin-kubeconfig Opaque 1 127m democluster-etcd-encryption-key Opaque 1 128m democluster-kubeadmin-password Opaque 1 126m democluster-pull-secret Opaque 1 128m deployer-dockercfg-8lfpd kubernetes.io/dockercfg 1 128m다음 명령을 실행하여 호스팅된 클러스터의
kubeconfig파일을 추출합니다.$ oc get secret <secret_name> -n <cluster_namespace> -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig예
$ oc get secret democluster-admin-kubeconfig -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig호스팅된 클러스터에 대한
필수 수집번들을 생성하려면 별도의 터미널 창을 열고 다음 명령을 실행하세요.호스팅된 클러스터
kubeconfig파일을 내보냅니다.$ export HC_KUBECONFIG=<path_to_hosted_cluster_kubeconfig>예
$ export HC_KUBECONFIG=~/hostedcpkube/hosted-cluster-kubeconfig-
must-gather데이터를 저장하려는 디렉터리로 이동합니다. 호스팅된 클러스터에 대한 문제 해결 데이터를 수집하세요.
$ oc --kubeconfig="$HC_KUBECONFIG" adm must-gather작업 디렉토리에서 생성된
must-gather디렉토리에서 압축 파일을 만듭니다. 예를 들어 Linux 운영 체제를 사용하는 컴퓨터에서 다음 명령을 실행합니다.$ tar -czvf must-gather.tar.gz must-gather.local.1203869488012141147
18.1.2. Podman을 사용하여 호스팅된 클러스터에서 성능 프로필 생성기 실행 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 Podman을 Performance Profile Creator(PPC) 도구와 함께 사용하여 성능 프로필을 만들 수 있습니다.
PPC 인수에 대한 자세한 내용은 "성과 프로필 생성자 인수"를 참조하세요.
PPC 도구는 호스팅 클러스터를 인식하도록 설계되었습니다. 필수 수집 데이터에서 호스팅된 클러스터를 감지하면 자동으로 다음 작업을 수행합니다.
- MCP(머신 구성 풀)가 없다는 것을 인식합니다.
- MCP 대신 컴퓨팅 노드 구성의 진실의 원천으로 노드 풀을 사용합니다.
-
특정 풀을 타겟으로 삼지 않는 한,
node-pool-name값을 명시적으로 지정할 필요가 없습니다.
PPC는 호스팅된 클러스터에서 수집해야 하는 데이터를 사용하여 성능 프로필을 작성합니다. 성능 구성을 위한 노드의 레이블을 다시 지정하는 등 클러스터를 변경하는 경우 PPC를 다시 실행하기 전에 반드시 수집해야 하는 데이터를 다시 만들어야 합니다.
사전 요구 사항
-
cluster-admin역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. - 호스팅된 클러스터가 설치되었습니다.
-
Podman과 OpenShift CLI(
oc) 설치. - 노드 튜닝 운영자 이미지에 액세스합니다.
-
클러스터에
필요한 필수데이터에 액세스합니다.
프로세스
호스팅된 클러스터에서 다음 명령을 실행하여 Podman을 사용하여
registry.redhat.io에 인증합니다.$ podman login registry.redhat.ioUsername: <user_name> Password: <password>다음 명령을 실행하여 호스팅된 클러스터에서 성능 프로필을 만듭니다. 이 예제에서는 샘플 PPC 인수와 값을 사용합니다.
$ podman run --entrypoint performance-profile-creator \ -v /path/to/must-gather:/must-gather:z \1 registry.redhat.io/openshift4/ose-cluster-node-tuning-rhel9-operator:v4.19 \ --must-gather-dir-path /must-gather \ --reserved-cpu-count=2 \2 --rt-kernel=false \3 --split-reserved-cpus-across-numa=false \4 --topology-manager-policy=single-numa-node \5 --node-pool-name=democluster-us-east-1a \ --power-consumption-mode=ultra-low-latency \6 --offlined-cpu-count=1 \7 > my-hosted-cp-performance-profile.yaml출력 예
level=info msg="Nodes names targeted by democluster-us-east-1a pool are: ip-10-0-129-110.ec2.internal " level=info msg="NUMA cell(s): 1" level=info msg="NUMA cell 0 : [0 2 1 3]" level=info msg="CPU(s): 4" level=info msg="2 reserved CPUs allocated: 0,2 " level=info msg="1 isolated CPUs allocated: 1" level=info msg="Additional Kernel Args based on configuration: []다음 명령을 실행하여 생성된 YAML 파일을 검토하세요.
$ cat my-hosted-cp-performance-profile출력 예
--- apiVersion: v1 data: tuning: | apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: creationTimestamp: null name: performance spec: cpu: isolated: "1" offlined: "3" reserved: 0,2 net: userLevelNetworking: false nodeSelector: node-role.kubernetes.io/worker: "" numa: topologyPolicy: single-numa-node realTimeKernel: enabled: false workloadHints: highPowerConsumption: true perPodPowerManagement: false realTime: true status: {} kind: ConfigMap metadata: name: performance namespace: clusters
18.1.3. 호스팅된 클러스터에서 저지연 튜닝 구성 링크 복사링크가 클립보드에 복사되었습니다!
호스팅된 클러스터의 노드에서 성능 프로필로 낮은 대기 시간을 설정하려면 노드 튜닝 연산자를 사용할 수 있습니다. 호스팅된 컨트롤 플레인에서는 Tuned 오브젝트가 포함된 구성 맵을 생성하고 노드 풀에 해당 구성 맵을 참조하여 노드 튜닝을 구성할 수 있습니다. 이 경우 조정된 개체는 노드 풀의 노드에 적용하려는 성능 프로필을 정의하는 PerformanceProfile 개체입니다.
프로세스
다음 명령을 실행하여 관리 클러스터
kubeconfig파일을 내보냅니다.$ export MGMT_KUBECONFIG=<path_to_mgmt_kubeconfig>다음 명령을 실행하여 관리 클러스터에
ConfigMap객체를 만듭니다.$ oc --kubeconfig="$MGMT_KUBECONFIG" apply -f my-hosted-cp-performance-profile.yaml다음 명령을 실행하여
클러스터네임스페이스의NodePool객체를 편집하여spec.tuningConfig필드와 해당 필드에 생성된 성능 프로필의 이름을 추가합니다.$ oc edit np -n clustersapiVersion: hypershift.openshift.io/v1beta1 kind: NodePool metadata: annotations: hypershift.openshift.io/nodePoolCurrentConfig: 2f752a2c hypershift.openshift.io/nodePoolCurrentConfigVersion: 998aa3ce hypershift.openshift.io/nodePoolPlatformMachineTemplate: democluster-us-east-1a-3dff55ec creationTimestamp: "2025-04-09T09:41:55Z" finalizers: - hypershift.openshift.io/finalizer generation: 1 labels: hypershift.openshift.io/auto-created-for-infra: democluster name: democluster-us-east-1a namespace: clusters ownerReferences: - apiVersion: hypershift.openshift.io/v1beta1 kind: HostedCluster name: democluster uid: af77e390-c289-433c-9d29-3aee8e5dc76f resourceVersion: "53056" uid: 11efa47c-5a7b-476c-85cf-a274f748a868 spec: tuningConfig: - name: performance arch: amd64 clusterName: democluster management:참고여러 노드 풀에서 동일한 프로필을 참조할 수 있습니다. 호스팅된 컨트롤 플레인에서 Node Tuning Operator는 노드 풀 이름과 네임스페이스의 해시를 Tuned CR 이름에 추가하여 구별합니다. 변경 사항을 적용한 후 시스템은 구성 변경이 필요하다는 것을 감지하고 해당 풀의 노드에 대한 롤링 업데이트를 시작하여 새 구성을 적용합니다.
검증
다음 명령을 실행하여 모든 네임스페이스의 모든 노드 풀을 나열합니다.
$ oc --kubeconfig="$MGMT_KUBECONFIG" get np -A출력 예
NAMESPACE NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE clusters democluster-us-east-1a democluster 1 1 False False 4.17.0 False True참고UPDATINGCONFIG필드는 노드 풀이 구성을 업데이트하는 중인지 여부를 나타냅니다. 이 업데이트 중에 노드 풀 상태의UPDATINGCONFIG필드가True가됩니다. 새로운 구성은UPDATINGCONFIG필드가False로 반환될 때만 완전히 적용된 것으로 간주됩니다.다음 명령을 실행하여
clusters-democluster네임스페이스의 모든 구성 맵을 나열합니다.$ oc --kubeconfig="$MGMT_KUBECONFIG" get cm -n clusters-democluster출력 예
NAME DATA AGE aggregator-client-ca 1 69m auth-config 1 68m aws-cloud-config 1 68m aws-ebs-csi-driver-trusted-ca-bundle 1 66m ... 1 67m kubelet-client-ca 1 69m kubeletconfig-performance-democluster-us-east-1a 1 22m ... ovnkube-identity-cm 2 66m performance-democluster-us-east-1a 1 22m ... tuned-performance-democluster-us-east-1a 1 22m출력에서는 kubeletconfig
kubeletconfig-performance-democluster-us-east-1a와 성능 프로필performance-democluster-us-east-1a가생성되었음을 보여줍니다. 노드 튜닝 운영자는튜닝된객체를 호스팅된 클러스터에 동기화합니다. 정의된 Tuned 오브젝트와 각 노드에 적용되는 TuneD 프로필을 확인할 수 있습니다.다음 명령을 실행하여 관리 클러스터에서 사용 가능한 비밀을 나열합니다.
$ oc get secrets -n clusters출력 예
NAME TYPE DATA AGE builder-dockercfg-25qpp kubernetes.io/dockercfg 1 128m default-dockercfg-mkvlz kubernetes.io/dockercfg 1 128m democluster-admin-kubeconfig Opaque 1 127m democluster-etcd-encryption-key Opaque 1 128m democluster-kubeadmin-password Opaque 1 126m democluster-pull-secret Opaque 1 128m deployer-dockercfg-8lfpd kubernetes.io/dockercfg 1 128m다음 명령을 실행하여 호스팅된 클러스터의
kubeconfig파일을 추출합니다.$ oc get secret <secret_name> -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig예
$ oc get secret democluster-admin-kubeconfig -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig다음 명령을 실행하여 호스팅된 클러스터 kubeconfig를 내보냅니다.
$ export HC_KUBECONFIG=<path_to_hosted-cluster-kubeconfig>다음 명령을 실행하여 kubeletconfig가 호스팅된 클러스터에 미러링되었는지 확인하세요.
$ oc --kubeconfig="$HC_KUBECONFIG" get cm -n openshift-config-managed | grep kubelet출력 예
kubelet-serving-ca 1 79m kubeletconfig-performance-democluster-us-east-1a 1 15m다음 명령을 실행하여 호스팅된 클러스터에
단일 numa 노드정책이 설정되었는지 확인하세요.$ oc --kubeconfig="$HC_KUBECONFIG" get cm kubeletconfig-performance-democluster-us-east-1a -o yaml -n openshift-config-managed | grep single출력 예
topologyManagerPolicy: single-numa-node