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 クラスタ互換性の確認を参照してください。
  • 仮想マシン クラス 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 は、クラスタ制御プレーン ノードとワーカー ノードにディスク パラメータとストレージ パラメータを個別に使用してクラスタをプロビジョニングする方法を示しています。

変更の多いデータのディスク パラメータとストレージ パラメータを分離すると、特に、リンク クローンの使用に関連する読み取り/書き込みオーバーヘッドを最小限にするのに有効です。主に 2 つのユースケースがあります。
  • 制御プレーン ノードで 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 クラスタをプロビジョニングする方法を示します。
  • カスタム ネットワーク設定が適用されるため、デフォルトの Antrea CNI が使用されている場合でも、cni.name パラメータが必要になります。
    • CNI 名:antrea
    • カスタム ポッドの CIDR:193.0.2.0/16
    • カスタムのサービス CIDR:195.51.100.0/12
    • カスタムのサービス ドメイン:managedcluster.local
  • カスタム CIDR ブロックを スーパーバイザー クラスタ と重複させることはできません。詳細については、『Tanzu Kubernetes Grid サービス v1alpha1 API を使用する 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 の設定は、クラスタ内のコンテナのパーシステント ストレージに 2 つのストレージ クラスを指定します。
  • spec.settings.storage.defaultClass が指定されています。アプリケーションによっては、デフォルトクラスが必要になることがあります。たとえば、多くのチャートで参照されている defaultClass として Helm または Kubeapps を使用する場合などです。
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 プロキシ構成を指定します。
  • いずれの proxy サーバ値の構文も http://<user>:<pwd>@<ip>:<port> です。
  • localhost127.0.0.1、および Tanzu 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 用のカスタム証明書を使用するクラスタ

TkgServiceConfigurationtrust.additionalTrustedCAs を指定する場合と同様の方法( Tanzu Kubernetes Grid サービス v1alpha1 API の構成パラメータを参照)により、 TanzuKubernetesCluster の仕様で trust.additionalTrustedCAsspec.settings.network に含めることができます。例:
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.0 Update 2a 以降と、 スーパーバイザー クラスタ バージョン 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 のバージョンに短縮することができます。完全修飾バージョン番号を使用する場合は、 -----+ に置き換えます。たとえば、OVA イメージに photon-3-k8s-v1.20.2---vmware.1-tkg.1.1d4f79a という名前が付けられている場合、次の形式を使用できます。
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"]