# Discussion on patch set - [761219](https://review.opendev.org/#/c/761219/) Hi Matt, You have a valid question. It is just that in the past, we were using the workflow defined here: ``` Reference: https://cluster-api.sigs.k8s.io/clusterctl/commands/move.html#bootstrap--pivot Bootstrap & Pivot The pivot process can be bounded with the creation of a temporary bootstrap cluster used to provision a target Management cluster. This can now be achieved with the following procedure: 1. Create a temporary bootstrap cluster, e.g. using Kind or Minikube 2. Use clusterctl init to install the provider components 3. Use clusterctl config cluster ... | kubectl apply -f - to provision a target management cluster For eg. $ clusterctl config cluster target-cluster --kubernetes-version v1.16.11 --control-plane-machine-count=1 --worker-machine-count=1 > target-cluster.yaml $ kubectl apply -f target-cluster .yaml 4. Wait for the target management cluster to be up and running 5. Get the kubeconfig for the new target management cluster 6. Use clusterctl init with the new cluster’s kubeconfig to install the provider components 7. Use clusterctl move to move the Cluster API resources from the bootstrap cluster to the target management cluster 8. Delete the bootstrap cluster ``` ``` Note: It’s required to have at least one worker node to schedule Cluster API workloads (i.e. controllers). A cluster with a single control plane node won’t be sufficient due to the NoSchedule taint. If a worker node isn’t available, clusterctl init will timeout. ``` I understand your perspective. I will create another patchset for the second work-flow which will not require using the phase (workers-ephemeral) Let me know, what you think of both the workflows. workflow 1 (we have tested this already and is working), for workflow 2, I will create a new patchset. ## Workflow 1 This is what we are doing now, as per https://cluster-api.sigs.k8s.io/clusterctl/commands/move.html#bootstrap--pivot ❯ airshipctl phase plan # all the phases are executed in the order shown below ``` GROUP PHASE group1 clusterctl-init-ephemeral # this initalizes the kind cluster(ephemeral), with cluster api provider components controlplane-ephemeral # uses the kind (ephemeral) cluster to deploy a control plane # here we called it control plane ephemeral because the management # cluster for the control plane is the kind ephemeral cluster workers-ephemeral # uses the kind (ephemeral) cluster to deploy a worker # here we called it workers ephemeral because the management # cluster for the worker node is the kind ephemeral cluster clusterctl-init-target # initialize the target cluster control plane (node) with capi components clusterctl-move # move the crds from the ephemeral cluster to target cluster ``` As of today, we are using this workflow as shown here: https://hackmd.io/Nl5WYrehQCGsBdYzPMFo7w ## Workflow 2 This will require the pre-requsite mentioned below, before executing `clusterctl-init-target` If this step is not done, cluster init times out. [Please Check - note section:](https://cluster-api.sigs.k8s.io/clusterctl/commands/move.html#bootstrap--pivot) And, this workflow doesnot require the phase `workers-ephemeral` , and instead uses `workers-target` ### Pre-requsite ``` # kubectl get nodes ----kubeconfig target-cluster.kubeconfig target-cluster-control-plane-hkn64 # kubectl taint node target-cluster-control-plane-hkn64 node-role.kubernetes.io/master- --kubeconfig target-cluster.kubeconfig node/target-cluster-control-plane-hkn64 untainted ``` ❯ airshipctl phase plan # all the phases are executed in the order shown below ``` GROUP PHASE group1 clusterctl-init-ephemeral # this initalizes the kind cluster(ephemeral), with cluster api provider components controlplane-ephemeral # uses the kind (ephemeral) cluster to deploy a control plane # here we called it control plane ephemeral because the management # cluster for the control plane is the kind ephemeral cluster clusterctl-init-target # initialize the target cluster control plane (node) with capi components # pre-requisite: (cluster init times out here if this is not done) # kubectl get nodes ----kubeconfig target-cluster.kubeconfig # kubectl taint node target-cluster-control-plane-hkn64 node-role.kubernetes.io/master- --kubeconfig target-cluster.kubeconfig node/target-cluster-control-plane-hkn64 untainted clusterctl-move # move the crds from the ephemeral cluster to target cluster workers-target # uses the taget cluster to deploy a worker # here we called it workers-target because the management # cluster for the worker node is the target cluster ``` The document showing execution of the above phases can be found here https://hackmd.io/poGGfCNGTVeR8Yr28MYXNA <style>.markdown-body { max-width: 1200px; }</style>