Skip to content

Create Managed Cluster#

Creation Process#

Step 1: Create Credential#

  • Create a Credential object with all credentials required per the Credential System.

Step 2: Select the Template#

For details about the templates in Project 2A, see the Templates system.

  • Set the KUBECONFIG environment variable to the path to the management cluster kubeconfig file. Then select the Template you want to use for the deployment. To list all available templates, run:
kubectl get clustertemplate -n hmc-system

Note

If you want to deploy a hosted control plane template, check additional notes on hosted control planes for each of the clustertemplate sections:

Step 3: Create the ManagedCluster Object YAML Configuration#

  • Create the file with the ManagedCluster configuration:

    apiVersion: hmc.mirantis.com/v1alpha1
    kind: ManagedCluster
    metadata:
      name: <cluster-name>
      namespace: <hmc-system-namespace>
    spec:
      template: <template-name>
      credential: <infrastructure-provider-credential-name>
      dryRun: <"true" or "false": defaults to "false">
      config:
        <cluster-configuration>
    

Note

Substitute the parameters enclosed in angle brackets with the corresponding values. Enable the dryRun flag if required. For details, see Dry Run.

Following is an interpolated example.

Example

ManagedCluster for AWS Infrastructure Provider Object Example

apiVersion: hmc.mirantis.com/v1alpha1
kind: ManagedCluster
metadata:
  name: my-managed-cluster
  namespace: hmc-system
spec:
  template: aws-standalone-cp-0-0-2
  credential: aws-credential
  dryRun: true
  config:
    region: us-west-2
    controlPlane:
      instanceType: t3.small
    worker:
      instanceType: t3.small

Step 4: Apply the ManagedCluster Configuration to Create it#

  • Apply the ManagedCluster object to your Project 2A deployment:

    kubectl apply -f managedcluster.yaml
    

Step 5: Check the Status of the ManagedCluster Object#

  • Check the status of the newly created ManagedCluster:

    kubectl -n <namespace> get managedcluster.hmc <cluster-name> -o=yaml
    

Info

Reminder: <namespace> and <cluster-name> are defined in the .metadata section of the ManagedCluster object you created above.

Step 6: Wait for Infrastructure and Cluster to be Provisioned#

  • Wait for infrastructure to be provisioned and the cluster to be deployed:

    kubectl -n <namespace> get cluster <cluster-name> -o=yaml
    

Tip

You may also watch the process with the clusterctl describe command (requires the clusterctl CLI to be installed):

clusterctl describe cluster <cluster-name> -n <namespace> --show-conditions all

Step 7: Retrieve Kubernetes Configuration of Your Managed Cluster#

  • Retrieve the Kubernetes configuration of your managed cluster when it is finished provisioning:

    kubectl get secret -n <namespace> <cluster-name>-kubeconfig -o=jsonpath={.data.value} | base64 -d > kubeconfig
    

Dry Run#

Project 2A ManagedCluster supports two modes: with and without .spec.dryRun (defaults to false).

If no configuration (.spec.config) is specified, the ManagedCluster object will be populated with defaults (default configuration can be found in the corresponding Template status) and automatically have .spec.dryRun set to true.

Example

ManagedCluster with default configuration

apiVersion: hmc.mirantis.com/v1alpha1
kind: ManagedCluster
metadata:
  name: my-managed-cluster
  namespace: hmc-system
spec:
  config:
    clusterNetwork:
      pods:
        cidrBlocks:
        - 10.244.0.0/16
      services:
        cidrBlocks:
        - 10.96.0.0/12
    controlPlane:
      iamInstanceProfile: control-plane.cluster-api-provider-aws.sigs.k8s.io
      instanceType: ""
    controlPlaneNumber: 3
    k0s:
      version: v1.27.2+k0s.0
    publicIP: false
    region: ""
    sshKeyName: ""
    worker:
      amiID: ""
      iamInstanceProfile: nodes.cluster-api-provider-aws.sigs.k8s.io
      instanceType: ""
    workersNumber: 2
  template: aws-standalone-cp-0-0-2
  credential: aws-credential
  dryRun: true

After you adjust your configuration and ensure that it passes validation (TemplateReady condition from .status.conditions), remove the .spec.dryRun flag to proceed with the deployment.

Here is an example of a ManagedCluster object that passed the validation:

Example

ManagedCluster object that passed the validation

apiVersion: hmc.mirantis.com/v1alpha1
kind: ManagedCluster
metadata:
  name: my-managed-cluster
  namespace: hmc-system
spec:
  template: aws-standalone-cp-0-0-2
  credential: aws-credential
  config:
    region: us-east-2
    publicIP: true
    controlPlaneNumber: 1
    workersNumber: 1
    controlPlane:
      instanceType: t3.small
    worker:
      instanceType: t3.small
  status:
    conditions:
    - lastTransitionTime: "2024-07-22T09:25:49Z"
      message: Template is valid
      reason: Succeeded
      status: "True"
      type: TemplateReady
    - lastTransitionTime: "2024-07-22T09:25:49Z"
      message: Helm chart is valid
      reason: Succeeded
      status: "True"
      type: HelmChartReady
    - lastTransitionTime: "2024-07-22T09:25:49Z"
      message: ManagedCluster is ready
      reason: Succeeded
      status: "True"
      type: Ready
    observedGeneration: 1

Cleanup#

  1. Remove the Management object:

    kubectl delete management.hmc hmc
    

Note

Ensure you have no Project 2A ManagedCluster objects left in the cluster prior to Management deletion.

  1. Remove the hmc Helm release:

    helm uninstall hmc -n hmc-system
    
  2. Remove the hmc-system namespace:

    kubectl delete ns hmc-system