Les conteneurs sont un bon choix pour regrouper et exécuter nos propres applications. Lorsque le nombre de conteneurs augmente rapidement et qu'il est nécessaire de les gérer de manière pratique. C'est la raison pour laquelle Kubernetes arrive. Kubernetes (K8s) est un système open source permettant d'automatiser le déploiement, la mise à l'échelle et la gestion des applications et des services conteneurisés.
Le cluster Kubernetes contient des nœuds maître et travailleur. 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 sur Ubuntu 20.04.
Préparation de l'environnement
- Utiliser 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 travailleur
- 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 le nœud 1 comme maître et le nœud 2 comme 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 référentiel 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 actions suivantes :
Ajoutez 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 référentiel Kubernetes, exécutez :
$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list
$ sudo mv ~/kubernetes.list /etc/apt/sources.list.d
$ sudo apt update
Installation des outils Kubernetes
Dans cette section, nous allons installer Kubeadm, cri-o, Kubelet et Kubernetes-cni. Tous ces outils doivent être installés sur les nœuds maître et travailleur .
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 faisant 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
Remarque :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 de 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 avec 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) conforme à l'OCI. Le runtime le plus couramment utilisé est Docker. À partir de la version 1.20 de Kubernetes, 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 conforme à 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 cri-o qui est un runtime conforme. Faites en sorte que la version de cri-o corresponde à la version de Kubernetes.
Assurez-vous d'installer la version prise en charge.
Tout d'abord, utilisez modprobe
commande pour charger la superposition 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 les paramètres de transfert IP et de 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 nœud de travail :
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
Exécutez ensuite les commandes suivantes en tant que 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 http://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 conmon L'utilitaire (Container Monitoring) a été installé. Trouvez le chemin de commun :
$ which conmon
/usr/bin/conmon
Modifiez 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
Sortie :
● 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 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 dans /etc/default/kubelet
fichier :
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 de 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 1ère étape serait d'initialiser le nœud maître et la 2ème étape consisterait à joindre le nœud travailleur au cluster.
Initialiser le nœud maître
Pour initialiser Kubernetes sur le nœud maître , saisissez :
$ sudo kubeadm init --apiserver-advertise-address=192.168.1.11 --pod-network-cidr=10.244.0.0/16
Il faudra quelques minutes pour terminer. Une fois l'initialisation effectuée, le terminal affichera la sortie comme suit :
Prenez note de la ligne pour rejoindre le cluster marqué ci-dessus, vous l'utiliserez à 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 de l'installation réussie de tous les composants du plan de contrôle :
$ kubectl get pod --all-namespaces
Joindre le noeud worker au cluster
Connectez-vous maintenant au nœud de travail et joignez le nœud de travail au cluster.
Sur la machine du noeud worker, 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 de jointure 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.
Lisez aussi :Comment installer Kubernetes localement à l'aide de Vagrant/Minikube
Conclusion
Alors que la conteneurisation devient populaire, la nécessité de gérer les charges de travail et les services conteneurisés rend Kubernetes si populaire. La plupart des principaux fournisseurs de cloud ont commencé à prendre en charge Kubernetes géré, ce qui simplifie 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 des commentaires ci-dessous.