5.6. OpenStack에서 호스팅된 제어 평면 관리
Red Hat OpenStack Platform(RHOSP) 에이전트 머신에 호스팅된 제어 플레인을 배포한 후 다음 작업을 완료하여 호스팅된 클러스터를 관리할 수 있습니다.
5.6.1. 호스팅된 클러스터에 액세스 링크 복사링크가 클립보드에 복사되었습니다!
oc CLI를 사용하여 리소스에서 직접 kubeconfig 비밀을 추출하여 Red Hat OpenStack Platform(RHOSP)에서 호스팅되는 클러스터에 액세스할 수 있습니다.
호스팅 클러스터(호스팅) 네임스페이스에는 호스팅 클러스터 리소스와 액세스 비밀이 포함되어 있습니다. 호스팅된 제어 평면 네임스페이스는 호스팅된 제어 평면이 실행되는 곳입니다.
비밀 이름 형식은 다음과 같습니다.
-
kubeconfig비밀:<hosted_cluster_namespace>-<name>-admin-kubeconfig. 예를 들어,clusters-hypershift-demo-admin-kubeconfig. -
kubeadmin비밀번호:<hosted_cluster_namespace>-<name>-kubeadmin-password. 예를 들어,clusters-hypershift-demo-kubeadmin-password.
kubeconfig 비밀에는 Base64로 인코딩된 kubeconfig 필드가 포함되어 있습니다. kubeadmin 비밀번호도 Base64로 인코딩되어 있습니다. 이를 추출한 후 비밀번호를 사용하여 호스팅된 클러스터의 API 서버나 콘솔에 로그인할 수 있습니다.
사전 요구 사항
-
ocCLI가 설치되었습니다.
프로세스
다음 명령을 입력하여
admin-kubeconfig비밀번호를 추출합니다.$ oc extract -n <hosted_cluster_namespace> \ secret/<hosted_cluster_name>-admin-kubeconfig \ --to=./hostedcluster-secrets --confirm출력 예
hostedcluster-secrets/kubeconfig다음 명령을 입력하여 호스팅된 클러스터의 노드 목록을 보고 액세스를 확인하세요.
$ oc --kubeconfig ./hostedcluster-secrets/kubeconfig get nodes
5.6.2. 호스팅된 클러스터에 대한 노드 자동 크기 조정 활성화 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat OpenStack Platform(RHOSP)에서 호스팅되는 클러스터에 더 많은 용량이 필요하고 예비 에이전트를 사용할 수 있는 경우 자동 크기 조정을 활성화하여 새로운 워커 노드를 설치할 수 있습니다.
프로세스
자동 크기 조정을 활성화하려면 다음 명령을 입력하세요.
$ oc -n <hosted_cluster_namespace> patch nodepool <hosted_cluster_name> \ --type=json \ -p '[{"op": "remove", "path": "/spec/replicas"},{"op":"add", "path": "/spec/autoScaling", "value": { "max": 5, "min": 2 }}]'새로운 노드가 필요한 작업 부하를 만듭니다.
다음 예를 사용하여 워크로드 구성을 포함하는 YAML 파일을 만듭니다.
apiVersion: apps/v1 kind: Deployment metadata: labels: app: reversewords name: reversewords namespace: default spec: replicas: 40 selector: matchLabels: app: reversewords template: metadata: labels: app: reversewords spec: containers: - image: quay.io/mavazque/reversewords:latest name: reversewords resources: requests: memory: 2Gi-
workload-config.yaml이라는 이름으로 파일을 저장합니다. 다음 명령을 입력하여 YAML을 적용합니다.
$ oc apply -f workload-config.yaml
다음 명령을 입력하여
admin-kubeconfig비밀번호를 추출합니다.$ oc extract -n <hosted_cluster_namespace> \ secret/<hosted_cluster_name>-admin-kubeconfig \ --to=./hostedcluster-secrets --confirm출력 예
hostedcluster-secrets/kubeconfig다음 명령을 입력하여 새 노드가
준비상태인지 확인할 수 있습니다.$ oc --kubeconfig ./hostedcluster-secrets get nodes노드를 제거하려면 다음 명령을 입력하여 작업 부하를 삭제하세요.
$ oc --kubeconfig ./hostedcluster-secrets -n <namespace> \ delete deployment <deployment_name>추가 용량이 필요하지 않을 때까지 몇 분간 기다리세요. 다음 명령을 입력하면 노드가 제거되었는지 확인할 수 있습니다.
$ oc --kubeconfig ./hostedcluster-secrets get nodes
5.6.3. 가용성 영역에 대한 노드 풀 구성 링크 복사링크가 클립보드에 복사되었습니다!
여러 Red Hat OpenStack Platform(RHOSP) Nova 가용성 영역에 노드 풀을 분산하여 호스팅 클러스터의 고가용성을 개선할 수 있습니다.
가용성 영역은 반드시 장애 도메인과 일치하지 않으며 본질적으로 높은 가용성 이점을 제공하지 않습니다.
사전 요구 사항
- 호스팅된 클러스터를 생성했습니다.
- 관리 클러스터에 액세스할 수 있습니다.
-
hcp및ocCLI가 설치되었습니다.
프로세스
사용자의 필요에 맞는 환경 변수를 설정하세요. 예를 들어,
az1가용성 영역에 두 대의 추가 머신을 생성하려면 다음을 입력할 수 있습니다.$ export NODEPOOL_NAME="${CLUSTER_NAME}-az1" \ && export WORKER_COUNT="2" \ && export FLAVOR="m1.xlarge" \ && export AZ="az1"다음 명령을 입력하여 환경 변수를 사용하여 노드 풀을 만듭니다.
$ hcp create nodepool openstack \ --cluster-name <cluster_name> \ --name $NODEPOOL_NAME \ --replicas $WORKER_COUNT \ --openstack-node-flavor $FLAVOR \ --openstack-node-availability-zone $AZ다음과 같습니다.
<cluster_name>- 호스팅된 클러스터의 이름을 지정합니다.
다음 명령을 실행하여 클러스터 네임스페이스의
노드 풀리소스를 나열하여 노드 풀의 상태를 확인하세요.$ oc get nodepools --namespace clusters출력 예
NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE example example 5 5 False False 4.17.0 example-az1 example 2 False False True True Minimum availability requires 2 replicas, current 0 available다음 명령을 실행하여 호스팅된 클러스터에서 시작되는 메모를 확인하세요.
$ oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes출력 예
NAME STATUS ROLES AGE VERSION ... example-extra-az-zh9l5 Ready worker 2m6s v1.27.4+18eadca example-extra-az-zr8mj Ready worker 102s v1.27.4+18eadca ...다음 명령을 실행하여 노드 풀이 생성되었는지 확인하세요.
$ oc get nodepools --namespace clusters출력 예
NAME CLUSTER DESIRED CURRENT AVAILABLE PROGRESSING MESSAGE <node_pool_name> <cluster_name> 2 2 2 False All replicas are available
5.6.4. 노드 풀에 대한 추가 포트 구성 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV나 여러 네트워크와 같은 고급 네트워킹 시나리오를 지원하기 위해 노드 풀에 대한 추가 포트를 구성할 수 있습니다.
5.6.4.1. 노드 풀에 대한 추가 포트 사용 사례 링크 복사링크가 클립보드에 복사되었습니다!
노드 풀에 추가 포트를 구성하는 일반적인 이유는 다음과 같습니다.
- SR-IOV(단일 루트 I/O 가상화)
- 물리적 네트워크 장치가 여러 개의 가상 기능(VF)으로 나타나도록 합니다. 노드 풀에 추가 포트를 연결하면 워크로드에서 SR-IOV 인터페이스를 사용하여 지연 시간이 짧고 성능이 뛰어난 네트워킹을 구현할 수 있습니다.
- DPDK(데이터 플레인 개발 키트)
- 커널을 우회하여 사용자 공간에서 빠른 패킷 처리를 제공합니다. 추가 포트가 있는 노드 풀은 DPDK를 사용하여 네트워크 성능을 개선하는 워크로드에 대한 인터페이스를 노출할 수 있습니다.
- NFS의 마닐라 RWX 볼륨
-
NFS를 통한
ReadWriteMany(RWX) 볼륨을 지원하여 여러 노드가 공유 스토리지에 액세스할 수 있습니다. 노드 풀에 추가 포트를 연결하면 마닐라에서 사용하는 NFS 네트워크에 워크로드가 도달할 수 있습니다. - 멀투스 CNI
- 여러 네트워크 인터페이스에 포드를 연결할 수 있습니다. 추가 포트가 있는 노드 풀은 듀얼 스택 연결 및 트래픽 분리를 포함하여 보조 네트워크 인터페이스가 필요한 사용 사례를 지원합니다.
5.6.4.2. 노드 풀에 대한 추가 포트 옵션 링크 복사링크가 클립보드에 복사되었습니다!
--openstack-node-additional-port 플래그를 사용하면 OpenStack에서 호스팅된 클러스터의 노드에 추가 포트를 연결할 수 있습니다. 플래그는 쉼표로 구분된 매개변수 목록을 사용합니다. 매개변수를 여러 번 사용하여 여러 개의 추가 포트를 노드에 연결할 수 있습니다.
매개변수는 다음과 같습니다.
| 매개변수 | 설명 | 필수 항목 | 기본 |
|---|---|---|---|
|
| 노드에 연결할 네트워크의 ID입니다. | 제공됨 | 해당 없음 |
|
|
포트에 사용할 VNIC 유형입니다. 지정하지 않으면 Neutron은 기본 유형 | 없음 | 해당 없음 |
|
| 포트에 대한 포트 보안을 비활성화할지 여부입니다. 지정하지 않으면 Neutron은 네트워크 수준에서 명시적으로 비활성화하지 않는 한 포트 보안을 활성화합니다. | 없음 | 해당 없음 |
|
|
포트에 할당할 IP 주소 쌍 목록입니다. 형식은 | 없음 | 해당 없음 |
5.6.4.3. 노드 풀에 대한 추가 포트 생성 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat OpenStack Platform(RHOSP)에서 실행되는 호스팅 클러스터의 노드 풀에 대한 추가 포트를 구성할 수 있습니다.
사전 요구 사항
- 호스팅된 클러스터를 생성했습니다.
- 관리 클러스터에 액세스할 수 있습니다.
-
hcpCLI가 설치되었습니다. - RHOSP에서 추가 네트워크가 생성됩니다.
- 호스팅된 클러스터에서 사용되는 프로젝트는 추가 네트워크에 액세스할 수 있어야 합니다.
- "노드 풀에 대한 추가 포트 옵션"에 나열된 옵션을 검토했습니다.
프로세스
--openstack-node-additional-port옵션과 함께hcp create nodepool openstack명령을 실행하여 추가 포트가 연결된 호스팅 클러스터를 만듭니다. 예를 들면 다음과 같습니다.$ hcp create nodepool openstack \ --cluster-name <cluster_name> \ --name <nodepool_name> \ --replicas <replica_count> \ --openstack-node-flavor <flavor> \ --openstack-node-additional-port "network-id=<sriov_net_id>,vnic-type=direct,disable-port-security=true" \ --openstack-node-additional-port "network-id=<lb_net_id>,address-pairs:192.168.0.1-192.168.0.2"다음과 같습니다.
<cluster_name>- 호스팅된 클러스터의 이름을 지정합니다.
<nodepool_name>- 노드 풀의 이름을 지정합니다.
<replica_count>- 원하는 복제본 수를 지정합니다.
<flavor>- 사용할 RHOSP 플레이버를 지정합니다.
<sriov_net_id>- SR-IOV 네트워크 ID를 지정합니다.
<lb_net_id>- 로드 밸런서 네트워크 ID를 지정합니다.
5.6.5. 노드 풀에 대한 추가 포트 구성 링크 복사링크가 클립보드에 복사되었습니다!
클라우드 기반 네트워크 기능(CNF)과 같은 고성능 워크로드를 위해 RHOSP에서 호스팅된 클러스터 노드 성능을 조정할 수 있습니다. 성능 튜닝에는 RHOSP 리소스 구성, 성능 프로필 생성, 튜닝된 NodePool 리소스 배포, SR-IOV 장치 지원 활성화가 포함됩니다.
CNF는 클라우드 기반 환경에서 실행되도록 설계되었습니다. 라우팅, 방화벽, 부하 분산 등의 네트워크 서비스를 제공할 수 있습니다. 고성능 컴퓨팅 및 네트워킹 장치를 사용하여 CNF를 실행하도록 노드 풀을 구성할 수 있습니다.
5.6.5.1. 호스팅된 클러스터 노드의 성능 조정 링크 복사링크가 클립보드에 복사되었습니다!
성능 프로필을 만들고 조정된 NodePool 리소스를 배포하여 Red Hat OpenStack Platform(RHOSP) 호스팅 제어 평면에서 고성능 워크로드를 실행합니다.
사전 요구 사항
- 전용 CPU, 메모리, 호스트 집계 정보 등 워크로드를 실행하는 데 필요한 리소스를 갖춘 RHOSP 플레이버가 있습니다.
- SR-IOV 또는 DPDK 지원 NIC에 연결된 RHOSP 네트워크가 있습니다. 네트워크는 호스팅된 클러스터에서 사용하는 프로젝트에서 사용할 수 있어야 합니다.
프로세스
perfprofile.yaml이라는 파일에 요구 사항을 충족하는 성능 프로필을 만듭니다. 예를 들면 다음과 같습니다.구성 맵의 성능 프로필 예시
apiVersion: v1 kind: ConfigMap metadata: name: perfprof-1 namespace: clusters data: tuning: | apiVersion: v1 kind: ConfigMap metadata: name: cnf-performanceprofile namespace: "${HYPERSHIFT_NAMESPACE}" data: tuning: | apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: cnf-performanceprofile spec: additionalKernelArgs: - nmi_watchdog=0 - audit=0 - mce=off - processor.max_cstate=1 - idle=poll - intel_idle.max_cstate=0 - amd_iommu=on cpu: isolated: "${CPU_ISOLATED}" reserved: "${CPU_RESERVED}" hugepages: defaultHugepagesSize: "1G" pages: - count: ${HUGEPAGES} node: 0 size: 1G nodeSelector: node-role.kubernetes.io/worker: '' realTimeKernel: enabled: false globallyDisableIrqLoadBalancing: true중요HyperShift Operator 네임스페이스, 격리되고 예약된 CPU, 대규모 페이지 수에 대한 환경 변수가 아직 설정되지 않은 경우 성능 프로필을 적용하기 전에 이를 만듭니다.
다음 명령을 실행하여 성능 프로필 구성을 적용합니다.
$ oc apply -f perfprof.yaml-
클러스터 이름에 대한
CLUSTER_NAME환경 변수가 아직 설정되어 있지 않으면 해당 변수를 정의합니다. 다음 명령을 실행하여 노드 풀 이름 환경 변수를 설정합니다.
$ export NODEPOOL_NAME=$CLUSTER_NAME-cnf다음 명령을 실행하여 플레이버 환경 변수를 설정합니다.
$ export FLAVOR="m1.xlarge.nfv"다음 명령을 실행하여 성능 프로필을 사용하는 노드 풀을 만듭니다.
$ hcp create nodepool openstack \ --cluster-name $CLUSTER_NAME \ --name $NODEPOOL_NAME \ --node-count 0 \ --openstack-node-flavor $FLAVOR다음 명령을 실행하여
PerformanceProfile리소스를 참조하도록 노드 풀에 패치를 적용합니다.$ oc patch nodepool -n ${HYPERSHIFT_NAMESPACE} ${CLUSTER_NAME} \ -p '{"spec":{"tuningConfig":[{"name":"cnf-performanceprofile"}]}}' --type=merge다음 명령을 실행하여 노드 풀을 확장합니다.
$ oc scale nodepool/$CLUSTER_NAME --namespace ${HYPERSHIFT_NAMESPACE} --replicas=1노드가 준비될 때까지 기다리세요.
다음 명령을 실행하여 노드가 준비될 때까지 기다리세요.
$ oc wait --for=condition=UpdatingConfig=True nodepool \ -n ${HYPERSHIFT_NAMESPACE} ${CLUSTER_NAME} \ --timeout=5m다음 명령을 실행하여 구성 업데이트가 완료될 때까지 기다리세요.
$ oc wait --for=condition=UpdatingConfig=False nodepool \ -n ${HYPERSHIFT_NAMESPACE} ${CLUSTER_NAME} \ --timeout=30m다음 명령을 실행하여 모든 노드가 정상화될 때까지 기다리세요.
$ oc wait --for=condition=AllNodesHealthy nodepool \ -n ${HYPERSHIFT_NAMESPACE} ${CLUSTER_NAME} \ --timeout=5m
노드에 SSH 연결을 만들거나 oc debug 명령을 사용하여 성능 구성을 확인할 수 있습니다.
5.6.5.2. 호스팅된 클러스터에서 SR-IOV 네트워크 운영자 활성화 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV 네트워크 운영자가 NodePool 리소스에 의해 배포된 노드에서 SR-IOV 지원 장치를 관리하도록 설정할 수 있습니다. 운영자는 호스팅된 클러스터에서 실행되며 레이블이 지정된 작업자 노드가 필요합니다.
프로세스
다음 명령을 실행하여 호스팅된 클러스터에 대한
kubeconfig파일을 생성합니다.$ hcp create kubeconfig --name $CLUSTER_NAME > $CLUSTER_NAME-kubeconfig다음 명령을 실행하여
kubeconfig리소스 환경 변수를 만듭니다.$ export KUBECONFIG=$CLUSTER_NAME-kubeconfig다음 명령을 실행하여 SR-IOV 기능을 나타내도록 각 작업자 노드에 레이블을 지정합니다.
$ oc label node <worker_node_name> feature.node.kubernetes.io/network-sriov.capable=true다음과 같습니다.
<worker_node_name>- 호스팅된 클러스터의 워커 노드 이름을 지정합니다.
- "SR-IOV 네트워크 운영자 설치"의 지침에 따라 호스팅된 클러스터에 SR-IOV 네트워크 운영자를 설치합니다.
- 설치 후 독립 실행형 클러스터와 동일한 프로세스를 사용하여 호스팅된 클러스터에서 SR-IOV 워크로드를 구성합니다.