10.15. GCP에서 부트스트랩 시스템 생성


OpenShift Container Platform 클러스터 초기화 과정에서 사용할 부트스트랩 시스템을 GCP(Google Cloud Platform)에 생성해야 합니다. 이 시스템을 생성하는 한 가지 방법은 제공된 Deployment Manager 템플릿을 수정하는 것입니다.

참고

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

사전 요구 사항

  • GCP에서 공통 변수 내보내기로드 밸런서 만들기 섹션에서 변수를 정의했는지 확인하세요.
  • pyOpenSSL을 설치했는지 확인합니다.

프로세스

  1. 이 항목의 부트스트랩 시스템에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에 04_bootstrap.py로 저장합니다. 이 템플릿은 클러스터에 필요한 부트스트랩 시스템을 설명합니다.
  2. 설치 프로그램에 필요한 RHCOS(Red Hat Enterprise Linux CoreOS) 이미지의 위치를 내보냅니다.

    $ export CLUSTER_IMAGE=(`gcloud compute images describe ${INFRA_ID}-rhcos-image --format json | jq -r .selfLink`)
    Copy to Clipboard Toggle word wrap
  3. 버킷을 생성하고 bootstrap.ign 파일을 업로드합니다.

    $ gsutil mb gs://${INFRA_ID}-bootstrap-ignition
    Copy to Clipboard Toggle word wrap
    $ gsutil cp <installation_directory>/bootstrap.ign gs://${INFRA_ID}-bootstrap-ignition/
    Copy to Clipboard Toggle word wrap
  4. Ignition 구성 파일에 액세스하는 데 사용할 부트스트랩 인스턴스에 대한 서명된 URL을 생성합니다. 출력에서 URL을 변수로 내보냅니다.

    $ export BOOTSTRAP_IGN=`gsutil signurl -d 1h service-account-key.json gs://${INFRA_ID}-bootstrap-ignition/bootstrap.ign | grep "^gs:" | awk '{print $5}'`
    Copy to Clipboard Toggle word wrap
  5. 04_bootstrap.yaml 리소스 정의 파일을 생성합니다.

    $ cat <<EOF >04_bootstrap.yaml
    imports:
    - path: 04_bootstrap.py
    
    resources:
    - name: cluster-bootstrap
      type: 04_bootstrap.py
      properties:
        infra_id: '${INFRA_ID}' 
    1
    
        region: '${REGION}' 
    2
    
        zone: '${ZONE_0}' 
    3
    
    
        cluster_network: '${CLUSTER_NETWORK}' 
    4
    
        control_subnet: '${CONTROL_SUBNET}' 
    5
    
        image: '${CLUSTER_IMAGE}' 
    6
    
        machine_type: 'n1-standard-4' 
    7
    
        root_volume_size: '128' 
    8
    
    
        bootstrap_ign: '${BOOTSTRAP_IGN}' 
    9
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    infra_id는 추출 단계에서 가져온 INFRA_ID 인프라 이름입니다.
    2
    region은 클러스터를 배포할 영역입니다(예: us-central1).
    3
    zone은 부트스트랩 인스턴스를 배포할 영역입니다(예: us-central1-b).
    4
    cluster_network는 클러스터 네트워크에 대한 selfLink URL입니다.
    5
    control_subnet은 컨트롤 서브넷에 대한 selfLink URL입니다.
    6
    image는 RHCOS 이미지에 대한 selfLink URL입니다.
    7
    machine_type은 인스턴스의 시스템 유형입니다(예: n1-standard-4).
    8
    root_volume_size는 부트스트랩 시스템의 부팅 디스크 크기입니다.
    9
    bootstrap_ign은 서명된 URL을 생성할 때 출력되는 URL입니다.
  6. gcloud CLI를 사용하여 배포를 생성합니다.

    $ gcloud deployment-manager deployments create ${INFRA_ID}-bootstrap --config 04_bootstrap.yaml
    Copy to Clipboard Toggle word wrap
  7. Deployment Manager의 제한으로 인해 템플릿을 통해 로드 밸랜서 멤버십이 관리되지 않으므로 수동으로 부트스트랩 시스템을 추가해야 합니다.

    1. 내부 로드 밸런서 인스턴스 그룹에 부트스트랩 인스턴스를 추가합니다.

      $ gcloud compute instance-groups unmanaged add-instances \
          ${INFRA_ID}-bootstrap-ig --zone=${ZONE_0} --instances=${INFRA_ID}-bootstrap
      Copy to Clipboard Toggle word wrap
    2. 내부 로드 밸런서 백엔드 서비스에 부트스트랩 인스턴스 그룹을 추가합니다.

      $ gcloud compute backend-services add-backend \
          ${INFRA_ID}-api-internal --region=${REGION} --instance-group=${INFRA_ID}-bootstrap-ig --instance-group-zone=${ZONE_0}
      Copy to Clipboard Toggle word wrap

10.15.1. 부트스트랩 시스템에 대한 Deployment Manager 템플릿

다음 Deployment Mananger 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 부트스트랩 시스템을 배포할 수 있습니다.

예 10.31. 04_bootstrap.py Deployment Manager 템플릿

def GenerateConfig(context):

    resources = [{
        'name': context.properties['infra_id'] + '-bootstrap-public-ip',
        'type': 'compute.v1.address',
        'properties': {
            'region': context.properties['region']
        }
    }, {
        'name': context.properties['infra_id'] + '-bootstrap',
        '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': '{"ignition":{"config":{"replace":{"source":"' + context.properties['bootstrap_ign'] + '"}},"version":"3.2.0"}}',
                }]
            },
            'networkInterfaces': [{
                'subnetwork': context.properties['control_subnet'],
                'accessConfigs': [{
                    'natIP': '$(ref.' + context.properties['infra_id'] + '-bootstrap-public-ip.address)'
                }]
            }],
            'tags': {
                'items': [
                    context.properties['infra_id'] + '-master',
                    context.properties['infra_id'] + '-bootstrap'
                ]
            },
            'zone': context.properties['zone']
        }
    }, {
        'name': context.properties['infra_id'] + '-bootstrap-ig',
        'type': 'compute.v1.instanceGroup',
        'properties': {
            'namedPorts': [
                {
                    'name': 'ignition',
                    'port': 22623
                }, {
                    'name': 'https',
                    'port': 6443
                }
            ],
            'network': context.properties['cluster_network'],
            'zone': context.properties['zone']
        }
    }]

    return {'resources': resources}
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