4.9.17. GCP에 추가 작업자 시스템 생성

개별 인스턴스를 따로 시작하거나 자동 확장 그룹과 같은 클러스터 외부의 자동화된 프로세스를 통해 클러스터에서 사용할 작업자 시스템을 GCP(Google Cloud Platform)에 생성할 수 있습니다. OpenShift Container Platform의 기본 제공 클러스터 확장 메커니즘과 시스템 API를 활용할 수도 있습니다.

예에서는 Deployment Manager 템플릿을 사용하여 인스턴스 하나를 수동으로 시작합니다. 파일에 06_worker.py 유형의 추가 리소스를 포함시켜 추가 인스턴스를 시작할 수 있습니다.

참고

작업자 시스템을 생성하는 데 제공된 Deployment Manager 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.

사전 요구 사항

  • GCP 계정을 구성하십시오.
  • 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
  • GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
  • GCP에서 네트워킹 및 로드 밸랜서를 생성하고 구성하십시오.
  • 컨트롤 플레인 및 컴퓨팅 역할을 생성합니다.
  • 부트스트랩 시스템을 생성합니다.
  • 컨트롤 플레인 시스템을 생성합니다.

프로세스

  1. 이 항목의 작업자 시스템에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에 06_worker.py로 저장합니다. 이 템플릿에서 클러스터에 필요한 작업자 시스템을 설명합니다.
  2. 리소스 정의가 사용하는 변수를 내보냅니다.

    1. 컴퓨팅 시스템을 호스팅하는 서브넷을 내보냅니다.

      $ export COMPUTE_SUBNET=(`gcloud compute networks subnets describe ${INFRA_ID}-worker-subnet --region=${REGION} --format json | jq -r .selfLink`)
    2. 서비스 계정의 이메일 주소를 내보냅니다.

      $ export WORKER_SERVICE_ACCOUNT=(`gcloud iam service-accounts list --filter "email~^${INFRA_ID}-w@${PROJECT_NAME}." --format json | jq -r '.[0].email'`)
    3. 컴퓨팅 시스템 Ignition 구성 파일의 위치를 내보냅니다.

      $ export WORKER_IGNITION=`cat <installation_directory>/worker.ign`
  3. 06_worker.yaml 리소스 정의 파일을 생성합니다.

    $ cat <<EOF >06_worker.yaml
    imports:
    - path: 06_worker.py
    
    resources:
    - name: 'worker-0' 1
      type: 06_worker.py
      properties:
        infra_id: '${INFRA_ID}' 2
        zone: '${ZONE_0}' 3
        compute_subnet: '${COMPUTE_SUBNET}' 4
        image: '${CLUSTER_IMAGE}' 5
        machine_type: 'n1-standard-4' 6
        root_volume_size: '128'
        service_account_email: '${WORKER_SERVICE_ACCOUNT}' 7
        ignition: '${WORKER_IGNITION}' 8
    - name: 'worker-1'
      type: 06_worker.py
      properties:
        infra_id: '${INFRA_ID}' 9
        zone: '${ZONE_1}' 10
        compute_subnet: '${COMPUTE_SUBNET}' 11
        image: '${CLUSTER_IMAGE}' 12
        machine_type: 'n1-standard-4' 13
        root_volume_size: '128'
        service_account_email: '${WORKER_SERVICE_ACCOUNT}' 14
        ignition: '${WORKER_IGNITION}' 15
    EOF
    1
    name은 작업자 머신의 이름입니다(예: worker-0).
    2 9
    infra_id는 추출 단계에서 가져온 INFRA_ID 인프라 이름입니다.
    3 10
    zone은 작업자 시스템을 배포할 영역입니다(예: us-central1-a).
    4 11
    compute_subnet은 컴퓨팅 서브넷에 대한 selfLink URL입니다.
    5 12
    image는 RHCOS 이미지에 대한 selfLink URL입니다.
    6 13
    machine_type은 인스턴스의 시스템 유형입니다(예: n1-standard-4).
    7 14
    service_account_email은 사용자가 생성한 작업자 서비스 계정의 이메일 주소입니다.
    8 15
    ignitionworker.ign 파일의 내용입니다.
  4. 선택 사항: 추가 인스턴스를 시작하려면 06_worker. yaml 리소스 정의 파일에 06_worker. py 유형의 추가 리소스를 포함합니다.
  5. gcloud CLI를 사용하여 배포를 생성합니다.

    $ gcloud deployment-manager deployments create ${INFRA_ID}-worker --config 06_worker.yaml

4.9.17.1. 작업자 시스템에 대한 Deployment Manager 템플릿

다음 Deloyment Manager 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 작업자 시스템을 배포할 수 있습니다.

예 4.9. 06_worker.py Deployment Manager 템플릿

def GenerateConfig(context):

    resources = [{
        'name': context.properties['infra_id'] + '-' + context.env['name'],
        'type': 'compute.v1.instance',
        'properties': {
            'disks': [{
                'autoDelete': True,
                'boot': True,
                'initializeParams': {
                    'diskSizeGb': context.properties['root_volume_size'],
                    'sourceImage': context.properties['image']
                }
            }],
            'machineType': 'zones/' + context.properties['zone'] + '/machineTypes/' + context.properties['machine_type'],
            'metadata': {
                'items': [{
                    'key': 'user-data',
                    'value': context.properties['ignition']
                }]
            },
            'networkInterfaces': [{
                'subnetwork': context.properties['compute_subnet']
            }],
            'serviceAccounts': [{
                'email': context.properties['service_account_email'],
                'scopes': ['https://www.googleapis.com/auth/cloud-platform']
            }],
            'tags': {
                'items': [
                    context.properties['infra_id'] + '-worker',
                ]
            },
            'zone': context.properties['zone']
        }
    }]

    return {'resources': resources}