• Stars
    star
    288
  • Rank 143,818 (Top 3 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created almost 7 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Kubermatic machine-controller

Important Note: User data plugins for machine-controller are deprecated and will soon be removed. Operating System Manager is the successor of user data plugins. It's responsible for creating and managing the required configurations for worker nodes in a Kubernetes cluster with better modularity and extensibility. Please refer to Operating System Manager for more details.

Table of Contents

Features

What Works

  • Creation of worker nodes on AWS, Digitalocean, Openstack, Azure, Google Cloud Platform, Nutanix, VMWare Cloud Director, VMWare vSphere, Hetzner Cloud and Kubevirt
  • Using Ubuntu, Flatcar, CentOS 7 or Rocky Linux 8 distributions (not all distributions work on all providers)

Supported Kubernetes Versions

machine-controller tries to follow the Kubernetes version support policy as close as possible.

Currently supported K8S versions are:

  • 1.27
  • 1.26
  • 1.25

Community Providers

Some cloud providers implemented in machine-controller have been graciously contributed by community members. Those cloud providers are not part of the automated end-to-end tests run by the machine-controller developers and thus, their status cannot be guaranteed. The machine-controller developers assume that they are functional, but can only offer limited support for new features or bugfixes in those providers.

The current list of community providers is:

  • Linode
  • Vultr
  • OpenNebula

What Doesn't Work

  • Master creation (Not planned at the moment)

Quickstart

Deploy machine-controller

  • Install cert-manager for generating certificates used by webhooks since they serve using HTTPS
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.2/cert-manager.yaml
  • Run kubectl apply -f examples/operating-system-manager.yaml to deploy the operating-system-manager which is responsible for managing user data for worker machines.
  • Run kubectl apply -f examples/machine-controller.yaml to deploy the machine-controller.

Creating a MachineDeployment

# edit examples/$cloudprovider-machinedeployment.yaml & create the machineDeployment
kubectl create -f examples/$cloudprovider-machinedeployment.yaml

Advanced Usage

Specifying the Apiserver Endpoint

By default the controller looks for a cluster-info ConfigMap within the kube-public Namespace. If one is found which contains a minimal kubeconfig (kubeadm cluster have them by default), this kubeconfig will be used for the node bootstrapping. The kubeconfig only needs to contain two things:

  • CA-Data
  • The public endpoint for the Apiserver

If no ConfigMap can be found:

CA Data

The Certificate Authority (CA) will be loaded from the passed kubeconfig when running outside the cluster or from /var/run/secrets/kubernetes.io/serviceaccount/ca.crt when running inside the cluster.

Apiserver Endpoint

The first endpoint from the kubernetes endpoints will be taken. kubectl get endpoints kubernetes -o yaml

Example cluster-info ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: cluster-info
  namespace: kube-public
data:
  kubeconfig: |
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURHRENDQWdDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREE5TVRzd09RWURWUVFERXpKeWIyOTAKTFdOaExtaG1kblEwWkd0bllpNWxkWEp2Y0dVdGQyVnpkRE10WXk1a1pYWXVhM1ZpWlhKdFlYUnBZeTVwYnpBZQpGdzB4TnpFeU1qSXdPVFUyTkROYUZ3MHlOekV5TWpBd09UVTJORE5hTUQweE96QTVCZ05WQkFNVE1uSnZiM1F0ClkyRXVhR1oyZERSa2EyZGlMbVYxY205d1pTMTNaWE4wTXkxakxtUmxkaTVyZFdKbGNtMWhkR2xqTG1sdk1JSUIKSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTNPMFZBZm1wcHM4NU5KMFJ6ckhFODBQTQo0cldvRk9iRXpFWVQ1Unc2TjJ0V3lqazRvMk5KY1R1YmQ4bUlONjRqUjFTQmNQWTB0ZVRlM2tUbEx0OWMrbTVZCmRVZVpXRXZMcHJoMFF5YjVMK0RjWDdFZG94aysvbzVIL0txQW1VT0I5TnR1L2VSM0EzZ0xxNHIvdnFpRm1yTUgKUUxHbllHNVVPN25WSmc2RmJYbGxtcmhPWlUvNXA3c0xwQUpFbCtta3RJbzkybVA5VGFySXFZWTZTblZTSmpDVgpPYk4zTEtxU0gxNnFzR2ZhclluZUl6OWJGKzVjQTlFMzQ1cFdQVVhveXFRUURSNU1MRW9NY0tzYVF1V2g3Z2xBClY3SUdYUzRvaU5HNjhDOXd5REtDd3B2NENkbGJxdVRPMVhDb2puS1o0OEpMaGhFVHRxR2hIa2xMSkEwVXpRSUQKQVFBQm95TXdJVEFPQmdOVkhROEJBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QU5CZ2txaGtpRwo5dzBCQVFzRkFBT0NBUUVBamlNU0kxTS9VcUR5ZkcyTDF5dGltVlpuclBrbFVIOVQySVZDZXp2OUhCUG9NRnFDCmpENk5JWVdUQWxVZXgwUXFQSjc1bnNWcXB0S0loaTRhYkgyRnlSRWhxTG9DOWcrMU1PZy95L1FsM3pReUlaWjIKTysyZGduSDNveXU0RjRldFBXamE3ZlNCNjF4dS95blhyZG5JNmlSUjFaL2FzcmJxUXd5ZUgwRjY4TXd1WUVBeQphMUNJNXk5Q1RmdHhxY2ZpNldOTERGWURLRXZwREt6aXJ1K2xDeFJWNzNJOGljWi9Tbk83c3VWa0xUNnoxcFBRCnlOby9zNXc3Ynp4ekFPdmFiWTVsa2VkVFNLKzAxSnZHby9LY3hsaTVoZ1NiMWVyOUR0VERXRjdHZjA5ZmdpWlcKcUd1NUZOOUFoamZodTZFcFVkMTRmdXVtQ2ttRHZIaDJ2dzhvL1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
        server: https://hfvt4dkgb.europe-west3-c.dev.kubermatic.io:30002
      name: ""
    contexts: []
    current-context: ""
    kind: Config
    preferences: {}
    users: []

Development

Testing

Unit Tests

Simply run make test-unit

End-to-End Locally

[WIP]

Troubleshooting

If you encounter issues file an issue or talk to us on the #kubermatic channel on the Kubermatic Slack.

Contributing

Thanks for taking the time to join our community and start contributing!

Before You Start

Pull Requests

  • We welcome pull requests. Feel free to dig through the issues and jump in.

Changelog

See the list of releases to find out about feature changes.

More Repositories

1

kubeone

Kubermatic KubeOne automate cluster operations on all your cloud, on-prem, edge, and IoT environments.
Go
1,371
star
2

kubermatic

Kubermatic Kubernetes Platform - the Central Kubernetes Management Platform For Any Infrastructure
Go
1,030
star
3

fubectl

Reduces repetitive interactions with kubectl
Go
791
star
4

kubecarrier

KubeCarrier - Service Management at Scale
Go
299
star
5

k8sniff

k8sniff - tcp ingress controller with SNI support
Go
80
star
6

kubelb

Kubernetes based load balancing
Go
52
star
7

dashboard

Dashboard For The Kubermatic Kubernetes Platform
Go
41
star
8

operating-system-manager

Operating System Manager is responsible for creating and managing the configuration that are needed to configure worker nodes
Go
26
star
9

glog-gokit

This packages is a replacement for glog in projects that use the go-kit logger.
Go
18
star
10

docs

Documentation for Kubermatic projects
SCSS
16
star
11

gchl

Github changelog generator
Go
13
star
12

community-components

Collection of components for Kubermatic KKP and KubeOne
Shell
10
star
13

mla

MLA (Monitoring, logging, alerting) solution for KKP.
Mustache
8
star
14

reconciler

Simple codegen-based Go library to reconcile Kubernetes resources
Go
6
star
15

terraform-provider-kubermatic

Terraform Kubermatic provider
Go
6
star
16

kubermatic-installer

Installation instructions for setting up a kubermatic seed cluster
Shell
5
star
17

bulward

Multi User/Project management for Kubernetes
Go
5
star
18

kubelet

Containerized Kubelet Images
Shell
4
star
19

go-kubermatic

Go language bindings for Kubermatic API
Go
3
star
20

github-bot

Go
3
star
21

tail

Deprecated log viewer for Prow, consider using https://github.com/kubernetes/test-infra/tree/master/prow/spyglass instead
Go
3
star
22

benchmate

Network latency, throughput estimation tool
Go
2
star
23

zevenet-lb-controller

Go
2
star
24

nodeport-exposer

Go
2
star
25

glog-logrus

Go
2
star
26

telemetry-client

Telemetry-Client is an observability tool that can be used to track Kubermatic Kubernetes Platform and Kubernetes cluster usage.
Go
2
star
27

flowmatic

KubeFlow integration on KKP.
Shell
1
star
28

aur-kubeone

Shell
1
star
29

gk-installer

Installer for gluster/gluster-kubernetes
1
star
30

support

Kubernetes Support Tools
Shell
1
star
31

utils

Go
1
star
32

kubeflow-controller

KubeFlow controller
Go
1
star
33

kkp-single-node

Get started with KKP - β€œKKP on a single node with Kubeone on AWS”
HCL
1
star