Kubernetes est un système d'orchestration de conteneurs gratuit et open source qui peut être utilisé pour déployer et gérer des conteneurs. Il a été développé par Google et spécialement conçu pour l'autoscaling et les déploiements automatisés. Kubernetes peut fonctionner sur n'importe quelle infrastructure cloud et bare metal. Kubernetes vous permet de distribuer plusieurs applications sur un cluster de nœuds. Kubernetes est livré avec un riche ensemble de fonctionnalités, notamment l'autoréparation, l'auto-évolutivité, l'équilibrage de charge, l'exécution par lots, la mise à l'échelle horizontale, la découverte de services, l'orchestration du stockage et bien d'autres.
Dans ce tutoriel, nous allons apprendre à configurer l'équilibrage de charge Nginx avec Kubernetes sur Ubuntu 18.04.
Exigences
- Deux serveurs avec Ubuntu 18.04 installé.
- Au moins 2 Go de RAM installés sur chaque serveur.
- Un mot de passe root est configuré sur les deux serveurs.
Mise en route
Tout d'abord, vous devrez mettre à jour les deux serveurs avec la dernière version stable. Vous pouvez les mettre à jour en exécutant la commande suivante :
apt-get update -y
apt-get upgrade -y
Une fois les deux serveurs mis à jour, redémarrez-les pour appliquer toutes les modifications.
Par défaut, Kuberenetes n'est pas compatible avec la mémoire d'échange et ne fonctionnera pas si l'échange est actif. Vous devrez donc désactiver la mémoire d'échange sur les deux serveurs.
Pour désactiver temporairement la mémoire d'échange, exécutez la commande suivante :
swapoff -a
Pour désactiver définitivement la mémoire d'échange, ouvrez le fichier /etc/fstab :
nano /etc/fstab
Commentez la dernière ligne :
# /etc/fstab :informations statiques sur le système de fichiers.
#
# utilisez 'blkid' pour imprimer l'identifiant universel unique d'un
# périphérique ; cela peut être utilisé avec uuid=comme un moyen plus robuste de nommer les périphériques
# qui fonctionne même si des disques sont ajoutés et supprimés. voir fstab(5).
#
# <système de fichiers> <point de montage> <taper> <options> <vider> <pass>
# / était sur /dev/sda1 lors de l'installation
# swap était sur /dev/sda4 lors de l'installation#UUID=65se21r-1d3t-3263-2198-e564c275e156 none swap sw 0 0Enregistrez et fermez le fichier. Ensuite, exécutez la commande suivante pour appliquer les modifications de configuration :
mount -aEnsuite, vous devrez configurer la résolution du nom d'hôte sur les deux serveurs. Ainsi, chaque serveur peut communiquer entre eux en utilisant le nom d'hôte.
Pour ce faire, ouvrez le fichier /etc/hosts à l'aide de votre éditeur préféré :
nano /etc/hostsAjoutez les lignes suivantes :
192.168.0.103 maître192.168.0.100 esclaveEnregistrez et fermez le fichier lorsque vous avez terminé. Passez ensuite à l'étape suivante.
Installer Docker et Kubernetes
Ensuite, vous devrez installer les outils Docker et Kubernetes kubelet, kubeadm et kubectl sur les deux serveurs.
Tout d'abord, installez les packages requis et ajoutez la clé GPG avec la commande suivante :
apt-get install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-clé ajouter -Ensuite, ajoutez le référentiel Docker CE sur les deux serveurs en exécutant la commande suivante :
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"Ensuite, mettez à jour le référentiel et installez Docker CE avec la commande suivante :
apt-get update -y
apt-get install docker-ce -yUne fois l'installation terminée, vérifiez l'état de Docker CE avec la commande suivante :
menu fixe d'état systemctlVous devriez voir le résultat suivant :
? docker.service - Moteur de conteneur d'applications Docker chargé :chargé (/lib/systemd/system/docker.service ; activé ; préréglage du fournisseur :activé) Actif :actif (en cours d'exécution) depuis le ven. 2019-07-19 07:05:50 UTC ; Il y a 1h 24min Docs :https://docs.docker.com PID principal :3619 (dockerd) Tâches :8 CGroup :/system.slice/docker.service ??3619 /usr/bin/dockerd -H fd:// - -containerd=/run/containerd/containerd.sockJul 19 07:05:48 master dockerd[3619] :time="2019-07-19T07:05:48.574491681Z" level=warning msg="Votre noyau ne prend pas en charge la mémoire d'échange limit"19 juillet 07:05:48 master dockerd[3619] :time="2019-07-19T07:05:48.575196691Z" level=warning msg="Votre noyau ne prend pas en charge la période rt du cgroup"19 juillet 07h05 :48 master dockerd[3619] :time="2019-07-19T07:05:48.575733336Z" level=warning msg="Votre noyau ne prend pas en charge l'exécution cgroup rt"Juil 19 07:05:48 master dockerd[3619] :time ="2019-07-19T07:05:48.582517104Z" level=info msg="Chargement des conteneurs :début."Juil 19 07:05:49 master dockerd[3619] :time="2019-07-19T07:05:49.391255541 Z" level=info msg="Le pont par défaut (docker0) est attribué avec une adresse IP addJul 19 07:05:49 master dockerd[3619] :time="2019-07-19T07:05:49.681478822Z" level=info msg="Chargement con tainers :terminé."Jul 19 07:05:50 master dockerd[3619] :time="2019-07-19T07:05:50.003776717Z" level=info msg="Docker daemon" commit=0dd43dd graphdriver(s)=overlaJul 19 07:05:50 master dockerd[3619] :time="2019-07-19T07:05:50.009892901Z" level=info msg="Le démon a terminé l'initialisation"Juil 19 07:05:50 master systemd[1] :Démarrage du Docker Application Container Engine.Jul 19 07:05:50 master dockerd[3619] :time="2019-07-19T07:05:50.279284258Z" level=info msg="API listen on /var/run/docker.sock "Les packages Kubernetes ne sont pas disponibles dans le référentiel par défaut d'Ubuntu 18.04. Vous devrez donc ajouter le référentiel Kubernetes sur les deux serveurs.
Vous pouvez l'ajouter avec les commandes suivantes :
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | tee /etc/apt/sources.list.d/kubernetes.listEnsuite, mettez à jour le référentiel et installez les packages Kubernetes avec la commande suivante :
apt-get install kubelet kubeadm kubectl -yUne fois tous les packages installés, vous pouvez procéder à la configuration du serveur maître.
Configurer le serveur maître Kubernetes
Dans un premier temps, vous devrez initialiser votre cluster avec son adresse IP privée sur le serveur Maître :
Vous pouvez le faire avec la commande kubeadm :
kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.0.103Une fois le cluster initialisé avec succès, vous devriez voir la sortie suivante :
Votre plan de contrôle Kubernetes s'est initialisé avec succès ! Pour commencer à utiliser votre cluster, vous devez exécuter ce qui suit en tant qu'utilisateur normal :mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $ HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configVous devez maintenant déployer un réseau de pods sur le cluster.Exécutez "kubectl apply -f [podnetwork].yaml" avec l'une des options répertoriées sur :https://kubernetes.io/docs/concepts/cluster-administration/addons/Ensuite, vous pouvez joindre n'importe quel nombre de nœuds de travail en exécutant ce qui suit sur chacun en tant que root :kubeadm join 192.168.0.103 :6443 --token zsyq2w.c676bxzjul3upd7u \ --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436cEnsuite, vous devrez configurer l'outil kubectl sur votre serveur maître. Vous pouvez le faire avec la commande suivante :
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g ) $HOME/.kube/configEnsuite, vous devrez déployer une interface de mise en réseau de conteneurs (CNI) sur votre serveur. Parce que le cluster n'a pas de CNI.
Vous pouvez déployer le CNI sur votre cluster avec la commande suivante :
kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yamlVous devriez voir le résultat suivant :
configmap/calico-config createddaemonset.extensions/calico-etcd createdservice/calico-etcd createddaemonset.extensions/calico-node createddeployment.extensions/calico-kube-controllers createddeployment.extensions/calico-policy-controller createdclusterrolebinding.rbac.authorization .k8s.io/calico-cni-plugin crééclusterrole.rbac.authorization.k8s.io/calico-cni-plugin crééserviceaccount/calico-cni-plugin crééclusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers crééclusterrole.rbac .authorization.k8s.io/calico-kube-controllers crééserviceaccount/calico-kube-controllers crééVous pouvez maintenant vérifier vos espaces de noms en exécutant la commande suivante :
kubectl obtient les espaces de nomsSi tout se passe bien, vous devriez voir le résultat suivant :
NOM STATUT AGEdefault Actif 4hkube-public Actif 4hkube-system Actif 4hEnsuite, vérifiez si le nœud maître fonctionne correctement avec la commande suivante :
kubectl get nodesVous devriez voir le résultat suivant :
nom statut rôles age versionmaster Ready master 12m v1.15.3Ajouter un esclave au cluster Kubernetes
Ensuite, connectez-vous à votre serveur esclave et exécutez la commande suivante pour ajouter l'esclave au cluster Kubernetes :
kubeadm join 192.168.0.103:6443 --token zsyq2w.c676bxzjul3upd7u --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f936cf3Ensuite, allez sur le serveur maître et vérifiez si l'esclave est ajouté à votre cluster Kubernetes avec la commande suivante :
kubectl get nodesVous devriez voir le résultat suivant :
nom statut rôles age versionmaster ready master 25m v1.15.3slave ready 2m v1.15.3Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Déployer NGINX sur le cluster Kubernetes
Le cluster Kubernetes est maintenant installé, configuré et fonctionne correctement. Il est temps de déployer Nginx sur le cluster Kubernetes.
Accédez au serveur maître et créez un déploiement Nginx avec la commande suivante :
kubectl créer un déploiement nginx --image=nginxVous pouvez maintenant lister le déploiement Nginx avec la commande suivante :
kubectl get déploiementsVous devriez voir le résultat suivant :
NOM PRÊT À JOUR DISPONIBLE AGEnginx 1/1 1 1 99sUne fois le Nginx déployé, l'application peut être exposée avec la commande suivante :
kubectl créer le service nodeport nginx --tcp=80:80Vous pouvez maintenant voir une nouvelle adresse Service et ClusterIP attribuée avec la commande suivante :
kubectl obtenir svcVous devriez voir le résultat suivant :
NOM TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.152.183.1443/TCP 15mnginx ClusterIP 10.152.183.199 80:32456/TCP 60s Toutes nos félicitations! vous avez déployé avec succès Nginx sur le cluster Kubernetes. Vous pouvez également ajouter facilement un autre nœud au cluster Kubernetes. Pour plus d'informations, consultez la documentation officielle de Kubernetes sur Kubernetes Doc. N'hésitez pas à me demander si vous avez des questions.