Les conteneurs sont un bon choix pour regrouper et exécuter nos propres applications. Lorsque le nombre de conteneurs augmente rapidement et que vous devez les gérer de manière pratique. C’est la raison pour laquelle Kubernetes vient. Kubernetes (K8s) est un système open source permettant d’automatiser le déploiement, la mise à l’échelle et la gestion d’applications et de services conteneurisés.
Le cluster Kubernetes contient des nœuds maître et de travail. Le nœud maître contrôle et gère un groupe de nœuds de travail. Vous pouvez avoir plusieurs nœuds maîtres pour les clusters à haute disponibilité.
Ce tutoriel montre comment installer un cluster Kubernetes avec kubeadm activé Ubuntu 20.04.
Préparation de l’environnement
- Utilisez 2 hôtes Linux exécutant Ubuntu 20.04
Définition d’adresses IP statiques pour le nœud maître et le nœud de travail
– Nœud maître : 192.168.1.11
– Nœud de travail : 192.168.1.12
- Configurer le nom d’hôte pour chaque machine
Nous utiliserons node-1 en tant que maître et node-2 en tant que nœud de travail.
$ sudo hostnamectl set-hostname node-1
$ sudo hostnamectl set-hostname node-2
- Désactiver la mémoire d’échange sur chaque nœud Ubuntu
$ sudo swapoff -a
Ajouter un dépôt Kubernetes
Kubernetes n’est pas disponible dans le référentiel par défaut d’Ubuntu, vous devez donc l’ajouter manuellement.
Sur le nœud maître et le nœud de travail effectuez les opérations suivantes :
Ajout de la clé de signature Kubernetes comme suit :
$ sudo -i
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
Ensuite, ajoutez le dépôt Kubernetes, exécutez :
$ echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list
$ sudo mv ~/kubernetes.list /etc/apt/sources.list.d
$ sudo apt update
Installer les outils Kubernetes
Dans cette section, nous allons installer Kubeadm, cri-o, Kubelet et Kubernetes-cni. Tous ces outils doivent être installés sur nœuds maîtres et nœuds de travail.
Assurez-vous d’installer la version recommandée et prise en charge. Ici, nous installons la version 1.18 de Kubernetes et crio.
Installer Kubeadm
Kubeadm est un outil qui fait partie du projet Kubernetes qui aide à initialiser le cluster Kubernetes.
Dans ce tutoriel, nous allons installer kubeadm version 1.18.0-00, tapez :
$ sudo apt install -y kubeadm=1.18.0-00 --allow-unauthenticated
Noter: vous pouvez trouver la version spécifique par la commande suivante :
$ curl -s https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages | grep Version | awk '{print $2}'
Installer Kubectl
Kubectl
est l’outil de ligne de commande Kubernetes. Il vous permet d’exécuter des commandes dans les clusters Kubernetes. Vous pouvez utiliser kubectl pour déployer des applications, gérer les ressources du cluster et afficher les journaux.
Installez kubectl v1.18.0-00 à l’aide de la commande suivante :
$ sudo apt install -y kubectl=1.18.0-00 --allow-unauthenticated
Installer CRI-O
CRI-O est une interface d’exécution de conteneur (CRI) compatible OCI. Le runtime le plus couramment utilisé est Docker. Depuis la sortie de Kubernetes 1.20, le shim d’interface d’exécution de conteneur (CRI) pour Docker est obsolète. Docker produit des images qui ne sont pas une image OCI (Open Container Initiative).
Nous devons utiliser un environnement d’exécution de conteneur compatible OCI pour extraire et exécuter des images OCI, en particulier si vous utilisez des services Kubernetes tels que GKE, EKS ou AKS.
Vous pouvez toujours utiliser docker, puis installer en utilisant sudo apt-get install docker.io
Ici, je vais utiliser le créer qui est un runtime conforme. Gardez la version cri-o correspondant à la version Kubernetes.
Assurez-vous d’installer le version prise en charge.
Première utilisation modprobe
commande pour charger le recouvrir et br_netfilter modules sur les nœuds maître et travailleur :
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
Ensuite, créez un fichier de configuration sysctl pour activer le transfert IP et les paramètres netfilter lors des redémarrages en insérant les lignes suivantes dans /etc/sysctl.d/99-kubernetes-cri.conf
fichier sur le nœud maître et travailleur :
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
Appliquez le fichier de configuration en exécutant :
$ sudo sysctl --system
Maintenant, nous spécifions le système d’exploitation Ubuntu et la version cri-o comme suit :
$ sudo -i
# export OS=xUbuntu_20.04
# export VERSION=1.18
Ensuite, exécutez les commandes suivantes comme root
utilisateur:
# echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
# echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
# curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | apt-key add -
# curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -
# apt update
# apt install cri-o cri-o-runc
Une fois l’installation terminée, le commun L’utilitaire (Container Monitoring) a été installé. Trouvez le chemin de commun:
$ which conmon
/usr/bin/conmon
Modifier le /etc/crio/crio.conf
fichier comme suit :
...
# Path to the conmon binary, used for monitoring the OCI runtime.
conmon = "/usr/bin/conmon" #<-- Edit this line. Around line 108
...
registries = [ #<-- Edit and add registries. Around line 351
"docker.io",
"quay.io",
]
....
Activez le cri-o et assurez-vous qu’il est en cours d’exécution :
$ sudo systemctl daemon-reload
$ sudo systemctl enable crio
$ sudo systemctl start crio
$ sudo systemctl status crio
Sortir:
● crio.service - Container Runtime Interface for OCI (CRI-O)
Loaded: loaded (/usr/lib/systemd/system/crio.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-12-10 15:46:37 UTC; 3 days ago
Docs: https://github.com/cri-o/cri-o
...
Installer Kubelet
Kubelet est un agent s’exécutant sur chaque nœud et est chargé de communiquer avec le serveur d’API sur le nœud maître et de piloter l’exécution du conteneur pour démarrer les charges de travail.
Configurer kubelet
pour comprendre comment interagir avec cri-o en insérant la ligne suivante pour /etc/default/kubelet
déposer:
KUBELET_EXTRA_ARGS=--feature-gates="AllAlpha=false,RunAsGroup=true" --container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint="unix:///var/run/crio/crio.sock" --runtime-request-timeout=5m
Sur les nœuds maître et travailleur, exécutez la commande suivante pour installer kubelet
:
$ sudo apt install -y kubelet=1.18.0-00 --allow-unauthenticated
Installer Kubernetes-cni
Pour activer la mise en réseau des conteneurs dans le cluster, nous devons installer kubernetes-cni
.
Exécutez la commande suivante :
$ sudo apt-get install -y kubernetes-cni --allow-unauthenticated
Déployer le cluster Kubernetes
Le déploiement du cluster Kubernetes implique 2 étapes. La première étape consiste à initialiser le nœud maître et la deuxième étape consiste à joindre le nœud de travail au cluster.
Initialiser le nœud maître
Pour initialiser Kubernetes sur Nœud maître, taper:
$ sudo kubeadm init --apiserver-advertise-address=192.168.1.11 --pod-network-cidr=10.244.0.0/16
Cela prendra quelques minutes pour terminer. Une fois l’initialisation terminée, le terminal affichera la sortie comme suit :

Prenez note de la ligne pour rejoindre le cluster marqué ci-dessus, l’utilisera à l’étape suivante pour joindre le nœud de travail au cluster.
Maintenant, exécutez la commande suivante pour créer le répertoire de configuration Kubernetes sur le nœud maître :
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Ensuite, déployez un réseau de pods sur le cluster :
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Vérification que tous les composants du plan de contrôle ont été installés avec succès :
$ kubectl get pod --all-namespaces

Joindre le nœud de travail au cluster
Connectez-vous maintenant au nœud de travail et joignez le nœud de travail au cluster.
Sur la machine du nœud de travail, exécutez la commande suivante :
$ sudo kubeadm join 192.168.1.11:6443 --token 9ii02d.nsmrmu1asascv2yg
--discovery-token-ca-cert-hash sha256:1104bf70b03a2d030ffc0a462f9dbcbcdd9975393e9a9ac2a1f18500f1b6b74e
Une fois le processus d’adhésion terminé, revenez au nœud maître et exécutez :
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node-1 Ready master 2m37s v1.18.0
node-2 Ready none 22s v1.18.0
Pour obtenir plus d’informations sur le nœud, tapez :
$ kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-1 Ready master 9h v1.18.0 10.2.0.4 Ubuntu 20.04.1 LTS 5.4.0-1029-gcp cri-o://1.18.4
node-2 Ready none 9h v1.18.0 10.2.0.5 Ubuntu 20.04.1 LTS 5.4.0-1029-gcp cri-o://1.18.4
Les sorties affichent les détails du nœud maître et des nœuds qui ont rejoint le cluster.
Lire aussi : Comment installer Kubernetes localement à l’aide de Vagrant/Minikube
Conclusion
Alors que la conteneurisation devient populaire, le besoin de gérer les charges de travail et les services conteneurisés rend Kubernetes si populaire. Tous les principaux fournisseurs de cloud ont commencé à prendre en charge Kubernetes géré, ce qui facilite la vie.
Kubernetes est entièrement gratuit et peut être téléchargé à tout moment depuis son référentiel. J’espère que vous avez apprécié l’installation de Kubernetes sur Ubuntu. Vous pouvez essayer de déployer des applications comme MySQL ou WordPress sur le cluster K8.
Merci d’avoir lu et s’il vous plaît laissez votre suggestion dans la section commentaire ci-dessous.