Requirements nouveau cluster kubernetes
- list/investigate install tools
-
kubeone / kubermatic (prom, ingress..)remplace pas Terraform/Ansible voir ici - https://github.com/particuleio/symplegma
-
https://bitnami.com/kubernetes/bkprsuperset de k8s avec elastic (plus vraiment libre), pas super utile -
https://github.com/rancher/rancher / rkeutilise des images custom et a trop d'issues - https://github.com/poseidon/typhoon
- https://github.com/k0sproject/k0s
-
- flannel?
- Network policies (calico)
Requirements:
- facile à mettre les mains dedans / modifier à la marge
- facile à update régulièrement / à ajouter un noeud
- composants:
- kubelet / etcd / containerd (binaires)
- kubeadm (config du cluster)
- config du node (ansible)
- alsa loopback
- wireguard / ufw
- lvm / zfs (dynamic local provisioner ?)
- service k8s de base
- cert-manager
- nginx ingress
- canal (CNI)
- prom/grafana
- minio
Proposition
Distrib k8s : Symplegma
k0s semble être le futur car il est simple a configuré, a automatisé. Il en fait suffisament mais pas trop. Cependant il n'a pas encore atteind la version 1 donc c'est probablement trop risqué pour de la production donc a surveillé pour un prochain cluster.
Symplegma est pas très populaire sur github mais il est basé sur 2 outils qui on fait leur preuve : kubeadm et ansible. Il est donc relativement facile de mettre les mains dedans si besoin. Pareil que k0s le niveau d'abstraction juste suffisant pour pas top se prendre la tête mais laisse pas mal de souplesse si besoin.
CNI : Calico
Calico est un des CNI les plus populaires, il intègre les Network Policies, on l'utilise déjà. Une variation que l'on peut faire est de le laisser gérer Wireguard pour le chiffrement du trafic Pod-To-Pod, le reste est censé (si bien configuré) utiliser TLS donc la création d'un overlay global pour le cluster semble pas nécessaire.
Volumes : OpenEBS + ZFS
L'utilise d'une pool zfs (mirrored) pourrait remplacer le raid1 actuel en ajoutant une protection contre le bitrot. De plus openebs est capable de provisionner dynamiquement des devices (pour minio) et des volumes zfs (pour les db).
OS : Ubuntu ?
Pas encore certain pas rapport au côté moins libre que debian mais ubuntu a l'avantage d'avoir un kernel récent avec wireguard et zfs intergré donc pas besoin de dkms ce qui est un risque de stabilité.
Automatisation : Terraform + Ansible
Terraform permet de répéter l'infra facilement et aussi de garder des traces des ressources déployés. Attention il faudrait un backend commun ou une machine de déploiement spécifique. Ansible est utilisé par Symplegma et permetrait de configuer la pool zfs, alsa loopback et autre.
Validation : Sonobuoy
Test de compliance
Securité : kube-hunter
Test les erreurs de configuration basiques
Procédure de déploiement visée
- Terraform déploie les VMs (pour le control plane et ou autre)
- La sortie de Terraform est fusionné au hôtes dédiés pour créér l'inventaire Ansible.
- Ansible configure les machines : dépendances, firewall, pool zfs...
- Symplegma déploie k8s
- Ansible fini de configurer k8s : sécurité, services support (openebs, minio...)
CI/CD
La procédure doit pouvoir être exécuté dans un pipeline et finir par l'exécution de kube-hunter et sonobuoy. Idéalement un premier pipeline créé un nouveau cluster pour tester la procédure, si celle si fonctionne, on l'applique à un cluster persistant (beta).
Questions
- OpenEBS volume resizing
- Hostpath quota
- Hostpath security