GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment déployer l'équilibrage de charge Nginx sur le cluster Kubernetes sur Ubuntu 18.04 LTS

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 0

Enregistrez et fermez le fichier. Ensuite, exécutez la commande suivante pour appliquer les modifications de configuration :

mount -a

Ensuite, 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/hosts

Ajoutez les lignes suivantes :

192.168.0.103 maître192.168.0.100 esclave

Enregistrez 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 -y

Une fois l'installation terminée, vérifiez l'état de Docker CE avec la commande suivante :

menu fixe d'état systemctl

Vous 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.list

Ensuite, mettez à jour le référentiel et installez les packages Kubernetes avec la commande suivante :

apt-get install kubelet kubeadm kubectl -y

Une 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.103

Une 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:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436c 

Ensuite, 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/config

Ensuite, 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.yaml

Vous 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 noms

Si tout se passe bien, vous devriez voir le résultat suivant :

NOM STATUT AGEdefault Actif 4hkube-public Actif 4hkube-system Actif 4h

Ensuite, vérifiez si le nœud maître fonctionne correctement avec la commande suivante :

kubectl get nodes

Vous devriez voir le résultat suivant :

nom statut rôles age versionmaster Ready master 12m v1.15.3

Ajouter 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:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f936cf3

Ensuite, allez sur le serveur maître et vérifiez si l'esclave est ajouté à votre cluster Kubernetes avec la commande suivante :

kubectl get nodes

Vous devriez voir le résultat suivant :

nom statut rôles age versionmaster ready master 25m v1.15.3slave ready 2m v1.15.3

Une 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=nginx

Vous pouvez maintenant lister le déploiement Nginx avec la commande suivante :

kubectl get déploiements

Vous devriez voir le résultat suivant :

NOM PRÊT À JOUR DISPONIBLE AGEnginx 1/1 1 1 99s

Une fois le Nginx déployé, l'application peut être exposée avec la commande suivante :

kubectl créer le service nodeport nginx --tcp=80:80

Vous pouvez maintenant voir une nouvelle adresse Service et ClusterIP attribuée avec la commande suivante :

kubectl obtenir svc

Vous devriez voir le résultat suivant :

NOM TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.152.183.1  443/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.


Ubuntu
  1. Comment déployer le proxy inverse NGINX sur Docker

  2. Comment déployer un cluster Redis sur Kubernetes

  3. Comment installer Kubernetes sur Ubuntu 18.04

  4. Comment déployer Modsecurity avec Nginx sur Ubuntu 20.04 LTS

  5. Déployer Modsecurity avec Nginx sur Ubuntu 20.04 LTS

Comment installer Docker sur Ubuntu 18.04 LTS

Comment installer Nginx sur Ubuntu 18.04 LTS

Comment installer Kubernetes sur Ubuntu 18.04 LTS

Comment installer Docker sur Ubuntu 20.04 LTS

Comment installer Kubernetes sur Ubuntu 20.04 LTS

Comment installer Kitematic sur Ubuntu 20.04 LTS