Tanzu Kubernetes Grid 서비스 API는 Tanzu Kubernetes 클러스터를 사용자 지정하기 지능형 기본값과 다양한 옵션을 제공합니다. 요구 사항을 충족하는 다양한 구성 및 사용자 지정으로 다양한 유형의 클러스터를 프로비저닝하려면 다음 예를 참조하십시오.

Tanzu Kubernetes 클러스터 프로비저닝을 위한 최소 YAML

다음 예제 YAML은 Tanzu Kubernetes Grid 서비스를 호출하고 모든 기본 설정을 사용하는 Tanzu Kubernetes 클러스터를 프로비저닝하는 데 필요한 최소 구성입니다.

최소 예제 YAML의 특징은 다음과 같습니다.
  • v1.19로 나열된 Tanzu Kubernetes 릴리스 버전은 해당 부 버전(예: v1.19.7+vmware.1-tkg.1.xxxxxx)과 일치하는 최신 배포판으로 확인됩니다. 업데이트를 위한 Tanzu Kubernetes 클러스터 호환성 확인의 내용을 참조하십시오.
  • VM 클래스 best-effort-<size>에 예약이 없습니다. 자세한 내용은 Tanzu Kubernetes 클러스터에 대한 가상 시스템 클래스의 내용을 참조하십시오.
  • 클러스터에는 컨테이너용 영구 스토리지가 포함되어 있지 않습니다. 필요한 경우 spec.settings.storage에서 설정합니다. 아래의 스토리지 예제를 참조하십시오.
  • Helm과 같은 일부 워크로드에는 spec.settings.storage.defaultClass가 필요할 수 있습니다. 아래의 스토리지 예제를 참조하십시오.
  • spec.settings.network 섹션이 지정되지 않았습니다. 즉, 클러스터에 다음과 같은 기본 네트워크 설정이 사용됩니다.
    • 기본 CNI: antrea
    • 기본 포드 CIDR: 192.168.0.0/16
    • 기본 서비스 CIDR: 10.96.0.0/12
    • 기본 서비스 도메인: cluster.local
    참고: 포드의 기본 IP 범위는 192.168.0.0/16입니다. 이 서브넷을 이미 사용 중이면 다른 CIDR 범위를 지정해야 합니다. 아래의 사용자 지정 네트워크 예를 참조하십시오.
apiVersion: run.tanzu.vmware.com/v1alpha1      #TKGS API endpoint
kind: TanzuKubernetesCluster                   #required parameter
metadata:
  name: tkgs-cluster-1                         #cluster name, user defined
  namespace: tgks-cluster-ns                   #vsphere namespace
spec:
  distribution:
    version: v1.20                             #Resolves to latest TKR 1.20
  topology:
    controlPlane:
      count: 1                                 #number of control plane nodes
      class: best-effort-medium                #vmclass for control plane nodes
      storageClass: vwt-storage-policy         #storageclass for control plane
    workers:
      count: 3                                 #number of worker nodes
      class: best-effort-medium                #vmclass for worker nodes
      storageClass: vwt-storage-policy         #storageclass for worker nodes

별도의 디스크 및 스토리지 매개 변수가 있는 클러스터

다음 예제 YAML은 클러스터 제어부 및 작업자 노드에 대해 별도의 디스크 및 스토리지 매개 변수를 사용하여 클러스터를 프로비저닝하는 방법을 보여줍니다.

변동률이 높은 데이터에 대해 분리 디스크 및 스토리지 매개 변수를 사용하면 무엇보다 연결된 클론의 사용과 관련된 읽기-쓰기 오버헤드를 최소화하는 데 도움이 됩니다. 두 가지 주요 사용 사례는 다음과 같습니다.
  • etcd 데이터베이스에 대한 제어부 노드의 스토리지 성능을 사용자 지정
  • 작업자 노드의 컨테이너 이미지에 대한 디스크 크기를 사용자 지정

이 예에는 다음과 같은 특징이 있습니다.

  • spec.topology.controlPlane.volumes 설정은 etcd 데이터베이스에 대해 별도의 볼륨을 지정합니다.
  • spec.topology.workers.volumes 설정은 컨테이너 이미지용에 대해 별도의 볼륨을 지정합니다.
  • 컨테이너 이미지에 대한 mountPath: /var/lib/containerd는 Tanzu Kubernetes 릴리스 1.17 이상에서 지원됩니다.
apiVersion: run.tanzu.vmware.com/v1alpha1      
kind: TanzuKubernetesCluster                   
metadata:
  name: tkgs-cluster-5                         
  namespace: tgks-cluster-ns                   
spec:
  distribution:
    version: v1.20                            
  topology:
    controlPlane:
      count: 3                                 
      class: best-effort-medium                 
      storageClass: vwt-storage-policy
      volumes:
        - name: etcd
          mountPath: /var/lib/etcd
          capacity:
            storage: 4Gi       
    workers:
      count: 3                                 
      class: best-effort-medium                 
      storageClass: vwt-storage-policy        
      volumes:
        - name: containerd
          mountPath: /var/lib/containerd
          capacity:
            storage: 16Gi       

사용자 지정 Antrea 네트워크가 있는 클러스터

다음 YAML은 Antrea CNI에 대한 사용자 지정 네트워크 범위를 사용하여 Tanzu Kubernetes 클러스터를 프로비저닝하는 방법을 보여줍니다.
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
  name: tkg-cluster-3-antrea
  namespace: tkgs-cluster-ns
spec:
  distribution:
    version: v1.20
  topology:
    controlPlane:
      class: guaranteed-medium
      count: 3
      storageClass: vwt-storage-policy
    workers:
      class: guaranteed-medium
      count: 5
      storageClass: vwt-storage-policy
  settings:
    network:
      cni:
        name: antrea                       #Use Antrea CNI
      pods:
        cidrBlocks:
        - 193.0.2.0/16                     #Must not overlap with SVC
      services:
        cidrBlocks:
        - 195.51.100.0/12                  #Must not overlap with SVC
      serviceDomain: managedcluster.local

사용자 지정 Calico 네트워크가 있는 클러스터

다음 YAML은 사용자 지정 Calico 네트워크를 사용하여 Tanzu Kubernetes 클러스터를 프로비저닝하는 방법을 보여줍니다.
apiVersion: run.tanzu.vmware.com/v1alpha1    
kind: TanzuKubernetesCluster                 
metadata:
  name: tkgs-cluster-2                                
  namespace: tkgs-cluster-ns                     
spec:
  distribution:
    version: v1.20                              
  topology:
    controlPlane:
      count: 3                                                        
      class: guaranteed-large                  
      storageClass: vwt-storage-policy        
    workers:
      count: 5                                                      
      class: guaranteed-xlarge                           
      storageClass: vwt-storage-policy      
  settings:
    network:
      cni:
        name: calico                           #Use Calico CNI for this cluster
      services:
        cidrBlocks: ["198.51.100.0/12"]        #Must not overlap with SVC
      pods:
        cidrBlocks: ["192.0.2.0/16"]           #Must not overlap with SVC
      serviceDomain: managedcluster.local

스토리지 클래스및 영구 볼륨에 대한 기본 클래스가 있는 클러스터

다음 YAML 예에서는 동적 PVC 프로비저닝을 위한 스토리지 클래스 및 기본 스토리지 클래스로 클러스터를 프로비저닝하는 방법을 보여줍니다.
  • spec.settings.storage.classes 설정은 클러스터의 컨테이너용 영구 스토리지에 대해 두 개의 스토리지 클래스를 지정합니다.
  • spec.settings.storage.defaultClass가 지정됩니다. 일부 애플리케이션에는 기본 클래스가 필요합니다. 예를 들어 Helm 또는 Kubeapps를 여러 차트에서 참조되는 defaultClass로 사용하려는 경우입니다.
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
  name: default-storage-spec
  namespace: tkgs-cluster-ns
spec:
  topology:
    controlPlane:
      count: 3
      class: best-effort-medium
      storageClass: vwt-storage-policy
    workers:
      count: 3
      class: best-effort-medium
      storageClass: vwt-storage-policy
  distribution:
    version: v1.20
  settings:
    network:
      cni:
        name: antrea
      services:
        cidrBlocks: ["198.51.100.0/12"]
      pods:
        cidrBlocks: ["192.0.2.0/16"]
      serviceDomain: "tanzukubernetescluster.local"
    storage:
      classes: ["gold", "silver"]              #Array of named PVC storage classes
      defaultClass: silver                     #Default PVC storage class

프록시 서버가 있는 클러스터

프록시 서버 구성을 클러스터 매니페스트에 적용하여 개별 Tanzu Kubernetes 클러스터에서 프록시 서버를 사용할 수 있습니다.

다음과 같은 특징을 참고하십시오.

  • spec.settings.network.proxy 섹션은 Tanzu Kubernetes 클러스터에 대한 HTTP(s) 프록시 구성을 지정합니다.
  • proxy 서버 값의 구문은 http://<user>:<pwd>@<ip>:<port>입니다.
  • localhost127.0.0.1Tanzu Kubernetes 클러스터용 포드 및 서비스CIDR을 비롯한 특정 끝점은 자동으로 프록시되지 않습니다. 이러한 항목은 noProxy 필드에 포함할 필요가 없습니다.
  • noProxy 프록시를 사용하지 않을 CIDR 어레이를 허용합니다. 감독자 클러스터의 워크로드 네트워크에서 필요한 값을 가져옵니다. Tanzu Kubernetes Grid 서비스 v1alpha1 API를 사용하는 Tanzu Kubernetes 클러스터에 대한 구성 매개 변수에서 이미지를 참조하십시오.
  • TkgServiceConfiguration에 글로벌 프록시가 구성된 경우 이 프록시 정보는 클러스터의 초기 배포 후 클러스터 매니페스트로 전파됩니다. 글로벌 프록시 구성은 클러스터를 생성할 때 프록시 구성 필드가 없는 경우에만 클러스터 매니페스트에 추가됩니다. 다시 말해, 클러스터별 구성이 우선하며 글로벌 프록시 구성을 덮어씁니다.
apiVersion: run.tanzu.vmware.com/v1alpha1    
kind: TanzuKubernetesCluster                 
metadata:
  name: tkgs-cluster-with-proxy                                
  namespace: tkgs-cluster-ns                     
spec:
  distribution:
    version: v1.20                              
  topology:
    controlPlane:
      count: 3                                                        
      class: guaranteed-medium                  
      storageClass: vwt-storage-policy        
    workers:
      count: 5                                                      
      class: guaranteed-xlarge                           
      storageClass: vwt-storage-policy       
  settings:
    storage:
      classes: ["gold", "silver"]              
      defaultClass: silver                     
    network:
      cni:
        name: antrea 
      pods:
        cidrBlocks:
        - 193.0.2.0/16
      services:
        cidrBlocks:
        - 195.51.100.0/12           
      serviceDomain: managedcluster.local
      proxy:
        httpProxy: http://10.186.102.224:3128  #Proxy URL for HTTP connections
        httpsProxy: http://10.186.102.224:3128 #Proxy URL for HTTPS connections
        noProxy: [10.246.0.0/16,192.168.144.0/20,192.168.128.0/20] #SVC Pod, Egress, Ingress CIDRs

TLS용 사용자 지정 인증서가 있는 클러스터

TkgServiceConfiguration에서 trust.additionalTrustedCAs를 지정하는 방식과 유사하게( Tanzu Kubernetes Grid 서비스 v1alpha1 API에 대한 구성 매개 변수 참조) TanzuKubernetesCluster 규격의 spec.settings.network 아래 trust.additionalTrustedCAs를 포함할 수 있습니다. 예:
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
  name: tkgs-cluster-with-custom-certs-tls
  namespace: tkgs-cluster-ns
spec:
  topology:
    controlPlane:
      count: 3
      class: guaranteed-medium
      storageClass: vwt-storage-profile
    workers:
      count: 3
      class: guaranteed-large
      storageClass: vwt-storage-profile
  distribution:
    version: 1.20.2
  settings:
    network:
      cni:
        name: antrea
      services:
        cidrBlocks: ["198.51.100.0/12"]
      pods:
        cidrBlocks: ["192.0.2.0/16"]
      serviceDomain: "managedcluster.local"
      trust:
        additionalTrustedCAs:
          - name: custom-selfsigned-cert-for-tkc
            data: |
              LS0aaaaaaaaaaaaaaabase64...

TkgServiceConfiguration 규격에서 글로벌 설정을 상속하거나 상속하지 않는 클러스터

참고: 다음 예제 클러스터 구성에는 vCenter Server 버전 7.0U2a 이상 및 감독자 클러스터 버전1.18.10 이상이 필요합니다.
TkgServiceConfiguration에서 전역 설정을 상속하는 Tanzu Kubernetes 클러스터를 프로비저닝하려면 전역 설정이 지정되지 않았거나 null인 클러스터를 구성합니다.

예를 들어 proxy 설정을 상속하는 클러스터를 구성하려면 다음 방식 중 하나를 사용할 수 있습니다.

옵션1: 클러스터 규격에 proxy 설정을 포함하지 마십시오.
...
settings:
  network:
    cni:
      name: antrea
    services:
      cidrBlocks: ["198.51.100.0/12"]
    pods:
      cidrBlocks: ["192.0.2.0/16"]
    serviceDomain: "tanzukubernetescluster.local"
옵션2: 규격에 proxy 설정을 포함하되 해당 값을 명시적으로 null로 설정합니다.
settings:
  network:
    proxy: null
  

TkgServiceConfiguration에서 기본값을 상속하지 않는 Tanzu Kubernetes 클러스터를 프로비저닝하려면 모든 요소가 포함되지만 값이 비어 있는 클러스터 규격을 구성합니다.

예를 들어 TkgServiceConfiguration에 글로벌 proxy가 구성되어 있고 글로벌 proxy 설정을 상속하지 않는 클러스터를 프로비저닝하려면 클러스터 규격에 다음 구문을 포함합니다.
...
settings:
  network:
    proxy:
      httpProxy: ""
      httpsProxy: ""
      noProxy: null

로컬 컨텐츠 라이브러리를 사용하는 클러스터

에어갭 환경에서 Tanzu Kubernetes 클러스터를 프로비저닝하려면 로컬 컨텐츠 라이브러리에서 동기화된 가상 시스템 이미지를 사용하여 클러스터를 생성합니다.

로컬 컨텐츠 라이브러리 이미지를 사용하여 클러스터를 프로비저닝 하려면 클러스터 사양에 해당 이미지를 지정해야 합니다. distribution.version 값의 경우, 전체 이미지 이름을 입력하거나 이미지 디렉토리의 이름 형식을 유지한 경우 Kubernetes 버전으로 단축할 수 있습니다. 정규화된 버전 번호를 사용하려면 -----+로 바꿉니다. 예를 들어 이름이 photon-3-k8s-v1.20.2---vmware.1-tkg.1.1d4f79a인 OVA 이미지가 있으면 다음 형식을 사용할 수 있습니다.
spec:
  distribution:
    version: v1.20
spec:
  distribution:
    version: v1.20.2
spec:
  distribution:
    version: v1.20.2+vmware.1-tkg.1
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
    name: tgks-cluster-9
    namespace: tkgs-cluster-ns
spec:
   topology:
       controlPlane:
           count: 3
           class: best-effort-medium
           storageClass: vwt-storage-policy
       workers:
           count: 3
           class: best-effort-medium
           storageClass: vwt-storage-policy
   distribution:
        version: v1.20.2         
   settings:
        network:
          cni:
              name: antrea 
          services:
             cidrBlocks: ["198.51.100.0/12"]
          pods:
             cidrBlocks: ["192.0.2.0/16"]