[K8S] cgroup driver naar systemd

Volgens https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/ dient het aanbeveling om ‘systemd‘ te gebruiken als driver voor cgroups. Dit komt de stabiliteit van docker ten goede. Vóór Kubernetes versie 1.21 is de standaard nog om hier ‘cgroupfs’ voor te gebruiken maar aangezien kubeadm systemd gebruikt om kubelet aan te sturen is dit nu de nieuwe standaard en de default vanaf v1.21.

Docker daemon aanpassing

Als eerste dient op alle nodes, de docker daemon opgestart te worden met systemd als driver en daarvoor dient het volgende in ‘/etc/docker/daemon.json‘ te komen:

{
   "exec-opts": ["native.cgroupdriver=systemd"],
   "log-driver": "json-file",
   "log-opts": {
      "max-size": "100m",
      "max-file": "3"
    },
    "storage-driver": "overlay2"
}

Hierna dient docker herstart te worden dus eerst even de node drainen voordat een herstart plaatsvindt en daarna weer uncordon node.

Kubelet opstart parameter

Kubelet dient zelf ook ‘systemd’ te gaan gebruiken en voor clusters die aangemaakt zijn met ‘kubeadm’ is de config file voor kubelet te vinden in ‘/var/lib/kubelet/config.yaml‘ en hier dient de volgende regel in te staan:

cgroupDriver: systemd

Met opstarten van kubelet wordt deze configuratie dan gebruikt via een ConfigMap in de kube-system namespace genaamd kubelet-config-x.yy waarbij x.yy de versie van Kubernetes is.

$ sudo systemctl restart kubelet

Rancher Clusters

Voor cluster die ingericht zijn met Rancher is dit anders ingericht. Als eerste de ‘local‘ cluster (Rancher Manager) die is ingericht met ‘rke‘. Hiervoor is een ‘cluster.yml‘ bestand aanwezig en daar komt dan een verwijzing naar systemd in voor kubelet:

services:
  kubelet:
    extra_args:
      cgroup-driver: systemd

Hierna kan de local cluster ge-updat worden met:

$ rke up --config=cluster.yml

Voor ‘custom‘ cluster die zijn aangemaakt met behulp van Rancher is er de cluster configuratie die aangepast kan worden met de Rancher GUI. Edit het cluster en wijzig de ‘Cluster Options’ met de ‘Edit as YAML‘ optie.

hier wordt de optie voor systemd geplaatst:

en na ‘Save‘ worden de nodes herstart.


Indien gebruik gemaakt wordt van Node-templates met cloud-init dan kan het volgende onder ‘write_files:‘ geplaatst worden:

- path: /etc/docker/daemon.json
  permissions: "0644"
  owner: root:root
  content: |
  {
     "exec-opts": ["native.cgroupdriver=systemd"],
     "log-driver": "json-file",
     "log-opts": {
        "max-size": "100m",
        "max-file": "3"
     },
     "storage-driver": "overlay2"
  }