From fd14ed45bf8314ecd460cad0f6cab9f5b3eb7e24 Mon Sep 17 00:00:00 2001 From: Rishabh Kumar Jain Date: Tue, 23 Feb 2021 12:10:31 -0800 Subject: [PATCH] Update Airshipctl and CAPD Documentation Update the document to use new phases - clusterctl-init-ephemeral - controlplane-ephemeral - initinfra-networking-target - clusterctl-init-target - clusterctl-move - workers-target Change-Id: If41412b1810cb61092eaccd96161b012b518eaf6 --- docs/source/providers/cluster_api_docker.md | 926 +++++--------------- 1 file changed, 212 insertions(+), 714 deletions(-) diff --git a/docs/source/providers/cluster_api_docker.md b/docs/source/providers/cluster_api_docker.md index 1759ef924..9a49fd960 100755 --- a/docs/source/providers/cluster_api_docker.md +++ b/docs/source/providers/cluster_api_docker.md @@ -1,719 +1,229 @@ # Airshipctl and Cluster API Docker Integration ## Overview -Airshipctl and cluster api docker integration facilitates usage of `airshipctl` -to create cluster api management and workload clusters using `docker as -infrastructure provider`. + +This document demonstrates usage of airshipctl to create kubernetes clusters +locally using docker and kind. + +Airshipctl requires an existing Kubernetes cluster accessible via kubectl. +We will use kind as a local bootstrap cluster, to provision a target management +cluster on the docker infrastructure provider. The target management cluster +will then be used to create a workload cluster with one or more worker nodes. ## Workflow -A simple workflow that can be tested involves the following operations: -**Initialize the management cluster with cluster api and docker provider -components** +Below are the steps that we will go through to create the kubernetes clusters +locally using docker and kind. -> airshipctl cluster init --debug +- create a single node kubernetes cluster using kind +- initialize the kind cluster with cluster api management components +- use the kind management cluster to create a target cluster with one control + plane +- apply cni solution on the target cluster +- initialize the target cluster with cluster api management components +- move the cluster api management crds from kind cluster to target management + cluster +- tear down the kind management cluster +- use the target management cluster to create worker nodes +- increase/decrease the worker count as required -**Create a workload cluster, with control plane and worker nodes** +## Airshipctl Commands Used And Purpose -> airshipctl phase run controlplane +`Pull documents from the remote git repository` +> airshipctl document pull -> airshipctl phase run workers +`Initialize the kind cluster with cluster api and docker provider components` +> airshipctl phase run clusterctl-init-ephemeral -Note: `airshipctl phase run initinfra-ephemeral` is not used because all the provider -components are initialized using `airshipctl cluster init` +`Use the management cluster to create a target cluster with one control plane` +> airshipctl phase run controlplane-ephemeral -The phase `initinfra` is included just to get `validate docs` to -pass. +`Get multiple contexts for every cluster in the airship site` +> airshipctl cluster get-kubeconfig > ~/.airship/kubeconfig-tmp -## Common Pre-requisites +`Initialize CNI on target cluster` +> airshipctl phase run initinfra-networking-target + +`Initialize Target Cluster with cluster api and docker proivder components` +> airshipctl phase run clusterctl-init-target + +`Move managment CRDs from kind management cluster to target management cluster` +> airshipctl phase run clusterctl-move + +`Use target management cluster to deploy workers` +> airshipctl phase run workers-target + +## Getting Started + +### Build [Airshipctl](https://docs.airshipit.org/airshipctl/developers.html) + +``` +$ git clone https://review.opendev.org/airship/airshipctl + +$ cd airshipctl + +$ ./tools/deployment/21_systemwide_executable.sh +``` + +### Create airship configuration + +``` +$ cat ~/.airship/config + +apiVersion: airshipit.org/v1alpha1 +managementConfiguration: + dummy_management_config: + type: redfish + insecure: true + useproxy: false + systemActionRetries: 30 + systemRebootDelay: 30 +contexts: + ephemeral-cluster: + contextKubeconf: ephemeral-cluster_ephemeral + manifest: dummy_manifest + managementConfiguration: dummy_management_config + target-cluster: + contextKubeconf: target-cluster_target + manifest: dummy_manifest + managementConfiguration: dummy_management_config +currentContext: ephemeral-cluster +kind: Config +manifests: + dummy_manifest: + phaseRepositoryName: primary + repositories: + primary: + checkout: + branch: master + force: false + remoteRef: "" + tag: "" + url: https://review.opendev.org/airship/airshipctl + metadataPath: manifests/site/docker-test-site/metadata.yaml + targetPath: /tmp/airship +``` + +### Deploy Control plane and Workers + +``` +$ export KIND_EXPERIMENTAL_DOCKER_NETWORK=bridge + +$ export KUBECONFIG="${HOME}/.airship/kubeconfig" + +$ kind create cluster --name ephemeral-cluster --wait 120s --kubeconfig \ +"${HOME}/.airship/kubeconfig" \ +--config ./tools/deployment/templates/kind-cluster-with-extramounts + +$ kubectl config set-context ephemeral-cluster \ +--cluster kind-ephemeral-cluster \ +--user kind-ephemeral-cluster --kubeconfig $KUBECONFIG + +$ airshipctl document pull -n --debug + +$ airshipctl phase run clusterctl-init-ephemeral --debug --wait-timeout 300s + +$ airshipctl phase run controlplane-ephemeral --debug --wait-timeout 300s + +$ airshipctl cluster get-kubeconfig > ~/.airship/kubeconfig-tmp + +$ mv ~/.airship/kubeconfig-tmp "${KUBECONFIG}" + +$ airshipctl phase run initinfra-networking-target --debug + +$ kubectl --context target-cluster wait \ +--for=condition=Ready nodes --all --timeout 300s + +$ kubectl get nodes --context target-cluster -A + +``` + +`Note: +Please take note of the control plane node name because it is untainted +in the next step. +For eg. control plane node name could be something like +target-cluster-control-plane-twwsv +` + +``` + +$ kubectl taint node target-cluster-control-plane-twwsv \ +node-role.kubernetes.io/master- --context target-cluster --request-timeout 10s + +$ airshipctl phase run clusterctl-init-target --debug --wait-timeout 300s + +$ kubectl get pods -A --context target-cluster + +$ airshipctl phase run clusterctl-move --debug --progress + +$ kubectl get machines --context target-cluster + +$ kind delete cluster --name "ephemeral-cluster" + +$ airshipctl phase run workers-target --debug + +$ kubectl get machines --context target-cluster + +NAME PROVIDERID PHASE +target-cluster-control-plane-m5jf7 docker:////target-cluster-control-plane-m5jf7 Running +target-cluster-md-0-84db44cdff-r8dkr docker:////target-cluster-md-0-84db44cdff-r8dkr Running + +``` + +## Scale Workers + +Worker count can be adjusted in airshipctl/manifests/site/docker-test-site/ +target/workers/machine_count.json. + +In this example, we have changed it to 3. + +``` + +$ cat /tmp/airship/airshipctl/manifests/site/docker-test-site/target/workers/machine_count.json + +[ + { "op": "replace","path": "/spec/replicas","value": 3 } +] + +$ airshipctl phase run workers-target --debug + +$ kubectl get machines --kubeconfig /tmp/target-cluster.kubeconfig + +NAME PROVIDERID PHASE +target-cluster-control-plane-m5jf7 docker:////target-cluster-control-plane-m5jf7 Running +target-cluster-md-0-84db44cdff-b6zp6 docker:////target-cluster-md-0-84db44cdff-b6zp6 Running +target-cluster-md-0-84db44cdff-g4nm7 docker:////target-cluster-md-0-84db44cdff-g4nm7 Running +target-cluster-md-0-84db44cdff-r8dkr docker:////target-cluster-md-0-84db44cdff-r8dkr Running +``` + +## Clean Up + +``` +$ kind get clusters +target-cluster + +$ kind delete cluster --name target-cluster +``` + +## More Information + +- worker count can be adjusted from airshipctl/manifests/site/docker-test-site/ +target/workers/machine_count.json + +- control plane count can be adjusted from airshipctl/manifests/site/ +docker-test-site/ephemeral/controlplane/machine_count.json + +## Reference + +### Pre-requisites * Install [Docker](https://www.docker.com/) * Install [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) * Install [Kind](https://kind.sigs.k8s.io/) -* Install - [Kustomize](https://kubernetes-sigs.github.io/kustomize/installation/binaries/) -* Install [Airshipctl](https://docs.airshipit.org/airshipctl/developers.html) - -Also, check [Software Version Information](#Software-Version-Information), +* Check [Software Version Information](#Software-Version-Information), [Special Instructions](#Special-Instructions) and [Virtual Machine Specification](#Virtual-Machine-Specification) -## Getting Started - -Kind will be used to setup a kubernetes cluster, that will be later transformed -into a management cluster using airshipctl. The kind kubernetes cluster will be -initialized with cluster API and Cluster API docker provider components. - -Run the following command to create a kind configuration file, that would mount -the docker.sock file from the host operating system into the kind cluster. This -is required by the management cluster to create machines on host as docker -containers. - -$ vim kind-cluster-with-extramounts.yaml - -``` -kind: Cluster -apiVersion: kind.sigs.k8s.io/v1alpha3 -nodes: - - role: control-plane - extraMounts: - - hostPath: /var/run/docker.sock - containerPath: /var/run/docker.sock - -``` - -Save and exit. - -$ export KIND_EXPERIMENTAL_DOCKER_NETWORK=bridge - -$ kind create cluster --name capi-docker --config ~/kind-cluster-with-extramounts.yaml - -``` -Creating cluster "capi-docker" ... -WARNING: Overriding docker network due to KIND_EXPERIMENTAL_DOCKER_NETWORK -WARNING: Here be dragons! This is not supported currently. - βœ“ Ensuring node image (kindest/node:v1.18.2) πŸ–Ό - βœ“ Preparing nodes πŸ“¦ - βœ“ Writing configuration πŸ“œ - βœ“ Starting control-plane πŸ•ΉοΈ - βœ“ Installing CNI πŸ”Œ - βœ“ Installing StorageClass πŸ’Ύ -Set kubectl context to "kind-capi-docker" -You can now use your cluster with: - -kubectl cluster-info --context kind-capi-docker -Check if all the pods are up. -``` - -$ kubectl get pods -A - -``` -NAMESPACE NAME READY STATUS RESTARTS AGE -kube-system coredns-6955765f44-fvg8p 1/1 Running 0 72s -kube-system coredns-6955765f44-gm96d 1/1 Running 0 72s -kube-system etcd-capi-docker-control-plane 1/1 Running 0 83s -kube-system kindnet-7fqv6 1/1 Running 0 72s -kube-system kube-apiserver-capi-docker-control-plane 1/1 Running 0 83s -kube-system kube-controller-manager-capi-docker-control-plane 1/1 Running 0 83s -kube-system kube-proxy-gqlnm 1/1 Running 0 72s -kube-system kube-scheduler-capi-docker-control-plane 1/1 Running 0 83s -local-path-storage local-path-provisioner-7745554f7f-2qcv7 1/1 Running 0 72s -``` - -## Create airshipctl configuration files - -$ mkdir ~/.airship - -$ airshipctl config init - -Run the below command to configure docker manifest, and add it to airship config - -``` -$ airshipctl config set-manifest docker_manifest --repo primary \ ---url https://opendev.org/airship/airshipctl --branch master \ ---phase --sub-path manifests/site/docker-test-site --target-path /tmp/airship -``` - -$ airshipctl config set-context kind-capi-docker --manifest docker_manifest - -``` -Context "kind-capi-docker" modified. -``` -$ cp ~/.kube/config ~/.airship/kubeconfig - -$ airshipctl config get-context - -``` -Context: kind-capi-docker -contextKubeconf: kind-capi-docker_target -manifest: docker_manifest - -LocationOfOrigin: /home/rishabh/.airship/kubeconfig -cluster: kind-capi-docker_target -user: kind-capi-docker -``` -$ airshipctl config use-context kind-capi-docker - -``` -Manifest "docker_manifest" created. -``` - -$ airshipctl document pull --debug - -``` -[airshipctl] 2020/08/12 14:07:13 Reading current context manifest information from /home/rishabh/.airship/config -[airshipctl] 2020/08/12 14:07:13 Downloading primary repository airshipctl from https://review.opendev.org/airship/airshipctl into /tmp/airship -[airshipctl] 2020/08/12 14:07:13 Attempting to download the repository airshipctl -[airshipctl] 2020/08/12 14:07:13 Attempting to clone the repository airshipctl from https://review.opendev.org/airship/airshipctl -[airshipctl] 2020/08/12 14:07:23 Attempting to checkout the repository airshipctl from branch refs/heads/master -``` -$ airshipctl config set-manifest docker_manifest --target-path /tmp/airship/airshipctl - -## Initialize the management cluster - -$ airshipctl cluster init --debug - -``` -[airshipctl] 2020/08/12 14:08:23 Starting cluster-api initiation -Installing the clusterctl inventory CRD -Creating CustomResourceDefinition="providers.clusterctl.cluster.x-k8s.io" -Fetching providers -[airshipctl] 2020/08/12 14:08:23 Creating arishipctl repository implementation interface for provider cluster-api of type CoreProvider -[airshipctl] 2020/08/12 14:08:23 Setting up airshipctl provider Components client -Provider type: CoreProvider, name: cluster-api -[airshipctl] 2020/08/12 14:08:23 Getting airshipctl provider components, skipping variable substitution: true. -Provider type: CoreProvider, name: cluster-api -Fetching File="components.yaml" Provider="cluster-api" Version="v0.3.3" -[airshipctl] 2020/08/12 14:08:23 Building cluster-api provider component documents from kustomize path at /tmp/airship/airshipctl/manifests/function/capi/v0.3.3 -[airshipctl] 2020/08/12 14:08:24 Creating arishipctl repository implementation interface for provider kubeadm of type BootstrapProvider -[airshipctl] 2020/08/12 14:08:24 Setting up airshipctl provider Components client -Provider type: BootstrapProvider, name: kubeadm -[airshipctl] 2020/08/12 14:08:24 Getting airshipctl provider components, skipping variable substitution: true. -Provider type: BootstrapProvider, name: kubeadm -Fetching File="components.yaml" Provider="bootstrap-kubeadm" Version="v0.3.3" -[airshipctl] 2020/08/12 14:08:24 Building cluster-api provider component documents from kustomize path at /tmp/airship/airshipctl/manifests/function/cabpk/v0.3.3 -[airshipctl] 2020/08/12 14:08:24 Creating arishipctl repository implementation interface for provider kubeadm of type ControlPlaneProvider -[airshipctl] 2020/08/12 14:08:24 Setting up airshipctl provider Components client -Provider type: ControlPlaneProvider, name: kubeadm -[airshipctl] 2020/08/12 14:08:24 Getting airshipctl provider components, skipping variable substitution: true. -Provider type: ControlPlaneProvider, name: kubeadm -Fetching File="components.yaml" Provider="control-plane-kubeadm" Version="v0.3.3" -[airshipctl] 2020/08/12 14:08:24 Building cluster-api provider component documents from kustomize path at /tmp/airship/airshipctl/manifests/function/cacpk/v0.3.3 -[airshipctl] 2020/08/12 14:08:24 Creating arishipctl repository implementation interface for provider docker of type InfrastructureProvider -[airshipctl] 2020/08/12 14:08:24 Setting up airshipctl provider Components client -Provider type: InfrastructureProvider, name: docker -[airshipctl] 2020/08/12 14:08:24 Getting airshipctl provider components, skipping variable substitution: true. -Provider type: InfrastructureProvider, name: docker -Fetching File="components.yaml" Provider="infrastructure-docker" Version="v0.3.7" -[airshipctl] 2020/08/12 14:08:24 Building cluster-api provider component documents from kustomize path at /tmp/airship/airshipctl/manifests/function/capd/v0.3.7 -[airshipctl] 2020/08/12 14:08:24 Creating arishipctl repository implementation interface for provider cluster-api of type CoreProvider -Fetching File="metadata.yaml" Provider="cluster-api" Version="v0.3.3" -[airshipctl] 2020/08/12 14:08:24 Building cluster-api provider component documents from kustomize path at /tmp/airship/airshipctl/manifests/function/capi/v0.3.3 -[airshipctl] 2020/08/12 14:08:25 Creating arishipctl repository implementation interface for provider kubeadm of type BootstrapProvider -Fetching File="metadata.yaml" Provider="bootstrap-kubeadm" Version="v0.3.3" -[airshipctl] 2020/08/12 14:08:25 Building cluster-api provider component documents from kustomize path at /tmp/airship/airshipctl/manifests/function/cabpk/v0.3.3 -[airshipctl] 2020/08/12 14:08:25 Creating arishipctl repository implementation interface for provider kubeadm of type ControlPlaneProvider -Fetching File="metadata.yaml" Provider="control-plane-kubeadm" Version="v0.3.3" -[airshipctl] 2020/08/12 14:08:25 Building cluster-api provider component documents from kustomize path at /tmp/airship/airshipctl/manifests/function/cacpk/v0.3.3 -[airshipctl] 2020/08/12 14:08:25 Creating arishipctl repository implementation interface for provider docker of type InfrastructureProvider -Fetching File="metadata.yaml" Provider="infrastructure-docker" Version="v0.3.7" -[airshipctl] 2020/08/12 14:08:25 Building cluster-api provider component documents from kustomize path at /tmp/airship/airshipctl/manifests/function/capd/v0.3.7 -Installing cert-manager -Creating Namespace="cert-manager" -Creating CustomResourceDefinition="challenges.acme.cert-manager.io" -Creating CustomResourceDefinition="orders.acme.cert-manager.io" -Creating CustomResourceDefinition="certificaterequests.cert-manager.io" -Creating CustomResourceDefinition="certificates.cert-manager.io" -Creating CustomResourceDefinition="clusterissuers.cert-manager.io" -Creating CustomResourceDefinition="issuers.cert-manager.io" -Creating ServiceAccount="cert-manager-cainjector" Namespace="cert-manager" -Creating ServiceAccount="cert-manager" Namespace="cert-manager" -Creating ServiceAccount="cert-manager-webhook" Namespace="cert-manager" -Creating ClusterRole="cert-manager-cainjector" -Creating ClusterRoleBinding="cert-manager-cainjector" -Creating Role="cert-manager-cainjector:leaderelection" Namespace="kube-system" -Creating RoleBinding="cert-manager-cainjector:leaderelection" Namespace="kube-system" -Creating ClusterRoleBinding="cert-manager-webhook:auth-delegator" -Creating RoleBinding="cert-manager-webhook:webhook-authentication-reader" Namespace="kube-system" -Creating ClusterRole="cert-manager-webhook:webhook-requester" -Creating Role="cert-manager:leaderelection" Namespace="kube-system" -Creating RoleBinding="cert-manager:leaderelection" Namespace="kube-system" -Creating ClusterRole="cert-manager-controller-issuers" -Creating ClusterRole="cert-manager-controller-clusterissuers" -Creating ClusterRole="cert-manager-controller-certificates" -Creating ClusterRole="cert-manager-controller-orders" -Creating ClusterRole="cert-manager-controller-challenges" -Creating ClusterRole="cert-manager-controller-ingress-shim" -Creating ClusterRoleBinding="cert-manager-controller-issuers" -Creating ClusterRoleBinding="cert-manager-controller-clusterissuers" -Creating ClusterRoleBinding="cert-manager-controller-certificates" -Creating ClusterRoleBinding="cert-manager-controller-orders" -Creating ClusterRoleBinding="cert-manager-controller-challenges" -Creating ClusterRoleBinding="cert-manager-controller-ingress-shim" -Creating ClusterRole="cert-manager-view" -Creating ClusterRole="cert-manager-edit" -Creating Service="cert-manager" Namespace="cert-manager" -Creating Service="cert-manager-webhook" Namespace="cert-manager" -Creating Deployment="cert-manager-cainjector" Namespace="cert-manager" -Creating Deployment="cert-manager" Namespace="cert-manager" -Creating Deployment="cert-manager-webhook" Namespace="cert-manager" -Creating APIService="v1beta1.webhook.cert-manager.io" -Creating MutatingWebhookConfiguration="cert-manager-webhook" -Creating ValidatingWebhookConfiguration="cert-manager-webhook" -Waiting for cert-manager to be available... -Installing Provider="cluster-api" Version="v0.3.3" TargetNamespace="capi-system" -Creating shared objects Provider="cluster-api" Version="v0.3.3" -Creating Namespace="capi-webhook-system" -Creating CustomResourceDefinition="clusters.cluster.x-k8s.io" -Creating CustomResourceDefinition="machinedeployments.cluster.x-k8s.io" -Creating CustomResourceDefinition="machinehealthchecks.cluster.x-k8s.io" -Creating CustomResourceDefinition="machinepools.exp.cluster.x-k8s.io" -Creating CustomResourceDefinition="machines.cluster.x-k8s.io" -Creating CustomResourceDefinition="machinesets.cluster.x-k8s.io" -Creating MutatingWebhookConfiguration="capi-mutating-webhook-configuration" -Creating Service="capi-webhook-service" Namespace="capi-webhook-system" -Creating Deployment="capi-controller-manager" Namespace="capi-webhook-system" -Creating Certificate="capi-serving-cert" Namespace="capi-webhook-system" -Creating Issuer="capi-selfsigned-issuer" Namespace="capi-webhook-system" -Creating ValidatingWebhookConfiguration="capi-validating-webhook-configuration" -Creating instance objects Provider="cluster-api" Version="v0.3.3" TargetNamespace="capi-system" -Creating Namespace="capi-system" -Creating Role="capi-leader-election-role" Namespace="capi-system" -Creating ClusterRole="capi-system-capi-aggregated-manager-role" -Creating ClusterRole="capi-system-capi-manager-role" -Creating ClusterRole="capi-system-capi-proxy-role" -Creating RoleBinding="capi-leader-election-rolebinding" Namespace="capi-system" -Creating ClusterRoleBinding="capi-system-capi-manager-rolebinding" -Creating ClusterRoleBinding="capi-system-capi-proxy-rolebinding" -Creating Service="capi-controller-manager-metrics-service" Namespace="capi-system" -Creating Deployment="capi-controller-manager" Namespace="capi-system" -Creating inventory entry Provider="cluster-api" Version="v0.3.3" TargetNamespace="capi-system" -Installing Provider="bootstrap-kubeadm" Version="v0.3.3" TargetNamespace="capi-kubeadm-bootstrap-system" -Creating shared objects Provider="bootstrap-kubeadm" Version="v0.3.3" -Creating CustomResourceDefinition="kubeadmconfigs.bootstrap.cluster.x-k8s.io" -Creating CustomResourceDefinition="kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io" -Creating Service="capi-kubeadm-bootstrap-webhook-service" Namespace="capi-webhook-system" -Creating Deployment="capi-kubeadm-bootstrap-controller-manager" Namespace="capi-webhook-system" -Creating Certificate="capi-kubeadm-bootstrap-serving-cert" Namespace="capi-webhook-system" -Creating Issuer="capi-kubeadm-bootstrap-selfsigned-issuer" Namespace="capi-webhook-system" -Creating instance objects Provider="bootstrap-kubeadm" Version="v0.3.3" TargetNamespace="capi-kubeadm-bootstrap-system" -Creating Namespace="capi-kubeadm-bootstrap-system" -Creating Role="capi-kubeadm-bootstrap-leader-election-role" Namespace="capi-kubeadm-bootstrap-system" -Creating ClusterRole="capi-kubeadm-bootstrap-system-capi-kubeadm-bootstrap-manager-role" -Creating ClusterRole="capi-kubeadm-bootstrap-system-capi-kubeadm-bootstrap-proxy-role" -Creating RoleBinding="capi-kubeadm-bootstrap-leader-election-rolebinding" Namespace="capi-kubeadm-bootstrap-system" -Creating ClusterRoleBinding="capi-kubeadm-bootstrap-system-capi-kubeadm-bootstrap-manager-rolebinding" -Creating ClusterRoleBinding="capi-kubeadm-bootstrap-system-capi-kubeadm-bootstrap-proxy-rolebinding" -Creating Service="capi-kubeadm-bootstrap-controller-manager-metrics-service" Namespace="capi-kubeadm-bootstrap-system" -Creating Deployment="capi-kubeadm-bootstrap-controller-manager" Namespace="capi-kubeadm-bootstrap-system" -Creating inventory entry Provider="bootstrap-kubeadm" Version="v0.3.3" TargetNamespace="capi-kubeadm-bootstrap-system" -Installing Provider="control-plane-kubeadm" Version="v0.3.3" TargetNamespace="capi-kubeadm-control-plane-system" -Creating shared objects Provider="control-plane-kubeadm" Version="v0.3.3" -Creating CustomResourceDefinition="kubeadmcontrolplanes.controlplane.cluster.x-k8s.io" -Creating MutatingWebhookConfiguration="capi-kubeadm-control-plane-mutating-webhook-configuration" -Creating Service="capi-kubeadm-control-plane-webhook-service" Namespace="capi-webhook-system" -Creating Deployment="capi-kubeadm-control-plane-controller-manager" Namespace="capi-webhook-system" -Creating Certificate="capi-kubeadm-control-plane-serving-cert" Namespace="capi-webhook-system" -Creating Issuer="capi-kubeadm-control-plane-selfsigned-issuer" Namespace="capi-webhook-system" -Creating ValidatingWebhookConfiguration="capi-kubeadm-control-plane-validating-webhook-configuration" -Creating instance objects Provider="control-plane-kubeadm" Version="v0.3.3" TargetNamespace="capi-kubeadm-control-plane-system" -Creating Namespace="capi-kubeadm-control-plane-system" -Creating Role="capi-kubeadm-control-plane-leader-election-role" Namespace="capi-kubeadm-control-plane-system" -Creating Role="capi-kubeadm-control-plane-manager-role" Namespace="capi-kubeadm-control-plane-system" -Creating ClusterRole="capi-kubeadm-control-plane-system-capi-kubeadm-control-plane-manager-role" -Creating ClusterRole="capi-kubeadm-control-plane-system-capi-kubeadm-control-plane-proxy-role" -Creating RoleBinding="capi-kubeadm-control-plane-leader-election-rolebinding" Namespace="capi-kubeadm-control-plane-system" -Creating ClusterRoleBinding="capi-kubeadm-control-plane-system-capi-kubeadm-control-plane-manager-rolebinding" -Creating ClusterRoleBinding="capi-kubeadm-control-plane-system-capi-kubeadm-control-plane-proxy-rolebinding" -Creating Service="capi-kubeadm-control-plane-controller-manager-metrics-service" Namespace="capi-kubeadm-control-plane-system" -Creating Deployment="capi-kubeadm-control-plane-controller-manager" Namespace="capi-kubeadm-control-plane-system" -Creating inventory entry Provider="control-plane-kubeadm" Version="v0.3.3" TargetNamespace="capi-kubeadm-control-plane-system" -Installing Provider="infrastructure-docker" Version="v0.3.7" TargetNamespace="capd-system" -Creating shared objects Provider="infrastructure-docker" Version="v0.3.7" -Creating CustomResourceDefinition="dockerclusters.infrastructure.cluster.x-k8s.io" -Creating CustomResourceDefinition="dockermachines.infrastructure.cluster.x-k8s.io" -Creating CustomResourceDefinition="dockermachinetemplates.infrastructure.cluster.x-k8s.io" -Creating ValidatingWebhookConfiguration="capd-validating-webhook-configuration" -Creating instance objects Provider="infrastructure-docker" Version="v0.3.7" TargetNamespace="capd-system" -Creating Namespace="capd-system" -Creating Role="capd-leader-election-role" Namespace="capd-system" -Creating ClusterRole="capd-system-capd-manager-role" -Creating ClusterRole="capd-system-capd-proxy-role" -Creating RoleBinding="capd-leader-election-rolebinding" Namespace="capd-system" -Creating ClusterRoleBinding="capd-system-capd-manager-rolebinding" -Creating ClusterRoleBinding="capd-system-capd-proxy-rolebinding" -Creating Service="capd-controller-manager-metrics-service" Namespace="capd-system" -Creating Service="capd-webhook-service" Namespace="capd-system" -Creating Deployment="capd-controller-manager" Namespace="capd-system" -Creating Certificate="capd-serving-cert" Namespace="capd-system" -Creating Issuer="capd-selfsigned-issuer" Namespace="capd-system" -Creating inventory entry Provider="infrastructure-docker" Version="v0.3.7" TargetNamespace="capd-system" -``` - -Wait for all the pods to be up. - -$ kubectl get pods -A -``` -NAMESPACE NAME READY STATUS RESTARTS AGE -capd-system capd-controller-manager-75f5d546d7-frrm5 2/2 Running 0 77s -capi-kubeadm-bootstrap-system capi-kubeadm-bootstrap-controller-manager-5bb9bfdc46-mhbqz 2/2 Running 0 85s -capi-kubeadm-control-plane-system capi-kubeadm-control-plane-controller-manager-77466c7666-t69m5 2/2 Running 0 81s -capi-system capi-controller-manager-5798474d9f-tp2c2 2/2 Running 0 89s -capi-webhook-system capi-controller-manager-5d64dd9dfb-r6mb2 2/2 Running 1 91s -capi-webhook-system capi-kubeadm-bootstrap-controller-manager-7c78fff45-dmnlc 2/2 Running 0 88s -capi-webhook-system capi-kubeadm-control-plane-controller-manager-58465bb88f-c6j5q 2/2 Running 0 84s -cert-manager cert-manager-69b4f77ffc-8vchm 1/1 Running 0 117s -cert-manager cert-manager-cainjector-576978ffc8-frsxg 1/1 Running 0 117s -cert-manager cert-manager-webhook-c67fbc858-qxrcj 1/1 Running 1 117s -kube-system coredns-6955765f44-f28p7 1/1 Running 0 3m12s -kube-system coredns-6955765f44-nq5qk 1/1 Running 0 3m12s -kube-system etcd-capi-docker-control-plane 1/1 Running 0 3m25s -kube-system kindnet-nxm6k 1/1 Running 0 3m12s -kube-system kube-apiserver-capi-docker-control-plane 1/1 Running 0 3m25s -kube-system kube-controller-manager-capi-docker-control-plane 1/1 Running 0 3m25s -kube-system kube-proxy-5jmc5 1/1 Running 0 3m12s -kube-system kube-scheduler-capi-docker-control-plane 1/1 Running 0 3m25s -local-path-storage local-path-provisioner-7745554f7f-ms989 1/1 Running 0 3m12s -``` -Now, the management cluster is initialized with cluster api and cluster api -docker provider components. - -$ kubectl get providers -A - -``` -NAMESPACE NAME TYPE PROVIDER VERSION WATCH NAMESPACE -capd-system infrastructure-docker InfrastructureProvider v0.3.7 -capi-kubeadm-bootstrap-system bootstrap-kubeadm BootstrapProvider v0.3.3 -capi-kubeadm-control-plane-system control-plane-kubeadm ControlPlaneProvider v0.3.3 -capi-system cluster-api CoreProvider v0.3.3 -``` - -$ docker ps - -``` -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -b9690cecdcf2 kindest/node:v1.18.2 "/usr/local/bin/entr…" 14 minutes ago Up 14 minutes 127.0.0.1:32773->6443/tcp capi-docker-control-plane -``` - - -## Create your first workload cluster - -$ airshipctl phase run controlplane --debug - -``` -[airshipctl] 2020/08/12 14:10:12 building bundle from kustomize path /tmp/airship/airshipctl/manifests/site/docker-test-site/target/controlplane -[airshipctl] 2020/08/12 14:10:12 Applying bundle, inventory id: kind-capi-docker-target-controlplane -[airshipctl] 2020/08/12 14:10:12 Inventory Object config Map not found, auto generating Invetory object -[airshipctl] 2020/08/12 14:10:12 Injecting Invetory Object: {"apiVersion":"v1","kind":"ConfigMap","metadata":{"creationTimestamp":null,"labels":{"cli-utils.sigs.k8s.io/inventory-id":"kind-capi-docker-target-controlplane"},"name":"airshipit-kind-capi-docker-target-controlplane","namespace":"airshipit"}}{nsfx:false,beh:unspecified} into bundle -[airshipctl] 2020/08/12 14:10:12 Making sure that inventory object namespace airshipit exists -configmap/airshipit-kind-capi-docker-target-controlplane-87efb53a created -cluster.cluster.x-k8s.io/dtc created -machinehealthcheck.cluster.x-k8s.io/dtc-mhc-0 created -kubeadmcontrolplane.controlplane.cluster.x-k8s.io/dtc-control-plane created -dockercluster.infrastructure.cluster.x-k8s.io/dtc created -dockermachinetemplate.infrastructure.cluster.x-k8s.io/dtc-control-plane created -6 resource(s) applied. 6 created, 0 unchanged, 0 configured -machinehealthcheck.cluster.x-k8s.io/dtc-mhc-0 is NotFound: Resource not found -kubeadmcontrolplane.controlplane.cluster.x-k8s.io/dtc-control-plane is NotFound: Resource not found -dockercluster.infrastructure.cluster.x-k8s.io/dtc is NotFound: Resource not found -dockermachinetemplate.infrastructure.cluster.x-k8s.io/dtc-control-plane is NotFound: Resource not found -configmap/airshipit-kind-capi-docker-target-controlplane-87efb53a is NotFound: Resource not found -cluster.cluster.x-k8s.io/dtc is NotFound: Resource not found -configmap/airshipit-kind-capi-docker-target-controlplane-87efb53a is Current: Resource is always ready -cluster.cluster.x-k8s.io/dtc is Current: Resource is current -machinehealthcheck.cluster.x-k8s.io/dtc-mhc-0 is Current: Resource is current -kubeadmcontrolplane.controlplane.cluster.x-k8s.io/dtc-control-plane is Current: Resource is current -dockercluster.infrastructure.cluster.x-k8s.io/dtc is Current: Resource is current -dockermachinetemplate.infrastructure.cluster.x-k8s.io/dtc-control-plane is Current: Resource is current -all resources has reached the Current status -``` - -$ kubectl get pods -A -``` -NAMESPACE NAME READY STATUS RESTARTS AGE -capd-system capd-controller-manager-75f5d546d7-frrm5 2/2 Running 0 77s -capi-kubeadm-bootstrap-system capi-kubeadm-bootstrap-controller-manager-5bb9bfdc46-mhbqz 2/2 Running 0 85s -capi-kubeadm-control-plane-system capi-kubeadm-control-plane-controller-manager-77466c7666-t69m5 2/2 Running 0 81s -capi-system capi-controller-manager-5798474d9f-tp2c2 2/2 Running 0 89s -capi-webhook-system capi-controller-manager-5d64dd9dfb-r6mb2 2/2 Running 1 91s -capi-webhook-system capi-kubeadm-bootstrap-controller-manager-7c78fff45-dmnlc 2/2 Running 0 88s -capi-webhook-system capi-kubeadm-control-plane-controller-manager-58465bb88f-c6j5q 2/2 Running 0 84s -cert-manager cert-manager-69b4f77ffc-8vchm 1/1 Running 0 117s -cert-manager cert-manager-cainjector-576978ffc8-frsxg 1/1 Running 0 117s -cert-manager cert-manager-webhook-c67fbc858-qxrcj 1/1 Running 1 117s -kube-system coredns-6955765f44-f28p7 1/1 Running 0 3m12s -kube-system coredns-6955765f44-nq5qk 1/1 Running 0 3m12s -kube-system etcd-capi-docker-control-plane 1/1 Running 0 3m25s -kube-system kindnet-nxm6k 1/1 Running 0 3m12s -kube-system kube-apiserver-capi-docker-control-plane 1/1 Running 0 3m25s -kube-system kube-controller-manager-capi-docker-control-plane 1/1 Running 0 3m25s -kube-system kube-proxy-5jmc5 1/1 Running 0 3m12s -kube-system kube-scheduler-capi-docker-control-plane 1/1 Running 0 3m25s -local-path-storage local-path-provisioner-7745554f7f-ms989 1/1 Running 0 3m12s -``` - -$ kubectl logs capd-controller-manager-75f5d546d7-frrm5 -n capd-system --all-containers=true -f - -``` -I0812 21:11:24.761608 1 controller.go:272] controller-runtime/controller "msg"="Successfully Reconciled" "controller"="dockermachine" "name"="dtc-control-plane-zc5bw" "namespace"="default" -I0812 21:11:25.189401 1 controller.go:272] controller-runtime/controller "msg"="Successfully Reconciled" "controller"="dockermachine" "name"="dtc-control-plane-zc5bw" "namespace"="default" -I0812 21:11:26.219320 1 generic_predicates.go:38] controllers/DockerMachine "msg"="One of the provided predicates returned false, blocking further processing" "predicate"="ClusterUnpausedAndInfrastructureReady" "predicateAggregation"="All" -I0812 21:11:26.219774 1 cluster_predicates.go:143] controllers/DockerMachine "msg"="Cluster was not unpaused, blocking further processing" "cluster"="dtc" "eventType"="update" "namespace"="default" "predicate"="ClusterUpdateUnpaused" -I0812 21:11:26.222004 1 cluster_predicates.go:111] controllers/DockerMachine "msg"="Cluster infrastructure did not become ready, blocking further processing" "cluster"="dtc" "eventType"="update" "namespace"="default" "predicate"="ClusterUpdateInfraReady" -I0812 21:11:26.223003 1 generic_predicates.go:89] controllers/DockerMachine "msg"="All of the provided predicates returned false, blocking further processing" "predicate"="ClusterUnpausedAndInfrastructureReady" "predicateAggregation"="Any" -I0812 21:11:26.223239 1 generic_predicates.go:89] controllers/DockerMachine "msg"="All of the provided predicates returned false, blocking further processing" "predicate"="ClusterUnpausedAndInfrastructureReady" "predicateAggregation"="Any" -I0812 21:11:26.219658 1 cluster_predicates.go:143] controllers/DockerCluster "msg"="Cluster was not unpaused, blocking further processing" "cluster"="dtc" "eventType"="update" "namespace"="default" "predicate"="ClusterUpdateUnpaused" -I0812 21:11:26.229665 1 generic_predicates.go:89] controllers/DockerCluster "msg"="All of the provided predicates returned false, blocking further processing" "predicate"="ClusterUnpaused" "predicateAggregation"="Any" -``` - -$ kubectl get machines -``` -NAME PROVIDERID PHASE -dtc-control-plane-p4fsx docker:////dtc-dtc-control-plane-p4fsx Running -``` - -$ airshipctl phase run workers --debug - -``` -[airshipctl] 2020/08/12 14:11:55 building bundle from kustomize path /tmp/airship/airshipctl/manifests/site/docker-test-site/target/worker -[airshipctl] 2020/08/12 14:11:55 Applying bundle, inventory id: kind-capi-docker-target-worker -[airshipctl] 2020/08/12 14:11:55 Inventory Object config Map not found, auto generating Invetory object -[airshipctl] 2020/08/12 14:11:55 Injecting Invetory Object: {"apiVersion":"v1","kind":"ConfigMap","metadata":{"creationTimestamp":null,"labels":{"cli-utils.sigs.k8s.io/inventory-id":"kind-capi-docker-target-worker"},"name":"airshipit-kind-capi-docker-target-worker","namespace":"airshipit"}}{nsfx:false,beh:unspecified} into bundle -[airshipctl] 2020/08/12 14:11:55 Making sure that inventory object namespace airshipit exists -configmap/airshipit-kind-capi-docker-target-worker-b56f83 created -kubeadmconfigtemplate.bootstrap.cluster.x-k8s.io/dtc-md-0 created -machinedeployment.cluster.x-k8s.io/dtc-md-0 created -dockermachinetemplate.infrastructure.cluster.x-k8s.io/dtc-md-0 created -4 resource(s) applied. 4 created, 0 unchanged, 0 configured -dockermachinetemplate.infrastructure.cluster.x-k8s.io/dtc-md-0 is NotFound: Resource not found -configmap/airshipit-kind-capi-docker-target-worker-b56f83 is NotFound: Resource not found -kubeadmconfigtemplate.bootstrap.cluster.x-k8s.io/dtc-md-0 is NotFound: Resource not found -machinedeployment.cluster.x-k8s.io/dtc-md-0 is NotFound: Resource not found -configmap/airshipit-kind-capi-docker-target-worker-b56f83 is Current: Resource is always ready -kubeadmconfigtemplate.bootstrap.cluster.x-k8s.io/dtc-md-0 is Current: Resource is current -machinedeployment.cluster.x-k8s.io/dtc-md-0 is Current: Resource is current -dockermachinetemplate.infrastructure.cluster.x-k8s.io/dtc-md-0 is Current: Resource is current -``` - -$ kubectl get machines -``` -NAME PROVIDERID PHASE -dtc-control-plane-p4fsx docker:////dtc-dtc-control-plane-p4fsx Running -dtc-md-0-94c79cf9c-8ct2g Provisioning -``` - -$ kubectl logs capd-controller-manager-75f5d546d7-frrm5 -n capd-system --all-containers=true -f - -``` -I0812 21:10:14.071166 1 cluster_predicates.go:111] controllers/DockerMachine "msg"="Cluster infrastructure did not become ready, blocking further processing" "cluster"="dtc" "eventType"="update" "namespace"="default" "predicate"="ClusterUpdateInfraReady" -I0812 21:10:14.071204 1 generic_predicates.go:89] controllers/DockerMachine "msg"="All of the provided predicates returned false, blocking further processing" "predicate"="ClusterUnpausedAndInfrastructureReady" "predicateAggregation"="Any" -I0812 21:10:14.071325 1 generic_predicates.go:89] controllers/DockerMachine "msg"="All of the provided predicates returned false, blocking further processing" "predicate"="ClusterUnpausedAndInfrastructureReady" "predicateAggregation"="Any" -I0812 21:10:14.082937 1 generic_predicates.go:38] controllers/DockerMachine "msg"="One of the provided predicates returned false, blocking further processing" "predicate"="ClusterUnpausedAndInfrastructureReady" "predicateAggregation"="All" -I0812 21:10:14.082981 1 cluster_predicates.go:143] controllers/DockerMachine "msg"="Cluster was not unpaused, blocking further processing" "cluster"="dtc" "eventType"="update" "namespace"="default" "predicate"="ClusterUpdateUnpaused" -I0812 21:10:14.082994 1 cluster_predicates.go:143] controllers/DockerCluster "msg"="Cluster was not unpaused, blocking further processing" "cluster"="dtc" "eventType"="update" "namespace"="default" "predicate"="ClusterUpdateUnpaused" -I0812 21:10:14.083012 1 cluster_predicates.go:111] controllers/DockerMachine "msg"="Cluster infrastructure did not become ready, blocking further processing" "cluster"="dtc" "eventType"="update" "namespace"="default" "predicate"="ClusterUpdateInfraReady" -I0812 21:10:14.083024 1 generic_predicates.go:89] controllers/DockerCluster "msg"="All of the provided predicates returned false, blocking further processing" "predicate"="ClusterUnpaused" "predicateAggregation"="Any" -I0812 21:10:14.083036 1 generic_predicates.go:89] controllers/DockerMachine "msg"="All of the provided predicates returned false, blocking further processing" -``` -$ kubectl get machines -``` -NAME PROVIDERID PHASE -dtc-control-plane-p4fsx docker:////dtc-dtc-control-plane-p4fsx Running -dtc-md-0-94c79cf9c-8ct2g docker:////dtc-dtc-md-0-94c79cf9c-8ct2g Running -``` - -$ kubectl --namespace=default get secret/dtc-kubeconfig -o jsonpath={.data.value} | base64 --decode > ./dtc.kubeconfig - -$ kubectl get nodes --kubeconfig dtc.kubeconfig - -``` -NAME STATUS ROLES AGE VERSION -dtc-dtc-control-plane-p4fsx Ready master 5m45s v1.18.6 -dtc-dtc-md-0-94c79cf9c-8ct2g Ready 4m45s v1.18.6 -``` - -$ kubectl get pods -A --kubeconfig dtc.kubeconfig -``` -NAMESPACE NAME READY STATUS RESTARTS AGE -kube-system calico-kube-controllers-59b699859f-xp8dv 1/1 Running 0 5m40s -kube-system calico-node-5drwf 1/1 Running 0 5m39s -kube-system calico-node-bqw5j 1/1 Running 0 4m53s -kube-system coredns-6955765f44-8kg27 1/1 Running 0 5m40s -kube-system coredns-6955765f44-lqzzq 1/1 Running 0 5m40s -kube-system etcd-dtc-dtc-control-plane-p4fsx 1/1 Running 0 5m49s -kube-system kube-apiserver-dtc-dtc-control-plane-p4fsx 1/1 Running 0 5m49s -kube-system kube-controller-manager-dtc-dtc-control-plane-p4fsx 1/1 Running 0 5m49s -kube-system kube-proxy-cjcls 1/1 Running 0 5m39s -kube-system kube-proxy-fkvpc 1/1 Running 0 4m53s -kube-system kube-scheduler-dtc-dtc-control-plane-p4fsx 1/1 Running 0 5m49s -``` - -## Tear Down Clusters - -The command shown below can be used to delete the control plane, worker nodes and all -associated cluster resources - -$ airshipctl phase render --phase-name controlplane -k Cluster | kubectl delete -f - - -``` -cluster.cluster.x-k8s.io "dtc" deleted -``` - -To delete the kind cluster, use the following command: - -$ kind delete cluster --name capi-docker - -``` -Deleting cluster "capi-docker" ... -``` - -## Reference - -### Provider Manifests - -Provider Configuration is referenced from -[config](https://github.com/kubernetes-sigs/cluster-api/tree/master/test/infrastructure/docker/config) -Cluster API does not support docker out of the box. Therefore, the metadata -infromation is added using files in `airshipctl/manifests/function/capd/data` - -$ tree airshipctl/manifests/function/capd - -``` -airshipctl/manifests/function/capd -└── v0.3.7 - β”œβ”€β”€ certmanager - β”‚ β”œβ”€β”€ certificate.yaml - β”‚ β”œβ”€β”€ kustomization.yaml - β”‚ └── kustomizeconfig.yaml - β”œβ”€β”€ crd - β”‚ β”œβ”€β”€ bases - β”‚ β”‚ β”œβ”€β”€ infrastructure.cluster.x-k8s.io_dockerclusters.yaml - β”‚ β”‚ β”œβ”€β”€ infrastructure.cluster.x-k8s.io_dockermachines.yaml - β”‚ β”‚ └── infrastructure.cluster.x-k8s.io_dockermachinetemplates.yaml - β”‚ β”œβ”€β”€ kustomization.yaml - β”‚ β”œβ”€β”€ kustomizeconfig.yaml - β”‚ └── patches - β”‚ β”œβ”€β”€ cainjection_in_dockerclusters.yaml - β”‚ β”œβ”€β”€ cainjection_in_dockermachines.yaml - β”‚ β”œβ”€β”€ webhook_in_dockerclusters.yaml - β”‚ └── webhook_in_dockermachines.yaml - β”œβ”€β”€ data - β”‚ β”œβ”€β”€ kustomization.yaml - β”‚ └── metadata.yaml - β”œβ”€β”€ default - β”‚ β”œβ”€β”€ kustomization.yaml - β”‚ └── namespace.yaml - β”œβ”€β”€ kustomization.yaml - β”œβ”€β”€ manager - β”‚ β”œβ”€β”€ kustomization.yaml - β”‚ β”œβ”€β”€ manager_auth_proxy_patch.yaml - β”‚ β”œβ”€β”€ manager_image_patch.yaml - β”‚ β”œβ”€β”€ manager_prometheus_metrics_patch.yaml - β”‚ β”œβ”€β”€ manager_pull_policy.yaml - β”‚ └── manager.yaml - β”œβ”€β”€ rbac - β”‚ β”œβ”€β”€ auth_proxy_role_binding.yaml - β”‚ β”œβ”€β”€ auth_proxy_role.yaml - β”‚ β”œβ”€β”€ auth_proxy_service.yaml - β”‚ β”œβ”€β”€ kustomization.yaml - β”‚ β”œβ”€β”€ leader_election_role_binding.yaml - β”‚ β”œβ”€β”€ leader_election_role.yaml - β”‚ β”œβ”€β”€ role_binding.yaml - β”‚ └── role.yaml - └── webhook - β”œβ”€β”€ kustomization.yaml - β”œβ”€β”€ kustomizeconfig.yaml - β”œβ”€β”€ manager_webhook_patch.yaml - β”œβ”€β”€ manifests.yaml - β”œβ”€β”€ service.yaml - └── webhookcainjection_patch.yaml - -10 directories, 37 files -``` - -### Cluster Templates - -`manifests/function/k8scontrol-capd` contains cluster.yaml, controlplane.yaml -templates referenced from -[cluster-template](https://github.com/kubernetes-sigs/cluster-api/blob/master/test/e2e/data/infrastructure-docker/cluster-template.yaml) - - -| Template Name | CRDs | -| ----------------- | ---- | -| cluster.yaml | Cluster, DockerCluster | -| controlplane.yaml | KubeadmControlPlane, DockerMachineTemplate, MachineHealthCheck | - -$ tree airshipctl/manifests/function/k8scontrol-capd - -``` -airshipctl/manifests/function/k8scontrol-capd -β”œβ”€β”€ cluster.yaml -β”œβ”€β”€ controlplane.yaml -└── kustomization.yaml -``` - -`airshipctl/manifests/function/workers-capd` contains workers.yaml referenced -from -[cluster-template](https://github.com/kubernetes-sigs/cluster-api/blob/master/test/e2e/data/infrastructure-docker/cluster-template.yaml) - -| Template Name | CRDs | -| ----------------- | ---- | -| workers.yaml | KubeadmConfigTemplate, MachineDeployment, DockerMachineTemplate | - -$ tree airshipctl/manifests/function/workers-capd - -``` -airshipctl/manifests/function/workers-capd -β”œβ”€β”€ kustomization.yaml -└── workers.yaml -``` - -### Test Site Manifests - -#### docker-test-site/shared - -`airshipctl cluster init` uses `airshipctl/manifests/site/docker-test-site/shared/clusterctl` -to initialize management cluster with defined provider components and version. - -`$ tree airshipctl/manifests/site/docker-test-site/shared` - -``` -/tmp/airship/airshipctl/manifests/site/docker-test-site/shared -└── clusterctl - β”œβ”€β”€ clusterctl.yaml - └── kustomization.yaml - -1 directory, 2 files -``` - -#### docker-test-site/target - -There are 3 phases currently available in `docker-test-site/target`. - -| Phase Name | Purpose | -| ----------- | --------- | -| controlplane | Patches templates in manifests/function/k8scontrol-capd | -| workers | Patches template in manifests/function/workers-capd | -| initinfra | Simply calls `docker-test-site/shared/clusterctl` | - -Note: `airshipctl cluster init` initializes all the provider components -including the docker infrastructure provider component. As a result, `airshipctl -phase run initinfra-ephemeral` is not used. - -At the moment, `phase initinfra` is only present for two reasons: -- `airshipctl` complains if the phase is not found -- `validate site docs to pass` - -#### Patch Merge Strategy - -Json patch to patch `control plane machine count` is applied on templates in `manifests/function/k8scontrol-capd` -from `airshipctl/manifests/site/docker-test-site/target/controlplane` when `airshipctl phase run -controlplane` is executed - -Json patch to patch `workers machine count` is applied on templates in `manifests/function/workers-capd` -from `airshipctl/manifests/site/docker-test-site/target/workers` when `airshipctl phase run -workers` is executed. - -| Patch Name | Purpose | -| ---------- | -------- | -| controlplane/machine_count.json | patches control plane machine count in template function/k8scontrol-capd | -| workers/machine_count.json | patches workers machine count in template function/workers-capd | - -$ tree airshipctl/manifests/site/docker-test-site/target/ - -``` -airshipctl/manifests/site/docker-test-site/target/ -β”œβ”€β”€ controlplane -β”‚ β”œβ”€β”€ kustomization.yaml -β”‚ └── machine_count.json -β”œβ”€β”€ initinfra -β”‚ └── kustomization.yaml -└── workers - β”œβ”€β”€ kustomization.yaml - └── machine_count.json - -3 directories, 7 files -``` ### Software Version Information @@ -726,10 +236,9 @@ All the instructions in the document were perfomed on a Oracle Virtual Box(6.1) VM running Ubuntu 18.04.4 LTS (Bionic Beaver) with 16G of memory and 4 VCPUs #### Docker - +``` $ docker version -``` Client: Docker Engine - Community Version: 19.03.9 API version: 1.40 @@ -761,42 +270,31 @@ Server: Docker Engine - Community #### Kind +``` $ kind version -``` kind v0.8.1 go1.14.2 linux/amd64 ``` #### Kubectl +``` $ kubectl version -``` Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.4", GitCommit:"8d8aa39598534325ad77120c120a22b3a990b5ea", GitTreeState:"clean", BuildDate:"2020-03-12T21:03:42Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean", BuildDate:"2020-01-14T00:09:19Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"} ``` #### Go - -$ go version - ``` +$ go version go version go1.14.1 linux/amd64 ``` -#### Kustomize - -$ kustomize version - -``` -{Version:kustomize/v3.8.0 GitCommit:6a50372dd5686df22750b0c729adaf369fbf193c BuildDate:2020-07-05T14:08:42Z GoOs:linux GoArch:amd64} -``` - #### OS - +``` $ cat /etc/os-release -``` NAME="Ubuntu" VERSION="18.04.4 LTS (Bionic Beaver)" ID=ubuntu @@ -811,6 +309,6 @@ VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic ``` -## Special Instructions +### Special Instructions Swap was disabled on the VM using `sudo swapoff -a`