Comment installer Kubernetes sur Ubuntu 20.04

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

kubeadm init

Cela prendra quelques minutes pour terminer. Une fois l’initialisation terminée, le terminal affichera la sortie comme suit :

initialisé avec succèsinitialisé avec succès

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

get pod –tous les espaces de nomsget pod –tous les espaces de noms

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.