Exemple: kube-proxy

L’exemple de kube-proxy

kube-proxy est un Daemonset Kubernetes dédié à la gestion du réseau virtuel des Services Kubernetes. L’implémentation par défaut installe un pod kube-proxy sur chaque noeud en charge de gérer les adresses IP virtuelles des Services Kubernetes.

Remarque

Afin de créer le réseau virtuel des services kube-proxy configure le module IPVS du noyau Linux sur chaque noeuds en parallèle. Dans les versions plus anciennes de Kubernetes, kube-proxy configurait les iptables mais IPVS est bien plus rapide.

Ce pod s’exécute également sur les noeud(s) maître(s) du cluster Kubernetes.

$ kubectl get pods -n kube-system --selector k8s-app=kube-proxy -o wide
NAME               READY   STATUS    RESTARTS   AGE   IP           NODE                 NOMINATED NODE   READINESS GATES
kube-proxy-pqcdm   1/1     Running   0          78m   172.17.0.3   kind-control-plane   <none>           <none>
kube-proxy-qbklt   1/1     Running   0          78m   172.17.0.2   kind-worker2         <none>           <none>
kube-proxy-sjl66   1/1     Running   0          78m   172.17.0.4   kind-worker          <none>           <none>

Listons les Tolerations dans la section Pod template du Daemonset kube-proxy:

kubectl get daemonsets.apps -n kube-system kube-proxy -o jsonpath="{.spec.template.spec.tolerations}"
[map[key:CriticalAddonsOnly operator:Exists] map[operator:Exists]]

Ou, la même chose en yaml

# Extrait de stdout pour la commande: kubectl get daemonsets.apps  -n kube-system kube-proxy -o yaml
tolerations:
- key: CriticalAddonsOnly
  operator: Exists
- operator: Exists

Si l’on se réfère à la documentation officielle, nous sommes ici dans un cas particulier:

An empty key with operator Exists matches all keys, values and effects which means this will tolerate everything.

Ainsi la Toleration ci-dessous permettra à un Pod de s"éxécuter sur tous les noeuds, peut importe leurs Tolerations.

tolerations:
- operator: "Exists"

C’est bien la raison pour laquelle le Daemonset kube-proxy est en mesure d’éxécuter un pod sur le(s) noeud(s) maître(s) du cluster Kubernetes.