Docker/Kubernetes
Kubernetes est un logiciel open-source sorti en 2015 pour orchestrer plusieurs conteneurs avec des options de quotas, scalabilité horizontale, déploiement sans coupure de service et relance automatique en cas d'indisponibilité. Pour ces raisons, il est plus orienté pour la production que pour le développement[1], de plus il nécessite d'utiliser des images Docker déjà construites.
Installation
modifierClient
modifierLa configuration peut être stockée dans des fichiers .yaml et modifiée par la commande kubectl
[2], ou via l'interface graphique Dashboard[3]. De plus, il est nécessaire de lancer un cluster contenant les conteneurs via kubeadm
[4].
Debian
modifierSur Debian ou ses dérivés[5] :
sudo apt-get install -y apt-transport-https ca-certificates curl gpg curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
Test :
kubectl --help
k9s
modifierPour éviter de taper chaque commande, il existe une interface graphique gratuite nommée k9s, pouvant exploiter la conf de kubectl : https://k9scli.io/topics/install/.
Cela nécessite le gestionnaire de paquets Homebrew :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Puis :
brew install derailed/k9s/k9s
Par exemple on peut déclencher un cronjob avec "t" ou rentrer dans un conteneur en shell avec "s".
:namespace
pour voir la liste puis entrée après sélection./running
Types
modifierpod
modifierUn pod désigne un groupe de conteneur géré par Kubernetes[6].
replica set
modifierUn replica set désigne un ensemble de pods, dont le nombre maximum peut y être défini.
secret
modifierListe de variables d'environnement chiffrées, généralement des mots de passe.
Ils sont chiffrés via "kubeseal", à partir d'un fichier YAML non versionné contenant les chaines encodées en base64.
Ce fichier contient plusieurs paramètres, par exemple le type. Il en existe huit, "opaque" étant celui par défaut[7].
La commande de chiffrement quant-à-elle permet de définir le scope des secrets[8] :
- strict (par défaut) : le nom et le namespace ne peuvent pas changer sans rechiffrer.
- namespace-wide : utilisable dans tout le namespace.
- cluster-wide : utilisable dans tout le cluster.
Toutefois on peut aussi les mettre dans le .yaml. Ex : metadata:
annotations: sealedsecrets.bitnami.com/cluster-wide: "true"
CronJob
modifierLance un conteneur dédié à une tâche planifiée (cron), à chaque fois qu'elle tourne[9].
Ingress
modifierAccès à l'application (DNS).
PVC
modifierPersistent volume : stocke des données indépendamment du redémarrage des pods.
Commandes kubectl
modifierget
modifierListe des éléments du serveur :
kubectl get -A all
logs
modifierPour voir le log de la sortie standard d'un conteneur :
kubectl logs -f mon_conteneur
exec
modifierPour rentrer dans un conteneur :
kubectl exec -it mon_conteneur -- /bin/bash
scale
modifierPour augmenter le nombre de pods dans un replicatset. Par exemple si on peut passer le nombre de 2 à 3 sur "mysql"[10] :
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
Références
modifier- ↑ https://kubernetes.io/docs/setup/
- ↑ https://kubernetes.io/fr/docs/reference/kubectl/overview/
- ↑ https://kubernetes.io/fr/docs/tasks/access-application-cluster/web-ui-dashboard/
- ↑ https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
- ↑ https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
- ↑ https://kubernetes.io/fr/docs/concepts/workloads/pods/pod/
- ↑ https://kubernetes.io/docs/concepts/configuration/secret/#secret-types
- ↑ https://github.com/bitnami-labs/sealed-secrets#scopes
- ↑ https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
- ↑ https://jamesdefabia.github.io/docs/user-guide/kubectl/kubectl_scale/