Before installing machine-controller, ensure you have:
kubectl configured to access your clusterThe recommended way to install machine-controller is through KubeOne, which automatically deploys and configures machine-controller as part of the cluster setup.
KubeOne handles:
See the KubeOne machine-controller guide for detailed instructions.
For manual installation or custom deployments:
git clone https://github.com/kubermatic/machine-controller.git
cd machine-controller
kubectl apply -f examples/machine-controller.yaml
Create a secret containing your cloud provider credentials. The exact format depends on your provider:
kubectl create secret generic machine-controller-credentials \
-n kube-system \
--from-literal=token=<YOUR_TOKEN>
kubectl get pods -n kube-system | grep machine-controller
The machine-controller pod should be running.
Machine-controller supports the following environment variables for cloud provider authentication:
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYAZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID, AZURE_SUBSCRIPTION_IDDO_TOKENGOOGLE_SERVICE_ACCOUNT (base64-encoded)HCLOUD_TOKENOS_AUTH_URL, OS_USERNAME, OS_PASSWORD, OS_DOMAIN_NAME, OS_TENANT_NAMECustomize the machine-controller deployment by editing the deployment manifest:
apiVersion: apps/v1
kind: Deployment
metadata:
name: machine-controller
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: machine-controller
template:
metadata:
labels:
app: machine-controller
spec:
serviceAccountName: machine-controller
containers:
- name: machine-controller
image: quay.io/kubermatic/machine-controller:latest
command:
- /usr/local/bin/machine-controller
args:
- -logtostderr
- -v=4
- -worker-count=10
env:
# Add cloud provider credentials here
- name: HCLOUD_TOKEN
valueFrom:
secretKeyRef:
name: machine-controller-credentials
key: token
To upgrade machine-controller to a newer version:
kubectl set image deployment/machine-controller \
machine-controller=quay.io/kubermatic/machine-controller:<LATEST-VERSION> \
-n kube-system
kubectl rollout status deployment/machine-controller -n kube-system
To remove machine-controller from your cluster:
kubectl delete machinedeployments --all -n kube-system
kubectl get machines -n kube-system
kubectl delete deployment machine-controller -n kube-system
kubectl delete clusterrole machine-controller
kubectl delete clusterrolebinding machine-controller
kubectl delete serviceaccount machine-controller -n kube-system