vSphere의 단일 노드 클러스터(기술 미리보기)

TKG(Tanzu Kubernetes Grid)는 단일 노드 클러스터를 지원합니다. 단일 노드 클러스터는 호스팅된 워크로드가 단일 ESXi 호스트의 제어부 인프라와 함께 실행되는 워크로드 클러스터입니다.

단일 노드 클러스터의 설치 공간을 더욱 최소화하려면 기본 OS에 대한 Photon 또는 Ubuntu Tiny OVA가 있는 tiny Tanzu Kubernetes 릴리스(TKr)에서 생성할 수 있습니다. 이러한 클러스터를 최소 단일 노드 클러스터라고 합니다.

단일 노드 클러스터는 vSphere 8에서 실행되고 독립형 관리 클러스터에 의해 배포되는 클래스 기반 워크로드 클러스터입니다.

참고

이 기능은 지원되지 않는 기술 미리보기 상태입니다. TKG 기능 상태를 참조하십시오.

사용 사례에는 다음이 포함됩니다.

  • 단일 노드 클러스터
    • 실험적인 개발 및 테스트 환경
  • 최소 단일 노드 클러스터
    • 원거리 Edge 셀 사이트 및 기타 Edge 위치와 같이 리소스가 제한된 호스트 환경

사전 요구 사항

  • vSphere 8 계정
  • vSphere 8에서 TKG v2.1.x를 실행하는 TKG 독립형 관리 클러스터
  • 독립형 관리 클러스터에서 사용할 Tanzu CLI 및 기타 도구 설치에 설명된 대로 다음이 설치된 부트스트랩 시스템:

    • Tanzu CLI
    • kubectl
    • imgpkg
    • (선택 사항) yq v4.11.2
  • Tanzu CLI에서 사용하도록 설정된 single-node-clusters 설정:

    tanzu config set features.cluster.single-node-clusters true
    

단일 노드 클러스터 생성

표준 Photon 또는 Ubuntu TKr을 사용하는 vSphere에서 단일 노드 워크로드 클러스터를 생성하려면 다음을 수행합니다.

  1. 독립형 관리 클러스터가 있는 vSphere 구성 파일에 설명된 대로 워크로드 클러스터용 플랫 구성 파일을 생성합니다.

  2. --dry-run 플래그와 함께 tanzu cluster create를 실행하여 개체 규격 생성에 설명된 대로 플랫 구성 파일을 Kubernetes 스타일 Cluster 개체 규격으로 변환합니다.

  3. Cluster 개체 규격을 편집하여 다음 설정을 포함합니다.

    • topology.controlPlane에서:

      replicas: 1
      
    • topology.workers 블록 없음. 있는 경우 삭제합니다.

    • topology.variables에서:

      - name: controlPlaneTaint
        value: false
      
  4. 개체 규격에서 클래스 기반 클러스터 생성에 설명된 대로 수정된 Cluster 개체 규격을 사용하여 tanzu cluster create를 실행합니다.

최소 단일 노드 클러스터 생성

tiny Tanzu Kubernetes 릴리스(TKr)를 사용하여 설치 공간을 최소화하는 vSphere에서 단일 노드 워크로드 클러스터를 생성하려면 다음을 수행합니다.

  1. vSphere ClusterClass 정의를 패치하여 관리 클러스터가 표준 비 단일 노드 클러스터를 생성할 때 tiny TKr을 사용하지 못하도록 합니다.

    kubectl annotate --overwrite clusterclass tkg-vsphere-default-v1.0.0 run.tanzu.vmware.com/resolve-tkr='!tkr.tanzu.vmware.com/tiny'
    
  2. 관리 클러스터에서 tiny TKr을 설치합니다.

    1. 관리 클러스터에 kubectl 컨텍스트를 설정합니다.

      kubectl config use-context MY-MGMT-CLUSTER-admin@MY-MGMT-CLUSTER
      

      여기서 MY-MGMT-CLUSTER는 관리 클러스터의 이름입니다.

    2. 다음 코드로 tiny TKr에 대해 ConfigMap 정의 파일 tiny-tkr-cm.yaml을 생성합니다.

      apiVersion: v1
      data:
        tkrVersions: '["v1.24.10+vmware.1-tiny.1-tkg.1"]'
      kind: ConfigMap
      metadata:
        name: tkg-compatibility-versions-v1.24.10---vmware.1-tiny.1-tkg.1
        namespace: tkg-system
        labels:
          run.tanzu.vmware.com/additional-compatible-tkrs: ""
      

      TKG v2.1.0의 경우 여기와 아래의 Kubernetes v1.24.9 버전을 대체합니다. TKr v1.24.9+vmware.1-tiny.2-tkg.1, OVA v1.24.9 Tiny OVA, ConfigMap 이름 및 기타 문자열이 유사하게 변경되었습니다.

    3. TKr ConfigMap을 적용합니다.

      kubectl apply -f tiny-tkr-cm.yaml
      
    4. TKr 패키지 매니페스트 및 메타데이터를 /tmp/ 디렉토리에 다운로드합니다.

      imgpkg pull -b projects.registry.vmware.com/tkg/tkr-repository-vsphere-edge:v1.24.10_vmware.1-tiny.1-tkg.1 -o /tmp/tkr-repository-vsphere-edge
      
    5. TKr 패키지 매니페스트에서 다음 방법 중 하나를 사용하여 metadata.namespace 설정을 "tkg-system""tkg-system"으로 변경합니다.

      • 다음 yq 명령을 실행합니다.

        yq  -i e '.metadata.namespace = "tkg-system"' /tmp/tkr-repository-vsphere-edge/packages/tkr-vsphere-edge.tanzu.vmware.com/1.24.10+vmware.1-tiny.1-tkg.1.yml
        
      • 매니페스트를 편집하여 metadata 아래에 namespace: "tkg-system" 설정을 추가합니다.

        metadata:
          [...]
          namespace: "tkg-system"
        
    6. TKr 매니페스트를 적용합니다.

      kubectl apply -f /tmp/tkr-repository-vsphere-edge/packages/tkr-vsphere-edge.tanzu.vmware.com/1.24.10+vmware.1-tiny.1-tkg.1.yml
      
    7. 몇 분 후에 kubectl get을 실행하여 tiny TKr, 클러스터 부트스트랩 템플릿, OS 이미지 개체가 모두 생성되었는지 확인합니다. 예:

      kubectl get tkr,cbt,osimage -A | grep -i tiny
      

      출력은 다음과 비슷합니다.

      v1.24.10---vmware.1-tiny.1-tkg.1   v1.24.10+vmware.1-tiny.1-tkg.1   True    True         16m
      tkg-system   v1.24.10---vmware.1-tiny.1-tkg.1   antrea.tanzu.vmware.com.1.7.2+vmware.1-tkg.1-advanced        vsphere-csi.tanzu.vmware.com.2.6.2+vmware.2-tkg.1        vsphere-cpi.tanzu.vmware.com.1.24.3+vmware.1-tkg.1        kapp-controller.tanzu.vmware.com.0.41.5+vmware.1-tkg.1
      v1.24.10---vmware.1-tiny.1-  1.b3                       v1.24.10+vmware.1-tiny.1   ubuntu    2004         amd64   ova                 16m
      v1.24.10---vmware.1-tiny.1-tkg.1-ac20b3                       v1.24.10+vmware.1-tiny.1   photon    3            amd64   ova                 16m
      
  3. OVA를 준비합니다.

    1. Tanzu Kubernetes Grid 다운로드 페이지로 이동한 후 Customer Connect에 로그인합니다.

    2. VMware Tanzu Kubernetes Grid 행에서 다운로드로 이동(Go to Downloads)을 클릭합니다.

    3. 버전 2.x를 선택하고 Tanzu Kubernetes Grid > 다운로드로 이동(GO TO DOWNLOADS)을 클릭합니다.

    4. Tiny TKG OVA(기술 미리보기)에서 단일 노드 클러스터에 사용할 매우 작은 OVA를 다운로드합니다.

      • Photon v3 Kubernetes v1.24.10 매우 작음 OVA(기술 미리보기)

      • Ubuntu 2004 Kubernetes v1.24.10 매우 작음 OVA(기술 미리보기)

    5. Tiny OVA를 vSphere 환경으로 가져와서 기본 이미지 템플릿을 vSphere로 가져오기에 설명된 대로 VM 템플릿으로 변환합니다.

  4. 단일 노드 워크로드 클러스터를 생성합니다.

    참고

    단일 노드 클러스터의 경우 tanzu cluster create워크로드 클러스터 생성에 설명된 대로 플랫 클러스터 구성 파일을 Kubernetes 스타일의 개체 규격으로 변환할 수 없습니다.

    1. 환경 변수를 이 예에 설정된 대로 설정합니다.

      export CLUSTER_NAME='workload-snc'
      export CLUSTER_NAMESPACE='default'
      export CLUSTER_CIDR='100.96.0.0/11'
      export SERVICE_CIDR='100.64.0.0/13'
      export VSPHERE_CONTROL_PLANE_ENDPOINT=10.185.11.134
      export VSPHERE_SERVER=10.185.12.154
      export VSPHERE_USERNAME='[email protected]'
      export VSPHERE_PASSWORD=<encoded:QWRtaW4hMjM=>
      export VSPHERE_DATACENTER='/dc0'
      export VSPHERE_DATASTORE='/dc0/datastore/sharedVmfs-0'
      export VSPHERE_FOLDER='/dc0/vm'
      export VSPHERE_NETWORK='/dc0/network/VM Network'
      export VSPHERE_RESOURCE_POOL='/dc0/host/cluster0/Resources'
      export VSPHERE_SSH_AUTHORIZED_KEY=ssh-rsa AAAAB3[...]tyaw== [email protected]
      export VSPHERE_TLS_THUMBPRINT=47:F5:83:8E:5D:36:[...]:72:5A:89:7D:29:E5:DA
      export VSPHERE_CONTROL_PLANE_NUM_CPUS='4'
      export VSPHERE_CONTROL_PLANE_MEM_MIB='4096'
      export VSPHERE_CONTROL_PLANE_DISK_GIB='20'
      export TKG_CUSTOM_IMAGE_REPOSITORY='projects.registry.vmware.com/tkg'
      export OS_NAME='photon'
      export TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE="LS0tL[...]0tLQo="
      
    2. 위 변수를 참조하는 ClusterSecret 개체 규격을 사용하여 vsphere-snc.yaml 매니페스트를 생성합니다.

      apiVersion: cluster.x-k8s.io/v1beta1
      kind: Cluster
      metadata:
        annotations:
          tkg.tanzu.vmware.com/cluster-controlplane-endpoint: ${VSPHERE_CONTROL_PLANE_ENDPOINT}
          run.tanzu.vmware.com/resolve-tkr: 'tkr.tanzu.vmware.com/tiny'
        labels:
          tkg.tanzu.vmware.com/cluster-name: ${CLUSTER_NAME}
        name: ${CLUSTER_NAME}
        namespace: ${CLUSTER_NAMESPACE}
      spec:
        clusterNetwork:
          pods:
            cidrBlocks:
            - ${CLUSTER_CIDR}
          services:
            cidrBlocks:
            - ${SERVICE_CIDR}
        topology:
          class: tkg-vsphere-default-v1.0.0
          controlPlane:
            metadata:
              annotations:
                run.tanzu.vmware.com/resolve-os-image: image-type=ova,os-name=${OS_NAME}
            replicas: 1
          variables:
          - name: controlPlaneTaint
            value: false
          - name: auditLogging
            value:
              enabled: false
          - name: apiServerEndpoint
            value: ${VSPHERE_CONTROL_PLANE_ENDPOINT}
          - name: aviAPIServerHAProvider
            value: false
          - name: imageRepository
            value:
              host: ${TKG_CUSTOM_IMAGE_REPOSITORY}
          - name: trust
            value:
              additionalTrustedCAs:
              - data: ${TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE}
                name: imageRepository
          - name: vcenter
            value:
              cloneMode: fullClone
              datacenter: ${VSPHERE_DATACENTER}
              datastore: ${VSPHERE_DATASTORE}
              folder: ${VSPHERE_FOLDER}
              network: ${VSPHERE_NETWORK}
              resourcePool: ${VSPHERE_RESOURCE_POOL}
              server: ${VSPHERE_SERVER}
              storagePolicyID: ""
              tlsThumbprint: ${VSPHERE_TLS_THUMBPRINT}
          - name: user
            value:
              sshAuthorizedKeys:
              - ${VSPHERE_SSH_AUTHORIZED_KEY}
          - name: controlPlane
            value:
              machine:
                diskGiB: ${VSPHERE_CONTROL_PLANE_DISK_GIB}
                memoryMiB: ${VSPHERE_CONTROL_PLANE_MEM_MIB}
                numCPUs: ${VSPHERE_CONTROL_PLANE_NUM_CPUS}
          version: v1.24.10+vmware.1-tiny.1
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: ${CLUSTER_NAME}
        namespace: ${CLUSTER_NAMESPACE}
      stringData:
        password: ${VSPHERE_PASSWORD}
        username: ${VSPHERE_USERNAME}
      EOF
      

      다음에 유의하십시오.

      • run.tanzu.vmware.com/resolve-tkrmetadata.annotations 설정
      • controlPlaneTainttopology.variables 설정
      • topology.workers 블록은 없으며 topology.controlPlane만 있습니다.
      • TKG v2.1.0의 경우 topology.versionv1.24.9+vmware.1-tiny.2여야 합니다.
    3. (선택 사항) 기본 Antrea CNI 대신 Calico를 CNI로 사용하도록 클러스터를 구성하려면 Supervisor 또는 단일 노드 클래스 기반 워크로드 클러스터용 Calico CNI의 단일 노드 클러스터 지침을 따르십시오.

    4. Cluster 개체 매니페스트를 적용합니다.

      tanzu cluster create -f vsphere-snc.yaml
      
    5. (TKG v2.1.0만 해당, 선택 사항) 클러스터의 PV(영구 볼륨)를 프로비저닝하려면 vSphere StorageClass 개체를 생성합니다.

      참고

      TKG v2.1.1 이상에서는 이러한 단계가 필요하지 않습니다.

      1. vspherestorageclass.yaml 매니페스트를 생성합니다.

        apiVersion: storage.k8s.io/v1
        kind: StorageClass
        metadata:
          annotations:
            storageclass.kubernetes.io/is-default-class: "true"
          name: default
        provisioner: csi.vsphere.vmware.com
        reclaimPolicy: Delete
        volumeBindingMode: Immediate
        allowVolumeExpansion: true
        
      2. StorageClass 매니페스트를 적용합니다.

        kubectl apply -f vspherestorageclass.yaml --kubeconfig=KUBECONFIG
        

        여기서 KUBECONFIG는 단일 노드 클러스터의 kubeconfig입니다.

check-circle-line exclamation-circle-line close-line
Scroll to top icon