기본 클러스터 만들기

이 문서에서는 VMware용 Anthos 클러스터(GKE On-Prem)의 소규모 개념 증명 설치를 위해 기본 클러스터를 만드는 방법을 보여줍니다.

기본 단계는 다음과 같습니다.

  1. 관리자 워크스테이션을 만듭니다.

  2. 관리자 워크스테이션에서 관리자 클러스터를 만듭니다.

  3. 관리자 워크스테이션에서 사용자 클러스터를 만듭니다.

시작하기 전에

최소 인프라 설정에 설명된 대로 vSphere 및 Google Cloud 환경을 설정합니다.

정보 수집

관리자 워크스테이션 구성 파일 작성을 준비하기 위해 다음 정보를 수집합니다.

로그인

gkeadm 명령줄 도구는 SDK account 속성을 사용하여 서비스 계정을 만듭니다. 따라서 gkeadm을 실행하기 전에 SDK account 속성을 설정하여 관리자 워크스테이션을 만드는 것이 중요합니다.

Google 계정으로 로그인합니다. 그러면 SDK account 속성이 설정됩니다.

gcloud auth login

SDK account 속성이 올바르게 설정되었는지 확인합니다.

gcloud config list

SDK account 속성 값이 출력에 표시됩니다. 예를 들면 다음과 같습니다.

[core]
account = my-name@google.com
disable_usage_reporting = False
Your active configuration is: [default]

SDK 계정에 역할 부여

SDK account 속성으로 설정된 Google 계정에는 gkeadm이 서비스 계정을 만들고 관리할 수 있도록 다음과 같은 IAM 역할이 있어야 합니다.

  • resourcemanager.projectIamAdmin
  • serviceusage.serviceUsageAdmin
  • iam.serviceAccountCreator
  • iam.serviceAccountKeyAdmin

역할을 부여하려면 Google Cloud 프로젝트에 대한 특정 권한이 있어야 합니다. 자세한 내용은 리소스에 대한 액세스 권한 부여, 변경, 취소를 참조하세요.

필요한 권한이 있으면 직접 역할을 부여할 수 있습니다. 그렇지 않으면 조직의 다른 사용자가 역할을 부여해야 합니다.

역할을 부여하려면 다음 안내를 따르세요.

Linux 및 macOS

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/resourcemanager.projectIamAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/serviceusage.serviceUsageAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/iam.serviceAccountCreator"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/iam.serviceAccountKeyAdmin"

Windows

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/resourcemanager.projectIamAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/serviceusage.serviceUsageAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/iam.serviceAccountCreator"

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/iam.serviceAccountKeyAdmin"

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트의 ID
  • ACCOUNT: SDK account 속성 값

관리자 워크스테이션을 만듭니다.

이 섹션의 단계에서는 64비트 Linux, Windows 10, Windows Server 2019, macOS 10.15 이상에서 사용할 수 있는 gkeadm 명령줄 도구를 사용합니다.

현재 디렉터리로 gkeadm을 다운로드합니다.

템플릿 생성

./gkeadm create config

위 명령어를 실행하면 현재 디렉터리에 다음 파일이 만들어집니다.

  • credential.yaml
  • admin-ws-config.yaml

credential.yaml 입력

credential.yaml에 vCenter 사용자 이름과 비밀번호를 입력합니다. 예를 들면 다음과 같습니다.

kind: CredentialFile
items:
- name: vCenter
  username: "my-account-name"
  password: "AadmpqGPqq!a"

관리자 워크스테이션 구성 파일 살펴보기

관리자 워크스테이션 구성 파일 문서를 통해 파일에 포함되는 콘텐츠가 무엇인지 일반적으로 살펴봅니다. 필드 값을 입력할 때 참조할 수 있도록 페이지를 개별 탭 또는 창으로 열어 두는 것이 좋습니다.

admin-ws-config.yaml 입력

수정할 admin-ws-config.yaml을 엽니다.

다음 필드는 기본값 또는 생성된 값으로 자동으로 입력되어 있습니다.

vCenter:
  credentials:
    fileRef:
      credentials:
      entry:

adminWorkstation:
  name:
  cpus:
  memoryMB:
  diskGB:
  dataDiskName:
  dataDiskMB:

ntpServer:

gcp.componentAccessServiceAccountKeyPath 필드를 입력합니다.

vCenter 섹션에 다음 필드를 입력합니다.

credentials:
  address:
datacenter:
datastore:
cluster:
network:
caCertPath:

vCenter.resourcePoolCLUSTER_NAME/Resources로 설정합니다. CLUSTER_NAME을 vSphere 클러스터의 이름으로 바꿉니다.

필요한 경우 proxyURL 필드를 입력합니다.

필요한 경우 adminWorkstation.proxyURL 필드를 입력합니다.

adminWorkstation.network.ipAllocationMode"static"으로 설정합니다.

adminWorkstation.network.hostConfig 섹션에서 다음 필드를 채웁니다.

ip:
gateway:
netmask:
dns:

관리자 워크스테이션 구성 파일 예시

다음은 작성된 관리자 워크스테이션 구성 파일의 예시입니다.

gcp:
  componentAccessServiceAccountKeyPath: "/usr/local/google/home/me/keys/component-access-key.json"
vCenter:
  credentials:
    address: "vc01.example"
    fileRef:
      path: "credential.yaml"
      entry: "vCenter"
  datacenter: "vc01"
  datastore: "vc01-datastore-1"
  cluster: "vc01-workloads-1"
  network: "vc01-net-1"
  resourcePool: "vc01-workloads-1/Resources"
  caCertPath: "/usr/local/google/home/stevepe/certs/vc01-cert.pem"
proxyUrl: ""
adminWorkstation:
  name: gke-admin-ws-220304-014925
  cpus: 4
  memoryMB: 8192
  diskGB: 50
  dataDiskName: gke-on-prem-admin-workstation-data-disk/gke-admin-ws-220304-014925-data-disk.vmdk
  dataDiskMB: 512
  network:
    ipAllocationMode: "static"
    hostConfig:
      ip: "172.16.20.49"
      gateway: "172.16.20.1"
      netmask: "255.255.255.0"
      dns:
      - "203.0.113.1"
  proxyUrl: ""
  ntpServer: ntp.ubuntu.com

관리자 워크스테이션 만들기

관리자 워크스테이션을 만들고 서비스 계정을 자동으로 만듭니다.

./gkeadm create admin-workstation --auto-create-service-accounts

출력은 관리자 워크스테이션 생성에 대한 자세한 정보를 제공하며 관리자 워크스테이션으로 SSH 연결을 가져오는 데 사용할 수 있는 명령어를 제공합니다.

...
Admin workstation is ready to use.
Admin workstation information saved to /usr/local/google/home/me/my-admin-workstation
This file is required for future upgrades
SSH into the admin workstation with the following command:
ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.20.49
********************************************************************

관리자 워크스테이션 만들기에 대한 자세한 내용은 관리자 워크스테이션 만들기를 참조하세요.

관리자 워크스테이션의 파일을 확인합니다.

이전 출력에 표시된 명령어를 사용해서 관리자 워크스테이션에 SSH로 연결합니다. 예를 들면 다음과 같습니다.

ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.20.49

홈 디렉터리의 파일을 나열합니다.

ls -1

출력에는 gkeadm에서 자동으로 생성된 connect-register 서비스 계정 및 logging-monitoring 서비스 계정의 두 가지 서비스 계정에 대한 JSON 키 파일이 포함되어 있습니다. connect-register 서비스 계정에 대한 JSON 키 파일의 이름을 기록해 둡니다. 나중에 클러스터를 만들 때 필요합니다. 예를 들면 다음과 같습니다.

admin-cluster.yaml
admin-ws-config.yaml
sa-key.json
connect-register-sa-2203040617.json
credential.yaml
log-mon-sa-2203040617.json
logs
vc01-cert.pem
user-cluster.yaml

관리자 클러스터 만들기

관리자 워크스테이션으로 SSH 연결 가져오기

관리자 클러스터를 위한 고정 IP 주소 지정

관리자 클러스터, 노드에 사용할 고정 IP 주소를 지정하려면 admin-cluster-ipblock.yaml이라는 IP 블록 파일을 만듭니다.

관리자 클러스터에 있는 다음 노드에 5개의 IP 주소가 필요합니다.

  • 관리자 클러스터 제어 영역 및 부가기능을 실행하기 위한 노드 3개

  • 업그레이드 중에 임시로 사용되는 추가 노드

  • 나중에 만들 사용자 클러스터의 제어 영역을 실행하는 노드 1개

다음은 5개 노드의 주소가 포함된 IP 블록 파일 예시입니다.

blocks:
  - netmask: 255.255.255.0
    gateway: 172.16.20.1
    ips:
    - ip: 172.16.20.50
      hostname: admin-vm-1
    - ip: 172.16.20.51
      hostname: admin-vm-2
    - ip: 172.16.20.52
      hostname: admin-vm-3
    - ip: 172.16.20.53
      hostname: admin-vm-4
    - ip: 172.16.20.54
      hostname: admin-vm-5

ips 필드는 IP 주소와 호스트 이름의 배열입니다. 이는 VMware용 Anthos 클러스터가 관리자 클러스터 노드에 할당할 IP 주소와 호스트 이름입니다.

IP 블록 파일에서 관리자 클러스터 노드의 서브넷 마스크와 기본 게이트웨이도 지정합니다.

관리자 클러스터 구성 파일 살펴보기

관리자 클러스터 구성 파일 문서를 통해 파일에 포함되는 콘텐츠가 무엇인지 일반적으로 살펴봅니다. 필드 값을 입력할 때 참조할 수 있도록 페이지를 개별 탭 또는 창으로 열어 두는 것이 좋습니다.

관리자 클러스터 구성 파일 작성

gkeadm이 관리자 워크스테이션을 만들 때 admin-cluster.yaml이라는 구성 파일을 생성했습니다. 이 구성 파일은 관리자 클러스터를 만들기 위한 것입니다.

수정할 admin-cluster.yaml을 엽니다. 관리자 클러스터 구성 파일의 여러 필드에 이미 기본값, 생성된 값, 또는 관리자 워크스테이션을 만들 때 제공한 값이 미리 채워져 있습니다. 이러한 필드는 변경하지 않고 그대로 둘 수 있습니다.

vCenter.dataDisk 필드를 작성합니다.

network.hostConfig 섹션에서 다음 필드를 채웁니다.

dnsServers:
ntpServers:

network.ipMode.type"static"으로 설정합니다.

network.ipMode.ipBlockFilePath"admin-cluster-ipblock.yaml"으로 설정합니다.

network.serviceCIDRnetwork.podCIDR기본 값을 채우거나 유지합니다.

loadBalancer.vips 섹션에서 다음 필드를 채웁니다.

controlPlaneVIP:
addonsVIP:

loadBalancer.kind"MetalLB"로 설정합니다.

antiAffinityGroups.enabledfalse로 설정합니다.

gkeConnect.projectID를 Google Cloud 프로젝트의 ID로 설정합니다.

gkeConnect.registerServiceAccountKeyPath를 연결-등록 서비스 계정의 JSON 키 파일 경로로 설정합니다.

관리자 클러스터 구성 파일의 예시

다음은 작성된 관리자 클러스터 구성 파일의 예시입니다.

apiVersion: v1
kind: AdminCluster
name: "gke-admin-01"
bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.11.0-gke.543-full.tgz"
vCenter:
  address: "vc01.example"
  datacenter: "vc-01"
  cluster: "vc01-workloads-1"
  resourcePool: "my-cluster/Resources"
  datastore: "vc01-datastore-1"
  caCertPath: "/usr/local/google/home/me/certs/vc01-cert.pem""
  credentials:
    fileRef:
      path: "credential.yaml"
      entry: "vCenter"
  dataDisk: "vc01-admin-disk.vmdk"
network:
  hostConfig:
    dnsServers:
    - "203.0.113.1"
    - "198.51.100.1"
    ntpServers:
    - "216.239.35.4"
  ipMode:
    type: "static"
  serviceCIDR: "10.96.232.0/24"
  podCIDR: "192.168.0.0/16"
  vCenter:
    networkName: "vc01-net-1"
loadBalancer:
  vips:
    controlPlaneVIP: "172.16.20.59"
    addonsVIP: "172.16.20.60"
  kind: "MetalLB"
antiAffinityGroups:
  enabled: false
componentAccessServiceAccountKeyPath: "sa-key.json"
gkeConnect:
  projectID: "my-project-123"
  registerServiceAccountKeyPath: "connect-register-sa-2203040617.json"
stackdriver:
  projectID: "my-project-123"
  clusterLocation: "us-central1"
  enableVPC: false
  serviceAccountKeyPath: "log-mon-sa-2203040617.json"
  disableVsphereResourceMetrics: false

관리자 클러스터 구성 파일 유효성 검사

관리자 클러스터 구성 파일이 유효하고 클러스터 생성에 사용될 수 있는지 확인합니다.

gkectl check-config --config admin-cluster.yaml

vSphere 환경 준비

gkectl prepare를 실행하여 vSphere 환경을 초기화합니다.

gkectl prepare --config admin-cluster.yaml --skip-validation-all

관리자 클러스터 만들기

관리자 클러스터를 만듭니다.

gkectl create admin --config admin-cluster.yaml

실패 후 관리자 클러스터 만들기 다시 시작

관리자 클러스터 만들기가 실패하거나 취소된 경우 create 명령어를 다시 실행할 수 있습니다.

gkectl create admin --config admin-cluster.yaml

관리자 클러스터 kubeconfig 파일 찾기

gkectl create admin 명령어는 현재 디렉터리에 kubeconfig라는 kubeconfig 파일을 만듭니다. 나중에 관리자 클러스터와 상호작용하려면 이 kubeconfig 파일이 필요합니다.

관리자 클러스터 실행 여부 확인

클러스터가 실행 중인지 확인합니다.

kubectl get nodes --kubeconfig kubeconfig

출력에 관리자 클러스터 노드가 표시됩니다. 예를 들면 다음과 같습니다.

gke-admin-master-hdn4z            Ready    control-plane,master ...
gke-admin-node-7f46cc8c47-g7w2c   Ready ...
gke-admin-node-7f46cc8c47-kwlrs   Ready ...

사용자 클러스터 만들기

Google Cloud 콘솔 또는 관리자 워크스테이션의 명령줄에서 사용자 클러스터를 만들 수 있습니다.

콘솔

이 섹션에서는 MetalLB를 부하 분산기로 사용하여 최소 인프라로 구성된 사용자 클러스터를 만드는 방법을 보여줍니다.

사용자 클러스터를 만들 때 Google Cloud console은 클러스터 만들기를 위해 선택한 Google Cloud 프로젝트에서 GKE On-Prem API를 자동으로 사용 설정합니다. GKE On-Prem API는 Google Cloud의 인프라에서 실행되며 Google Cloud console은 이 API를 사용하여 vSphere 데이터 센터에 클러스터를 만듭니다. 클러스터를 관리하려면 GKE On-Prem API가 클러스터를 만들 때 지정한 Google Cloud 리전에 클러스터 상태에 대한 메타데이터를 저장해야 합니다. 이 메타데이터를 사용하면 GKE On-Prem API에서 사용자 클러스터 수명 주기를 관리할 수 있으며 워크로드별 데이터는 포함되지 않습니다.

  1. Google Cloud console에서 Anthos 클러스터 페이지로 이동합니다.

    Anthos 클러스터 페이지로 이동

  2. 클러스터를 만들 Google Cloud 프로젝트를 선택합니다. 선택한 프로젝트는 Fleet 호스트 프로젝트로도 사용됩니다. 이 프로젝트는 관리자 클러스터가 등록된 프로젝트와 같아야 합니다. 사용자 클러스터가 생성되면 선택한 프로젝트의 Fleet에 자동으로 등록됩니다.

  3. 클러스터 만들기를 클릭합니다.

  4. 대화상자에서 온프레미스를 클릭합니다.

  5. VMware vSphere 옆에 있는 구성을 클릭합니다.

  6. 기본 요건을 검토하고 계속을 클릭합니다.

클러스터 기본사항

  1. 사용자 클러스터의 이름을 입력합니다.
  2. 관리자 클러스터의 목록에서 관리자 클러스터를 선택합니다. 사용하려는 관리자 클러스터가 표시되지 않으면 문제 해결 섹션을 참조하세요. 관리자 클러스터는 클러스터 기본사항 드롭다운 목록에 표시되지 않습니다.

  3. GCP API 위치 필드의 목록에서 Google Cloud 리전을 선택합니다. 이 설정은 GKE On-Prem API가 실행되는 리전을 제어하는 것 외에도 다음이 저장되는 리전을 제어합니다.

    • GKE On-Prem API가 클러스터 수명 주기를 관리하는 데 필요한 사용자 클러스터 메타데이터
    • 시스템 구성요소의 Cloud Logging 및 Cloud Monitoring 데이터
    • Cloud 감사 로그에서 만든 관리자 감사 로그
  4. 사용자 클러스터의 VMware용 Anthos 클러스터 버전입니다.

  5. 계속을 클릭하여 네트워킹 섹션으로 이동합니다.

네트워킹

이 섹션에서는 클러스터의 노드, 포드, 서비스의 IP 주소를 지정합니다. 사용자 클러스터에는 각 노드마다 하나의 IP 주소와 사용자 클러스터 업그레이드 중 임시 노드에 사용할 추가 IP 주소가 있어야 합니다. 자세한 내용은 사용자 클러스터에 필요한 IP 주소 수를 참조하세요.

  1. 노드 IP 섹션에서 사용자 클러스터의 IP 모드를 선택합니다. 다음 중 하나를 선택합니다.

    • DHCP: 클러스터 노드가 DHCP 서버에서 IP 주소를 가져오도록 하려면 DHCP를 선택합니다.

    • 고정: 클러스터 노드에 고정 IP 주소를 제공하려면 고정을 선택합니다.

  2. DHCP를 선택한 경우 다음 단계로 건너뛰고 서비스 및 포드 CIDR을 지정합니다. 고정 IP 모드에 다음 정보를 입력합니다.

    1. 사용자 클러스터용 게이트웨이의 IP 주소를 입력합니다.
    2. 사용자 클러스터 노드의 서브넷 마스크를 입력합니다.

    3. IP 주소 섹션에서 IP 주소를 입력하고 원하는 경우 사용자 클러스터에 있는 노드의 호스트 이름을 입력합니다. 개별 IP v4 주소(예: 192.0.2.1) 또는 IPv4 주소의 CIDR 블록(예: 192.0.2.0/24)을 입력할 수 있습니다.

      • CIDR 블록을 입력하는 경우 호스트 이름을 입력하지 마세요.
      • 개별 IP 주소를 입력할 경우 호스트 이름을 선택적으로 입력할 수 있습니다. 호스트 이름을 입력하지 않으면 VMware용 Anthos 클러스터가 vSphere의 VM 이름을 호스트 이름으로 사용합니다.
    4. 필요에 따라 + IP 주소 추가를 클릭하여 IP 주소를 더 입력합니다.

  3. 서비스 및 포드 CIDR 섹션에서 Google Cloud console은 Kubernetes 서비스 및 포드에 다음 주소 범위를 제공합니다.

    • 서비스 CIDR: 10.96.0.0/20
    • 포드 CIDR: 192.168.0.0/16

    자체 주소 범위를 입력하려면 포드 및 서비스의 IP 주소에서 권장사항을 참조하세요.

  4. 고정 IP 모드를 선택한 경우 호스트 구성 섹션에서 다음 정보를 지정합니다.

    1. DNS 서버의 IP 주소를 입력합니다.
    2. NTP 서버의 IP 주소를 입력합니다.
    3. 원하는 경우 DNS 검색 도메인을 입력합니다.
  5. 계속을 클릭하여 부하 분산기 섹션으로 이동합니다.

부하 분산기

MetalLB를 부하 분산기로 구성합니다.

  1. 부하 분산기 유형에서 MetalLB를 선택한 상태로 둡니다.

  2. 가상 IP 섹션에서 다음을 입력합니다.

    • 제어 영역 VIP: 사용자 클러스터의 Kubernetes API 서버 서버로 전송되는 트래픽에 사용할 대상 IP 주소입니다. 이 IP 주소는 관리자 클러스터 노드와 동일한 L2 도메인에 있어야 합니다. 주소 풀 섹션에 이 주소를 추가하지 마세요.

    • 인그레스 VIP: 인그레스 프록시의 부하 분산기에서 구성할 IP 주소입니다. 주소 풀 섹션의 주소 풀에 이 주소를 추가해야 합니다.

  3. 주소 풀 섹션에서 인그레스 VIP의 주소 풀을 지정합니다.

    1. + IP 주소 범위 추가를 클릭합니다.
    2. 주소 풀의 이름을 입력합니다.
    3. IP 주소 범위를 CIDR 표기법(예: 192.0.2.0/26) 또는 범위 표기법(예: 192.0.2.64-192.0.2.72)으로 입력합니다. 각 풀의 IP 주소는 겹칠 수 없으며 클러스터 노드와 동일한 서브넷에 있어야 합니다.
    4. IP 주소 할당에서 다음 중 하나를 선택합니다.

      • 자동: MetalLB 컨트롤러가 주소 풀의 IP 주소를 LoadBalancer 유형의 서비스에 자동으로 할당하도록 하려면 이 옵션을 선택합니다.
      • 수동: 풀의 주소를 사용하여 LoadBalancer 유형의 서비스 주소를 수동으로 지정하려면 이 옵션을 선택합니다.
    5. MetalLB 컨트롤러가 .0 또는 .255로 끝나는 풀의 주소를 사용하지 않도록 하려면 버그가 있는 IP 주소 방지를 클릭합니다. 이렇게 하면 버그가 있는 소비자 기기가 특수한 IP 주소로 전송된 트래픽을 실수로 차단하는 문제를 방지할 수 있습니다.

    6. 필요한 경우 반복합니다. 완료하면 완료를 클릭합니다.

  4. 계속을 클릭합니다.

제어 영역

  1. 사용자 클러스터의 제어 영역 구성요소를 실행하는 관리자 클러스터의 노드에 구성된 기본값을 검토합니다. 기본값은 최소 인프라로 충분하지만 필요에 따라 값을 조정할 수 있습니다.

  2. 계속을 클릭합니다.

기능

  1. 안티어피니티 그룹 사용 설정을 선택 해제합니다. 최소한의 인프라를 설정할 때 ESXi 호스트는 하나만 생성하므로 안티어피니티 그룹을 사용 설정하면 안 됩니다.

  2. 계속을 클릭합니다.

노드 풀

하나 이상의 노드 풀이 있는 클러스터가 생성됩니다. 노드 풀은 이 클러스터에서 만든 노드 그룹의 템플릿입니다. 자세한 내용은 노드 풀 만들기 및 관리를 참조하세요.

노드 풀에 구성된 기본값을 검토합니다. 기본값은 최소 인프라로 충분하지만 필요에 따라 값을 조정할 수 있습니다.

확인 및 완료

확인 및 완료를 클릭하여 사용자 클러스터를 만듭니다. 사용자 클러스터를 만드는 데 10분 이상 걸립니다. Google Cloud console은 설정을 확인하고 데이터 센터에 클러스터를 만들 때 상태 메시지를 표시합니다.

Google Cloud 콘솔에서 사용자 클러스터를 만드는 연산자는 클러스터가 생성된 후 자동으로 클러스터에 로그인됩니다. 다른 운영자는 Cloud 콘솔에서 클러스터에 로그인의 단계를 수행하여 클러스터에 대한 액세스 권한을 얻어야 합니다.

설정 확인 중에 오류가 발생하면 Google Cloud 콘솔에 오류 메시지가 표시됩니다. 오류 메시지는 구성 문제를 해결하고 클러스터를 만들려고 시도할 수 있도록 아주 명확해야 합니다.

발생 가능한 오류와 해결 방법에 대한 자세한 내용은 Google Cloud console에서 사용자 클러스터 생성 문제 해결을 참조하세요.

사용자 클러스터 kubeconfig 파일 만들기

명령줄에서 데이터 센터의 사용자 클러스터에 액세스하려면 관리자 클러스터에서 kubeconfig 파일을 가져와야 합니다. Google Cloud 콘솔에서 사용자 클러스터 상태가 정상으로 표시되면 관리자 워크스테이션에서 다음 명령어를 실행하여 사용자 클러스터의 새 kubeconfig 파일을 로컬에 저장합니다. 다음을 바꿉니다.

  • CLUSTER_NAME: 새로 생성된 사용자 클러스터의 이름입니다.
  • ADMIN_CLUSTER_KUBECONFIG: 관리자 클러스터 kubeconfig 파일의 경로입니다.
  • USER_CLUSTER_KUBECONFIG: 명령어가 출력하는 사용자 클러스터 kubeconfig 파일의 이름입니다.
kubectl get secret admin \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n CLUSTER_NAME \
-o=jsonpath='{.data.admin\.conf}' | base64 -d > USER_CLUSTER_KUBECONFIG

파일이 저장되면 다음과 같이 kubectl을 사용하여 사용자 클러스터에 액세스할 수 있습니다.

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get namespaces

명령줄

  1. 관리자 워크스테이션으로 SSH 연결 가져오기

  2. 사용자 클러스터의 고정 IP 지정

    사용자 클러스터에 사용할 고정 IP 주소를 지정하려면 user-cluster-ipblock.yaml이라는 IP 블록 파일을 만듭니다. 사용자 클러스터 노드에 사용할 3개의 IP 주소와 업그레이드 중 임시로 사용할 한 개의 추가 주소가 필요합니다. 다음은 4개 주소가 포함된 IP 블록 파일의 예시입니다.

    blocks:
      - netmask: 255.255.255.0
        gateway: 172.16.20.1
        ips:
        - ip: 172.16.20.55
          hostname: user-vm-1
        - ip: 172.16.20.56
          hostname: user-vm-2
        - ip: 172.16.20.57
          hostname: user-vm-3
        - ip: 172.16.20.58
          hostname: user-vm-4
    

사용자 클러스터 구성 파일 작성

gkeadm이 관리자 워크스테이션을 만들 때 user-cluster.yaml이라는 구성 파일을 생성했습니다. 이 구성 파일은 사용자 클러스터를 만들기 위한 것입니다.

  1. 사용자 클러스터 구성 파일 살펴보기

    사용자 클러스터 구성 파일 문서를 통해 파일에 포함되는 콘텐츠가 무엇인지 일반적으로 살펴봅니다. 필드 값을 입력할 때 참조할 수 있도록 페이지를 개별 탭 또는 창으로 열어 두는 것이 좋습니다.

  2. 수정할 user-cluster.yaml을 엽니다.

    사용자 클러스터 구성 파일의 여러 필드에 이미 기본값, 생성된 값, 또는 관리자 워크스테이션을 만들 때 제공한 값이 미리 채워져 있습니다. 이러한 필드는 변경하지 않고 그대로 둘 수 있습니다.

  3. 이름을 사용자 클러스터용으로 선택한 이름으로 설정합니다.

네트워크 섹션의 필드 채우기

  1. network.hostConfig 섹션에 다음 필드의 IP 주소를 입력합니다.

    dnsServers:
    ntpServers:
    
  2. network.ipMode.type"static"으로 설정합니다.

  3. network.ipMode.ipBlockFilePath"user-cluster-ipblock.yaml"으로 설정합니다.

  4. network.serviceCIDRnetwork.podCIDR기본 값을 채우거나 유지합니다.

부하 분산기 섹션의 필드 채우기

  1. loadBalancer.vips 섹션에서 다음 필드를 채웁니다.

    controlPlaneVIP:
    ingressVIP:
    
  2. loadBalancer.kind"MetalLB"로 설정합니다.

  3. loadBalancer.metalLB 섹션을 작성합니다. 자세한 내용은 MetalLB를 사용한 번들 부하 분산을 참조하세요.

  4. 하나 이상의 노드 풀에 enableLoadBalancertrue로 설정합니다. 자세한 내용은 MetalLB를 사용한 번들 부하 분산을 참조하세요.

  5. antiAffinityGroups.enabledfalse로 설정합니다.

사용자 클러스터 구성 파일 예시

다음은 작성된 사용자 클러스터 구성 파일의 예시입니다.

apiVersion: v1
kind: UserCluster
name: "my-user-cluster"
gkeOnPremVersion: "1.11.0-gke.543"
network:
  hostConfig:
    dnsServers:
    - "203.0.113.1"
    - "198.51.100.1"
    ntpServers:
    - "216.239.35.4"
  ipMode:
    type: "static"
  serviceCIDR: "10.96.0.0/20"
  podCIDR: "192.168.0.0/16"
loadBalancer:
  vips:
    controlPlaneVIP: "172.16.20.61"
    ingressVIP: "172.16.20.62"
  kind: "MetalLB"
  metalLB:
    addressPools:
    - name: "uc-address-pool"
      addresses:
      - "172.16.20.63-172.16.20.72"
nodePools:
- name: "uc-node-pool"
  cpus: 4
  memoryMB: 8192
  replicas: 3
  enableLoadBalancer: true
antiAffinityGroups:
  enabled: false
gkeConnect:
  projectID: "my-project-123"
  registerServiceAccountKeyPath: "connect-register-sa-2203040617.json"
stackdriver:
  projectID: "my-project-123"
  clusterLocation: "us-central1"
  enableVPC: false
  serviceAccountKeyPath: "log-mon-sa-2203040617.json"
  disableVsphereResourceMetrics: false
autoRepair:
  enabled: true

구성 확인 및 클러스터 만들기

  1. 사용자 클러스터 구성 파일이 유효하고 클러스터 생성에 사용될 수 있는지 확인합니다.

    gkectl check-config --kubeconfig kubeconfig --config user-cluster.yaml
    
  2. 사용자 클러스터 만들기:

    gkectl create cluster --kubeconfig kubeconfig --config user-cluster.yaml
    

    클러스터를 만드는 데 약 30분 정도 걸립니다.

사용자 클러스터 kubeconfig 파일 찾기

gkectl create cluster 명령어는 현재 디렉터리에 USER_CLUSTER_NAME-kubeconfig라는 kubeconfig 파일을 만듭니다. 나중에 사용자 클러스터와 상호 작용하려면 이 kubeconfig 파일이 필요합니다.

사용자 클러스터 실행 여부 확인

사용자 클러스터 실행 여부 확인:

kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG

USER_CLUSTER_KUBECONFIG를 kubeconfig 파일의 경로로 바꿉니다.

출력에 사용자 클러스터 노드가 표시됩니다. 예를 들면 다음과 같습니다.

my-user-cluster-node-pool-69-d46d77885-7b7tx   Ready ...
my-user-cluster-node-pool-69-d46d77885-lsvzk   Ready ...
my-user-cluster-node-pool-69-d46d77885-sswjk   Ready ...

다음 단계

애플리케이션 배포