사용자 클러스터 만들기(Controlplane V2)

이 문서에서는 Controlplane V2가 사용 설정된 사용자 클러스터를 만드는 방법을 보여줍니다.

Controlplane V2를 사용하면 사용자 클러스터의 제어 영역이 사용자 클러스터 자체의 하나 이상의 노드에서 실행됩니다. Controlplane V2는 클러스터 생성에 권장되는 기본 옵션입니다.

절차 개요

사용자 클러스터를 만드는 기본 단계는 다음과 같습니다.

  1. 관리자 워크스테이션에 연결
    관리자 워크스테이션은 사용자 클러스터를 만드는 데 필요한 도구가 있는 VM입니다.
  2. 구성 파일 작성
    사용자 클러스터 구성 파일, 사용자 인증 정보 구성 파일, IP 블록 파일을 완료하여 새 클러스터의 세부정보를 지정합니다.
  3. (선택사항) OS 이미지를 vSphere로 가져오고 해당하는 경우 컨테이너 이미지를
    비공개 레지스트리로 푸시합니다.
    gkectl prepare를 실행합니다.
  4. 사용자 클러스터 만들기
    gkectl create cluster를 실행하여 구성 파일에 지정된 대로 클러스터를 만듭니다.
  5. 사용자 클러스터 실행 여부 확인
    kubectl을 사용하여 클러스터 노드를 확인합니다.

이 절차를 마치면 실행 중인 사용자 클러스터가 준비되며 여기에 워크로드를 배포할 수 있습니다.

시작하기 전에

  • 관리자 워크스테이션관리자 클러스터를 만들어 두어야 합니다.

  • IP 주소 계획 문서를 검토합니다. 사용 가능한 IP 주소가 충분한지 확인하고 클러스터 노드의 IP 주소 사용 방법(DHCP 또는 고정)에 대한 결정을 다시 확인합니다. 고정 IP 주소를 사용하려면 선택한 주소가 포함된 IP 블록 파일을 입력해야 합니다.

  • 부하 분산 개요를 검토하고 사용하려는 부하 분산기 종류에 대한 결정을 다시 확인합니다. 번들 MetalLB 분산기를 사용하거나 원하는 부하 분산기를 수동으로 구성할 수 있습니다. 수동 부하 분산의 경우 사용자 클러스터를 만들기 전에 부하 분산기를 설정해야 합니다.

  • vCenter 섹션을 확인합니다. 관리자 클러스터와 사용자 클러스터에 별도의 vSphere 클러스터를 사용할지, 별도의 데이터 센터를 사용할지 여부를 생각합니다. 또한 vCenter Server의 개별 인스턴스를 사용할지 여부를 고려합니다.

  • nodePools 섹션을 확인합니다. 필요한 노드 풀 수와 각 풀에서 실행할 운영체제를 생각합니다.

1. 관리자 워크스테이션에 연결

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

gkeadm이 관리자 워크스테이션에서 구성요소 액세스 서비스 계정을 활성화한 바 있습니다.

홈 디렉터리의 관리자 워크스테이션에서 이 주제의 나머지 단계를 모두 수행하세요.

2. 구성 파일 작성

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

사용자 클러스터 구성 파일 문서를 살펴보고 구성 파일을 숙지합니다. 다음 단계를 완료할 때 참조되므로 이 문서를 개별 탭 또는 창으로 열어 두는 것이 좋을 수 있습니다.

name

name 필드를 사용자 클러스터용으로 선택한 이름으로 설정합니다.

gkeOnPremVersion

이 필드는 이미 채워져 있습니다. VMware용 GKE 버전을 지정합니다. 예를 들면 1.15.0-gke.581입니다.

enableControlplaneV2

enableControlplaneV2true로 설정합니다.

enableDataplaneV2

enableDataplaneV2true로 설정합니다.

vCenter

관리자 클러스터 구성 파일vCenter 섹션에 설정한 값은 전역입니다. 즉, 관리자 클러스터 및 연결된 사용자 클러스터에 적용됩니다.

사용자 클러스터를 만들 때마다 전역 vCenter 값 중 일부를 재정의할 수 있습니다.

전역 vCenter 값을 재정의하려면 사용자 클러스터 구성 파일의 vCenter 섹션에 있는 관련 필드를 입력합니다.

특히 관리자 클러스터와 사용자 클러스터에 별도의 vSphere 클러스터를 사용하고 관리자 클러스터와 사용자 클러스터에 별도의 데이터 센터를 사용할 수 있습니다.

데이터 센터 1개와 vSphere 클러스터 1개 사용

기본 옵션은 관리자 클러스터와 사용자 클러스터에 데이터 센터 하나와 vSphere 클러스터 하나를 사용하는 것입니다. 이 옵션의 경우 사용자 클러스터 구성 파일에서 vCenter 값을 설정하지 마세요. vCenter 값은 관리자 클러스터에서 상속됩니다.

별도의 vSphere 클러스터 사용

자체 vSphere 클러스터에 있는 사용자 클러스터를 만들려면 사용자 클러스터 구성 파일에서 vCenter.cluster 값을 지정합니다.

관리자 클러스터와 사용자 클러스터가 별도의 vSphere 클러스터에 있으면 같은 데이터 센터나 다른 데이터 센터에 있을 수 있습니다.

별도의 vSphere 데이터 센터 사용

사용자 클러스터와 관리자 클러스터는 서로 다른 데이터 센터에 있을 수 있습니다. 이 경우 두 클러스터도 별도의 vSphere 클러스터에 있습니다.

사용자 클러스터 구성 파일에 vCenter.datacenter를 지정하는 경우 다음 사항도 지정해야 합니다.

  • vCenter.networkName
  • vCenter.datastore 또는 vCenter.storagePolicyName
  • vCenter.cluster 또는 vCenter.resourcePool

별도의 vCenter 계정 사용

사용자 클러스터는 관리자 클러스터와는 다른 vCenter 계정(다른 vCenter.credentials 사용)을 사용할 수 있습니다. 관리자 클러스터의 vCenter 계정에는 관리자 클러스터 데이터 센터에 대한 액세스 권한이 필요하지만 사용자 클러스터의 vCenter 계정에는 사용자 클러스터 데이터 센터에 대한 액세스 권한만 필요합니다.

별도의 vCenter 서버 인스턴스 사용

특정 상황에서는 자체 vCenter Server 인스턴스를 사용하는 사용자 클러스터를 만드는 것이 좋습니다. 즉, 관리자 클러스터 및 연결된 사용자 클러스터에 서로 다른 vCenter Server 인스턴스가 사용됩니다.

예를 들어 에지 위치에서 vCenter Server를 실행하는 물리적 머신과 ESXi를 실행하는 하나 이상의 물리적 머신을 사용할 수 있습니다. 그러면 vCenter Server의 로컬 인스턴스를 사용하여 데이터 센터, 클러스터, 리소스 풀, 데이터 스토어, 폴더를 포함한 vSphere 객체 계층 구조를 만들 수 있습니다.

사용자 클러스터 구성 파일의 전체 vCenter 섹션을 작성합니다. 특히 관리자 클러스터 구성 파일에 지정한 vCenter Server 주소와 다른 vCenter.address 값을 지정합니다. 예를 들면 다음과 같습니다.

vCenter:
  address: "vc-edge.example"
  datacenter: "vc-edge"
  cluster: "vc-edge-workloads"
  resourcePool: "vc-edge-pool
  datastore: "vc-edge-datastore
  caCertPath: "/usr/local/google/home/me/certs/edge-cacert.pem"
  credentials:
    fileRef:
      path: "credential.yaml"
      entry: "vCenter-edge"
  folder: "edge-vm-folder"

또한 network.vCenter.networkName 필드를 채웁니다.

network

워커 노드가 IP 주소를 가져오는 방법을 결정합니다. 옵션은 다음과 같습니다.

  • 미리 설정한 DHCP 서버에서 network.ipMode.type"dhcp"로 설정합니다.

  • 제공한 고정 IP 주소 목록에서 가져옵니다. network.ipMode.type"static"으로 설정하고 고정 IP 주소를 제공하는 IP 블록 파일을 만듭니다. IP 블록 파일의 예시는 작성된 구성 파일 예시를 참조하세요.

워커 노드에 고정 IP 주소를 사용하려면 network.ipMode.ipBlockFilePath 필드를 채웁니다.

사용자 클러스터의 제어 영역 노드는 사용자가 제공하는 고정 주소 목록에서 IP를 가져와야 합니다. 이는 워커 노드가 DHCP 서버에서 주소를 가져올 경우에도 마찬가지입니다. 제어 영역 노드에 고정 IP 주소를 지정하려면 network.controlPlaneIPBlock 섹션을 입력합니다. 고가용성(HA) 사용자 클러스터가 필요한 경우 3개의 IP 주소를 지정합니다. 그렇지 않으면 IP 주소를 1개 지정합니다.

hostConfig 섹션을 입력하여 DNS 및 NTP 서버를 지정합니다. 이러한 DNS 및 NTP 서버는 제어 영역 노드용입니다. 워커 노드에 고정 IP 주소를 사용하는 경우 이러한 DNS 및 NTP 서버가 워커 노드에도 사용됩니다.

network.podCIDRnetwork.serviceCIDR에는 미리 입력된 값이 있으며, 네트워크에서 이미 사용 중인 주소와 충돌하지 않는 한 그대로 유지할 수 있습니다. Kubernetes는 이러한 범위를 사용하여 클러스터의 포드 및 서비스에 IP 주소를 할당합니다.

DHCP 서버를 사용하거나 고정 IP 주소 목록을 지정하는지에 관계없이 사용자 클러스터에 사용할 수 있도록 충분한 IP 주소가 필요합니다. 필요한 IP 주소 수에 대한 설명은 IP 주소 계획을 참조하세요.

loadBalancer

사용자 클러스터의 Kubernetes API 서버에 대해 VIP를 별도로 설정합니다. 사용자 클러스터의 인그레스 서비스에 대해 다른 VIP를 설정합니다. VIP를 loadBalancer.vips.controlPlaneVIPloadBalancer.vips.ingressVIP의 값으로 제공합니다.

사용할 부하 분산의 유형을 결정합니다. 옵션은 다음과 같습니다.

부하 분산 옵션에 대한 상세 설명은 부하 분산 개요를 참조하세요.

advancedNetworking

이그레스 NAT 게이트웨이를 만들려면 advancedNetworkingtrue로 설정합니다.

multipleNetworkInterfaces

포드에 여러 네트워크 인터페이스를 구성할지 여부를 결정하고 이에 따라 multipleNetworkInterfaces를 설정합니다.

storage

vSphere CSI 구성요소 배포를 중지하려면 storage.vSphereCSIdisabledtrue로 설정하세요.

masterNode

masterNode 섹션에서 사용자 클러스터에 원하는 제어 영역 노드 수를 1개 또는 3개로 지정할 수 있습니다. 제어 영역 노드의 데이터 스토어와 노드의 자동 크기 조절 사용 설정 여부를 지정할 수도 있습니다.

network.controlPlaneIPBlock 섹션에서 제어 영역 노드에 IP 주소를 지정했음을 기억하세요.

nodePools

노드 풀은 구성이 모두 동일한 클러스터의 노드 그룹입니다. 예를 들어 풀 하나의 노드는 Windows를 실행하고 다른 풀의 노드는 Linux를 실행할 수 있습니다.

nodePools 섹션을 입력하여 노드 풀을 최소 하나 이상 지정해야 합니다.

자세한 내용은 노드 풀노드 풀 만들기 및 관리를 참조하세요.

antiAffinityGroups

antiAffinityGroups.enabledtrue 또는 false로 설정합니다.

이 필드는 VMware용 GKE에서 워커 노드에 대해 Distributed Resource Scheduler(DRS) 안티-어피니티 규칙을 만들어 데이터 센터의 3개 이상 물리적 호스트에 분산되는지 여부를 지정합니다.

stackdriver

클러스터에 Cloud Logging 및 Cloud Monitoring을 사용 설정하려면 stackdriver 섹션을 입력합니다.

이 섹션은 기본적으로 필요합니다. 즉, 이 섹션을 입력하지 않으면 gkectl create cluster를 실행할 때 --skip-validation-stackdriver 플래그를 포함해야 합니다.

새 클러스터에 대한 다음 요구사항을 참고하세요.

  • stackdriver.projectID의 ID는 gkeConnect.projectIDcloudAuditLogging.projectID의 ID와 동일해야 합니다.

  • stackdriver.clusterLocation에 설정된 Google Cloud 리전은 cloudAuditLogging.clusterLocation에 설정된 리전과 동일해야 합니다. 또한 gkeOnPremAPI.enabledtrue인 경우 gkeOnPremAPI.location에 동일한 리전을 설정해야 합니다.

프로젝트 ID와 리전이 동일하지 않으면 클러스터 생성에 실패합니다.

gkeConnect

사용자 클러스터를 Google Cloud Fleet에 등록해야 합니다.

gkeConnect 섹션을 입력하여 Fleet 호스트 프로젝트 및 연결된 서비스 계정을 지정합니다.

구성 파일에 stackdrivercloudAuditLogging 섹션을 포함하는 경우 gkeConnect.projectID의 ID는 stackdriver.projectIDcloudAuditLogging.projectID에 설정된 ID와 동일해야 합니다. 프로젝트 ID가 동일하지 않으면 클러스터 생성에 실패합니다.

gkeOnPremAPI

1.16 이상에서 GKE On-Prem API가 Google Cloud 프로젝트에 사용 설정된 경우 프로젝트의 모든 클러스터가 stackdriver.clusterLocation에 구성된 리전의 GKE On-Prem API에 자동으로 등록됩니다.

  • GKE On-Prem API에서 프로젝트의 모든 클러스터를 등록하려면 프로젝트의 GKE On-Prem API를 활성화하고 사용하기 위해 시작하기 전에의 단계를 수행해야 합니다.

  • GKE On-Prem API에서 클러스터를 등록하지 않으려면 이 섹션을 포함하고 gkeOnPremAPI.enabledfalse로 설정합니다. 프로젝트에 클러스터를 등록하지 않으려면 프로젝트에서 gkeonprem.googleapis.com(GKE On-Prem API의 서비스 이름)을 중지합니다. 자세한 내용은 서비스 사용 중지를 참조하세요.

usageMetering

클러스터에 사용량 측정을 사용 설정하려면 usageMetering 섹션을 입력합니다.

cloudAuditLogging

클러스터의 Kubernetes API 서버의 감사 로그를 Cloud 감사 로그와 통합하려면 cloudAuditLogging 섹션을 입력합니다.

새 클러스터에 대한 다음 요구사항을 참고하세요.

  • cloudAuditLogging.projectID의 ID는 gkeConnect.projectIDstackdriver.projectID의 ID와 동일해야 합니다.

  • cloudAuditLogging.clusterLocation에 설정된 Google Cloud 리전은 stackdriver.clusterLocation에 설정된 리전과 동일해야 합니다. 또한 gkeOnPremAPI.enabledtrue인 경우 gkeOnPremAPI.location에 동일한 리전을 설정해야 합니다.

프로젝트 ID와 리전이 동일하지 않으면 클러스터 생성에 실패합니다.

작성된 구성 파일 예시

다음은 IP 블록 파일과 사용자 클러스터 구성 파일의 예시입니다.

user-ipblock.yaml

blocks:
  - netmask: 255.255.255.0
    gateway: 172.16.21.1
    ips:
    - ip: 172.16.21.2
      hostname: worker-vm-1
    - ip: 172.16.21.3
      hostname: worker-vm-2
    - ip: 172.16.21.4
      hostname: worker-vm-3
    - ip: 172.16.21.5
      hostname: worker-vm-4

user-cluster.yaml

cat user-cluster.yaml
apiVersion: v1
kind: UserCluster
name: "my-user-cluster"
gkeOnPremVersion: 1.15.0-gke.581
enableControlplaneV2: true
enableDataplaneV2: true
network:
  hostConfig:
    dnsServers:
    - "203.0.113.2"
    - "198.51.100.2"
    ntpServers:
    - "216.239.35.4"
  ipMode:
    type: "static"
    ipBlockFilePath: "user-ipblock.yaml"
  serviceCIDR: 10.96.0.0/20
  podCIDR: 192.168.0.0/16
  controlPlaneIPBlock:
    netmask: "255.255.255.0"
    gateway: "172.16.21.1"
    ips:
    - ip: "172.16.21.6"
      hostname: "cp-vm-1"
    - ip: "172.16.21.7"
      hostname: "cp-vm-2"
    - ip: "172.16.21.8"
      hostname: "cp-vm-3"
loadBalancer:
  vips:
    controlPlaneVIP: "172.16.21.40"
    ingressVIP: "172.16.21.30"
  kind: MetalLB
  metalLB:
    addressPools:
    - name: "address-pool-1"
      addresses:
      - "172.16.21.30-172.16.21.39"
masterNode:
  cpus: 4
  memoryMB: 8192
  replicas: 3
nodePools:
- name: "worker-node-pool"
  cpus: 4
  memoryMB: 8192
  replicas: 3
  enableLoadBalancer: true
antiAffinityGroups:
  enabled: true
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"
autoRepair:
  enabled: true

앞의 예시에서 이해가 필요한 중요 부분은 다음과 같습니다.

  • 워커 노드의 고정 IP 주소는 IP 블록 파일에 지정됩니다. 워커 노드가 3개뿐인데도 IP 블록 파일은 주소가 4개입니다. 추가 IP 주소는 클러스터 업그레이드, 업데이트, 자동 복구 중에 필요합니다.

  • DNS 및 NTP 서버는 hostConfig 섹션에 지정됩니다. 이 예시에서 이러한 DNS 및 NTP 서버는 제어 영역 노드 및 워커 노드용입니다. 이는 워커 노드에 고정 IP 주소가 있기 때문입니다. 워커 노드가 DHCP 서버에서 IP 주소를 가져온 경우 이러한 DNS 및 NTP 서버는 제어 영역 노드에만 사용됩니다.

  • 3개의 제어 영역 노드에 대한 고정 IP 주소는 사용자 클러스터 구성 파일의 network.controlPlaneIPBlock 섹션에 지정됩니다. 이 블록에는 추가 IP 주소가 필요하지 않습니다.

  • masterNode.replicas 필드는 3으로 설정됩니다.

  • 제어 영역 VIP와 인그레스 VIP는 모두 워커 노드 및 제어 영역 노드와 동일한 VLAN에 있습니다.

  • LoadBalancer 유형의 서비스를 위해 설정된 VIP는 사용자 클러스터 구성 파일의 loadBalancer.metalLB.addressPools 섹션에 지정됩니다. 이러한 VIP는 워커 노드 및 제어 영역 노드와 동일한 VLAN에 있습니다. 이 섹션에 지정된 VIP 집합에는 인그레스 VIP가 포함되어야 하며 제어 영역 VIP가 포함되면 안 됩니다.

  • 사용자 클러스터 구성 파일에는 vCenter 섹션이 없습니다. 따라서 사용자 클러스터에 관리자 클러스터와 동일한 vSphere 리소스가 사용됩니다.

구성 파일 유효성 검사

사용자 클러스터 구성 파일을 입력한 후 gkectl check-config를 실행하여 파일이 유효한지 확인합니다.

gkectl check-config --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

다음을 바꿉니다.

  • ADMIN_CLUSTER_KUBECONFIG: 관리자 클러스터의 kubeconfig 파일 경로입니다.

  • USER_CLUSTER_CONFIG: 사용자 클러스터 구성 파일의 경로입니다.

명령어가 실패 메시지를 반환하면 문제를 해결하고 파일을 다시 검사합니다.

시간이 오래 걸리는 검사를 건너뛰려면 --fast 플래그를 전달합니다. 개별 검사를 건너뛰려면 --skip-validation-xxx 플래그를 사용합니다. check-config 명령어에 대해 자세히 알아보려면 실행 전 검사 실행을 참조하세요.

3. (선택사항) OS 이미지를 vSphere로 가져오고 컨테이너 이미지를 비공개 레지스트리로 푸시

다음 중 하나라도 해당하는 경우 gkectl prepare를 실행합니다.

  • 사용자 클러스터가 관리자 클러스터와 다른 vSphere 데이터 센터에 있습니다.

  • 사용자 클러스터에 관리자 클러스터와 다른 vCenter Server가 있습니다.

  • 사용자 클러스터는 관리자 클러스터에서 사용하는 비공개 레지스트리와 다른 비공개 Container Registry를 사용합니다.

gkectl prepare --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --bundle-path BUNDLE \
    --user-cluster-config USER_CLUSTER_CONFIG

다음을 바꿉니다.

  • ADMIN_CLUSTER_KUBECONFIG: 관리자 클러스터 kubeconfig 파일의 경로입니다.

  • BUNDLE: 번들 파일의 경로입니다. 이 파일은 /var/lib/gke/bundles/의 관리자 워크스테이션에 있습니다. 예를 들면 다음과 같습니다.

    /var/lib/gke/bundles/gke-onprem-vsphere-1.14.0-gke.421-full.tgz
    
  • USER_CLUSTER_CONFIG: 사용자 클러스터 구성 파일의 경로입니다.

4. 사용자 클러스터 만들기

사용자 클러스터를 만듭니다.

gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

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

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

kubeconfig 파일에는 사용자 클러스터의 이름이 포함되어 있습니다. 클러스터 이름을 보려면 다음을 실행합니다.

kubectl config get-clusters --kubeconfig USER_CLUSTER_KUBECONFIG

출력에 클러스터의 이름이 표시됩니다. 예를 들면 다음과 같습니다.

NAME
my-user-cluster

원하는 경우 kubeconfig 파일의 이름과 위치를 변경할 수 있습니다.

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

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

kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG

USER_CLUSTER_KUBECONFIG를 사용자 클러스터 kubeconfig 파일 경로로 바꿉니다.

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

cp-vm-1       Ready    control-plane,master   18m
cp-vm-2       Ready    control-plane,master   18m
cp-vm-3       Ready    control-plane,master   18m
worker-vm-1   Ready                           6m7s
worker-vm-2   Ready                           6m6s
worker-vm-3   Ready                           6m14s

사용자 클러스터 업그레이드

VMware용 Anthos 클러스터 업그레이드의 안내를 따릅니다.

클러스터 삭제

Controlplane V2가 사용 설정된 사용자 클러스터를 삭제하려면 사용자 클러스터 삭제의 안내를 따르세요.

Controlplane V2가 사용 설정된 사용자 클러스터를 삭제하면 데이터 디스크가 자동으로 삭제됩니다.

문제 해결

클러스터 생성 및 업그레이드 문제 해결을 참조하세요.

다음 단계