Out of tree (controller-based) implementation for local
as a new provider.
The local out-of-tree provider implements the interface defined at MCM OOT driver.
Following are the basic principles kept in mind while developing the external plugin.
- Communication between this Machine Controller (MC) and Machine Controller Manager (MCM) is achieved using the Kubernetes native declarative approach.
- Machine Controller (MC) behaves as the controller used to interact with the cloud provider AWS and manage the VMs corresponding to the machine objects.
- Machine Controller Manager (MCM) deals with higher level objects such as machine-set and machine-deployment objects.
-
Open terminal and change directory to
$GOPATH/src/github.com/gardener
. Clone this repository. -
Navigate to
$GOPATH/src/github.com/gardener/machine-controller-manager-provider-local
:-
In the
MAKEFILE
make sure$TARGET_KUBECONFIG
points to the cluster where you wish to manage machines.$CONTROL_NAMESPACE
represents the namespaces where MCM is looking for machine CR objects, and$CONTROL_KUBECONFIG
points to the cluster which holds these machine CRs. -
Run the machine controller (driver) using the command below.
make start
-
-
On the second terminal pointing to
$GOPATH/src/github.com/gardener
,-
Clone the latest MCM code:
git clone git@github.com:gardener/machine-controller-manager.git
-
Navigate to the newly created directory:
cd machine-controller-manager
-
Deploy the required CRDs from the machine-controller-manager repo:
kubectl apply -f kubernetes/crds.yaml
-
Run the machine-controller-manager:
make start
-
-
On the third terminal pointing to
$GOPATH/src/github.com/gardener/machine-controller-manager-provider-local
-
Fill in the object files given below and deploy them as described below.
-
Deploy the
machine-class
kubectl apply -f kubernetes/machine-class.yaml
-
Deploy the
kubernetes secret
if required.kubectl apply -f kubernetes/secret.yaml
-
Deploy the
machine
object and make sure it joins the cluster successfully.kubectl apply -f kubernetes/machine.yaml
-
Once machine joins, you can test by deploying a machine-deployment.
-
Deploy the
machine-deployment
object and make sure it joins the cluster successfully.kubectl apply -f kubernetes/machine-deployment.yaml
-
Make sure to delete both the
machine
andmachine-deployment
object after use.kubectl delete -f kubernetes/machine.yaml kubectl delete -f kubernetes/machine-deployment.yaml
-
Static code checks and tests can be executed by running make verify
. We are using Go modules for Golang package dependency management and Ginkgo/Gomega for testing.
Feedback and contributions are always welcome. Please report bugs or suggestions as GitHub issues or join our Slack channel #gardener (please invite yourself to the Kubernetes workspace here).