Learn KOP - Part 2 - Git to System - Rafay Product Documentation

Part 2: Provision

What Will You Do

In this section, you will create a new AKS cluster using the UI and see that the System Sync pipeline automatically converts the cluster resource to infrastructure as code and pushes the cluster manifest to the Git repository. We will then increase the minimum node count on the cluster by updating the cluster manifest from Git and see that the cluster node count increases on the cluster.


Step 1: Provision Cluster

In this step, we will provision a new cluster from the UI. Alternatively, you can import and takeover an existing cluster rather than creating a new cluster through the UI. To proceed with importing a cluster, follow these instructions

Provisioning will take approximately 10 minutes to complete. The final step in the process is the blueprint sync for the default blueprint. This can take a few minutes to complete because this requires the download of several container images and deployment of monitoring and log aggregation components.


Step 2: Validate GitOps

In this step, we will check that the GitOps pipeline created a cluster specification file and pushed it to the Git repository.

You will see that a second job in the pipeline was initiated. This job was triggered by the system when the new cluster was created. This new job was the system writing the cluster specification file to the Git repo.

Now, we will check that the Git repo has the cluster spec file.

Note
The Git path will be different if you used a different project name.

You will see the cluster specification files for all clusters in the project.


Step 3: Update Cluster From Git

In this step, we will update the minimum node count in the cluster spec file on the Git repository and then witness the cluster being updated automatically in the system.

apiVersion: infra.k8smgmt.io/v3
kind: Cluster
metadata:
  name: aks-cluster-gs
  project: defaultproject
spec:
  blueprintConfig:
    name: default-aks
  cloudCredentials: azure-cloud-credential
  config:
    kind: aksClusterConfig
    metadata:
      name: aks-cluster-gs
    spec:
      managedCluster:
        apiVersion: "2022-07-01"
        identity:
          type: SystemAssigned
        location: eastus2
        properties:
          apiServerAccessProfile:
            enablePrivateCluster: true
          dnsPrefix: aks-cluster-gs-dns
          kubernetesVersion: 1.23.15
          networkProfile:
            loadBalancerSku: standard
            networkPlugin: kubenet
        sku:
          name: Basic
          tier: Free
        type: Microsoft.ContainerService/managedClusters
      nodePools:
      - apiVersion: "2022-07-01"
        location: eastus2
        name: primary
        properties:
          count: 2
          enableAutoScaling: true
          maxCount: 2
          maxPods: 40
          minCount: 2
          mode: System
          orchestratorVersion: 1.23.15
          osType: Linux
          type: VirtualMachineScaleSets
          vmSize: Standard_DS2_v2
        type: Microsoft.ContainerService/managedClusters/agentPools
      resourceGroupName: RafayRG-Tim
  proxyConfig: {}
  type: aks
status:
  aks:
    nodepools:
    - createdAt: "2023-03-02T17:18:29Z"
      id: 24wpnvm
      kubeVersion: 1.23.15
      name: primary
      provisionStatus: NODEGROUP_PROVISION_COMPLETE
  blueprint:
    name: default-aks
  conditions:
  - reason: registered
    status: "True"
    type: ClusterRegisterSucceeded
  - reason: checked in
    status: "True"
    type: ClusterCheckInSucceeded
  - reason: all nodes synced
    status: "True"
    type: ClusterNodeSyncSucceeded
  - reason: all namespaces synced
    status: "True"
    type: ClusterNamespaceSyncSucceeded
  - reason: all tasks/workloads synced
    status: "True"
    type: ClusterBlueprintSyncSucceeded
  - reason: blueprint synced
    status: "True"
    type: ClusterReady
  createdAt: "2023-03-02T17:08:10Z"
  displayName: aks-cluster-gs
  extra:
    vaultIntegration: {}
  id: 2q6dljm
  name: aks-cluster-gs
  provisionStatus: CLUSTER_PROVISION_COMPLETE

The commit will trigger the GitOps pipeline and it will automatically update the cluster node pool.

You will see that a third job in the pipeline was initiated. This job was triggered by the system when the new cluster was created. This new job was the system writing the cluster specification file to the Git repo.

After a few minutes, we can see that the number of nodes in the cluster was increased to two.


Recap

In this part, you tested bidirectional synchronization between your Git repository and the system when creating and updating an AKS cluster.