クラスタ v1beta1 API を使用すると、デフォルトの ClusterClass 定義に基づいてクラスタをプロビジョニングできます。

ClusterClass API v1beta1

Kubernetesクラスタ APIは、Kubernetes クラスタの宣言型プロビジョニング、アップグレード、および運用を提供するツールのスイートです。ClusterClassは、一連のクラスタのライフサイクルを管理するためのテンプレートを定義できる、先進的なクラスタ API です。TKG サービス では、v1beta1 API の使用によって ClusterClass がサポートされます。

TKG サービス には、tanzukubernetescluster という名前のデフォルトの ClusterClass 定義が付属しています。tanzukubernetescluster ClusterClass では、v1beta API を使用してクラスタを作成するためのテンプレートが提供されます。tanzukubernetescluster ClusterClass は、すべてのユーザー名前空間で使用できます。この ClusterClass に基づいてクラスタを作成するには、クラスタ仕様で参照します。手順については、v1beta の例を参照してください。

デフォルトの ClusterClass「tanzukubernerescluster」

デフォルトの tanzukubernetescluster ClusterClass は変更できません。TKG サービスの各リリースで更新される可能性があります。

TKG サービス インスタンスが付属するデフォルトの tanzukubernetescluster ClusterClass を表示するには、次の手順を実行します。

  1. スーパーバイザー にログインします。
    kubectl vsphere login --server=IP-or-FQDN --vsphere-username [email protected]
  2. TKGS クラスタがプロビジョニングされている vSphere 名前空間 にコンテキストを切り替えます。
    kubeclt config use-context VSPEHRE-NS
  3. デフォルトの tanzukubernetescluster ClusterClass を取得します。
    kubectl get clusterclass tanzukubernetescluster -o yaml
  4. 必要に応じて、デフォルトの ClusterClass の出力を tkc-dcc.yaml という名前のファイルに書き込むことができます。
    kubectl get clusterclass tanzukubernetescluster -o yaml > tkc-dcc.yaml

クラスタをカスタマイズするための ClusterClass 変数

変数を使用して、tanzukubernetescluster ClusterClass に基づいてクラスタをカスタマイズします。変数は、名前と値のペアを使用して定義されます。構文は、openAPIV3Schemaに準拠している必要があります。

v1beta1 API を使用してクラスタをプロビジョニングするには、2 つの変数が必要です。
  • 仮想マシン クラス
  • ストレージ クラス
クラスタをカスタマイズするために、次のような変数がさらに使用可能です。
  • プロキシ
  • TLS 証明書
  • SSH キー

以下セクションに、デフォルトの tanzukubernetescluster ClusterClass で使用できるすべての変数を示します。

重要: 有効なキー名は、英数字、ダッシュ( key-name など)、アンダースコア( KEY_NAME など)、ドット( key.name など)のみで構成する必要があります。キー名にスペースを使用することはできません。

clusterEncryptionConfigYaml

clusterEncryptionConfigYaml 変数は、クラスタの暗号化を構成する場合に使用します。

clusterEncryptionConfigYaml
暗号化構成の詳細を提供する YAML ファイルである文字列。
Kube-apiserver 暗号化構成パッケージを使用して、etcd データベースでデータの暗号化を構成できます。Kubernetes のドキュメントの Encrypting Secret Data at Restを参照してください。
...
    variables:
    #clusterEncryptionConfigYaml specifies the base64 encoded 
    #EncryptionConfiguration YAML
    #the YAML contains a base64 encryption configuration for the cluster identity
    #the key is generated randomly
    - name: clusterEncryptionConfigYaml
      value: string which is name of the EncryptionConfiguration YAML 

controlPlaneCertificateRotation

controlPlaneCertificateRotation 変数は、制御プレーン ノードの TLS 証明書が期限切れになる前にそれらの証明書のロールアウトをトリガすることで、証明書をローテーションするようにシステムを構成する場合に使用します。新規と既存のすべての制御プレーン ノードで、制御プレーン証明書のローテーションを使用できます。
controlPlaneCertificateRotation
機能を有効にするかどうかを示すブール値および証明書のローテーションの期限切れまでの日数。詳細については、「 Automatically rotating certificates using Kubeadm Control Plane provider」を参照してください。
...
    variables:
    - name: controlPlaneCertificateRotation
      value: 
        activate: true
        daysBefore: 90

ここで、

  • activate は、機能を有効にするかどうかを示すブール値です。デフォルトは true です。
  • daysBefore は、期限切れまでの日数です。デフォルトは 90 日です。最小値は期限切れの 7 日前です。
注: この変数は、vSphere 8 Update 3 ( TKG サービス 3.0) 用に更新されます。

controlPlaneVolumes

controlPlaneVolumes 変数は、制御プレーン ノードのパーシステント ボリュームを構成する場合に使用します。
controlPlaneVolumes
オブジェクトのオプションの配列。それぞれに namestorageClass、および mountPath が含まれ、それぞれが文字列であり、およびオプションの storage 文字列が含まれる capacity オブジェクトです。
...
    variables:
      #controlPlaneVolumes is an optional set of PVCs to create and
      #attach to each node
      - name: controlPlaneVolumes
        value:
          #name of the PVC to be used as the suffix (node.name)
          - name: NAME
            #mountPath is the directory where the volume device is mounted
            #takes the form /dir/path
            mountPath: /dir/path
            #storageClass is the storage class to use for the PVC
            storageClass: tkgs-storage-profile
            #capacity is the PVC storage capacity
            capacity:
              #storage sets the capacity for the disk volume
              #if not specified defaults to storageClass capacity
              storage: 4Gi           

defaultRegistrySecret

defaultRegistrySecret 変数は、クラスタのデフォルトのコンテナ レジストリを構成します。
注: この変数は、組み込みの Harbor レジストリで使用するために予約されています。
defaultRegistrySecret
デフォルトのコンテナ レジストリのパブリック キー、証明書名、および名前空間を含むオブジェクト。
スーパーバイザー で組み込みの Harbor レジストリを有効にすると、 defaultRegistrySecret 変数はクラスタが信頼するレジストリ サービス証明書を指定します。証明書シークレットには、 managed-by: vmware-vRegistry というラベルが付いています。クラスタの作成時に、defaultRegistry 証明書が defaultRegistrySecret 変数に挿入されます。クラスタの作成後、変数を手動で更新して証明書のローテーションまたは更新を管理します。
...
    variables:
    - name: defaultRegistrySecret
      value:
        #data holds the base64 encoded data.ca\.crt content
        #data.ca\.crt is already encoded, so raw cert data is encoded twice
        data: LS0tLS1CRUdJTiBDRVJU...S0tRU5EIENFUlRJRklDQVRFL
        #name specifies the name of the registry cert secret 
        name: harbor-ca-key-pair
        #namespace specifies the ns of the registry cert secret
        namespace: svc-harbor-domain-c9

defaultStorageClass

defaultStorageClass 変数は、クラスタのデフォルト ストレージ クラスを構成する場合に使用します。

defaultStorageClass
デフォルトのストレージ クラスとして使用するストレージ クラスを特定する文字列。Helm チャートや Tanzu パッケージなどの特定のアプリケーションで必要になることがあります。
...
    variables:
    - name: defaultStorageClass
      value: tkg2-storage-profile

extensionCert

extensionCert 変数は、TLS 証明書を構成する場合に使用します。

extensionCert
name 文字列と key 文字列を含む contentSecret オブジェクトを含むオブジェクト。 contentSecret は、TLS 証明書用に作成された Kubernetes シークレット オブジェクトを参照します。
...
    variables:
    #extensionCert specifies the cert and key for Extensions Controller
    #self-signed issuer and certificates must be created in advance
    - name: extensionCert
      value: 
        contentSecret:
          #name specifies the name of secret
          name: string
          #key specifies the content of tls\.crt in the secret's data map
          key: string

kubeAPIServerFQDNs

kubeAPIServerFQDNs 変数は、FQDN を使用してクラスタを構成する場合に使用します。

kubeAPIServerFQDNs
1 つ以上の完全修飾ドメイン名 (FQDN) の配列。
生成される Kubernetes API 証明書には、 kubeAPIServerFQDNs 変数で指定した各 FQDN が含まれます。システムは kubeconfig にリストの最初の FQDN をポピュレートし、それが解決可能であるとみなします。リストの別の FQDN を使用する場合は、変数リストの目的の FQDN を使用して、生成された kubeconfig ファイルを手動で編集できます。
詳細については、 v1beta1 の例:FQDN を使用するクラスタを参照してください。

nodePoolLabels

nodePoolLabels 変数は、ワーカー ノードのラベルを構成する場合に使用します。

nodePoolLabels
1 つ以上のオブジェクトの配列。各オブジェクトにはキーと値のペア(両方とも文字列)が含まれています。
ラベルを使用すると、クエリやレポートを実行しやすくするために、要件に応じてシステム オブジェクトを管理できます。使用方法の詳細については、Kubernetes ラベルのドキュメントを参照してください。

nodePoolTaints

nodePoolTaints 変数は、テイントをワーカー ノードに適用する場合に使用します。

nodePoolTaints
オブジェクトの配列。各オブジェクトには、ワーカーノードに適用される テイントが含まれています。
各テイント オブジェクトには、 key(文字列)、 value(文字列)、および effect(文字列)が含まれます。作成または更新時に、 timeAdded フィールドにポピュレートされます。

nodePoolVolumes

nodePoolVolumes 変数は、クラスタ ノードのパーシステント ボリュームを指定する場合に使用します。

nodePoolVolumes
オブジェクトのオプションの配列。それぞれに namestorageClass、および mountPath が含まれ、それぞれが文字列であり、オプションの storage 文字列が含まれる capacity オブジェクトです。
...
    variables:
      #nodePoolVolumes is an optional set of PVCs to create and
      #attach to each node; use for high-churn components like containerd
      - name: nodePoolVolumes
        value: |
          #name of the PVC to be used as the suffix (node.name)
          - name: etcd
            #mountPath is the directory where the volume device is mounted
            #takes the form /dir/path
            mountPath: /var/lib/containerd
            #storageClass is the storage class to use for the PVC
            storageClass: tkgs-storage-profile
            #capacity is the PVC storage capacity
            capacity:
              #storage sets the capacity for the disk volume
              #if not specified defaults to storageClass capacity
              storage: 4Gi           

ntp

ntp 変数は、クラスタの NTP サーバを構成する場合に使用します。

ntp
NTP サーバの FQDN または IP アドレスを表す文字列。
NTP 変数は、例にあるように、NTP サーバのドメイン名を指定します。NTP サーバは、クラスタの作成時にクラスタ変数に挿入されます。クラスタの作成後、クラスタ変数を手動で更新して、サーバ名のローテーションまたは更新を管理します。
...
    variables:
    - name: ntp
      value: time1.vmware.com

podSecurityStandard

podSecurityStandard 変数は、クラスタ全体のポッド セキュリティを構成する場合に使用します。
注: これは、vSphere 8 Update 3 ( TKG サービス 3.0) の新しい変数です。
podSecurityStandard

TKr v1.26 以降では、注釈ラベルを使用して名前空間レベルでポッド セキュリティ (PSA) の制限がデフォルトで適用されます。TKR 1.25 以降の PSA の構成を参照してください。

podSecurityStandard 変数を使用して、v1beta1 クラスタをプロビジョニングまたは更新するときにクラスタ全体の PSA を構成することもできます。

podSecurityStandard 変数は次のように実装できます。

...
variables:
- name: podSecurityStandard
  value: 
    deactivated: DEACTIVATED
    audit: AUDIT-PROFILE
    enforce: ENFORCE-PROFILE
    warn: WARN-PROFILE
    auditVersion: AUDIT-VERSION
    enforceVersion: ENFORCE-VERSION
    warnVersion: WARN-VERSION
    exemptions: 
      namespaces: [EXEMPT-NS]
ここで、
  • DEACTIVATED 値は、クラスタ全体の PSA を適用する場合は false(デフォルト)、それ以外の場合は true です。
  • *-PROFILE 値は、各モードの PSA プロファイルです。"privileged""baseline"、または "restricted"(デフォルト)を指定できます。
  • *-VERSION 値は、各モードの Kubernetes バージョン(例:"v1.26")です。値 "latest" がデフォルトです。
  • EXEMPT-NS 値は、PSA 制御から除外する名前空間のカンマ区切りのリストです。
注: システム名前空間は、kube-system、tkg-system、vmware-system-cloud-provider などのポッド セキュリティから除外されます。

podSecurityStandard 変数を実装しない場合は、デフォルトの PSA の動作が保持されます。クラスタ仕様に podSecurityStandard 変数を含めると、変数の設定が(オーバーライドしない限りデフォルトも含めて)制御されます。

次の例では、デフォルトが表示されます。
...
    variables:
      - name: podSecurityStandard
        value:
          enforce: "restricted"
          enforce-version: "latest"
次の例では、現在のポッド セキュリティ強化のベスト プラクティスに従っていないワークロードを特定するための監査ログと警告を提供しますが、既知の権限の昇格を許可しない最小限の制限があるポリシー(「ベースライン」)のみを適用します。
...
    variables:
      - name: podSecurityStandard
        value:
          audit: "restricted"
          warn: "restricted"
          enforce: "baseline"
次の例では、特定の名前空間を除き、制限付きポリシーを適用します。
...
    variables:
      - name: podSecurityStandard
        value:
          audit: "restricted"
          warn: "restricted"
          enforce: "restricted"
          exemptions:
            namesaces: ["privileged-workload-ns"]
次の例では、特定の TKr バージョンへの適用を制限します。
...
variables:
  - name: podSecurityStandard
    value: 
      audit-version: "v1.26"
      warn-version: "v1.26"
      enforce-version: "v1.26"

その他の例については、Kubernetes ドキュメントのポッド セキュリティ標準を参照してください。

proxy

proxy 変数は、クラスタのプロキシ サーバを構成する場合に使用します。

proxy
送信クラスタ接続のプロキシ サーバを参照するパラメータを持つオブジェクト。
必要な proxy パラメータは httpProxyhttpsProxy、および noProxy です。クラスタ定義に proxy 変数を含める場合、3 つのフィールドはすべて必須です。
httpProxy フィールドと httpsProxy フィールドでは、TKG クラスタからの送信 HTTP および HTTPS 接続を管理するように構成されているプロキシ サーバの URI を参照する文字列値が使用されます。HTTP を使用してプロキシ サーバに接続できます。HTTPS 接続はサポートされていません。
noProxy フィールドは文字列の配列です。 noProxy 値を スーパーバイザー ワークロード ネットワークから取得します。名前空間ネットワーク、Ingress、および Egress サブネットを noProxy フィールドに含める必要があります。
noProxy フィールドにサービス サブネットを含める必要はありません。TKG クラスタは、このサブネットと連携しません。
noProxy フィールドに clusterNetwork.services.cidrBlocks および clusterNetwork.pods.cidrBlocks を含める必要はありません。これらのエンドポイントは自動的にプロキシされません。
noProxy フィールドに localhost および 127.0.0.1 を含める必要はありません。これらのエンドポイントは自動的にプロキシされません。
...
    variables:
    #proxy specifies a proxy server to be used for the cluster
    #if omitted no proxy is configured
    - name: proxy
      value:
        #httpProxy is the proxy URI for HTTP connections
        #to endpoints outside the cluster
        httpProxy: http://<user>:<pwd>@<ip>:<port>
        #httpsProxy is the proxy URL for HTTPS connections 
        #to endpoints outside the cluster
        httpsProxy: http://<user>:<pwd>@<ip>:<port>
        #noProxy is the list of destination domain names, domains, 
        #IP addresses, and other network CIDRs to exclude from proxying
        #must include Supervisor Pod, Egress, Ingress CIDRs
        noProxy: [array of strings, comma-separated]

storageClass

storageClass 変数は、クラスタのストレージ クラスを構成する場合に使用します。

storageClass
TKG クラスタがプロビジョニングされている vSphere 名前空間 に割り当てられている vSphere ストレージ プロファイルの名前である文字列。
...
    variables:
    - name: storageClass
      value: tkgs-storage-profile 
次のコマンドを使用して、使用可能なストレージ クラスを一覧表示します。
kubectl describe namespace VSPHERE-NAMESPACE-NAME
または、vSphere 管理者権限がある場合は、次の手順を実行します。
kubectl describe storageclasses

storageClasses

storageClasses 変数は、クラスタのストレージ クラスの配列を構成する場合に使用します。

storageClasses
1 つ以上の文字列の配列。各文字列は、TKG クラスタがプロビジョニングされている vSphere 名前空間 に割り当てられている vSphere ストレージ プロファイルの名前です。
...
    variables:
    - name: storageClasses
      value: [tkg2-storage-profile, tkg2-storage-profile-latebinding] 
次のコマンドを使用して、使用可能なストレージ クラスを一覧表示します。
kubectl describe namespace VSPHERE-NAMESPACE-NAME
または、vSphere 管理者権限がある場合は、次の手順を実行します。
kubectl describe storageclasses

TKR_DATA

TKR_DATA 変数は、TKR 情報を指定する場合に使用します。

TKR_DATA
TKR バージョンおよびその他詳細の指定に使用するオブジェクト。
version は、クラスタ ノードで使用される TKR NAME 形式の文字列です。
legacy-tkr ラベルを持たない TKR のみが vSphere 9 スーパーバイザー上の TKG と互換性があります。 TKG サービス クラスタでの Kubernetes リリースの使用を参照してください。
デフォルトのオペレーティング システムは PhotonOS です。注釈を使用して、 Ubuntu TKRを指定します。

trust

trust 変数は、クラスタの信頼できる CA 証明書を 1 つ以上指定する場合に使用します。

trust
クラスタに TLS 証明書(追加の CA またはエンド証明書のいずれか)を追加するためのオブジェクト。
値は、文字列の配列を保持する additionalTrustedCAs です。例:
#trust-example
    variables:
      - name: trust
        value:
          additionalTrustedCAs:
          - name: additional-ca-1
          - name: additional-ca-2
          - name: additional-ca-N
各文字列の値は、double 型の base64 エンコードの PEM 形式の CA 証明書を含む Kubernetes シークレットのデータ マップ フィールドのユーザー定義名です。例:
#secret-example
apiVersion: v1
data:
  additional-ca-1: TFMwdExTMUNSGlSzZ3Jaa...VVNVWkpRMEMwdExTMHRDZz09
kind: Secret
metadata:
  name: cluster01-user-trusted-ca-secret
  namespace: tkgs-cluster-ns
type: Opaque
trust 変数の一般的な使用事例は、v1beta1 クラスタとプライベート コンテナ レジストリを統合することです。 TKG サービス クラスタとプライベート コンテナ レジストリの統合を参照してください。

user

user 変数は、クラスタのユーザー認証情報を指定する場合に使用します。

user
名前文字列とキー文字列、および sshAuthorizedKey 文字列を持つ、passwordSecret オブジェクトを含むオブジェクト。この変数を使用して、ユーザーの SSH キーをリモート SSH アクセス用のクラスタ ノードに追加できます。
ユーザー変数は、パスワードと認証済みキーを含む SSH ログイン認証情報を指定します。デフォルトのユーザー名は vmware-system-user です。パスワードはハッシュされ、クラスタがプロビジョニングされているのと同じ名前空間のシークレットに格納される必要があります。 passwordSecret オブジェクトはこのシークレットを参照します。たとえば、Linux では、 mkpasswd --method=SHA-512 --rounds=4096 を使用して安全なハッシュを生成できます。詳細については、 Including users and groupsを参照してください。
...
    variables:
    #user specifies an authorized user and credentials
    - name: user
      value:
        #passwordSecret is an object that contains a Kubernetes secret and key
        passwordSecret:
          #name specifies the secret name
          name: string
          #key specifies the key value pair in the secret's data map
          key: string
        sshAuthorizedKey: string that is the base64-encoded public key

vmClass

vmClass 変数は、クラスタ ノードの仮想マシン クラスを構成する場合に使用します。

vmClass
TKG クラスタがプロビジョニングされている vSphere 名前空間 にバインドされている仮想マシン クラスの名前にマッピングされる必須の文字列。
vmClass は、クラスタ ノードに使用される仮想ハードウェア設定を記述する VirtualMachineClass の名前です。VirtualMachineClass は、ノードで使用可能な CPU とメモリ、およびこれらのリソースの要求と制限を制御します。 TKG サービス クラスタでの仮想マシン クラスの使用を参照してください。
TKG サービス クラスタがプロビジョニングされている vSphere 名前空間 に関連付けられている仮想マシン クラスのみを使用できます。バインドされたクラスを一覧表示するには、 kubectl get virtualmachineclass コマンドを使用します。
制御プレーン ノードとノード プール ワーカー ノードに異なる仮想マシン クラスを使用できるよう、さまざまな範囲で vmClass 変数を定義できます。
たとえば、ここではインラインの vmClass 変数は、この特定の machineDeployment トポロジに対するプライマリの vmClass 変数を overrides(オーバーライド)します。
...
    workers:
      machineDeployments:
      - class: tkg-worker
        name: compute
        replicas: 3
        variables:
          overrides:
          - name: vmClass
            value: guaranteed-large