사용자 지정 ClusterClass를 기반으로 TKG 클러스터를 프로비저닝하려면 다음 지침을 참조하십시오. 이러한 지침은 vSphere 8 U2 이상 환경에만 적용됩니다.

사전 요구 사항

사용자 지정 ClusterClass를 기반으로 TKG 클러스터를 프로비저닝하는 절차가 vSphere 8 U2 릴리스에 대해 업데이트되었습니다.

다음 사전 요구 사항을 준수합니다.
  • vSphere 8 U2+ 환경
  • 워크로드 관리 사용
  • 감독자 구성됨
  • vSphere에 대한 Kubernetes CLI 도구가 설치된 Ubuntu 클라이언트
주의: 사용자 지정 ClusterClass는 업스트림 클러스터 API 설명서에 따른 실험적인 Kubernetes 기능입니다. 사용자 지정 ClusterClass에서 사용할 수 있는 사용자 지정 범위로 인해 VMware 가능한 모든 사용자 지정을 테스트하거나 검증할 수 없습니다. 고객은 사용자 지정 ClusterClass 클러스터를 테스트, 검증 및 문제 해결해야 합니다. 고객은 사용자 지정 ClusterClass 클러스터와 관련된 지원 티켓을 열 수 있습니다. 다만, VMware 지원 팀이 최선의 노력을 기울이더라도, 사용자 지정 ClusterClass 클러스터에 대해 열린 모든 문제에 대한 해결을 보장할 수는 없습니다. 운영 환경에서 사용자 지정 ClusterClass 클러스터를 배포하기 전에 고객은 이러한 위험을 알고 있어야 합니다.

개략적인 워크플로

개략적인 워크플로는 다음과 같습니다.

시작하려면 다음 워크플로만 있으면 됩니다.
단계 작업 지침
1 기본 ClusterClass를 복제하여 사용자 지정 ClusterClass를 생성합니다. 1: 사용자 지정 ClusterClass 생성
2 사용자 지정 ClusterClass를 기반으로 새 TKG 클러스터를 프로비저닝하고 모든 클러스터 노드가 제대로 작동하는지 확인합니다. 2: 사용자 지정 ClusterClass를 기반으로 TKG 클러스터 생성
사용자 지정 ClusterClass를 변경하고 사용자 지정 ClusterClass 클러스터 노드의 롤링 업데이트를 시작하려면 다음 워크플로를 참조하십시오.
참고: 아래 워크플로에 설명된 작업은 사용자 지정 ClusterClass에 대해 수행할 수 있는 작업의 예입니다. 사용 사례는 다를 수 있지만 일반 워크플로를 적용할 수 있어야 합니다.
단계 작업 지침
3 작업자 노드 중 하나에 SSH를 통해 연결하여 업데이트할 패키지가 있는지 확인합니다. 3: 패키지 업데이트의 존재 여부 확인
4 업데이트를 수행하는 새 명령으로 사용자 지정 ClusterClass를 업데이트합니다. 4: 사용자 지정 ClusterClass 업데이트
5 업데이트가 이미 실행된 새 노드의 롤아웃을 확인합니다. 5: 클러스터 노드의 롤링 업데이트 확인

1: 사용자 지정 ClusterClass 생성

첫 번째 부분에는 이름이 tanzukubernetescluster인 기본 ClusterClass를 복제하여 ccc( customclusterclass의 약어)라는 사용자 지정 ClusterClass를 생성하는 작업이 포함됩니다.
참고: 사용자 지정 ClusterClass 이름은 사용자가 정의합니다. 다른 이름을 사용하는 경우 지침을 적절히 조정하십시오.
  1. 이름이 ccc-nsvSphere 네임스페이스를 생성하고 구성합니다.

    사용 권한, 스토리지, 컨텐츠 라이브러리 및 VM 클래스를 구성합니다. 필요한 경우 설명서를 참조하십시오.

    참고: vSphere 네임스페이스 이름은 사용자가 정의합니다. 다른 이름을 사용하는 경우 지침을 적절히 조정하십시오.
  2. 감독자에 로그인합니다.
    kubectl vsphere login --server=IP-ADDRESS --vsphere-username [email protected]
  3. 기본 ClusterClass의 출력을 이름이 ccc.yaml인 파일에 씁니다.
    kubectl -n ccc-ns get clusterclass tanzukubernetescluster -o yaml > ccc.yaml
    또는 바로 가기 버전:
    kubectl -n ccc-ns get cc tanzukubernetescluster -o yaml > ccc.yaml
  4. 복제된 ClusterClass 파일을 편집하기 위해 엽니다.
    vim ccc.yaml
  5. ccc.yaml 파일을 편집합니다.
    • metadata.creationTimestamp 줄을 삭제합니다.
    • metadata.generation 줄을 삭제합니다.
    • metadata.resourceVersion 줄을 삭제합니다.
    • metadata.uid 줄을 삭제합니다.
    • metadata.name 값을 tanzukubernetescluster에서 ccc로 변경합니다
    • metadata.namespace 값을 그대로 둡니다. ccc-ns
    • run.tanzu.vmware.com/resolve-tkr: ""에 대해 metadata.annotations 값을 그대로 둡니다. 이 주석은 TKR 데이터/확인에 필요합니다.
  6. 변경 내용을 저장하고 확인합니다.
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: ClusterClass
    metadata:
      annotations:
        run.tanzu.vmware.com/resolve-tkr: ""
      name: ccc
      namespace: ccc-ns
    spec:
    ...
  7. 사용자 지정 ClusterClass 개체를 생성합니다.
    kubectl apply -f ccc.yaml -n ccc-ns
    예상 결과:
    clusterclass.cluster.x-k8s.io/ccc created
  8. 사용자 지정 ClusterClass를 나열합니다.
    kubectl get cc -n ccc-ns
    예상 결과:
    NAME                     AGE
    ccc                      3m14s
    tanzukubernetescluster   29m
    

2: 사용자 지정 ClusterClass를 기반으로 TKG 클러스터 생성

Cluster v1beta1 API를 사용하여 ClusterClass를 기반으로 클러스터를 생성합니다.
  1. 클러스터를 프로비저닝하도록 ccc-cluster.yaml 매니페스트를 구성합니다.
    #ccc-cluster.yaml
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      name: ccc-cluster
    spec:
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.0.2.0/16
        services:
          cidrBlocks:
          - 198.51.100.0/12
        serviceDomain: cluster.local
      topology:
        class: ccc
        version: v1.26.5---vmware.2-fips.1-tkg.1
        controlPlane:
          replicas: 1
        workers:
          machineDeployments:
            - class: node-pool
              name: tkgs-node-pool-1
              replicas: 1
        variables:
        - name: vmClass
          value: guaranteed-small
        - name: storageClass
          value: tkg-storage-profile
    형식 설명:
    • metadata.name 값은 클러스터: ccc-cluster의 이름입니다.
    • spec.topology.class 값은 사용자 지정 ClusterClass: ccc의 이름입니다.
    • spec.topology.version 값은 TKR 버전입니다.
    • spec.topology.variables.storageClass 값은 영구 스토리지 클래스의 이름입니다.
    참고: 테스트 목적으로는 제어부 및 작업자 노드 풀에 대해 복제본 1개면 충분합니다. 운영 환경에서는 제어부에 대해 복제본 3개를 사용하고 각 작업자 노드 풀에 대해 최소 3개의 복제본을 사용합니다.
  2. 사용자 지정 ClusterClass를 기반으로 TKG 클러스터를 생성합니다.
    kubectl apply -f ccc-cluster.yaml -n ccc-ns
    예상 결과:
    cluster.cluster.x-k8s.io/ccc-cluster created
  3. 클러스터 프로비저닝을 확인합니다.
    다음 명령을 실행합니다. 모든 클러스터 노드가 제대로 표시될 때까지 기다립니다.
    kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
    참고: 5단계에서 롤링 업데이트 진행률을 모니터링할 수 있도록 별도의 세션에서 이 명령을 실행하는 것이 유용합니다.

3: 패키지 업데이트의 존재 여부 확인

작업자 노드 중 하나에 SSH를 통해 연결하여 업데이트할 패키지가 있는지 확인합니다.
참고: 이 단계의 목표는 단지 업데이트할 패키지가 있는지 확인하는 것이며 실제로 업데이트하는 것은 아닙니다. 새 클러스터 노드가 롤아웃되면 사용자 지정 ClusterClass에 의해 업데이트됩니다(아 단계 다음). 이 단계와 다음 단계는 사용자 지정 ClusterClass에 대해 수행할 수 있는 작업의 예입니다.
  1. 다음 명령을 실행하여 SSH 암호를 가져옵니다.
    export CC=ccc-cluster && kubectl get secret -n ccc-ns ${CC}-ssh -o jsonpath={.data.ssh-privatekey} | base64 -d > ${CC}-ssh && chomd 4000 ${CC}-ssh
  2. 다음 명령을 실행하여 작업자 노드 VM의 IP 주소를 가져옵니다.
    kubectl -n ccc-ns get vm -o wide
    참고: 여러 작업자 노드를 배포한 경우 하나를 선택합니다. 제어부 노드를 사용하지 마십시오.
  3. 다음 명령을 실행하여 SSH를 통해 작업자 노드 VM에 연결합니다.
    ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
    예:
    ssh -i ${CC}-ssh [email protected]
    참고: 연결을 계속하려면 "yes"를 입력합니다.
    예상 결과: 호스트에 SSH로 연결하면 다음 메시지가 표시됩니다.
    tdnf update info not availble yet!
  4. 다음 명령을 실행하고 업데이트를 확인합니다.
    sudo -i
    tdnf update
  5. 프롬프트에서 no(업데이트 안 함)를 의미하는 "N"을 입력합니다.
    예상 결과:
    Operation aborted
    참고: 여기서 목적은 업데이트를 시작하는 것이 아니라 단지 업데이트가 있는지 확인하는 것입니다. 다음 섹션에서 사용자 지정 ClusterClass에 명령을 추가하여 업데이트를 시작합니다.
  6. SSH 세션에서 로그아웃하려면 "exit"를 입력한 다음, "exit"를 다시 입력합니다.

4: 사용자 지정 ClusterClass 업데이트

tdnf 업데이트를 수행하는 새 명령으로 사용자 지정 ClusterClass를 업데이트합니다.
  1. 이름이 ccc인 사용자 지정 ClusterClass를 편집하기 위해 를 엽니다.
    kubectl edit cc ccc -n ccc-ns
  2. postKubeadmCommands가 있는 다음 섹션까지 아래로 스크롤합니다.
      - definitions:
        - jsonPatches:
          - op: add
            path: /spec/template/spec/kubeadmConfigSpec/postKubeadmCommands
            valueFrom:
              template: |
                - touch /root/kubeadm-complete
                - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete'
                - vmware-rpctool 'info-set guestinfo.kubeadm.error ---'
          selector:
            apiVersion: controlplane.cluster.x-k8s.io/v1beta1
            kind: KubeadmControlPlaneTemplate
            matchResources:
              controlPlane: true
        - jsonPatches:
          - op: add
            path: /spec/template/spec/postKubeadmCommands
            valueFrom:
              template: |
                - touch /root/kubeadm-complete
                - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete'
                - vmware-rpctool 'info-set guestinfo.kubeadm.error ---'
          selector:
            apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
            kind: KubeadmConfigTemplate
            matchResources:
              machineDeploymentClass:
                names:
                - node-pool
        name: controlPlanePostKubeadmCommandsSuccess
    
    valueFrom.template 필드에 다음 명령을 추가합니다.
    - tdnf update -y
    예:
      - definitions:
        - jsonPatches:
          - op: add
            path: /spec/template/spec/kubeadmConfigSpec/postKubeadmCommands
            valueFrom:
              template: |
                - touch /root/kubeadm-complete
                - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete'
                - vmware-rpctool 'info-set guestinfo.kubeadm.error ---'
                - tdnf update -y
          selector:
            apiVersion: controlplane.cluster.x-k8s.io/v1beta1
            kind: KubeadmControlPlaneTemplate
            matchResources:
              controlPlane: true
        - jsonPatches:
          - op: add
            path: /spec/template/spec/postKubeadmCommands
            valueFrom:
              template: |
                - touch /root/kubeadm-complete
                - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete'
                - vmware-rpctool 'info-set guestinfo.kubeadm.error ---'
                - tdnf update -y
          selector:
            apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
            kind: KubeadmConfigTemplate
            matchResources:
              machineDeploymentClass:
                names:
                - node-pool
        name: controlPlanePostKubeadmCommandsSuccess
    
  3. 사용자 지정 ClusterClass에 변경 내용을 저장하고 편집기를 닫습니다.
    wq
    예상 결과:
    clusterclass.cluster.x-k8s/ccc edited

5: 클러스터 노드의 롤링 업데이트 확인

사용자 지정 ClusterClass를 업데이트하면 해당 ClusterClass를 기반으로 프로비저닝된 클러스터에 대한 클러스터 노드의 롤링 업데이트가 트리거됩니다. 새 노드에 위의 명령이 적용된 상태가 나타납니다.
  1. 다음 명령을 실행하여 클러스터 프로비저닝을 확인합니다.
    모든 클러스터 노드가 제대로 표시될 때까지 기다립니다.
    kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
  2. 새 UUID가 있는 새 노드가 배포된 것을 볼 수 있습니다.
  3. 다음 명령을 실행하여 SSH를 통해 작업자 노드 VM에 연결합니다.
    ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
    예상 결과: 호스트에 SSH로 연결하면 다음 메시지가 표시됩니다.
    tdnf update info not availble yet!
  4. 다음 명령을 실행합니다.
    sudo -i
    tdnf update

    예상 결과: 업데이트해야 하는 패키지가 훨씬 적어야 합니다.

  5. 프롬프트에서 no(업데이트 안 함)를 의미하는 "N"을 입력합니다.
    예상 결과:
    Operation aborted
  6. 다음 명령을 실행하여 tdnf가 실행되었는지 확인합니다.
    cat /var/log/cloud-init-output.log | grep -i tdnf
  7. SSH 세션에서 로그아웃하려면 "exit"를 입력한 다음, "exit"를 다시 입력합니다.

사용자 지정 ClusterClass 유지 관리

TKG 서비스를 새 버전으로 업그레이드한 후 이전 TKG 서비스 버전의 기본 ClusterClass에서 파생된 사용자 지정 ClusterClass가 새 TKG 서비스 버전과 함께 제공되는 기본 ClusterClass에 대한 변경 내용으로 업데이트되었는지 확인해야 합니다.

다음 워크플로를 사용하여 사용자 지정 ClusterClass를 시스템 제공 ClusterClass와 동기화 상태로 유지합니다. 이러한 지침에서는 여기에 설명된 대로 초기 사용자 지정 ClusterClass를 생성한 것으로 가정합니다.
  1. TKG 서비스 버전을 업그레이드합니다.

    예를 들어 TKG 서비스 v3.0에서 v3.1로 업그레이드합니다.

    TKG 서비스 설치 및 업그레이드의 내용을 참조하십시오.

  2. 여기에 있는 지침에 따라 새 사용자 지정 ClusterClass를 생성합니다.

    이름에 TKG 서비스 버전(예: ccc-3.1)을 추가하여 새 사용자 지정 ClusterClass 버전을 수동으로 지정합니다.

  3. 이전 사용자 지정 ClusterClass의 사용자 지정 패치 및 변수를 새 사용자 지정 ClusterClass에 추가합니다.

    이렇게 하려면 cat ccc.yaml을 실행하고 사용자 지정 패치 및 변수를 ccc-3.1.yaml으로 복사합니다.

  4. 새 사용자 지정 ClusterClass를 적용하고 조정이 성공할 때까지 기다립니다.
  5. 클러스터 개체의 spec.topology.class 필드를 편집하여 이전 사용자 지정 ClusterClass를 사용하는 TKG 클러스터를 새 사용자 지정 ClusterClass로 업데이트합니다.

비관리형 ClusterClass

vSphere 8 U2+에서, TKG 컨트롤러가 사용자 지정 ClusterClass를 관리하는 것을 원치 않는 경우 사용자 지정 ClusterClass에 추가할 수 있는 주석이 있습니다. 이 주석을 추가하는 경우에는 인증서, 암호 등과 같은 모든 기본 Kubernetes 개체를 수동으로 생성해야 합니다. 이 작업을 위한 지침은 vSphere 8 U1 사용자 지정 ClusterClass 설명서를 참조하십시오.

주석은 다음과 같습니다.
주석 키
run.tanzu.vmware.com/unmanaged-clusterclass " "
다음은 이름이 ccc인 사용자 지정 ClusterClass에 주석을 추가하는 방법의 예입니다.
apiVersion: cluster.x-k8s.io/v1beta1
kind: ClusterClass
metadata:
  annotations:
    run.tanzu.vmware.com/resolve-tkr: ""
    run.tanzu.vmware.com/unmanaged-clusterclass: ""
  name: ccc
  namespace: ccc-ns
spec:
...