6.11.15. GCP에 컨트롤 플레인 시스템 생성
클러스터에서 사용할 컨트롤 플레인 시스템을 GCP(Google Cloud Platform)에 생성해야 합니다. 이러한 시스템을 생성하는 한 가지 방법은 제공된 Deployment Manager 템플릿을 수정하는 것입니다.
컨트롤 플레인 시스템을 생성하는 데 제공된 Deployment Manager 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
- GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
- GCP에서 네트워킹 및 로드 밸랜서를 생성하고 구성하십시오.
- 컨트롤 플레인 및 컴퓨팅 역할을 생성합니다.
- 부트스트랩 시스템을 생성합니다.
프로세스
-
이 항목의 컨트롤 플레인 시스템에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에
05_control_plane.py
로 저장합니다. 이 템플릿은 클러스터에 필요한 컨트롤 플레인 시스템을 설명합니다. 리소스 정의에 필요한 다음 변수를 내보냅니다.
$ export MASTER_IGNITION=`cat <installation_directory>/master.ign`
05_control_plane.yaml
리소스 정의 파일을 생성합니다.$ cat <<EOF >05_control_plane.yaml imports: - path: 05_control_plane.py resources: - name: cluster-control-plane type: 05_control_plane.py properties: infra_id: '${INFRA_ID}' 1 zones: 2 - '${ZONE_0}' - '${ZONE_1}' - '${ZONE_2}' control_subnet: '${CONTROL_SUBNET}' 3 image: '${CLUSTER_IMAGE}' 4 machine_type: 'n1-standard-4' 5 root_volume_size: '128' service_account_email: '${MASTER_SERVICE_ACCOUNT}' 6 ignition: '${MASTER_IGNITION}' 7 EOF
- 1
infra_id
는 추출 단계에서 가져온INFRA_ID
인프라 이름입니다.- 2
zones
은 컨트롤 플레인 인스턴스를 배포할 영역입니다(예:us-central1-a
,us-central1-b
,us-central1-c)
.- 3
control_subnet
은 컨트롤 서브넷에 대한selfLink
URL입니다.- 4
image
는 RHCOS 이미지에 대한selfLink
URL입니다.- 5
machine_type
은 인스턴스의 시스템 유형입니다(예:n1-standard-4)
.- 6
service_account_email
은 사용자가 생성한 마스터 서비스 계정의 이메일 주소입니다.- 7
ignition
은master.ign
파일의 내용입니다.
gcloud
CLI를 사용하여 배포를 생성합니다.$ gcloud deployment-manager deployments create ${INFRA_ID}-control-plane --config 05_control_plane.yaml
Deployment Manager의 제한으로 인해 템플릿을 통해 로드 밸랜서 멤버십이 관리되지 않으므로 수동으로 컨트롤 플레인 시스템을 추가해야 합니다.
다음 명령을 실행하여 적절한 인스턴스 그룹에 컨트롤 플레인 머신을 추가합니다.
$ gcloud compute instance-groups unmanaged add-instances ${INFRA_ID}-master-${ZONE_0}-instance-group --zone=${ZONE_0} --instances=${INFRA_ID}-master-0 $ gcloud compute instance-groups unmanaged add-instances ${INFRA_ID}-master-${ZONE_1}-instance-group --zone=${ZONE_1} --instances=${INFRA_ID}-master-1 $ gcloud compute instance-groups unmanaged add-instances ${INFRA_ID}-master-${ZONE_2}-instance-group --zone=${ZONE_2} --instances=${INFRA_ID}-master-2
외부 클러스터의 경우 다음 명령을 실행하여 대상 풀에 컨트롤 플레인 머신을 추가해야 합니다.
$ gcloud compute target-pools add-instances ${INFRA_ID}-api-target-pool --instances-zone="${ZONE_0}" --instances=${INFRA_ID}-master-0 $ gcloud compute target-pools add-instances ${INFRA_ID}-api-target-pool --instances-zone="${ZONE_1}" --instances=${INFRA_ID}-master-1 $ gcloud compute target-pools add-instances ${INFRA_ID}-api-target-pool --instances-zone="${ZONE_2}" --instances=${INFRA_ID}-master-2
6.11.15.1. 컨트롤 플레인 시스템에 대한 Deployment Manager 템플릿
다음 Deployment Mananger 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 컨트롤 플레인 시스템을 배포할 수 있습니다.
예 6.26. 05_control_plane.py
Deployment Manager 템플릿
def GenerateConfig(context): resources = [{ 'name': context.properties['infra_id'] + '-master-0', 'type': 'compute.v1.instance', 'properties': { 'disks': [{ 'autoDelete': True, 'boot': True, 'initializeParams': { 'diskSizeGb': context.properties['root_volume_size'], 'diskType': 'zones/' + context.properties['zones'][0] + '/diskTypes/pd-ssd', 'sourceImage': context.properties['image'] } }], 'machineType': 'zones/' + context.properties['zones'][0] + '/machineTypes/' + context.properties['machine_type'], 'metadata': { 'items': [{ 'key': 'user-data', 'value': context.properties['ignition'] }] }, 'networkInterfaces': [{ 'subnetwork': context.properties['control_subnet'] }], 'serviceAccounts': [{ 'email': context.properties['service_account_email'], 'scopes': ['https://www.googleapis.com/auth/cloud-platform'] }], 'tags': { 'items': [ context.properties['infra_id'] + '-master', ] }, 'zone': context.properties['zones'][0] } }, { 'name': context.properties['infra_id'] + '-master-1', 'type': 'compute.v1.instance', 'properties': { 'disks': [{ 'autoDelete': True, 'boot': True, 'initializeParams': { 'diskSizeGb': context.properties['root_volume_size'], 'diskType': 'zones/' + context.properties['zones'][1] + '/diskTypes/pd-ssd', 'sourceImage': context.properties['image'] } }], 'machineType': 'zones/' + context.properties['zones'][1] + '/machineTypes/' + context.properties['machine_type'], 'metadata': { 'items': [{ 'key': 'user-data', 'value': context.properties['ignition'] }] }, 'networkInterfaces': [{ 'subnetwork': context.properties['control_subnet'] }], 'serviceAccounts': [{ 'email': context.properties['service_account_email'], 'scopes': ['https://www.googleapis.com/auth/cloud-platform'] }], 'tags': { 'items': [ context.properties['infra_id'] + '-master', ] }, 'zone': context.properties['zones'][1] } }, { 'name': context.properties['infra_id'] + '-master-2', 'type': 'compute.v1.instance', 'properties': { 'disks': [{ 'autoDelete': True, 'boot': True, 'initializeParams': { 'diskSizeGb': context.properties['root_volume_size'], 'diskType': 'zones/' + context.properties['zones'][2] + '/diskTypes/pd-ssd', 'sourceImage': context.properties['image'] } }], 'machineType': 'zones/' + context.properties['zones'][2] + '/machineTypes/' + context.properties['machine_type'], 'metadata': { 'items': [{ 'key': 'user-data', 'value': context.properties['ignition'] }] }, 'networkInterfaces': [{ 'subnetwork': context.properties['control_subnet'] }], 'serviceAccounts': [{ 'email': context.properties['service_account_email'], 'scopes': ['https://www.googleapis.com/auth/cloud-platform'] }], 'tags': { 'items': [ context.properties['infra_id'] + '-master', ] }, 'zone': context.properties['zones'][2] } }] return {'resources': resources}