사용자 지정 ClusterClass 생성

이 항목에서는 TKG(Tanzu Kubernetes Grid) 독립형 관리 클러스터에 고유한 사용자 지정 ClusterClass 리소스를 생성하고, 이를 사용하여 클래스 기반 워크로드 클러스터를 생성하고, 사용자 지정 ClusterClass를 기준으로 하는 클러스터와 작업하는 방법을 설명합니다.

사용자 지정 ClusterClass에서 클러스터를 기반으로 하려면 spec.topology.class를 사용자 지정 ClusterClass 이름으로 설정합니다.

이 절차는 vSphere with Tanzu Supervisor가 있는 TKG에는 적용되지 않습니다.

주의

사용자 지정 ClusterClass는 업스트림 클러스터 API 설명서에 따른 실험적인 Kubernetes 기능입니다. 사용자 지정 ClusterClass에서 사용할 수 있는 사용자 지정 범위로 인해 VMware 가능한 모든 사용자 지정을 테스트하거나 검증할 수 없습니다. 고객은 사용자 지정 ClusterClass 클러스터를 테스트, 검증 및 문제 해결해야 합니다. 고객은 사용자 지정 ClusterClass 클러스터와 관련된 지원 티켓을 열 수 있습니다. 다만, VMware 지원 팀이 최선의 노력을 기울이더라도, 사용자 지정 ClusterClass 클러스터에 대해 열린 모든 문제에 대한 해결을 보장할 수는 없습니다. 운영 환경에서 사용자 지정 ClusterClass 클러스터를 배포하기 전에 고객은 이러한 위험을 알고 있어야 합니다. 기본 ClusterClass 리소스를 사용하여 워크로드 클러스터를 생성하려면 클러스터 배포 단계의 절차를 따르십시오.

요구 사항

사용자 지정 ClusterClass를 생성하려면 로컬에 ytt, imgpkg, Tanzu CLI, kubectl이 설치되어 있어야 합니다. yttimgpkg을 다운로드하고 설치하는 방법에 대한 자세한 내용은 Carvel 도구 설치를 참조하십시오.

옵션: 템플릿 vs. 새 개체 규격

사용자 지정 ClusterClass를 생성하려면 VMware는 기본 ClusterClass 매니페스트 생성에 설명된 기존 기본 ClusterClass 매니페스트 또는 YTT 템플릿부터 시작하는 것이 좋습니다. 기본 ClusterClass 개체의 새 버전(예: 새 버전의 TKG)이 게시되면 동일한 사용자 지정을 구현하기 위해 오버레이를 새 버전에 적용할 수 있습니다. 이 항목의 절차에서는 사용자 지정 ClusterClass 개체를 생성하는 이 방법을 설명합니다.

기존 템플릿을 사용하지 않고 완전히 새로운 ClusterClass 개체를 작성하려면 클러스터 API 설명서의 ClusterClass 쓰기 절차를 따르십시오.

기본 ClusterClass 매니페스트 생성

기본 ClusterClass 매니페스트 또는 Tanzu Kubernetes Grid 제공하는 YTT 템플릿을 기반으로 기본 ClusterClass 매니페스트를 생성할 수 있습니다. 생성하는 모든 사용자 지정 클러스터는 이 기본 ClusterClass 매니페스트를 기반으로 해야 합니다. 프로세스에는 다음 3단계가 있습니다.

  1. 대상 플랫폼에 대한 기본 ClusterClass 매니페스트 또는 YTT 템플릿을 가져옵니다.
  2. 기본 ClusterClass 매니페스트 또는 YTT 템플릿을 사용하여 인프라에 대한 정보를 포함하는 사용자 지정된 기본 ClusterClass 매니페스트를 생성합니다.
  3. 이 기본 ClusterClass 매니페스트를 사용자 지정된 클러스터를 생성할 템플릿으로 사용합니다.

클러스터에 대한 기본 ClusterClass 매니페스트를 생성할 수 있는 방법에는 세 가지가 있습니다.

중요

방법 2와 3은 다음과 같은 사용 사례를 충족해야 하는 고급 사용자를 위한 것입니다.

  • 독립형 관리 클러스터를 배포하지 않고 CI 시스템에 대한 사용자 지정 ClusterClass 정의를 생성하려고 합니다.
  • 워크로드 클러스터가 관리 클러스터가 아닌 다른 인프라를 사용하려고 합니다.

방법 1: 관리 클러스터에서 직접 기본 매니페스트 가져오기

Tanzu Kubernetes Grid v2.3.0 이상에서 관리 클러스터를 배포한 후 ~/.config/tanzu/tkg/clusterclassconfigs 폴더에서 기본 ClusterClass 매니페스트를 찾을 수 있습니다.

관리 클러스터를 배포한 대상 플랫폼에 대한 매니페스트를 보려면 다음 명령을 실행합니다.

tree ~/.config/tanzu/tkg/clusterclassconfigs/

예를 들어 vSphere 관리 클러스터를 배포한 경우 다음 YAML 파일이 표시됩니다.

.config/tanzu/tkg/clusterclassconfigs/
└── tkg-vsphere-default-v1.1.0.yaml
 
1 directory, 1 file

생성된 매니페스트에는 관리 클러스터 배포에서 추출된 대상 플랫폼에 대한 정보가 포함되어 있습니다. 이를 사용자 지정 ClusterClass 생성을 위한 기본 매니페스트로 직접 사용할 수 있습니다. 다음 단계는 기본 ClusterClass 매니페스트 사용자 지정을 참조하십시오.

방법 2: Tanzu CLI에서 YTT 템플릿 가져오기

Tanzu CLI v1.0.0 이상을 설치한 후 관리 클러스터를 배포하기 전에 ~/.config/tanzu/tkg/providers/infrastructure-<provider name>/<provider version>/cconly 폴더에서 기본 ClusterClass에 대한 YTT 템플릿을 찾을 수 있습니다. 이러한 템플릿을 사용하여 사용자 지정 ClusterClass 생성을 위한 기본 매니페스트를 생성할 수 있습니다.

  1. 템플릿을 찾으려면 대상 플랫폼에 대해 적절한 명령을 실행합니다.

    vSphere
    tree ~/.config/tanzu/tkg/providers/infrastructure-vsphere/v1.7.0/cconly
    
    다음과 같은 YAML 파일이 표시됩니다.
    .config/tanzu/tkg/providers/infrastructure-vsphere/v1.7.0/cconly
    ├── base.yaml
    ├── overlay-kube-apiserver-admission.yaml
    └── overlay.yaml
    
    1 directory, 3 files
    
    AWS
    tree ~/.config/tanzu/tkg/providers/infrastructure-aws/v2.1.3/cconly
    
    다음과 같은 YAML 파일이 표시됩니다.
    .config/tanzu/tkg/providers/infrastructure-aws/v2.1.3/cconly
    ├── base.yaml
    ├── overlay-kube-apiserver-admission.yaml
    └── overlay.yaml
    
    Azure
    tree ~/.config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly/
    
    다음과 같은 YAML 파일이 표시됩니다.
    .config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly/
    ├── base.yaml
    ├── overlay-kube-apiserver-admission.yaml
    └── overlay.yaml
    
  2. 다음 내용으로 이름이 user_input.yaml인 YTT 데이터-값 파일을 생성합니다.

    #@data/values
    
    #@overlay/match-child-defaults missing_ok=True
    ---
    
  3. 대상 플랫폼에 적합한 구성 값을 user_input.yaml에 추가합니다.

    관리 클러스터 배포를 배포할 때 사용한 구성 값을 사용할 수 있습니다. 예를 들어 vSphere용 user_input.yaml 파일은 다음과 유사합니다.

    #@data/values
    
    #@overlay/match-child-defaults missing_ok=True
    ---
    ENABLE_MHC: true
    ENABLE_MHC_CONTROL_PLANE: true
    ENABLE_MHC_WORKER_NODE: true
    MHC_UNKNOWN_STATUS_TIMEOUT: 5m
    MHC_FALSE_STATUS_TIMEOUT: 12m
    MHC_MAX_UNHEALTHY_CONTROL_PLANE: 100%
    MHC_MAX_UNHEALTHY_WORKER_NODE: 100%
    NODE_STARTUP_TIMEOUT: 20m
    VSPHERE_TLS_THUMBPRINT: 0A:B4:8F:2E:E4:34:82:90:D5:6A:F8:77:8C:8C:51:24:D2:49:3B:E8
    VSPHERE_DATACENTER: /dc0
    VSPHERE_DATASTORE: /dc0/datastore/sharedVmfs-0
    VSPHERE_FOLDER: /dc0/vm
    VSPHERE_NETWORK: /dc0/network/VM Network
    VSPHERE_RESOURCE_POOL: /dc0/host/cluster0/Resources
    VSPHERE_SERVER: xxx.xxx.xxx.xxx
    VSPHERE_USERNAME: [email protected]
    VSPHERE_CONTROL_PLANE_DISK_GIB: "20"
    VSPHERE_CONTROL_PLANE_MEM_MIB: "8192"
    VSPHERE_CONTROL_PLANE_NUM_CPUS: "4" VSPHERE_WORKER_DISK_GIB: "20"
    VSPHERE_WORKER_MEM_MIB: "8192"
    VSPHERE_WORKER_NUM_CPUS: "4"
    VSPHERE_CLUSTER_CLASS_VERSION: "v1.1.0"       # change it to the version in TKG BOM
    NAMESPACE: "tkg-system"                       # DO NOT change it
    
  4. ytt를 사용하여 대상 플랫폼에 대한 기본 ClusterClass 매니페스트를 생성합니다.

    vSphere
    ytt -f ~/.config/tanzu/tkg/providers/infrastructure-vsphere/v1.7.0/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
    
    AWS
    ytt -f ~/.config/tanzu/tkg/providers/infrastructure-aws/v2.1.3/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
    
    Azure
    ytt -f ~/.config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
    

인프라에 대한 기본 매니페스트를 생성했으므로 다음 단계에 대해서는 기본 ClusterClass 매니페스트 사용자 지정을 참조하십시오.

방법 3: TKG 이미지 레지스트리에서 YTT 템플릿 가져오기

기본 ClusterClass에 대한 YTT 템플릿은 TKG 이미지 저장소에서 다운로드할 수도 있습니다. 이러한 템플릿을 사용하여 사용자 지정 ClusterClass 생성을 위한 기본 매니페스트를 생성할 수 있습니다.

  1. 공식 TKG 레지스트리의 providerTemplate 이미지에서 YTT 템플릿을 가져옵니다.

    TKG v2.3.1의 경우 providerTemplate 이미지 태그는 v0.30.2입니다. TKG BOM 파일에서 providerTemplateImage를 검색하여 태그 버전을 찾을 수 있습니다.

    imgpkg pull -i projects.registry.vmware.com/tkg/tanzu_core/provider/provider-templates:v0.30.2 -o providers
    

    다음과 유사한 출력이 표시됩니다.

    Pulling image 'projects.registry.vmware.com/tkg/tanzu_core/provider/provider-templates@sha256:b210d26c610800f5da4b3aa55bfbc8ffae9275fa2c4073a2b1332e2045a6e1da'
    Extracting layer 'sha256:3ba336232c0e616b2b6c8f263593497c5a059a645f4c6137ea0eb658f4a8538a' (1/1)
    
    Succeeded
    

    YAML 템플릿 파일은 providers 폴더에 다운로드됩니다.

  2. 다음 내용으로 이름이 user_input.yaml인 YTT 데이터-값 파일을 생성합니다.

    #@data/values
    
    #@overlay/match-child-defaults missing_ok=True
    ---
    
  3. 대상 플랫폼에 적합한 구성 값을 user_input.yaml에 추가합니다.

    관리 클러스터 배포를 배포할 때 사용한 구성 값을 사용할 수 있습니다. 예를 들어 vSphere용 user_input.yaml 파일은 다음과 유사합니다.

    #@data/values
    
    #@overlay/match-child-defaults missing_ok=True
    ---
    ENABLE_MHC: true
    ENABLE_MHC_CONTROL_PLANE: true
    ENABLE_MHC_WORKER_NODE: true
    MHC_UNKNOWN_STATUS_TIMEOUT: 5m
    MHC_FALSE_STATUS_TIMEOUT: 12m
    MHC_MAX_UNHEALTHY_CONTROL_PLANE: 100%
    MHC_MAX_UNHEALTHY_WORKER_NODE: 100%
    NODE_STARTUP_TIMEOUT: 20m
    VSPHERE_TLS_THUMBPRINT: 0A:B4:8F:2E:E4:34:82:90:D5:6A:F8:77:8C:8C:51:24:D2:49:3B:E8
    VSPHERE_DATACENTER: /dc0
    VSPHERE_DATASTORE: /dc0/datastore/sharedVmfs-0
    VSPHERE_FOLDER: /dc0/vm
    VSPHERE_NETWORK: /dc0/network/VM Network
    VSPHERE_RESOURCE_POOL: /dc0/host/cluster0/Resources
    VSPHERE_SERVER: xxx.xxx.xxx.xxx
    VSPHERE_USERNAME: [email protected]
    VSPHERE_CONTROL_PLANE_DISK_GIB: "20"
    VSPHERE_CONTROL_PLANE_MEM_MIB: "8192"
    VSPHERE_CONTROL_PLANE_NUM_CPUS: "4" VSPHERE_WORKER_DISK_GIB: "20"
    VSPHERE_WORKER_MEM_MIB: "8192"
    VSPHERE_WORKER_NUM_CPUS: "4"
    VSPHERE_CLUSTER_CLASS_VERSION: "v1.1.0"       # change it to the version in TKG BOM
    NAMESPACE: "tkg-system"                       # DO NOT change it
    
  4. ytt를 사용하여 대상 플랫폼에 대한 기본 ClusterClass 매니페스트를 생성합니다.

    vSphere
    ytt -f providers/infrastructure-vsphere/v1.7.0/cconly -f providers/config_default.yaml -f user_input.yaml
    
    AWS
    ytt -f providers/infrastructure-aws/v2.1.3/cconly -f providers/config_default.yaml -f user_input.yaml
    
    Azure
    ytt -f ~/.config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
    

인프라에 대한 기본 매니페스트를 생성했으므로 다음 단계에 대해서는 기본 ClusterClass 매니페스트 사용자 지정을 참조하십시오.

기본 ClusterClass 매니페스트 사용자 지정

ClusterClass 매니페스트를 사용자 지정하려면 매니페스트와 함께 ytt 오버레이 파일을 생성합니다. 다음 예에서는 ClusterClass 정의에서 Linux 커널 매개 변수를 수정하는 방법을 보여 줍니다.

  1. 다음과 같은 구조의 custom 폴더를 생성합니다.

    tree custom
    custom
    |-- overlays
        |-- filter.yaml
        |-- kernels.yaml
    
  2. custom/overlays/kernels.yaml을 편집합니다.

    예를 들어, nfConntrackMax를 변수로 추가하고, 제어부 노드의 커널 매개 변수 net.netfilter.nf_conntrack_max에 값을 추가하는 패치를 정의합니다.

    이 오버레이는 preKubeadmCommands 필드에 명령을 추가하여 구성을 sysctl.conf에 기록합니다. 설정을 적용하려면 sysctl -p 명령을 추가하여 이 변경 내용을 적용합니다. 기본 ClusterClass 정의는 변경할 수 없으므로 이 오버레이는 -extended를 추가하여 사용자 지정 ClusterClass의 이름과 모든 템플릿도 변경합니다.

    cat custom/overlays/kernels.yaml
    #@ load("@ytt:overlay", "overlay")
    
    #@overlay/match by=overlay.subset({"kind":"ClusterClass"})
    ---
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: ClusterClass
    metadata:
      name: tkg-vsphere-default-v1.1.0-extended
    spec:
      variables:
      - name: nfConntrackMax
        required: false
        schema:
          openAPIV3Schema:
            type: string
      patches:
      - name: nfConntrackMax
        enabledIf: '{{ not (empty .nfConntrackMax) }}'
        definitions:
          - selector:
              apiVersion: controlplane.cluster.x-k8s.io/v1beta1
              kind: KubeadmControlPlaneTemplate
              matchResources:
                controlPlane: true
            jsonPatches:
              - op: add
                path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
                valueFrom:
                  template: echo "net.netfilter.nf_conntrack_max={{ .nfConntrackMax }}" >> /etc/sysctl.conf
              - op: add
                path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
                value: sysctl -p
    
  3. 변경하지 않으려는 리소스를 제거합니다.

    이 예에서 모든 템플릿은 사용자 지정 및 기본 ClusterClass 간에 공유되어 모두 제거됩니다. 기본 템플릿을 기반으로 사용자 지정 템플릿을 동일한 방식으로 생성할 수도 있습니다. 이 경우 kind가 제외되지 않도록 합니다.

    cat custom/overlays/filter.yaml
    #@ load("@ytt:overlay", "overlay")
    
    #@overlay/match by=overlay.not_op(overlay.subset({"kind": "ClusterClass"})),expects="0+"
    ---
    #@overlay/remove
    
  4. 기본 ClusterClass 매니페스트를 사용하여 기본 ClusterClass를 생성합니다.

    ytt -f tkg-vsphere-default-v1.1.0.yaml -f custom/overlays/filter.yaml > default_cc.yaml
    
  5. 사용자 지정 ClusterClass를 생성합니다.

    ytt -f tkg-vsphere-default-v1.1.0.yaml -f custom/ > custom_cc.yaml
    
  6. (선택 사항) 기본 ClusterClass와 사용자 지정 항목 간의 차이점을 확인하여 변경 내용이 적용되었는지 확인합니다.

    diff default_cc.yaml custom_cc.yaml
    

    다음과 유사한 출력이 표시됩니다.

    4c4
    <   name: tkg-vsphere-default-v1.1.0
    ---
    >   name: tkg-vsphere-default-v1.1.0-extended
    638a639,643
    >   - name: nfConntrackMax
    >     required: false
    >     schema:
    >       openAPIV3Schema:
    >         type: string
    2607a2613,2628
    >   - name: nfConntrackMax
    >     enabledIf: '{{ not (empty .nfConntrackMax) }}'
    >     definitions:
    >     - selector:
    >         apiVersion: controlplane.cluster.x-k8s.io/v1beta1
    >         kind: KubeadmControlPlaneTemplate
    >         matchResources:
    >           controlPlane: true
    >       jsonPatches:
    >       - op: add
    >         path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
    >         valueFrom:
    >           template: echo "net.netfilter.nf_conntrack_max={{ .nfConntrackMax }}" >> /etc/sysctl.conf
    >       - op: add
    >         path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
    >         value: sysctl -p
    

이 예에서는 확장된 -extended가 클러스터 이름에 추가된 것을 볼 수 있습니다.

관리 클러스터에 사용자 지정 ClusterClass 설치

관리 클러스터에서 사용자 지정 ClusterClass를 사용하도록 설정하려면 새 매니페스트를 적용하여 설치합니다.

  1. ClusterClass 매니페스트를 적용합니다.

    kubectl apply -f custom_cc.yaml
    

    다음 출력을 볼 수 있습니다.

    clusterclass.cluster.x-k8s.io/tkg-vsphere-default-v1.1.0-extended created
    
  2. 사용자 지정 ClusterClass가 기본 네임스페이스로 전파되었는지 확인합니다. 예:

    kubectl get clusterclass
    

    다음 출력을 볼 수 있습니다.

    NAME                                  AGE
    tkg-vsphere-default-v1.1.0            2d23h
    tkg-vsphere-default-v1.1.0-extended   11s
    

사용자 지정 워크로드 클러스터 매니페스트 생성

사용자 지정 ClusterClass를 생성한 후 이를 사용하여 사용자 지정이 포함된 새 워크로드 클러스터를 생성할 수 있습니다.

  1. --dry-run 옵션과 함께 tanzu cluster create를 실행하여 표준 클러스터 구성 파일에서 클러스터 매니페스트를 생성합니다.

    tanzu cluster create --file workload-1.yaml --dry-run > default_cluster.yaml
    
  2. ytt 오버레이를 생성하거나 클러스터 매니페스트를 직접 편집합니다.

    권장되는 옵션은 ytt 오버레이(예: cluster_overlay.yaml)를 생성하여 다음을 수행하는 것입니다.

    • topology.class 값을 사용자 지정 ClusterClass의 이름으로 바꿉니다.
    • 기본값을 사용하여 사용자 지정 변수를 variables 블록에 추가합니다.

    ClusterClass 개체 규격 수정과 마찬가지로 다음과 같이 오버레이를 사용하면 새 업스트림 클러스터 릴리스가 있을 때마다 새 개체에 변경 내용을 자동으로 적용할 수 있습니다.

    #@ load("@ytt:overlay", "overlay")
    
    #@overlay/match by=overlay.subset({"kind":"Cluster"})
    ---
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    spec:
      topology:
        class: tkg-vsphere-default-v1.1.0-extended
        variables:
        - name: nfConntrackMax
          value: "1048576
    
  3. custom_cluster.yaml 매니페스트를 생성합니다.

    ytt -f default_cluster.yaml -f cluster_overlay.yaml > custom_cluster.yaml
    
  4. (선택 사항) 위의 ClusterClass와 마찬가지로 diff를 실행하여 사용자 지정 클래스 클러스터 매니페스트를 기본 클래스 기반 클러스터와 비교할 수 있습니다. 예를 들면 다음과 같습니다.

    diff custom_cluster.yaml default_cluster.yaml
    

    다음과 유사한 출력이 표시됩니다.

    <     class: tkg-vsphere-default-v1.1.0
    ---
    >     class: tkg-vsphere-default-v1.1.0-extended
    142a143,144
    >     - name: nfConntrackMax
    >       value: "1048576"
    

사용자 지정 클러스터 생성

다음과 같이 위에서 생성된 사용자 지정 매니페스트를 기반으로 사용자 지정 워크로드 클러스터를 생성합니다.

  1. 클러스터를 생성합니다.

    tanzu cluster create -f custom_cluster.yaml
    
  2. 생성된 개체 속성을 확인합니다.

    예를 들어 위의 커널 수정을 사용하는 경우 KubeadmControlPlane 개체를 검색하고 커널 구성이 설정되었는지 확인합니다.

    kubectl get kcp workload-1-jgwd9 -o yaml
    

    다음과 유사한 출력이 표시됩니다.

    apiVersion: controlplane.cluster.x-k8s.io/v1beta1
    kind: KubeadmControlPlane
    ...
        preKubeadmCommands:
        - hostname "{{ ds.meta_data.hostname }}"
        - echo "::1         ipv6-localhost ipv6-loopback" >/etc/hosts
        - echo "127.0.0.1   localhost" >>/etc/hosts
        - echo "127.0.0.1   {{ ds.meta_data.hostname }}" >>/etc/hosts
        - echo "{{ ds.meta_data.hostname }}" >/etc/hostname
        - echo "net.netfilter.nf_conntrack_max=1048576" >> /etc/sysctl.conf
        - sysctl -p
    ...
    
  3. 제어부 노드에 로그인하고 해당 sysctl.conf가 수정되었는지 확인합니다.

    capv@workload-1-jgwd9:~$ sudo cat /etc/sysctl.conf
    ...
    net.ipv6.neigh.default.gc_thresh3=16384
    fs.file-max=9223372036854775807
    net.netfilter.nf_conntrack_max=1048576
    

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

이전 릴리스에서 사용자 지정 클러스터를 생성한 경우 최신 TKG 릴리스로 업그레이드할 수 있습니다.

클러스터 업그레이드 준비

클러스터를 업그레이드하기 전에 수행해야 할 준비 단계가 있습니다.

  1. 관리 클러스터를 업그레이드하기 전에 이전 릴리스에 대해 생성한 사용자 지정 매니페스트 버전으로 테스트 클러스터를 생성합니다.

    예를 들어 이름이 test-upgrade인 사용자 지정 클러스터를 생성합니다.

  2. TKG 2.2 관리 클러스터에서 사용할 수 있는 ClusterClass 버전에 대한 정보를 가져옵니다.

    kubectl get clusterclass
    

    TKG v2.2.0을 사용하여 사용자 지정 클러스터를 생성한 경우 ClusterClass 버전은 1.0.0이어야 합니다. 예:

    NAME                                  AGE
    tkg-vsphere-default-extended-v1.0.0   21m
    tkg-vsphere-default-v1.0.0            10d
    
  3. test-upgrade 클러스터에서 실행되는 ClusterClass 버전에 대한 정보를 가져옵니다.

    kubectl get cluster test-upgrade -o jsonpath='{.spec.topology.class}'
    

    출력은 tkg-vsphere-default-extended-v1.0.0이어야 합니다.

  4. 관리 클러스터를 TKG 2.3으로 업그레이드하려면 독립형 관리 클러스터 업그레이드의 지침을 따르십시오.

  5. 관리 클러스터를 v.2.3으로 업그레이드한 후 사용할 수 있는 ClusterClass 버전에 대한 정보를 가져옵니다.

    kubectl get cluster mgmt-cluster-name -n tkg-system -o jsonpath='{.spec.topology.class}'
    

    관리 클러스터가 vSphere 실행 중인 경우 출력은 tkg-vsphere-default-v1.1.0이어야 합니다.

  6. 기본 ClusterClass 매니페스트 생성기본 ClusterClass 매니페스트 사용자 지정의 절차에 따라 ClusterClass 매니페스트의 새 버전을 생성합니다.
    • 예를 들어 새 사용자 지정 ClusterClass tkg-vsphere-default-v1.1.0-extended의 이름을 지정하고, 이전 버전 tkg-vsphere-default-extended-v1.0.0과 동일한 사용자 지정 변수를 포함합니다.
    • 새 오버레이 custom_cc.yaml의 이름을 지정합니다.
  7. 관리 클러스터에 새 사용자 지정 ClusterClass를 설치합니다.

    kubectl apply -f custom_cc.yaml
    
  8. 이제 관리 클러스터에서 사용할 수 있는 ClusterClass 버전에 대한 정보를 가져옵니다.

    kubectl get clusterclass
    

    이전 버전과 최신 버전이 모두 표시되어야 합니다.

    NAME                                  AGE
    tkg-vsphere-default-extended-v1.0.0   61m
    tkg-vsphere-default-v1.0.0            10d
    tkg-vsphere-default-v1.1.0            25m
    tkg-vsphere-default-v1.1.0-extended   15s
    

업그레이드 수행

준비 단계를 수행한 후에는 운영 클러스터를 업그레이드하기 전에 테스트 클러스터에서 업그레이드를 테스트할 수 있습니다.

  1. 클러스터 test-upgrade를 이전 버전의 사용자 지정 ClusterClass에서 새 버전으로 재배치합니다.

    kubectl patch cluster test-upgrade --type merge -p '{"spec": {"topology": {"class": "tkg-vsphere-default-v1.1.0-extended"}}}'   
    

    출력은 cluster.cluster.x-k8s.io/test-upgrade patched이어야 합니다.

  2. test-upgrade 클러스터에서 현재 실행 중인 ClusterClass 버전에 대한 정보를 가져옵니다.

    kubectl get cluster test-upgrade -o jsonpath='{.spec.topology.class}'
    

    출력은 tkg-vsphere-default-v1.1.0-extended이어야 합니다. 이전에는 tkg-vsphere-default-extended-v1.0.0이었습니다.

  3. 몇 분 동안 기다린 후 UpdatesAvailabletrue로 업데이트됨이 표시될 때까지 kubectl get cluster를 실행합니다.

    kubectl get cluster test-upgrade -o yaml
    

    준비가 되면 출력에 다음과 유사한 메시지가 표시됩니다.

    ...
    status:
      conditions:
    ...
      - lastTransitionTime: "2023-06-19T09:59:21Z"
        message: '[v1.25.9+vmware.1-tkg.1-20230609 v1.26.4+vmware.1-tkg.1-20230609]'
        status: "True"
        type: UpdatesAvailable
      controlPlaneReady: true
      infrastructureReady: true
      observedGeneration: 5
      phase: Provisioned
    
  4. test-upgrade 클러스터를 업그레이드합니다.

    tanzu cluster upgrade test-upgrade    
    
  5. 생성된 개체 속성을 확인합니다.

    예를 들어 위의 예에서 설명된 커널 수정을 사용하여 KubeadmControlPlane 개체를 검색하고 커널 구성이 설정되었는지 확인합니다.

    kubectl get kcp test-upgrade-nsc6d -o yaml
    

    다음과 유사한 출력이 표시됩니다.

    apiVersion: controlplane.cluster.x-k8s.io/v1beta1
    kind: KubeadmControlPlane
    ...
        preKubeadmCommands:
        - hostname "{{ ds.meta_data.hostname }}"
        - echo "::1         ipv6-localhost ipv6-loopback" >/etc/hosts
        - echo "127.0.0.1   localhost" >>/etc/hosts
        - echo "127.0.0.1   {{ ds.meta_data.hostname }}" >>/etc/hosts
        - echo "{{ ds.meta_data.hostname }}" >/etc/hostname
        - sed -i 's|".*/pause|"projects-stg.registry.vmware.com/tkg/pause|' /etc/containerd/config.toml
        - systemctl restart containerd
        - echo "net.netfilter.nf_conntrack_max=1048576" >> /etc/sysctl.conf
        - sysctl -p  
    

프로덕션 클러스터 업그레이드

테스트 업그레이드가 성공하면 프로덕션 클러스터에서 가상 업그레이드 단계를 반복합니다.

참고

업그레이드 중에 오류가 발생하는 경우 클러스터를 새 버전의 사용자 지정 ClusterClass에서 이전 버전으로 재지정하여 롤백할 수 있습니다.

사용자 지정 ClusterClass를 사용하도록 기본 클러스터 기본 재배치

기본 ClusterClass를 사용하여 클러스터를 생성했으며 사용자 지정 ClusterClass를 사용하도록 클러스터를 업데이트하려면 kubectl을 사용하여 클러스터 개체를 편집합니다.

  • spec.topology.class를 사용자 지정 ClassClass 매니페스트의 이름으로 변경합니다.
  • 사용자 지정 변수를 추가하도록 spec.topology.variables를 수정합니다.

기본 ClusterClass를 사용하도록 사용자 지정 클러스터 기본 재배치

기본 ClusterClass의 새 버전으로 되돌리려면 다음을 수행합니다.

  • spec.topology.class를 기본 ClusterClass의 새 버전으로 변경합니다.
  • spec.topology.variables을 수정하여 사용자 지정 변수를 제거합니다. 기본 ClusterClass의 새 버전에 정의된 새 변수를 추가해야 할 수 있습니다.
check-circle-line exclamation-circle-line close-line
Scroll to top icon