5장. 호스팅된 컨트롤 플레인 관리


5.1. AWS에서 호스팅된 제어 평면 관리

Amazon Web Services(AWS)에서 OpenShift Container Platform에 호스팅된 제어 평면을 사용하는 경우 인프라 요구 사항은 설정에 따라 달라집니다.

5.1.1. AWS 인프라 및 IAM 권한을 관리하기 위한 필수 조건

Amazon Web Services(AWS)에서 OpenShift Container Platform에 대한 호스팅 제어 평면을 구성하려면 다음 인프라 요구 사항을 충족해야 합니다.

  • 호스팅 클러스터를 생성하기 전에 호스팅 제어 평면을 구성해야 합니다.
  • AWS Identity and Access Management(IAM) 역할과 AWS Security Token Service(STS) 자격 증명을 생성했습니다.

5.1.1.1. AWS 인프라 요구 사항

Amazon Web Services(AWS)에서 호스팅된 제어 평면을 사용하는 경우 인프라 요구 사항은 다음 범주에 해당합니다.

  • 임의의 AWS 계정에서 HyperShift Operator를 위한 사전 요구 사항 및 관리되지 않는 인프라
  • 호스팅된 클러스터 AWS 계정의 필수 및 관리되지 않는 인프라
  • 관리 AWS 계정의 호스팅 제어 플레인 관리 인프라
  • 호스팅된 클러스터 AWS 계정의 호스팅 제어 플레인 관리 인프라
  • 호스팅된 클러스터 AWS 계정의 Kubernetes 관리 인프라

필수 조건은 호스팅된 제어 평면이 제대로 작동하려면 AWS 인프라가 필요하다는 것을 의미합니다. 관리되지 않는다는 것은 운영자나 관리자가 사용자를 위해 인프라를 생성하지 않는다는 것을 의미합니다.

5.1.1.2. AWS 계정의 HyperShift Operator에 대한 관리되지 않는 인프라

임의의 Amazon Web Services(AWS) 계정은 호스팅된 제어 평면 서비스 제공자에 따라 달라집니다.

자체 관리형 호스팅 제어 평면에서는 클러스터 서비스 공급자가 AWS 계정을 제어합니다. 클러스터 서비스 제공자는 클러스터 제어 평면을 호스팅하고 가동 시간에 대한 책임을 지는 관리자입니다. 관리형 호스팅 제어 평면에서 AWS 계정은 Red Hat에 속합니다.

HyperShift Operator의 필수 및 관리되지 않는 인프라에서 관리 클러스터 AWS 계정에 대한 다음 인프라 요구 사항이 적용됩니다.

  • S3 버킷 1개

    • OpenID Connect(OIDC)
  • 53번 국도 호스팅 구역

    • 호스팅된 클러스터에 대한 개인 및 공개 항목을 호스팅하는 도메인

5.1.1.3. 관리 AWS 계정에 대한 관리되지 않는 인프라 요구 사항

인프라가 호스팅 클러스터 Amazon Web Services(AWS) 계정에서 사전 요구되고 관리되지 않는 경우 모든 액세스 모드에 대한 인프라 요구 사항은 다음과 같습니다.

  • 하나의 VPC
  • 하나의 DHCP 옵션
  • 두 개의 서브넷

    • 내부 데이터 플레인 서브넷인 개인 서브넷
    • 데이터 플레인에서 인터넷에 액세스할 수 있도록 하는 공용 서브넷
  • 하나의 인터넷 게이트웨이
  • 하나의 탄력적 IP
  • 하나의 NAT 게이트웨이
  • 하나의 보안 그룹(워커 노드)
  • 두 개의 경로 테이블(하나는 비공개이고 하나는 공개)
  • 2개의 Route 53 호스팅 구역
  • 다음 품목에 대한 할당량이 충분합니다.

    • 공용 호스팅 클러스터를 위한 하나의 Ingress 서비스 로드 밸런서
    • 개인 호스팅 클러스터를 위한 하나의 개인 링크 엔드포인트
참고

개인 링크 네트워킹이 작동하려면 호스팅 클러스터 AWS 계정의 엔드포인트 영역이 관리 클러스터 AWS 계정의 서비스 엔드포인트에서 확인되는 인스턴스의 영역과 일치해야 합니다. AWS에서 영역 이름은 us-east-2b와 같은 별칭이며, 반드시 다른 계정의 동일한 영역에 매핑되는 것은 아닙니다. 결과적으로 개인 링크가 작동하려면 관리 클러스터에 해당 지역의 모든 영역에 서브넷이나 작업자가 있어야 합니다.

5.1.1.4. 관리 AWS 계정에 대한 인프라 요구 사항

인프라가 관리 AWS 계정의 호스팅된 제어 평면에 의해 관리되는 경우, 클러스터가 공개형, 비공개형 또는 이들의 조합형인지에 따라 인프라 요구 사항이 달라집니다.

공개 클러스터가 있는 계정의 경우 인프라 요구 사항은 다음과 같습니다.

  • 네트워크 로드 밸런서: Kube API 서버 로드 밸런서

    • 쿠버네티스는 보안 그룹을 생성합니다.
  • 볼륨

    • etcd의 경우(고가용성에 따라 1개 또는 3개)
    • OVN-Kube용

개인 클러스터가 있는 계정의 경우 인프라 요구 사항은 다음과 같습니다.

  • 네트워크 로드 밸런서: 로드 밸런서 개인 라우터
  • 엔드포인트 서비스(개인 링크)

공개 및 비공개 클러스터가 있는 계정의 경우 인프라 요구 사항은 다음과 같습니다.

  • 네트워크 로드 밸런서: 로드 밸런서 공용 라우터
  • 네트워크 로드 밸런서: 로드 밸런서 개인 라우터
  • 엔드포인트 서비스(개인 링크)
  • 볼륨

    • etcd의 경우(고가용성에 따라 1개 또는 3개)
    • OVN-Kube용

5.1.1.5. 호스팅 클러스터의 AWS 계정에 대한 인프라 요구 사항

인프라가 호스팅 클러스터 Amazon Web Services(AWS) 계정의 호스팅 제어 평면에서 관리되는 경우, 클러스터가 공개, 비공개 또는 조합인지에 따라 인프라 요구 사항이 달라집니다.

공개 클러스터가 있는 계정의 경우 인프라 요구 사항은 다음과 같습니다.

  • 노드 풀에는 RoleRolePolicy 가 정의된 EC2 인스턴스가 있어야 합니다.

개인 클러스터가 있는 계정의 경우 인프라 요구 사항은 다음과 같습니다.

  • 각 가용성 영역에 대한 하나의 개인 링크 엔드포인트
  • 노드 풀을 위한 EC2 인스턴스

공개 및 비공개 클러스터가 있는 계정의 경우 인프라 요구 사항은 다음과 같습니다.

  • 각 가용성 영역에 대한 하나의 개인 링크 엔드포인트
  • 노드 풀을 위한 EC2 인스턴스

5.1.1.6. 호스팅된 클러스터 AWS 계정의 Kubernetes 관리 인프라

Kubernetes가 호스팅된 클러스터 Amazon Web Services(AWS) 계정에서 인프라를 관리하는 경우 인프라 요구 사항은 다음과 같습니다.

  • 기본 Ingress를 위한 네트워크 로드 밸런서
  • 레지스트리를 위한 S3 버킷

5.1.2. ID 및 액세스 관리(IAM) 권한

호스팅된 제어 평면의 컨텍스트에서 소비자는 Amazon 리소스 이름(ARN) 역할을 생성할 책임이 있습니다. 소비자는 권한 파일을 생성하는 자동화된 프로세스입니다. 소비자는 CLI 또는 OpenShift 클러스터 관리자일 수 있습니다. 호스팅된 제어 평면은 최소 권한 구성 요소의 원칙을 존중하기 위해 세분성을 활성화할 수 있습니다. 즉, 각 구성 요소는 자체 역할을 사용하여 Amazon Web Services(AWS) 객체를 작동하거나 생성하고 해당 역할은 제품이 정상적으로 작동하는 데 필요한 것으로 제한됩니다.

호스팅된 클러스터는 ARN 역할을 입력으로 받고 소비자는 각 구성 요소에 대한 AWS 권한 구성을 만듭니다. 결과적으로 해당 구성 요소는 STS 및 사전 구성된 OIDC IDP를 통해 인증할 수 있습니다.

다음 역할은 제어 평면에서 실행되고 데이터 평면에서 작동하는 호스팅된 제어 평면의 일부 구성 요소에 의해 사용됩니다.

  • controlPlaneOperatorARN
  • imageRegistryARN
  • ingressARN
  • kubeCloudControllerARN
  • nodePoolManagementARN
  • storageARN
  • networkARN

다음 예제에서는 호스팅된 클러스터의 IAM 역할에 대한 참조를 보여줍니다.

...
endpointAccess: Public
  region: us-east-2
  resourceTags:
  - key: kubernetes.io/cluster/example-cluster-bz4j5
    value: owned
rolesRef:
    controlPlaneOperatorARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-control-plane-operator
    imageRegistryARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-openshift-image-registry
    ingressARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-openshift-ingress
    kubeCloudControllerARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-cloud-controller
    networkARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-cloud-network-config-controller
    nodePoolManagementARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-node-pool
    storageARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-aws-ebs-csi-driver-controller
type: AWS
...
Copy to Clipboard Toggle word wrap

호스팅된 제어 평면이 사용하는 역할은 다음 예에서 표시됩니다.

  • ingressARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "elasticloadbalancing:DescribeLoadBalancers",
                    "tag:GetResources",
                    "route53:ListHostedZones"
                ],
                "Resource": "\*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "route53:ChangeResourceRecordSets"
                ],
                "Resource": [
                    "arn:aws:route53:::PUBLIC_ZONE_ID",
                    "arn:aws:route53:::PRIVATE_ZONE_ID"
                ]
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • imageRegistryARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:CreateBucket",
                    "s3:DeleteBucket",
                    "s3:PutBucketTagging",
                    "s3:GetBucketTagging",
                    "s3:PutBucketPublicAccessBlock",
                    "s3:GetBucketPublicAccessBlock",
                    "s3:PutEncryptionConfiguration",
                    "s3:GetEncryptionConfiguration",
                    "s3:PutLifecycleConfiguration",
                    "s3:GetLifecycleConfiguration",
                    "s3:GetBucketLocation",
                    "s3:ListBucket",
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:DeleteObject",
                    "s3:ListBucketMultipartUploads",
                    "s3:AbortMultipartUpload",
                    "s3:ListMultipartUploadParts"
                ],
                "Resource": "\*"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • storageARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:AttachVolume",
                    "ec2:CreateSnapshot",
                    "ec2:CreateTags",
                    "ec2:CreateVolume",
                    "ec2:DeleteSnapshot",
                    "ec2:DeleteTags",
                    "ec2:DeleteVolume",
                    "ec2:DescribeInstances",
                    "ec2:DescribeSnapshots",
                    "ec2:DescribeTags",
                    "ec2:DescribeVolumes",
                    "ec2:DescribeVolumesModifications",
                    "ec2:DetachVolume",
                    "ec2:ModifyVolume"
                ],
                "Resource": "\*"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • networkARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:DescribeInstances",
                    "ec2:DescribeInstanceStatus",
                    "ec2:DescribeInstanceTypes",
                    "ec2:UnassignPrivateIpAddresses",
                    "ec2:AssignPrivateIpAddresses",
                    "ec2:UnassignIpv6Addresses",
                    "ec2:AssignIpv6Addresses",
                    "ec2:DescribeSubnets",
                    "ec2:DescribeNetworkInterfaces"
                ],
                "Resource": "\*"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • kubeCloudControllerARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "ec2:DescribeInstances",
                    "ec2:DescribeImages",
                    "ec2:DescribeRegions",
                    "ec2:DescribeRouteTables",
                    "ec2:DescribeSecurityGroups",
                    "ec2:DescribeSubnets",
                    "ec2:DescribeVolumes",
                    "ec2:CreateSecurityGroup",
                    "ec2:CreateTags",
                    "ec2:CreateVolume",
                    "ec2:ModifyInstanceAttribute",
                    "ec2:ModifyVolume",
                    "ec2:AttachVolume",
                    "ec2:AuthorizeSecurityGroupIngress",
                    "ec2:CreateRoute",
                    "ec2:DeleteRoute",
                    "ec2:DeleteSecurityGroup",
                    "ec2:DeleteVolume",
                    "ec2:DetachVolume",
                    "ec2:RevokeSecurityGroupIngress",
                    "ec2:DescribeVpcs",
                    "elasticloadbalancing:AddTags",
                    "elasticloadbalancing:AttachLoadBalancerToSubnets",
                    "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer",
                    "elasticloadbalancing:CreateLoadBalancer",
                    "elasticloadbalancing:CreateLoadBalancerPolicy",
                    "elasticloadbalancing:CreateLoadBalancerListeners",
                    "elasticloadbalancing:ConfigureHealthCheck",
                    "elasticloadbalancing:DeleteLoadBalancer",
                    "elasticloadbalancing:DeleteLoadBalancerListeners",
                    "elasticloadbalancing:DescribeLoadBalancers",
                    "elasticloadbalancing:DescribeLoadBalancerAttributes",
                    "elasticloadbalancing:DetachLoadBalancerFromSubnets",
                    "elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
                    "elasticloadbalancing:ModifyLoadBalancerAttributes",
                    "elasticloadbalancing:RegisterInstancesWithLoadBalancer",
                    "elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer",
                    "elasticloadbalancing:AddTags",
                    "elasticloadbalancing:CreateListener",
                    "elasticloadbalancing:CreateTargetGroup",
                    "elasticloadbalancing:DeleteListener",
                    "elasticloadbalancing:DeleteTargetGroup",
                    "elasticloadbalancing:DescribeListeners",
                    "elasticloadbalancing:DescribeLoadBalancerPolicies",
                    "elasticloadbalancing:DescribeTargetGroups",
                    "elasticloadbalancing:DescribeTargetHealth",
                    "elasticloadbalancing:ModifyListener",
                    "elasticloadbalancing:ModifyTargetGroup",
                    "elasticloadbalancing:RegisterTargets",
                    "elasticloadbalancing:SetLoadBalancerPoliciesOfListener",
                    "iam:CreateServiceLinkedRole",
                    "kms:DescribeKey"
                ],
                "Resource": [
                    "\*"
                ],
                "Effect": "Allow"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • nodePoolManagementARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "ec2:AllocateAddress",
                    "ec2:AssociateRouteTable",
                    "ec2:AttachInternetGateway",
                    "ec2:AuthorizeSecurityGroupIngress",
                    "ec2:CreateInternetGateway",
                    "ec2:CreateNatGateway",
                    "ec2:CreateRoute",
                    "ec2:CreateRouteTable",
                    "ec2:CreateSecurityGroup",
                    "ec2:CreateSubnet",
                    "ec2:CreateTags",
                    "ec2:DeleteInternetGateway",
                    "ec2:DeleteNatGateway",
                    "ec2:DeleteRouteTable",
                    "ec2:DeleteSecurityGroup",
                    "ec2:DeleteSubnet",
                    "ec2:DeleteTags",
                    "ec2:DescribeAccountAttributes",
                    "ec2:DescribeAddresses",
                    "ec2:DescribeAvailabilityZones",
                    "ec2:DescribeImages",
                    "ec2:DescribeInstances",
                    "ec2:DescribeInternetGateways",
                    "ec2:DescribeNatGateways",
                    "ec2:DescribeNetworkInterfaces",
                    "ec2:DescribeNetworkInterfaceAttribute",
                    "ec2:DescribeRouteTables",
                    "ec2:DescribeSecurityGroups",
                    "ec2:DescribeSubnets",
                    "ec2:DescribeVpcs",
                    "ec2:DescribeVpcAttribute",
                    "ec2:DescribeVolumes",
                    "ec2:DetachInternetGateway",
                    "ec2:DisassociateRouteTable",
                    "ec2:DisassociateAddress",
                    "ec2:ModifyInstanceAttribute",
                    "ec2:ModifyNetworkInterfaceAttribute",
                    "ec2:ModifySubnetAttribute",
                    "ec2:ReleaseAddress",
                    "ec2:RevokeSecurityGroupIngress",
                    "ec2:RunInstances",
                    "ec2:TerminateInstances",
                    "tag:GetResources",
                    "ec2:CreateLaunchTemplate",
                    "ec2:CreateLaunchTemplateVersion",
                    "ec2:DescribeLaunchTemplates",
                    "ec2:DescribeLaunchTemplateVersions",
                    "ec2:DeleteLaunchTemplate",
                    "ec2:DeleteLaunchTemplateVersions"
                ],
                "Resource": [
                    "\*"
                ],
                "Effect": "Allow"
            },
            {
                "Condition": {
                    "StringLike": {
                        "iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
                    }
                },
                "Action": [
                    "iam:CreateServiceLinkedRole"
                ],
                "Resource": [
                    "arn:*:iam::*:role/aws-service-role/elasticloadbalancing.amazonaws.com/AWSServiceRoleForElasticLoadBalancing"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "iam:PassRole"
                ],
                "Resource": [
                    "arn:*:iam::*:role/*-worker-role"
                ],
                "Effect": "Allow"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • controlPlaneOperatorARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:CreateVpcEndpoint",
                    "ec2:DescribeVpcEndpoints",
                    "ec2:ModifyVpcEndpoint",
                    "ec2:DeleteVpcEndpoints",
                    "ec2:CreateTags",
                    "route53:ListHostedZones"
                ],
                "Resource": "\*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "route53:ChangeResourceRecordSets",
                    "route53:ListResourceRecordSets"
                ],
                "Resource": "arn:aws:route53:::%s"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap

5.1.3. AWS 인프라와 IAM 리소스를 별도로 생성

기본적으로 hcp create cluster aws 명령은 호스팅된 클러스터로 클라우드 인프라를 생성하고 적용합니다. 클라우드 인프라 부분을 별도로 생성한 후 hcp create cluster aws 명령을 사용하여 클러스터만 생성하거나, 렌더링하여 적용하기 전에 수정할 수 있습니다.

클라우드 인프라 부분을 별도로 생성하려면 Amazon Web Services(AWS) 인프라를 생성하고, AWS Identity and Access(IAM) 리소스를 생성하고, 클러스터를 생성해야 합니다.

5.1.3.1. AWS 인프라를 별도로 생성

Amazon Web Services(AWS) 인프라를 생성하려면 클러스터에 대한 VPC(가상 사설 클라우드) 및 기타 리소스를 생성해야 합니다. AWS 콘솔이나 인프라 자동화 및 프로비저닝 도구를 사용할 수 있습니다. AWS 콘솔을 사용하는 방법에 대한 자세한 내용은 AWS 설명서에서 VPC 및 기타 VPC 리소스 만들기를 참조하세요.

VPC에는 외부 액세스를 위한 개인 및 공용 서브넷과 리소스(예: 네트워크 주소 변환(NAT) 게이트웨이 및 인터넷 게이트웨이)가 포함되어야 합니다. VPC 외에도 클러스터의 유입을 위한 개인 호스팅 영역이 필요합니다. PrivateLink( Private 또는 PublicAndPrivate 액세스 모드)를 사용하는 클러스터를 생성하는 경우 PrivateLink에 대한 추가 호스팅 영역이 필요합니다.

다음 예제 구성을 사용하여 호스팅된 클러스터에 대한 AWS 인프라를 만듭니다.

---
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: null
  name: clusters
spec: {}
status: {}
---
apiVersion: v1
data:
  .dockerconfigjson: xxxxxxxxxxx
kind: Secret
metadata:
  creationTimestamp: null
  labels:
    hypershift.openshift.io/safe-to-delete-with-cluster: "true"
  name: <pull_secret_name> 
1

  namespace: clusters
---
apiVersion: v1
data:
  key: xxxxxxxxxxxxxxxxx
kind: Secret
metadata:
  creationTimestamp: null
  labels:
    hypershift.openshift.io/safe-to-delete-with-cluster: "true"
  name: <etcd_encryption_key_name> 
2

  namespace: clusters
type: Opaque
---
apiVersion: v1
data:
  id_rsa: xxxxxxxxx
  id_rsa.pub: xxxxxxxxx
kind: Secret
metadata:
  creationTimestamp: null
  labels:
    hypershift.openshift.io/safe-to-delete-with-cluster: "true"
  name: <ssh-key-name> 
3

  namespace: clusters
---
apiVersion: hypershift.openshift.io/v1beta1
kind: HostedCluster
metadata:
  creationTimestamp: null
  name: <hosted_cluster_name> 
4

  namespace: clusters
spec:
  autoscaling: {}
  configuration: {}
  controllerAvailabilityPolicy: SingleReplica
  dns:
    baseDomain: <dns_domain> 
5

    privateZoneID: xxxxxxxx
    publicZoneID: xxxxxxxx
  etcd:
    managed:
      storage:
        persistentVolume:
          size: 8Gi
          storageClassName: gp3-csi
        type: PersistentVolume
    managementType: Managed
  fips: false
  infraID: <infra_id> 
6

  issuerURL: <issuer_url> 
7

  networking:
    clusterNetwork:
    - cidr: 10.132.0.0/14
    machineNetwork:
    - cidr: 10.0.0.0/16
    networkType: OVNKubernetes
    serviceNetwork:
    - cidr: 172.31.0.0/16
  olmCatalogPlacement: management
  platform:
    aws:
      cloudProviderConfig:
        subnet:
          id: <subnet_xxx> 
8

        vpc: <vpc_xxx> 
9

        zone: us-west-1b
      endpointAccess: Public
      multiArch: false
      region: us-west-1
      rolesRef:
        controlPlaneOperatorARN: arn:aws:iam::820196288204:role/<infra_id>-control-plane-operator
        imageRegistryARN: arn:aws:iam::820196288204:role/<infra_id>-openshift-image-registry
        ingressARN: arn:aws:iam::820196288204:role/<infra_id>-openshift-ingress
        kubeCloudControllerARN: arn:aws:iam::820196288204:role/<infra_id>-cloud-controller
        networkARN: arn:aws:iam::820196288204:role/<infra_id>-cloud-network-config-controller
        nodePoolManagementARN: arn:aws:iam::820196288204:role/<infra_id>-node-pool
        storageARN: arn:aws:iam::820196288204:role/<infra_id>-aws-ebs-csi-driver-controller
    type: AWS
  pullSecret:
    name: <pull_secret_name>
  release:
    image: quay.io/openshift-release-dev/ocp-release:4.16-x86_64
  secretEncryption:
    aescbc:
      activeKey:
        name: <etcd_encryption_key_name>
    type: aescbc
  services:
  - service: APIServer
    servicePublishingStrategy:
      type: LoadBalancer
  - service: OAuthServer
    servicePublishingStrategy:
      type: Route
  - service: Konnectivity
    servicePublishingStrategy:
      type: Route
  - service: Ignition
    servicePublishingStrategy:
      type: Route
  - service: OVNSbDb
    servicePublishingStrategy:
      type: Route
  sshKey:
    name: <ssh_key_name>
status:
  controlPlaneEndpoint:
    host: ""
    port: 0
---
apiVersion: hypershift.openshift.io/v1beta1
kind: NodePool
metadata:
  creationTimestamp: null
  name: <node_pool_name> 
10

  namespace: clusters
spec:
  arch: amd64
  clusterName: <hosted_cluster_name>
  management:
    autoRepair: true
    upgradeType: Replace
  nodeDrainTimeout: 0s
  platform:
    aws:
      instanceProfile: <instance_profile_name> 
11

      instanceType: m6i.xlarge
      rootVolume:
        size: 120
        type: gp3
      subnet:
        id: <subnet_xxx>
    type: AWS
  release:
    image: quay.io/openshift-release-dev/ocp-release:4.16-x86_64
  replicas: 2
status:
  replicas: 0
Copy to Clipboard Toggle word wrap
1
<pull_secret_name>을 풀 시크릿의 이름으로 바꾸세요.
2
<etcd_encryption_key_name>을 etcd 암호화 키의 이름으로 바꾸세요.
3
<ssh_key_name>을 SSH 키 이름으로 바꾸세요.
4
<hosted_cluster_name>을 호스팅 클러스터의 이름으로 바꾸세요.
5
<dns_domain>을 example.com 과 같은 기본 DNS 도메인으로 바꾸세요.
6
<infra_id>를 호스팅된 클러스터와 연결된 IAM 리소스를 식별하는 값으로 바꿉니다.
7
<issuer_url>을 infra_id 값으로 끝나는 발급자 URL로 바꾸세요. 예를 들어, https://example-hosted-us-west-1.s3.us-west-1.amazonaws.com/example-hosted-infra-id .
8
<subnet_xxx>를 서브넷 ID로 바꾸세요. 개인 서브넷과 공용 서브넷 모두에 태그가 지정되어야 합니다. 공용 서브넷의 경우 kubernetes.io/role/elb=1을 사용합니다. 개인 서브넷의 경우 kubernetes.io/role/internal-elb=1을 사용합니다.
9
<vpc_xxx>를 VPC ID로 바꾸세요.
10
<node_pool_name>을 NodePool 리소스의 이름으로 바꾸세요.
11
<instance_profile_name>을 AWS 인스턴스의 이름으로 바꾸세요.

5.1.3.2. AWS IAM 리소스 생성

Amazon Web Services(AWS)에서는 다음 IAM 리소스를 생성해야 합니다.

5.1.3.3. 호스팅 클러스터를 별도로 생성

Amazon Web Services(AWS)에서 호스팅 클러스터를 별도로 생성할 수 있습니다.

호스팅된 클러스터를 별도로 생성하려면 다음 명령을 입력하세요.

$ hcp create cluster aws \
    --infra-id <infra_id> \
1

    --name <hosted_cluster_name> \
2

    --sts-creds <path_to_sts_credential_file> \
3

    --pull-secret <path_to_pull_secret> \
4

    --generate-ssh \
5

    --node-pool-replicas 3
    --role-arn <role_name> 
6
Copy to Clipboard Toggle word wrap
1
<infra_id>를 create infra aws 명령에서 지정한 것과 동일한 ID로 바꾸세요. 이 값은 호스팅된 클러스터와 연결된 IAM 리소스를 식별합니다.
2
<hosted_cluster_name>을 호스팅 클러스터의 이름으로 바꾸세요.
3
<path_to_sts_credential_file>을 create infra aws 명령에서 지정한 것과 동일한 이름으로 바꾸세요.
4
<path_to_pull_secret>을 유효한 OpenShift Container Platform 풀 비밀이 포함된 파일 이름으로 바꾸세요.
5
--generate-ssh 플래그는 선택 사항이지만, 작업자에 SSH를 사용해야 하는 경우 포함하는 것이 좋습니다. SSH 키가 생성되어 호스팅된 클러스터와 동일한 네임스페이스에 비밀로 저장됩니다.
6
<role_name>을 Amazon 리소스 이름(ARN)으로 바꿉니다(예: arn:aws:iam::820196288204:role/myrole ). Amazon 리소스 이름(ARN)을 지정합니다(예: arn:aws:iam::820196288204:role/myrole ). ARN 역할에 대한 자세한 내용은 "IAM(ID 및 액세스 관리) 권한"을 참조하세요.

명령에 --render 플래그를 추가하고 클러스터에 적용하기 전에 리소스를 편집할 수 있는 파일로 출력을 리디렉션할 수도 있습니다.

명령을 실행하면 다음 리소스가 클러스터에 적용됩니다.

  • 네임스페이스
  • 당신의 풀 시크릿을 이용한 비밀
  • A HostedCluster
  • A NodePool
  • 제어 평면 구성 요소를 위한 세 가지 AWS STS 비밀
  • --generate-ssh 플래그를 지정한 경우 SSH 키 비밀 하나가 생성됩니다.

5.1.4. 단일 아키텍처에서 다중 아키텍처로 호스팅 클러스터 전환

Amazon Web Services(AWS)에서 단일 아키텍처 64비트 AMD 호스팅 클러스터를 다중 아키텍처 호스팅 클러스터로 전환하면 클러스터에서 워크로드를 실행하는 데 드는 비용을 줄일 수 있습니다. 예를 들어, 64비트 ARM으로 전환하는 동안 64비트 AMD에서 기존 워크로드를 실행할 수 있으며, 이러한 워크로드를 중앙 Kubernetes 클러스터에서 관리할 수 있습니다.

단일 아키텍처 호스팅 클러스터는 특정 CPU 아키텍처 하나만의 노드 풀을 관리할 수 있습니다. 하지만 다중 아키텍처 호스팅 클러스터는 서로 다른 CPU 아키텍처를 갖춘 노드 풀을 관리할 수 있습니다. AWS에서는 다중 아키텍처 호스팅 클러스터가 64비트 AMD와 64비트 ARM 노드 풀을 모두 관리할 수 있습니다.

사전 요구 사항

  • Kubernetes Operator용 멀티클러스터 엔진이 포함된 Red Hat Advanced Cluster Management(RHACM)에서 AWS용 OpenShift Container Platform 관리 클러스터를 설치했습니다.
  • OpenShift Container Platform 릴리스 페이로드의 64비트 AMD 변형을 사용하는 기존 단일 아키텍처 호스팅 클러스터가 있습니다.
  • OpenShift Container Platform 릴리스 페이로드의 동일한 64비트 AMD 변형을 사용하고 기존 호스팅 클러스터에서 관리되는 기존 노드 풀입니다.
  • 다음 명령줄 도구를 설치했는지 확인하세요.

    • oc
    • kubectl
    • hcp
    • skopeo

프로세스

  1. 다음 명령을 실행하여 단일 아키텍처 호스팅 클러스터의 기존 OpenShift Container Platform 릴리스 이미지를 검토하세요.

    $ oc get hostedcluster/<hosted_cluster_name> \
    1
    
      -o jsonpath='{.spec.release.image}'
    Copy to Clipboard Toggle word wrap
    1
    <hosted_cluster_name>을 호스팅 클러스터 이름으로 바꾸세요.

    출력 예

    quay.io/openshift-release-dev/ocp-release:<4.y.z>-x86_64 
    1
    Copy to Clipboard Toggle word wrap

    1
    <4.yz>를 사용하는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.
  2. OpenShift Container Platform 릴리스 이미지에서 태그 대신 다이제스트를 사용하는 경우 릴리스 이미지의 다중 아키텍처 태그 버전을 찾으세요.

    1. 다음 명령을 실행하여 OpenShift Container Platform 버전에 대한 OCP_VERSION 환경 변수를 설정합니다.

      $ OCP_VERSION=$(oc image info quay.io/openshift-release-dev/ocp-release@sha256:ac78ebf77f95ab8ff52847ecd22592b545415e1ff6c7ff7f66bf81f158ae4f5e \
        -o jsonpath='{.config.config.Labels["io.openshift.release"]}')
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 릴리스 이미지의 다중 아키텍처 태그 버전에 대한 MULTI_ARCH_TAG 환경 변수를 설정합니다.

      $ MULTI_ARCH_TAG=$(skopeo inspect docker://quay.io/openshift-release-dev/ocp-release@sha256:ac78ebf77f95ab8ff52847ecd22592b545415e1ff6c7ff7f66bf81f158ae4f5e \
        | jq -r '.RepoTags' | sed 's/"//g' | sed 's/,//g' \
        | grep -w "$OCP_VERSION-multi$" | xargs)
      Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 다중 아키텍처 릴리스 이미지 이름에 대한 IMAGE 환경 변수를 설정합니다.

      $ IMAGE=quay.io/openshift-release-dev/ocp-release:$MULTI_ARCH_TAG
      Copy to Clipboard Toggle word wrap
    4. 다중 아키텍처 이미지 다이제스트 목록을 보려면 다음 명령을 실행하세요.

      $ oc image info $IMAGE
      Copy to Clipboard Toggle word wrap

      출력 예

      OS            DIGEST
      linux/amd64   sha256:b4c7a91802c09a5a748fe19ddd99a8ffab52d8a31db3a081a956a87f22a22ff8
      linux/ppc64le sha256:66fda2ff6bd7704f1ba72be8bfe3e399c323de92262f594f8e482d110ec37388
      linux/s390x   sha256:b1c1072dc639aaa2b50ec99b530012e3ceac19ddc28adcbcdc9643f2dfd14f34
      linux/arm64   sha256:7b046404572ac96202d82b6cb029b421dddd40e88c73bbf35f602ffc13017f21
      Copy to Clipboard Toggle word wrap

  3. 호스팅된 클러스터를 단일 아키텍처에서 다중 아키텍처로 전환:

    1. 호스팅된 클러스터에 대해 다중 아키텍처 OpenShift Container Platform 릴리스 이미지를 설정하려면 호스팅된 클러스터와 동일한 OpenShift Container Platform 버전을 사용해야 합니다. 다음 명령을 실행합니다.

      $ oc patch -n clusters hostedclusters/<hosted_cluster_name> -p \
        '{"spec":{"release":{"image":"quay.io/openshift-release-dev/ocp-release:<4.x.y>-multi"}}}' \
      1
      
        --type=merge
      Copy to Clipboard Toggle word wrap
      1
      <4.yz>를 사용하는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.
    2. 다음 명령을 실행하여 호스팅된 클러스터에 다중 아키텍처 이미지가 설정되었는지 확인하세요.

      $ oc get hostedcluster/<hosted_cluster_name> \
        -o jsonpath='{.spec.release.image}'
      Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 HostedControlPlane 리소스의 상태가 진행 중인지 확인하세요.

    $ oc get hostedcontrolplane -n <hosted_control_plane_namespace> -oyaml
    Copy to Clipboard Toggle word wrap

    출력 예

    #...
      - lastTransitionTime: "2024-07-28T13:07:18Z"
        message: HostedCluster is deploying, upgrading, or reconfiguring
        observedGeneration: 5
        reason: Progressing
        status: "True"
        type: Progressing
    #...
    Copy to Clipboard Toggle word wrap

  5. 다음 명령을 실행하여 HostedCluster 리소스의 상태가 진행 중인지 확인하세요.

    $ oc get hostedcluster <hosted_cluster_name> \
      -n <hosted_cluster_namespace> -oyaml
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 실행하여 노드 풀이 HostedControlPlane 리소스에서 다중 아키텍처 릴리스 이미지를 사용하고 있는지 확인하세요.

    $ oc get hostedcontrolplane -n clusters-example -oyaml
    Copy to Clipboard Toggle word wrap

    출력 예

    #...
    version:
        availableUpdates: null
        desired:
          image: quay.io/openshift-release-dev/ocp-release:<4.x.y>-multi 
    1
    
          url: https://access.redhat.com/errata/RHBA-2024:4855
          version: 4.16.5
        history:
        - completionTime: "2024-07-28T13:10:58Z"
          image: quay.io/openshift-release-dev/ocp-release:<4.x.y>-multi
          startedTime: "2024-07-28T13:10:27Z"
          state: Completed
          verified: false
          version: <4.x.y>
    Copy to Clipboard Toggle word wrap

    1
    <4.yz>를 사용하는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.
    참고

    다중 아키텍처 OpenShift Container Platform 릴리스 이미지는 HostedCluster , HostedControlPlane 리소스 및 호스팅 제어 평면 Pod에서 업데이트됩니다. 하지만 릴리스 이미지 전환은 호스팅된 클러스터와 노드 풀 사이에서 분리되어 있기 때문에 기존 노드 풀은 다중 아키텍처 이미지와 함께 자동으로 전환되지 않습니다. 새로운 다중 아키텍처 호스팅 클러스터에 새 노드 풀을 만들어야 합니다.

다음 단계

  • 다중 아키텍처 호스팅 클러스터에서 노드 풀 생성

5.1.5. 다중 아키텍처 호스팅 클러스터에서 노드 풀 생성

호스팅된 클러스터를 단일 아키텍처에서 다중 아키텍처로 전환한 후 64비트 AMD 및 64비트 ARM 아키텍처를 기반으로 하는 컴퓨팅 머신에 노드 풀을 만듭니다.

프로세스

  1. 다음 명령을 입력하여 64비트 ARM 아키텍처를 기반으로 노드 풀을 만듭니다.

    $ hcp create nodepool aws \
      --cluster-name <hosted_cluster_name> \
    1
    
      --name <nodepool_name> \
    2
    
      --node-count=<node_count> \
    3
    
      --arch arm64
    Copy to Clipboard Toggle word wrap
    1
    <hosted_cluster_name>을 호스팅 클러스터 이름으로 바꾸세요.
    2
    <nodepool_name>을 노드 풀 이름으로 바꾸세요.
    3
    <node_count>를 노드 수에 해당하는 정수로 바꾸세요(예: 2 ).
  2. 다음 명령을 입력하여 64비트 AMD 아키텍처를 기반으로 노드 풀을 만듭니다.

    $ hcp create nodepool aws \
      --cluster-name <hosted_cluster_name> \
    1
    
      --name <nodepool_name> \
    2
    
      --node-count=<node_count> \
    3
    
      --arch amd64
    Copy to Clipboard Toggle word wrap
    1
    <hosted_cluster_name>을 호스팅 클러스터 이름으로 바꾸세요.
    2
    <nodepool_name>을 노드 풀 이름으로 바꾸세요.
    3
    <node_count>를 노드 수에 해당하는 정수로 바꾸세요(예: 2 ).

검증

  • 다음 명령을 입력하여 노드 풀이 다중 아키텍처 릴리스 이미지를 사용하고 있는지 확인하세요.

    $ oc get nodepool/<nodepool_name> -oyaml
    Copy to Clipboard Toggle word wrap

    64비트 AMD 노드 풀에 대한 출력 예

    #...
    spec:
      arch: amd64
    #...
      release:
        image: quay.io/openshift-release-dev/ocp-release:<4.x.y>-multi 
    1
    Copy to Clipboard Toggle word wrap

    1
    <4.yz>를 사용하는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.

    64비트 ARM 노드 풀에 대한 예제 출력

    #...
    spec:
      arch: arm64
    #...
      release:
        image: quay.io/openshift-release-dev/ocp-release:<4.x.y>-multi
    Copy to Clipboard Toggle word wrap

5.1.6. 호스팅된 클러스터에 대한 AWS 태그 추가 또는 업데이트

클러스터 인스턴스 관리자는 호스팅된 클러스터를 다시 만들지 않고도 Amazon Web Services(AWS) 태그를 추가하거나 업데이트할 수 있습니다. 태그는 관리 및 자동화를 위해 AWS 리소스에 첨부되는 키-값 쌍입니다.

다음과 같은 목적으로 태그를 사용할 수 있습니다.

  • 접근 제어 관리.
  • 환불 또는 쇼백 추적.
  • 클라우드 IAM 조건부 권한 관리.
  • 태그를 기준으로 리소스를 집계합니다. 예를 들어, 태그를 쿼리하여 리소스 사용량과 청구 비용을 계산할 수 있습니다.

EFS 액세스 포인트, 로드 밸런서 리소스, Amazon EBS 볼륨, IAM 사용자, AWS S3를 비롯한 여러 유형의 리소스에 대한 태그를 추가하거나 업데이트할 수 있습니다.

중요

네트워크 로드 밸런서에서는 태그를 추가하거나 업데이트할 수 없습니다. AWS 로드 밸런서는 HostedCluster 리소스에 있는 모든 태그를 조정합니다. 태그를 추가하거나 업데이트하려고 하면 로드 밸런서가 태그를 덮어씁니다.

또한 호스팅된 제어 평면에서 직접 생성된 기본 보안 그룹 리소스에서는 태그를 업데이트할 수 없습니다.

사전 요구 사항

  • AWS에서 호스팅된 클러스터에 대한 클러스터 관리자 권한이 있어야 합니다.

프로세스

  1. EFS 액세스 포인트에 대한 태그를 추가하거나 업데이트하려면 1단계와 2단계를 완료하세요. 다른 유형의 리소스에 대한 태그를 추가하거나 업데이트하는 경우 2단계만 완료하세요.

    1. aws-efs-csi-driver-operator 서비스 계정에서 다음 예와 같이 두 개의 주석을 추가합니다. 이러한 주석은 클러스터에서 실행되는 AWS EKS Pod ID 웹훅이 EFS 운영자가 사용하는 Pod에 AWS 역할을 올바르게 할당할 수 있도록 하는 데 필요합니다.

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: <service_account_name>
        namespace: <project_name>
        annotations:
          eks.amazonaws.com/role-arn:<role_arn>
          eks.amazonaws.com/audience:sts.amazonaws.com
      Copy to Clipboard Toggle word wrap
    2. Operator 포드를 삭제하거나 aws-efs-csi-driver-operator 배포를 다시 시작합니다.
  2. HostedCluster 리소스에서 다음 예와 같이 resourceTags 필드에 정보를 입력합니다.

    HostedCluster 리소스 예시

    apiVersion: hypershift.openshift.io/v1beta1
    kind: HostedCluster
    metadata:
      #...
    spec:
      autoscaling: {}
      clusterID: <cluster_id>
      configuration: {}
      controllerAvailabilityPolicy: SingleReplica
      dns:
        #...
      etcd:
        #...
      fips: false
      infraID: <infra_id>
      infrastructureAvailabilityPolicy: SingleReplica
      issuerURL: https://<issuer_url>.s3.<region>.amazonaws.com
      networking:
        #...
      olmCatalogPlacement: management
      platform:
        aws:
          #...
          resourceTags:
          - key: kubernetes.io/cluster/<tag> 
    1
    
            value: owned
          rolesRef:
            #...
        type: AWS
    Copy to Clipboard Toggle word wrap

1
리소스에 추가하려는 태그를 지정하세요.

5.1.7. AWS에서 노드 풀 용량 블록 구성

호스팅 클러스터를 만든 후 Amazon Web Services(AWS)에서 GPU(그래픽 처리 장치) 예약을 위한 노드 풀 용량 블록을 구성할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 AWS에서 GPU 예약을 생성합니다.

    중요

    GPU 예약 영역은 호스팅된 클러스터 영역과 일치해야 합니다.

    $ aws ec2 describe-capacity-block-offerings \
          --instance-type "p4d.24xlarge"\ 
    1
    
          --instance-count  "1" \ 
    2
    
          --start-date-range "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"  \ 
    3
    
          --end-date-range "$(date -u -d "2 day" +"%Y-%m-%dT%H:%M:%SZ")" \ 
    4
    
          --capacity-duration-hours 24 \ 
    5
    
          --output json
    Copy to Clipboard Toggle word wrap
    1
    AWS 인스턴스의 유형을 정의합니다(예: p4d.24xlarge ).
    2
    인스턴스 구매 수량을 정의합니다(예: 1 ). 유효한 값은 1 ~ 64 범위의 정수입니다.
    3
    시작 날짜 범위를 정의합니다(예: 2025-07-21T10:14:39Z) .
    4
    종료 날짜 범위를 정의합니다(예: 2025-07-22T10:16:36Z) .
    5
    용량 블록의 기간을 시간 단위로 정의합니다(예: 24 ).
  2. 다음 명령을 실행하여 최소 수수료 용량 블록을 구매하세요.

    $ aws ec2 purchase-capacity-block \
          --capacity-block-offering-id "${MIN_FEE_ID}" \ 
    1
    
          --instance-platform "Linux/UNIX"\ 
    2
    
          --tag-specifications 'ResourceType=capacity-reservation,Tags=[{Key=usage-cluster-type,Value=hypershift-hosted}]' \ 
    3
    
          --output json   > "${CR_OUTPUT_FILE}"
    Copy to Clipboard Toggle word wrap
    1
    용량 블록 제공의 ID를 정의합니다.
    2
    인스턴스의 플랫폼을 정의합니다.
    3
    인스턴스에 대한 태그를 정의합니다.
  3. 다음 명령을 실행하여 용량 예약 ID를 설정하는 환경 변수를 만듭니다.

    $ CB_RESERVATION_ID=$(jq -r '.CapacityReservation.CapacityReservationId' "${CR_OUTPUT_FILE}")
    Copy to Clipboard Toggle word wrap

    GPU 예약이 가능해질 때까지 몇 분간 기다리세요.

  4. 다음 명령을 실행하여 GPU 예약을 사용할 노드 풀을 추가합니다.

    $ hcp create nodepool aws \
      --cluster-name <hosted_cluster_name> \ 
    1
    
      --name <node_pool_name> \ 
    2
    
      --node-count 1 \ 
    3
    
      --instance-type p4d.24xlarge \ 
    4
    
      --arch amd64 \ 
    5
    
      --release-image <release_image> \ 
    6
    
      --render > /tmp/np.yaml
    Copy to Clipboard Toggle word wrap
    1
    & lt;hosted_cluster_name& gt;을 호스트된 클러스터 이름으로 바꿉니다.
    2
    <node_pool_name>을 노드 풀의 이름으로 바꾸세요.
    3
    노드 풀 수를 정의합니다(예: 1 ).
    4
    인스턴스 유형을 정의합니다(예: p4d.24xlarge) .
    5
    예를 들어 amd64 와 같은 아키텍처 유형을 정의합니다.
    6
    <release_image>를 사용하려는 릴리스 이미지로 바꾸세요.
  5. 다음 예제 구성을 사용하여 NodePool 리소스에 capacityReservation 설정을 추가합니다.

    # ...
    spec:
      arch: amd64
      clusterName: cb-np-hcp
      management:
        autoRepair: false
        upgradeType: Replace
      platform:
        aws:
          instanceProfile: cb-np-hcp-dqppw-worker
          instanceType: p4d.24xlarge
          rootVolume:
            size: 120
            type: gp3
          subnet:
            id: subnet-00000
          placement:
            capacityReservation:
              id: ${CB_RESERVATION_ID}
              marketType: CapacityBlocks
        type: AWS
    # ...
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 실행하여 노드 풀 구성을 적용합니다.

    $ oc apply -f /tmp/np.yaml
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 새 노드 풀이 성공적으로 생성되었는지 확인하세요.

    $ oc get np -n clusters
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE   NAME    CLUSTER     DESIRED NODES   CURRENT  NODES   AUTOSCALING     AUTOREPAIR   VERSION                               UPDATINGVERSION   UPDATINGCONFIG   MESSAGE
    clusters    cb-np   cb-np-hcp   1               1                False           False        4.20.0-0.nightly-2025-06-05-224220    False             False
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 호스팅된 클러스터에 새 컴퓨팅 노드가 생성되었는지 확인하세요.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                           STATUS   ROLES    AGE    VERSION
    ip-10-0-132-74.ec2.internal    Ready    worker   17m    v1.32.5
    ip-10-0-134-183.ec2.internal   Ready    worker   4h5m   v1.32.5
    Copy to Clipboard Toggle word wrap

5.1.7.1. 노드 풀 용량 블록을 구성한 후 호스팅된 클러스터 삭제

노드 풀 용량 블록을 구성한 후에는 선택적으로 호스팅된 클러스터를 삭제하고 HyperShift Operator를 제거할 수 있습니다.

프로세스

  1. 호스팅된 클러스터를 파괴하려면 다음 예제 명령을 실행하세요.

    $ hcp destroy cluster aws \
      --name cb-np-hcp \
      --aws-creds $HOME/.aws/credentials \
      --namespace clusters \
      --region us-east-2
    Copy to Clipboard Toggle word wrap
  2. HyperShift Operator를 제거하려면 다음 명령을 실행하세요.

    $ hcp install render --format=yaml | oc delete -f -
    Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat