Table of Contents generated with DocToc
This repository hosts a concrete implementation of an IBM Cloud provider for the cluster-api project.
The Cluster API brings declarative, Kubernetes-style APIs to cluster creation, configuration and management. The API itself is shared across multiple cloud providers allowing for true IBM Cloud hybrid deployments of Kubernetes.
Learn how to engage with the Kubernetes community on the community page.
You can reach the maintainers of this project at:
Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.
-
Install
kubectl(see here). Becausekustomizewas included intokubectland it's used bycluster-api-provider-ibmcloudin generating yaml files, so version1.14.0+ofkubectlis required, see integrate kustomize into kubectl for more info. -
You can use either VM, container or existing Kubernetes cluster act as bootstrap cluster.
-
Install a driver if you are using minikube. For Linux, we recommend kvm2. For MacOS, we recommend VirtualBox.
-
An appropriately configured Go development environment
-
Build the
clusterctltoolgit clone https://github.com/kubernetes-sigs/cluster-api-provider-ibmcloud $GOPATH/src/sigs.k8s.io/cluster-api-provider-ibmcloud cd $GOPATH/src/sigs.k8s.io/cluster-api-provider-ibmcloud/cmd/clusterctl go build
-
Create the
cluster.yaml,machines.yaml,provider-components.yaml, andaddons.yamlfiles if needed.cd examples/ibmcloud ./generate-yaml.sh [options] <path/to/clouds.yaml> <provider os: [centos,ubuntu,coreos]> cd ../..
<clouds.yaml>is a yaml file to record how to interact with IBM Cloud, there's a sample clouds.yaml.<provider os>specifies the operating system of the virtual machines Kubernetes will run on. Supported Operating Systems:ubuntucentos(Not Implemented)coreos(Not Implemented)
$ cat clouds.yaml userName: "your-name" apiKey: "your-api-key"
You can get
userNameandapiKeyfrom https://control.softlayer.com/ .- Logon to https://control.softlayer.com/ .
- Click your user name on the right top of the console.

- The console will navigate you to the page of
Edit User Profile.
- Scroll down the page to the bottom, you will see a section
API Access Information. You can getuserNameandapiKeyfrom there.
In order to allow
clusterctlto fetch Kubernetes'admin.conffrom the master node, you must manually create the key pair in IBM Cloud. By default the generatedmachine.yamlusescluster-api-provider-ibmcloudto be thesshKeyName. However, you are free to change that.For the ssh key, you can logon to https://control.softlayer.com/ , click
Devices->Manage->SSH Keys, you will be navigated to the page ofSSH Keys, clickAddto create your own key.

NOTE The private key used to connect to the master node is by default (currently hardcoded) at ~/.ssh/id_ibmcloud, so make sure you copy the generated key's private key info into this file.
Optionally, add a
addons.yamlcan provide additional add ons in target cluster, for example, download k8s dashboard and put intoexamples/ibmcloud/out/addons.yamlthen add-a examples/ibmcloud/out/addons.yamlinclusterctlcommand, after cluster created:The dashboard pod will be created and user is able to logon through k8s dashboard:
# kubectl --kubeconfig=kubeconfig get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
...
kube-system kubernetes-dashboard-5f7b999d65-ntrxb 1/1 Running 0 12m
...
-
Create a cluster:
- If you are using minikube:
./clusterctl create cluster --bootstrap-type minikube --bootstrap-flags kubernetes-version=v1.12.3 \ --provider ibmcloud -c examples/ibmcloud/out/cluster.yaml \ -m examples/ibmcloud/out/machines.yaml -p examples/ibmcloud/out/provider-components.yaml \ -a examples/ibmcloud/out/addons.yaml
To choose a specific minikube driver, please use the
--bootstrap-flags vm-driver=xxxcommand line parameter. For example to use the kvm2 driver with clusterctl you woud add--bootstrap-flags vm-driver=kvm2, for linux, if you haven't installed any driver, you can add--bootstrap-flags vm-driver=none.- If you are using kind:
./clusterctl create cluster --bootstrap-type kind --provider ibmcloud \ -c examples/ibmcloud/out/cluster.yaml -m examples/ibmcloud/out/machines.yaml \ -p examples/ibmcloud/out/provider-components.yaml -a examples/ibmcloud/out/addons.yaml
- If you are using existing Kubernetes cluster:
./clusterctl create cluster --bootstrap-cluster-kubeconfig ~/.kube/config \ --provider ibmcloud -c examples/ibmcloud/out/cluster.yaml \ -m examples/ibmcloud/out/machines.yaml -p examples/ibmcloud/out/provider-components.yaml \ -a examples/ibmcloud/out/addons.yamlFor the above command, the
bootstrap-cluster-kubeconfigwas located at~/.kube/config, you must update it to use your kubeconfig.Additional advanced flags can be found via help.
./clusterctl create cluster --help
If you are using kind, config the KUBECONFIG first before using kubectl:
export KUBECONFIG="$(kind get kubeconfig-path --name="clusterapi")"Once you have created a cluster, you can interact with the cluster and machine resources using kubectl:
kubectl --kubeconfig=kubeconfig get clusters
kubectl --kubeconfig=kubeconfig get machines
kubectl --kubeconfig=kubeconfig get machines -o yamlThis guide explains how to delete all resources that were created as part of your IBM Cloud Cluster API Kubernetes cluster.
-
Delete all of the node Machines in the cluster. Make sure to wait for the corresponding Nodes to be deleted before moving onto the next step. After this step, the master node will be the only remaining node.
kubectl --kubeconfig=kubeconfig delete machines -l set=node kubectl --kubeconfig=kubeconfig get nodes
-
Delete the master machine.
kubectl --kubeconfig=kubeconfig delete machines -l set=master
-
Delete the kubeconfig file that were created for your cluster.
rm kubeconfig
-
Delete the ssh keypair that were created for your cluster machine.
rm -rf $HOME/.ssh/id_ibmcloud*
Please refer to Create a new woker node for further info.
Please refer to Trouble shooting documentation for further info.
If you have any further question about IBM Cloud settings in provider, please refer to IBM Cloud help documentation for further infomation.
