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

이 문서에서는 kubeception을 사용하는 사용자 클러스터를 만드는 방법을 보여줍니다.

kubeception이란 무엇인가요?

kubeception은 Kubernetes 클러스터를 사용하여 다른 Kubernetes 클러스터를 만들고 관리하는 아이디어를 나타내는 용어입니다. VMware용 GKE와 관련하여 kubeception은 사용자 클러스터의 제어 영역이 관리자 클러스터의 하나 이상의 노드에서 실행되는 경우를 나타냅니다.

kubeception은 사용하지 않는 것이 좋습니다. 대신 Controlplane V2를 사용하는 것이 좋습니다. Controlplane V2를 사용하면 사용자 클러스터의 제어 영역 노드는 사용자 클러스터 자체에 있습니다.

IP 주소 계획

IP 주소 계획(kubeception)의 안내를 따르세요.

클러스터 구성 파일 작성

사용자 클러스터 만들기(Controlplane V2)의 안내를 따릅니다.

사용자 클러스터 구성 파일을 입력할 때 다음을 수행합니다.

  • enableControlplaneV2false로 설정합니다.

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

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

  • 사용자 클러스터에 Dataplane V2 사용 여부를 결정하고 이에 따라 enableDataplaneV2를 설정합니다.

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

  • 구성 파일에 gkeOnPremAPI, cloudAuditLogging, stackdriver 섹션을 포함하는 경우 gkeOnPremAPI.location, cloudAuditLogging.clusterLocation, stackdriver.location에서 동일한 Google Cloud 리전을 설정해야 합니다. 리전이 동일하지 않으면 클러스터 생성에 실패합니다.

작성된 구성 파일 예시

다음은 채워진 IP 블록 파일 및 채워진 사용자 클러스터 구성 파일의 예시입니다. 이 구성에 따라 전부는 아니더라도 사용 가능한 기능 중 일부가 사용 설정됩니다.

user-ipblock.yaml

blocks:
  - netmask: 255.255.252.0
    gateway: 172.16.23.254
    ips:
    - ip: 172.16.20.21
      hostname: user-host1
    - ip: 172.16.20.22
      hostname: user-host2
    - ip: 172.16.20.23
      hostname: user-host3
    - ip: 172.16.20.24
      hostname: user-host4

user-cluster.yaml

apiVersion: v1
kind: UserCluster
name: "my-user-cluster"
gkeOnPremVersion: 1.15.0-gke.581
enableControlplaneV2: false
network:
  hostConfig:
    dnsServers:
    - "203.0.113.1"
    - "198.51.100.1"
    ntpServers:
    - "216.239.35.4"
  ipMode:
    type: static
    ipBlockFilePath: "user-ipblock.yaml"
  serviceCIDR: 10.96.0.0/20
  podCIDR: 192.168.0.0/16
loadBalancer:
  vips:
    controlPlaneVIP: "172.16.20.32"
    ingressVIP: "172.16.21.30"
  kind: "MetalLB"
  metalLB:
    addressPools:
    - name: "my-address-pool"
      addresses:
      - "172.16.21.30 - 172.16.21.39"
enableDataplaneV2: true
masterNode:
  cpus: 4
  memoryMB: 8192
  replicas: 1
nodePools:
- name: "my-node-pool"
  cpus: 4
  memoryMB: 8192
  replicas: 3
  osImageType: "ubuntu_containerd"
  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

구성 파일 유효성 검사

사용자 클러스터 구성 파일을 입력한 후 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 명령어에 대해 자세히 알아보려면 실행 전 검사 실행을 참조하세요.

(선택사항) 사용자 클러스터의 Seesaw 부하 분산기 만들기

번들 Seesaw 부하 분산기를 사용하기로 선택한 경우 이 섹션의 단계를 수행합니다. 그렇지 않으면 이 섹션을 건너뛰세요.

Seesaw 부하 분산기의 VM을 만들고 구성합니다.

gkectl create loadbalancer --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

(선택사항) 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: 사용자 클러스터 구성 파일의 경로입니다.

사용자 클러스터 만들기

다음 명령어를 실행하여 사용자 클러스터를 만듭니다.

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 파일의 이름과 위치를 변경할 수 있습니다.

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

다음 명령어를 실행하여 사용자 클러스터가 실행 중인지 확인합니다.

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 ...

문제 해결

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

다음 단계