2.9. vSphere에서 머신 세트 생성

VMware vSphere의 OpenShift Container Platform 클러스터에서 특정 목적을 충족하기 위해 다른 머신 세트를 만들 수 있습니다. 예를 들어, 지원되는 워크로드를 새 머신으로 이동할 수 있도록 인프라 머신 세트 및 관련 머신을 작성할 수 있습니다.

중요

머신 API가 작동하는 클러스터에서만 고급 머신 관리 및 스케일링 기능을 사용할 수 있습니다. 사용자 프로비저닝 인프라가 있는 클러스터에는 Machine API를 사용하려면 추가 검증 및 구성이 필요합니다.

인프라 플랫폼 유형의 클러스터가 Machine API를 사용할 수 없습니다. 이 제한은 클러스터에 연결된 컴퓨팅 시스템이 기능을 지원하는 플랫폼에 설치된 경우에도 적용됩니다. 이 매개변수는 설치 후 변경할 수 없습니다.

클러스터의 플랫폼 유형을 보려면 다음 명령을 실행합니다.

$ oc get infrastructure cluster -o jsonpath='{.status.platform}'

2.9.1. vSphere에서 머신 세트 사용자 정의 리소스의 샘플 YAML

이 샘플 YAML은 VMware vSphere에서 실행되는 머신 세트를 정의하고 node-role.kubernetes.io/<role>: ""로 레이블이 지정된 노드를 만듭니다.

이 샘플에서 <infrastructure_id>는 클러스터를 프로비저닝할 때 설정한 클러스터 ID를 기반으로 하는 인프라 ID 레이블이며 <role>은 추가할 노드 레이블입니다.

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  creationTimestamp: null
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
  name: <infrastructure_id>-<role> 2
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 3
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 4
  template:
    metadata:
      creationTimestamp: null
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
        machine.openshift.io/cluster-api-machine-role: <role> 6
        machine.openshift.io/cluster-api-machine-type: <role> 7
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 8
    spec:
      metadata:
        creationTimestamp: null
        labels:
          node-role.kubernetes.io/<role>: "" 9
      providerSpec:
        value:
          apiVersion: vsphereprovider.openshift.io/v1beta1
          credentialsSecret:
            name: vsphere-cloud-credentials
          diskGiB: 120
          kind: VSphereMachineProviderSpec
          memoryMiB: 8192
          metadata:
            creationTimestamp: null
          network:
            devices:
            - networkName: "<vm_network_name>" 10
          numCPUs: 4
          numCoresPerSocket: 1
          snapshot: ""
          template: <vm_template_name> 11
          userDataSecret:
            name: worker-user-data
          workspace:
            datacenter: <vcenter_datacenter_name> 12
            datastore: <vcenter_datastore_name> 13
            folder: <vcenter_vm_folder_path> 14
            resourcepool: <vsphere_resource_pool> 15
            server: <vcenter_server_ip> 16
1 3 5
클러스터를 프로비저닝할 때 설정한 클러스터 ID를 기반으로하는 인프라 ID를 지정합니다. OpenShift CLI (oc) 패키지가 설치되어 있으면 다음 명령을 실행하여 인프라 ID를 얻을 수 있습니다.
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 4 8
인프라 ID 및 노드 레이블을 지정합니다.
6 7 9
추가할 노드 레이블을 지정합니다.
10
컴퓨팅 머신 세트를 배포할 vSphere VM 네트워크를 지정합니다. 이 VM 네트워크는 다른 컴퓨팅 시스템이 클러스터에 상주하는 위치여야 합니다.
11
사용할 vSphere VM 템플릿 (예: user-5ddjd-rhcos)을 지정합니다.
12
컴퓨팅 머신 세트를 배포할 vCenter Datacenter를 지정합니다.
13
컴퓨팅 머신 세트를 배포할 vCenter Datastore를 지정합니다.
14
vCenter의 vSphere VM 폴더에 경로(예: /dc1/vm/user-inst-5ddjd)를 지정합니다.
15
VM의 vSphere 리소스 풀을 지정합니다.
16
vCenter 서버 IP 또는 정규화된 도메인 이름을 지정합니다.

2.9.2. 머신 세트 관리에 필요한 최소 vCenter 권한

vCenter의 OpenShift Container Platform 클러스터에서 머신 세트를 관리하려면 필요한 리소스를 읽고, 생성하고, 삭제할 수 있는 권한이 있는 계정을 사용해야 합니다. 필요한 모든 권한에 액세스할 수 있는 가장 간단한 방법은 글로벌 관리 권한이 있는 계정을 사용하는 것입니다.

글로벌 관리 권한이 있는 계정을 사용할 수 없는 경우 필요한 최소 권한을 부여하려면 역할을 생성해야 합니다. 다음 표에는 머신 세트를 생성, 스케일링, 삭제하고 OpenShift Container Platform 클러스터에서 머신을 삭제하는 데 필요한 최소 vCenter 역할 및 권한이 나열되어 있습니다.

예 2.1. 머신 세트 관리에 필요한 최소 vCenter 역할 및 권한

역할의 vSphere 개체필요한 경우필요한 권한

vSphere vCenter

Always

InventoryService.Tagging.AttachTag
InventoryService.Tagging.CreateCategory
InventoryService.Tagging.CreateTag
InventoryService.Tagging.DeleteTag
InventoryService.Tagging.Delete
Tag
InventoryService.Tagging.EditTag
InventoryService.Tagging.EditTag
InventoryService.Tagging.EditTagECDHESessions.ValidateSessionECDHEStorageProfile.Update1.ViewStorageProfile.View1

vSphere vCenter Cluster

Always

Resource.AssignVMToPool

vSphere Datastore

Always

Datastore.AllocateSpace
Datastore.Browse

vSphere Port Group

Always

Network.Assign

가상 머신 폴더

Always

VirtualMachine.Config.AddRemoveDevice
VirtualMachine.Config.AdvancedConfig
VirtualMachine.Config.Annotation
VirtualMachine.Config.CPUCount
VirtualMachine.Config.DiskExtend
VirtualMachine.Config.Memory
VirtualMachine.Config.Memory
VirtualMachine.>-<.PowerOff ECDHE VirtualMachine.Forwarded.PowerOn ECDHE VirtualMachine.CreateFromExisting Forwarded VirtualMachine.Delete knative VirtualMachine.Clone.Clone VirtualMachine.Config.DiskExtend
VirtualMachine.Config.MemoryExtend VirtualMachine.



vSphere vCenter Datacenter

설치 프로그램이 가상 머신 폴더를 생성하는 경우

Resource.AssignVMToPool
VirtualMachine.Provisioning.DeployTemplate

1 CSI(Container Storage Interface)를 사용하는 스토리지 백엔드에만 StorageProfile.UpdateStorageProfile.View 권한이 필요합니다.

중요

일부 CSI 드라이버 및 기능은 OpenShift Container Platform 4.10에서 기술 프리뷰에 있습니다. 자세한 내용은 OpenShift Container Platform에서 지원하는 CSI 드라이버를 참조하십시오.

다음 표에서는 시스템 세트 관리에 필요한 권한 및 전파 설정에 대해 자세히 설명합니다.

예 2.2. 필수 권한 및 권한 부여 설정

vSphere 오브젝트폴더 유형하위 항목으로 권한 부여권한 필요

vSphere vCenter

Always

필요하지 않음

나열된 필수 권한

vSphere vCenter Datacenter

기존 폴더

필요하지 않음

ReadOnly 권한

설치 프로그램은 폴더를 생성

필수 항목

나열된 필수 권한

vSphere vCenter Cluster

Always

필수 항목

나열된 필수 권한

vSphere vCenter Datastore

Always

필요하지 않음

나열된 필수 권한

vSphere Switch

Always

필요하지 않음

ReadOnly 권한

vSphere Port Group

Always

필요하지 않음

나열된 필수 권한

vSphere vCenter Virtual Machine Folder

기존 폴더

필수 항목

나열된 필수 권한

필요한 권한만으로 계정을 생성하는 방법에 대한 자세한 내용은 vSphere 문서에서 vSphere 권한 및 사용자 관리 작업을 참조하십시오.

추가 리소스

2.9.3. 컴퓨팅 머신 세트를 사용하는 사용자 프로비저닝 인프라가 있는 클러스터의 요구사항

사용자 프로비저닝 인프라가 있는 클러스터에서 컴퓨팅 머신 세트를 사용하려면 Machine API를 사용하여 클러스터 구성을 지원해야 합니다.

인프라 ID 가져오기

컴퓨팅 머신 세트를 생성하려면 클러스터의 인프라 ID를 제공할 수 있어야 합니다.

프로세스

  • 클러스터의 인프라 ID를 가져오려면 다음 명령을 실행합니다.

    $ oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'
vSphere 인증 정보 요구 사항 충족

컴퓨팅 머신 세트를 사용하려면 Machine API가 vCenter와 상호 작용할 수 있어야 합니다. Machine API 구성 요소가 vCenter와 상호 작용하도록 권한을 부여하는 인증 정보는 openshift-machine-api 네임스페이스의 시크릿에 있어야 합니다.

절차

  1. 필요한 인증 정보가 있는지 확인하려면 다음 명령을 실행합니다.

    $ oc get secret \
      -n openshift-machine-api vsphere-cloud-credentials \
      -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'

    샘플 출력

    <vcenter-server>.password=<openshift-user-password>
    <vcenter-server>.username=<openshift-user>

    여기서 < vcenter-server >는 vCenter 서버 및 < openshift-user >의 IP 주소 또는 정규화된 도메인 이름(FQDN)이고 < openshift-user-password >는 사용할 OpenShift Container Platform 관리자 자격 증명입니다.

  2. 시크릿이 없는 경우 다음 명령을 실행하여 시크릿을 생성합니다.

    $ oc create secret generic vsphere-cloud-credentials \
      -n openshift-machine-api \
      --from-literal=<vcenter-server>.username=<openshift-user> --from-literal=<vcenter-server>.password=<openshift-user-password>
Ignition 구성 요구 사항 충족

VM(가상 머신)을 프로비저닝하려면 유효한 Ignition 구성이 필요합니다. Ignition 구성에는 Machine Config Operator에서 추가 Ignition 구성을 가져오기 위한 machine-config-server 주소와 시스템 신뢰 번들이 포함되어 있습니다.

기본적으로 이 구성은 machine-api-operator 네임스페이스의 worker-user-data 시크릿에 저장됩니다. 컴퓨팅 머신 세트는 머신 생성 프로세스 중 시크릿을 참조합니다.

절차

  1. 필요한 보안이 존재하는지 확인하려면 다음 명령을 실행합니다.

    $ oc get secret \
      -n openshift-machine-api worker-user-data \
      -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'

    샘플 출력

    disableTemplating: false
    userData: 1
      {
        "ignition": {
          ...
          },
        ...
      }

    1
    전체 출력은 여기에서 생략되지만 이 형식이 있어야 합니다.
  2. 시크릿이 없는 경우 다음 명령을 실행하여 시크릿을 생성합니다.

    $ oc create secret generic worker-user-data \
      -n openshift-machine-api \
      --from-file=<installation_directory>/worker.ign

    여기서 <installation_directory >는 클러스터 설치 중에 설치 자산을 저장하는 데 사용된 디렉터리입니다.

2.9.4. 머신 세트 만들기

설치 프로그램에서 생성한 컴퓨팅 머신 세트 외에도 고유한 머신 세트를 생성하여 선택한 특정 워크로드의 머신 컴퓨팅 리소스를 동적으로 관리할 수 있습니다.

참고

사용자 프로비저닝 인프라로 설치된 클러스터에는 설치 프로그램에서 프로비저닝한 인프라가 있는 클러스터와 다른 네트워킹 스택이 있습니다. 이러한 차이로 인해 사용자가 프로비저닝한 인프라가 있는 클러스터에서 자동 로드 밸런서 관리가 지원되지 않습니다. 이러한 클러스터의 경우 컴퓨팅 머신 세트는 작업자인프라 유형 머신만 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터를 배포합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 oc에 로그인합니다.
  • vCenter 인스턴스에 가상 머신을 배포하는데 필요한 권한이 있고 지정된 데이터 저장소에 필요한 액세스 권한이 있습니다.
  • 클러스터에서 사용자 프로비저닝 인프라를 사용하는 경우 해당 구성에 대한 특정 Machine API 요구 사항을 충족할 수 있습니다.

절차

  1. 머신 세트 CR(사용자 지정 리소스) 샘플이 포함된 이름이 <file_name>.yaml인 새 YAML 파일을 만듭니다.

    <clusterID><role> 매개 변수 값을 설정해야 합니다.

  2. 선택 사항: 특정 필드에 설정할 값이 확실하지 않은 경우 클러스터에서 기존 컴퓨팅 머신 세트를 확인할 수 있습니다.

    1. 클러스터의 컴퓨팅 머신 세트를 나열하려면 다음 명령을 실행합니다.

      $ oc get machinesets -n openshift-machine-api

      출력 예

      NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
      agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1c   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1d   0         0                             55m
      agl030519-vplxk-worker-us-east-1e   0         0                             55m
      agl030519-vplxk-worker-us-east-1f   0         0                             55m

    2. 특정 컴퓨팅 머신 세트 CR(사용자 정의 리소스)의 값을 보려면 다음 명령을 실행합니다.

      $ oc get machineset <machineset_name> \
        -n openshift-machine-api -o yaml

      출력 예

      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      metadata:
        labels:
          machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
        name: <infrastructure_id>-<role> 2
        namespace: openshift-machine-api
      spec:
        replicas: 1
        selector:
          matchLabels:
            machine.openshift.io/cluster-api-cluster: <infrastructure_id>
            machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
        template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: <infrastructure_id>
              machine.openshift.io/cluster-api-machine-role: <role>
              machine.openshift.io/cluster-api-machine-type: <role>
              machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
          spec:
            providerSpec: 3
              ...

      1
      클러스터 인프라 ID입니다.
      2
      기본 노드 레이블입니다.
      참고

      사용자 프로비저닝 인프라가 있는 클러스터의 경우 컴퓨팅 머신 세트는 작업자 및 인프라 유형 머신만 생성할 수 있습니다.

      3
      컴퓨팅 머신 세트 CR의 &lt ;providerSpec > 섹션에 있는 값은 플랫폼에 따라 다릅니다. CR의 &lt ;providerSpec > 매개변수에 대한 자세한 내용은 공급자의 샘플 컴퓨팅 머신 세트 CR 구성을 참조하십시오.
    3. 사용자 프로비저닝 인프라가 있는 클러스터에 대한 컴퓨팅 머신 세트를 생성하는 경우 다음 중요한 값을 기록해 두십시오.

      vSphere providerSpec 값의 예

      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      ...
      template:
        ...
        spec:
          providerSpec:
            value:
              apiVersion: machine.openshift.io/v1beta1
              credentialsSecret:
                name: vsphere-cloud-credentials 1
              diskGiB: 120
              kind: VSphereMachineProviderSpec
              memoryMiB: 16384
              network:
                devices:
                  - networkName: "<vm_network_name>"
              numCPUs: 4
              numCoresPerSocket: 4
              snapshot: ""
              template: <vm_template_name> 2
              userDataSecret:
                name: worker-user-data 3
              workspace:
                datacenter: <vcenter_datacenter_name>
                datastore: <vcenter_datastore_name>
                folder: <vcenter_vm_folder_path>
                resourcepool: <vsphere_resource_pool>
                server: <vcenter_server_address> 4

      1
      필요한 vCenter 인증 정보가 포함된 openshift-machine-api 네임스페이스의 시크릿 이름입니다.
      2
      설치 중에 생성된 클러스터의 RHCOS VM 템플릿 이름입니다.
      3
      필요한 Ignition 구성 인증 정보가 포함된 openshift-machine-api 네임스페이스의 시크릿 이름입니다.
      4
      vCenter 서버의 IP 주소 또는 FQDN(정규화된 도메인 이름)입니다.
  3. 다음 명령을 실행하여 MachineSet CR을 생성합니다.

    $ oc create -f <file_name>.yaml

검증

  • 다음 명령을 실행하여 컴퓨팅 머신 세트 목록을 확인합니다.

    $ oc get machineset -n openshift-machine-api

    출력 예

    NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
    agl030519-vplxk-infra-us-east-1a    1         1         1       1           11m
    agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1c   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1d   0         0                             55m
    agl030519-vplxk-worker-us-east-1e   0         0                             55m
    agl030519-vplxk-worker-us-east-1f   0         0                             55m

    새 머신 세트가 사용 가능한 경우DESIREDCURRENT 값이 일치합니다. 머신 세트를 사용할 수 없는 경우 몇 분 후에 명령을 다시 실행합니다.