Skip to content

Kubernetes

kubernetes

Installer kubctl :

Sur les distribution debian :

sudo apt install kubernetes-client
sudo mkdir /etc/kubernetes/
ou pour avoire une version plus récente :

sudo apt update && sudo apt install -y apt-transport-https gnupg
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

copier le fichier de configuration du noeux kubernetesse ici /etc/kubernetes/admin.conf puis :

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Note

export KUBECONFIG=/etc/kubernetes/admin.conf ne semble pas fonctionner

Autre distribution voir : kubernetes

K8S

Warning

Attention : L'instance hébergant k8s ne doit pas avoir de swap

Installer kubeadm

Sur une distribution debian :

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
echo "br_netfilter" | sudo tee /etc/modules-load.d/netfilter.conf
echo net.ipv4.ip_forward = 1 | sudo tee /etc/sysctl.conf
sudo sysctl --system
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release apt-transport-https -y
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt update
sudo apt install -y kubelet kubeadm kubectl containerd.io -y
sudo rm /etc/containerd/config.toml
sudo apt-mark hold kubelet kubeadm kubectl
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml 
sudo reboot 

Autre distribution voir : kubernetes

Création d'un "Master Node"

Pour crée le worker node on utilise simplement la commande :

sudo kubeadm init

Kubernetes a besoins d'une extention pour le réseau. On peut utiliser flannel pour répondre a ce besoins.

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

Ajouter un "Worker Node"

Sur le master node, exécutez la commande suivante pour récupérer le "token" et le "caCertHash" nécessaires pour rejoindre le cluster :

kubeadm token create --print-join-command
Cette commande générera une sortie similaire à celle-ci :

kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
Notez cette commande pour l'utiliser plus tard sur les worker nodes.
Sur chaque worker node, exécutez la commande récupérée à l'étape précédente pour rejoindre le cluster. Par exemple :

kubeadm join 192.168.0.10:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

[!DANGER] Remplacez control-plane-host control-plane-port token et hash par les valeurs correspondantes obtenues à l'étape 1.

Sur le master node, vérifiez que les worker nodes ont rejoint le cluster en exécutant la commande suivante :

kubectl get nodes
La sortie devrait afficher la liste de tous les nœuds du cluster, y compris les worker nodes ajoutés récemment.

Manager un namespace

Voire les namespace :

kubectl get namespace

supprimer un namespace :

kubectl delete namespace

source phenixapp

Faire de la HA

https://tansanrao.com/kubernetes-ha-cluster-with-kubeadm/ https://www.youtube.com/watch?v=Ro2qeYeisZQ https://youtu.be/Zxozz8P_l5M Metal lb

Débuguer pool kubeadm

Voire le status de pool kubernetes :

sudo systemctl status kubelet.service

Voire les logs de conteneur individuelle :

sudo crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
sudo crictl ps -a
puis :

sudo critctl logs "numéro du conteneur"

Commande kubadm

Pour afficher le commande pour qu'un noeud rejoind le worker node

kubeadm token create --print-join-command

Commande kubctl

Commande pour voire les noeuds :

kubectl get nodes

Vérifier que les ressources sont disponibles :

kubectl describe node nodeName

Vérifiez le kube-proxy Pod :

kubectl get pods -n kube-system -o wide

Regarder les logs du pod :

kubectl logs yourPodName -n kube-system
Tranformer un mot de passe kubctl en fichier manifest

exemple :

kubectl create secret docker-registry gitlab-registry \
  --docker-server=registry.gitlab.com \
  --docker-username=gitlab+deploy-token-3940973 \
  --docker-password=xxxxx \
  --docker-email=m.roveda@lyon.ort.asso.fr \
  --namespace=picshoot

via la commande "get secret" picshoot on peut voire les fichier en base64 :

kubectl get secret gitlab-registry --namespace=picshoot -o yaml
Dans notre exemple nous allons copier coller le resultat en base 64 dans notre fichier manifest capture_d'écran_2024-02-13_001800.png Voici le secret dans le fichier manifest : capture_d'écran_2024-02-13_001952.png

supprimer le secret au préalabe et réapliquer le manifest

Traduire un fichier de Docker en ressources k8s

curl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-linux-amd64 -o kompose
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose

Exemple d'utilisation qui va output qu'une seul fichier :

kompose convert -o k8s-compose.yaml

Source : Kubernetes

Distributions connexes