Kubernetes コンポーネントを Cloud Assembly クラウド テンプレートに追加するときに、クラスタを追加するか、ユーザーがさまざまな構成で名前空間を作成できるようにするかを選択できます。通常、この選択は、アクセス コントロールの要件、Kubernetes コンポーネントの構成方法、および展開の要件によって異なります。

Cloud Assembly のクラウド テンプレートに Kubernetes コンポーネントを追加するには、[デザイン] > [クラウド テンプレート] の順に選択し、[新規] をクリックし、左側のメニューで Kubernetes オプションを検索して展開します。次に、クラスタまたは KBS 名前空間のいずれかをキャンバスにドラッグすることで選択を行います。

プロジェクトに関連付けられた Kubernetes クラスタをクラウド テンプレートに追加する方法は、有効なユーザーが Kubernetes リソースを使用できるようにするための最も効率的な方法です。他の Cloud Assembly リソースと同様に、クラスタでタグを使用して、展開する場所を制御できます。クラスタ展開の割り当てフェーズでは、タグを使用してゾーンと VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) プランを選択できます。

この方法でクラスタを追加すると、有効なすべてのユーザーが自動的にクラスタを使用できるようになります。

クラウド テンプレートの例

最初のクラウド テンプレートの例は、タグ付けによって制御される単純な Kubernetes 展開のテンプレートを示しています。Kubernetes ゾーンは、[新しい Kubernetes ゾーン] 画面上で構成され、2 つの展開プランを使用して作成されています。この例では、placement:tag というタグがゾーンの機能として追加され、クラウド テンプレートの同様な制約との照合に使用されています。複数のゾーンがこのタグを使用して構成されている場合、優先順位の番号が最も小さいゾーンが選択されます。

formatVersion: 1
inputs: {}
resources:
  Cluster_provisioned_from_tag:
    type: Cloud.K8S.Cluster
    properties:
      hostname: 109.129.209.125
      constraints:
	-tag: 'placement tag'
      port: 7003
      workers: 1
      connectBy: hostname 

2 番目のクラウド テンプレートの例では、ユーザーが展開を申請するときに目的のクラスタのホスト名を入力できるように、$(input.hostname) という変数を使用してテンプレートを設定する方法を示します。また、タグを使用して、クラスタ展開のリソース割り当てフェーズ中に、ゾーンと TKGI プランを選択することもできます。

formatVersion: 1
inputs:
  hostname:
    type: string
    title: Cluster hostname
resources:
  Cloud_K8S_Cluster_1:
    type: Cloud.K8S.Cluster
    properties:
      hostname: ${input.hostname}
      port: 8443
      connectBy: hostname
      workers: 1

名前空間を使用してクラスタ使用量を管理する場合は、クラウド テンプレートに name: ${input.name} という変数を設定できます。これは、展開の申請時にユーザーが入力する名前空間名を置き換えるために使用されます。このような展開では、テンプレートを次の例のように作成します。

1 formatVersion: 1
2 inputs:
3 name:
4    type: string
5    title: "Namespace name"
6 resources:
7    Cloud_KBS_Namespace_1:
8        type: Cloud.K8S.Namespace
9        properties:
10            name: ${input.name}

ユーザーは、[インフラストラクチャ] > [リソース] > [Kubernetes クラスタ] ページからアクセス可能な kubeconfig ファイルを使用して、展開されたクラスタを管理できます。目的のクラスタのページでカードを見つけて、[Kubeconfig] をクリックします。

VMware Cloud Templates のスーパーバイザー名前空間

Cloud Assembly クラウド テンプレート内の基本的なスーパーバイザー名前空間のスキームは次のとおりです。

{
  "title": "Supervisor namespace schema",
  "description": "Request schema for provisioning of Supervisor namespace resource",
  "type": "object",
  "properties": {
    "name": {
      "title": "Name",
      "description": "Alphabetic (a-z and 0-9) string with maximum length of 63 characters. The character ‘-’ is allowed anywhere except the first or last position of the identifier.",
      "type": "string",
      "pattern": "^.*\\$\\{.*\\}.*$|^((?!-)[a-z0-9-]{1,63}(?<!-))$",
      "ignoreOnUpdate": true
    },
    "description": {
      "title": "Description",
      "description": "An optional description of this Supervisor namespace.",
      "type": "string",
      "ignoreOnUpdate": true
    },
    "constraints": {
      "title": "Constraints",
      "description": "To target the correct resources, blueprint constraints are matched against infrastructure capability tags. Constraints must include the key name. Options include value, negative [!], and hard or soft requirement.",
      "type": "array",
      "recreateOnUpdate": true,
      "items": {
        "type": "object",
        "properties": {
          "tag": {
            "title": "Tag",
            "description": "Constraint definition in syntax `[!]tag_key[:tag_value][:hard|:soft]` \nExamples:\n```\n!location:eu:hard\n location:us:soft\n!pci\n```",
            "type": "string",
            "recreateOnUpdate": true
          }
        }
      }
    },
    "limits": {
      "title": "Limits",
      "description": "Defines namespace resource limits such as pods, services, etc.",
      "type": "array",
      "recreateOnUpdate": false,
      "items": {
        "type": "object",
        "properties": {
          "stateful_set_count": {
            "title": "stateful_set_count",
            "description": "This represents the new value for 'statefulSetCount' option which is the maximum number of StatefulSets in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
          "deployment_count": {
            "title": "deployment_count",
            "description": "This represents the new value for 'deploymentCount' option which is the maximum number of deployments in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
          "cpu_limit_default": {
            "title": "cpu_limit_default",
            "description": "This represents the new value for the default CPU limit (in Mhz) for containers in the pod. If specified, this limit should be at least 10 MHz.",
            "type": "integer",
            "recreateOnUpdate": false
          },
          "config_map_count": {
            "title": "config_map_count",
            "description": "This represents the new value for 'configMapCount' option which is the maximum number of ConfigMaps in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
          "pod_count": {
            "title": "pod_count",
            "description": "This represents the new value for 'podCount' option which is the maximum number of pods in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
          "job_count": {
            "title": "job_count",
            "description": "This represents the new value for 'jobCount' option which is the maximum number of jobs in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
          "secret_count": {
            "title": "secret_count",
            "description": "This represents the new value for 'secretCount' option which is the maximum number of secrets in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
          "cpu_limit": {
            "title": "cpu_limit",
            "description": "This represents the new value for 'limits.cpu' option which is equivalent to the maximum CPU limit (in MHz) across all pods in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
          "cpu_request_default": {
            "title": "cpu_request_default",
            "description": "This represents the new value for the default CPU request (in Mhz) for containers in the pod. If specified, this field should be at least 10 MHz.",
            "type": "integer",
            "recreateOnUpdate": false
          },
           "memory_limit_default": {
            "title": "memory_limit_default",
            "description": "This represents the new value for the default memory limit (in mebibytes) for containers in the pod.",
            "type": "integer",
            "recreateOnUpdate": false
          },
           "memory_limit": {
            "title": "memory_limit",
            "description": "This represents the new value for 'limits.memory' option which is equivalent to the maximum memory limit (in mebibytes) across all pods in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
           "memory_request_default": {
            "title": "memory_request_default",
            "description": "This represents the new value for the default memory request (in mebibytes) for containers in the pod.",
            "type": "integer",
            "recreateOnUpdate": false
          },
           "service_count": {
            "title": "service_count",
            "description": "This represents the new value for 'serviceCount' option which is the maximum number of services in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
           "replica_set_count": {
            "title": "replica_set_count",
            "description": "This represents the new value for 'replicaSetCount' option which is the maximum number of ReplicaSets in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
           "replication_controller_count": {
            "title": "replication_controller_count",
            "description": "This represents the new value for 'replicationControllerCount' option which is the maximum number of ReplicationControllers in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
           "storage_request_limit": {
            "title": "storage_request_limit",
            "description": "This represents the new value for 'requests.storage' which is the limit on storage requests (in mebibytes) across all persistent volume claims from pods in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
           "persistent_volume_claim_count": {
            "title": "persistent_volume_claim_count",
            "description": "This represents the new value for 'persistentVolumeClaimCount' option which is the maximum number of PersistentVolumeClaims in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          },
           "daemon_set_count": {
            "title": "daemon_set_count",
            "description": "This represents the new value for 'daemonSetCount' option which is the maximum number of DaemonSets in the namespace.",
            "type": "integer",
            "recreateOnUpdate": false
          }
        },
         "additionalProperties": false
      }
    }
  },
  "required": [
    "name"
  ]
}

VMware Cloud Templates では、スーパーバイザー名前空間に関する制限の使用がサポートされています。制限を使用すると、CPU およびメモリのリソース使用量、および展開されるマシンによって名前空間で許可されるポッドの最大数を制御できます。

formatVersion: 1
inputs: {}
resources:
  Cloud_SV_Namespace_1:
    type: Cloud.SV.Namespace
    properties:
      name: '${env.deploymentName}'
      limits:
        - cpu_limit: 1000
          cpu_request_default: 800
          memory_limit: 2000
          memory_limit_default: 1500
          pod_count: 200