Airshipctl and Azure Cloud Platform Integration¶
This document provides the instructions to setup and execute airshipctl commands to deploy a Target cluster in Azure cloud platform. The manifest for the Target cluster deployment can be found at manifest/site/az-test-site/target/azure-target. It will deploy:
CAPZ v0.4.5 Management component
Region: US East
Control Plane: 1 VM (Standard_B2s)
Worker: 2 VMs (Standard_B2s)
Deploying K8S 1.18.3
Pre-requisites¶
The list below are the expected pre-requisites for this integration.
Create your $HOME/.airship/config
Instantiate the Management cluster using Kind
Update the manifest manifest/function/capz/v.4.5/default/credentials.yaml with the Azure subscription credentials
TODO: Azure subscription credentials to be passed as environment variables
Steps to create a Management cluster with Kind¶
The list of commands below creates a K8S cluster to be used as Management cluster
$ kind create cluster --name airship2-kind-api --kubeconfig /your/folder/kubeconfig.yaml
$ cp /your/folder/kubeconfig.yaml $HOME/.airship/kubeconfig
$ cp /your/folder/kubeconfig.yaml $HOME/.kube/config
Initialize Management cluster¶
Execute the following command to initialize the Management cluster with CAPI and CAPZ components.
$ airshipctl cluster init
Deploy Target cluster on Azure¶
To deploy the Target cluster on Azure cloud execute the following command.
$ airshipctl phase apply azure-target
Verify the status of Target cluster deployment
$ kubectl get cluster --all-namespaces
Check status of Target cluster KUBEADM control plane deployment
$ kubectl get kubeadmcontrolplane --all-namespaces
Retrieve the kubeconfig of Target cluster
$ kubectl --namespace=default get secret/az-target-cluster-kubeconfig -o jsonpath={.data.value} \
| base64 --decode > ./az-target-cluster.kubeconfig
Check the list of nodes create for the Target cluster
$ kubectl --kubeconfig=./az-target-cluster.kubeconfig get nodes
When all control plane and worker nodes have been created, they will stay in Not Ready state until CNI is configured. See next step below.
Configure CNI on the Target cluster with Calico¶
Calico will be initialized as part of control plane VM postKubeadmCommands, which executes the sudo kubectl –kubeconfig /etc/kubernetes/admin.conf apply -f https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/master/templates/addons/calico.yaml command.
See snippet of manifest integrating Calico initialization below:
apiVersion: controlplane.cluster.x-k8s.io/v1alpha3
kind: KubeadmControlPlane
metadata:
name: az-target-cluster-control-plane
namespace: default
spec:
infrastructureTemplate:
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3
kind: AzureMachineTemplate
name: az-target-cluster-control-plane
kubeadmConfigSpec:
...
files:
- path: /calico.sh
owner: root:root
permissions: "0755"
content: |
#!/bin/bash -x
sudo kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/master/templates/addons/calico.yaml
...
postKubeadmCommands:
- /calico.sh
useExperimentalRetryJoin: true
replicas: 3
version: v1.18.2
This approach automates the initialization of Calico and saves the need to execute manually the list of commands described below.
First we need to provision the Target cluster context in the airship config file
Add Target Cluster manifest to azure_manifest
$ airshipctl config import ./az-target-cluster.kubeconfig
Replace Target Cluster kubeconfig Context in the airship config file
$ airshipctl config set-context az-target-cluster-admin@az-target-cluster --manifest azure_manifest
Set Current Context to the Target Cluster kubeconfig Context in the airship config file
$ airshipctl config use-context az-target-cluster-admin@az-target-cluster
Now we can trigger the configuration of Calico on the Target Cluster
$ airshipctl phase apply calico --kubeconfig az-target-cluster.kubeconfig
Once the Calico provisioning has been completed you should see all the nodes instantiated for the Target cluster in Ready state.
$ kubectl --kubeconfig=./az-target-cluster.kubeconfig get nodes
NAME STATUS ROLES AGE VERSION
az-target-cluster-control-plane-28ghk Ready master 17h v1.18.2
az-target-cluster-md-0-46zfv Ready <none> 17h v1.18.2
az-target-cluster-md-0-z5lff Ready <none> 17h v1.18.2
APPENDIX: $HOME/.airship/config¶
apiVersion: airshipit.org/v1alpha1
contexts:
az-target-cluster-admin@az-target-cluster:
manifest: azure_manifest
currentContext: az-target-cluster-admin@az-target-cluster
kind: Config
managementConfiguration:
azure_management_config:
insecure: true
systemActionRetries: 30
systemRebootDelay: 30
type: azure
default:
systemActionRetries: 30
systemRebootDelay: 30
type: azure
manifests:
azure_manifest:
phaseRepositoryName: primary
metadataPath: manifests/site/az-test-site/metadata.yaml
repositories:
primary:
checkout:
branch: master
commitHash: ""
force: false
tag: ""
url: https://opendev.org/airship/airshipctl
targetPath: /tmp/airship
default:
phaseRepositoryName: primary
metadataPath: manifests/metadata.yaml
repositories:
primary:
checkout:
branch: master
commitHash: ""
force: false
tag: ""
url: https://opendev.org/airship/treasuremap
targetPath: /tmp/default