Exercice : explorer les fonctionnalités d’un cluster Kubernetes
Plusieurs options sont disponibles quand vous exécutez Kubernetes localement. Vous pouvez installer Kubernetes sur des machines physiques ou des machines virtuelles, ou utiliser une solution cloud comme Azure Kubernetes Service (AKS).
Votre objectif dans cet exercice est d’explorer une installation Kubernetes avec un cluster mononœud. Dans cet exercice, vous apprenez à configurer et à installer un environnement MicroK8s facile à configurer et à supprimer. Ensuite, vous déployez un service Kubernetes et effectuez un scale-out vers plusieurs instances pour héberger un site web.
Remarque
Cet exercice est facultatif et comprend des étapes qui montrent comment supprimer et désinstaller le logiciel et les ressources que vous allez utiliser dans l’exercice.
Gardez à l’esprit qu’il existe d’autres options, comme la prise en charge de MiniKube et de Kubernetes dans Docker, pour faire la même chose.
Qu’est-ce que MicroK8s ?
MicroK8s est une option pour déployer un cluster Kubernetes à un seul nœud en tant que package unique pour cibler des stations de travail et des appareils IoT (Internet of Things). Canonical, le créateur d'Ubuntu Linux, a développé à l'origine MicroK8s et en assure actuellement la maintenance.
Vous pouvez installer MicroK8s sur Linux, Windows et macOS. Les instructions d’installation sont cependant légèrement différentes pour chaque système d’exploitation. Choisissez l’option qui correspond le mieux à votre environnement.
Installer MicroK8s sur Linux
L’installation de MicroK8s sur Linux est l’option d’installation qui comporte le moins d’étapes à suivre. Passez à une fenêtre de terminal et exécutez les commandes des instructions suivantes :
Installez l’application Snap MicroK8s. La durée de cette étape varie en fonction de la rapidité de votre connexion Internet et de votre poste de travail.
sudo snap install microk8s --classic
Si l’installation est réussie, le message suivant s’affiche.
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Vous êtes maintenant prêts à installer des extensions (ou add-ons) sur le cluster.
Installer MicroK8s sur Windows
Pour exécuter MicroK8s sur Windows, utilisez Multipass. Multipass est un gestionnaire de machines virtuelles léger pour Linux, Windows et macOS.
Téléchargez et installez la dernière version de Multipass pour Windows à partir de GitHub.
Dans une console de commandes, exécutez la commande de lancement de Multipass pour configurer et exécuter l’image microk8s-vm. La durée de cette étape varie en fonction de la rapidité de votre connexion Internet et de votre poste de travail.
multipass launch --name microk8s-vm --memory 4G --disk 40G
Une fois que vous avez reçu la confirmation du lancement pour microk8s-vm, exécutez la commande
multipass shell microk8s-vm
pour accéder à l’instance de machine virtuelle.multipass shell microk8s-vm
Une fois que le multipass fonctionne, vous pouvez accéder à la machine virtuelle Ubuntu pour héberger votre cluster et installer MicroK8s.
Installez l’application Snap MicroK8s. La durée de cette étape varie en fonction de la rapidité de votre connexion Internet et de votre poste de travail.
sudo snap install microk8s --classic
Si l’installation est réussie, le message suivant s’affiche :
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Vous êtes maintenant prêts à installer des extensions (ou add-ons) sur le cluster.
Installer MicroK8s sur macOS
Pour exécuter MicroK8s sur macOS, utilisez Multipass. Multipass est un gestionnaire de machines virtuelles léger pour Linux, Windows et macOS.
Vous avez le choix entre deux options pour installer Multipass sur macOS. Téléchargez et installez la dernière version de Multipass pour macOS à partir de GitHub ou, pour installer Multipass avec la commande
brew cask install multipass
, utilisez Homebrew.brew install --cask multipass
Dans une console de commandes, exécutez la commande de lancement de Multipass pour configurer et exécuter l’image microk8s-vm. La durée de cette étape varie en fonction de la rapidité de votre connexion Internet et de votre poste de travail.
multipass launch --name microk8s-vm --memory 4G --disk 40G
Une fois que vous avez reçu la confirmation du lancement pour microk8s-vm, exécutez la commande
multipass shell microk8s-vm
pour accéder à l’instance de machine virtuelle.multipass shell microk8s-vm
À ce stade, vous pouvez accéder à la machine virtuelle Ubuntu pour héberger votre cluster. Vous devez encore installer MicroK8s. Procédez comme suit.
Installez l’application Snap MicroK8s. La durée de cette étape varie en fonction de la rapidité de votre connexion Internet et de votre poste de travail.
sudo snap install microk8s --classic
Si l’installation est réussie, le message suivant s’affiche :
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Vous êtes maintenant prêts à installer des extensions (ou add-ons) sur le cluster.
Préparer le cluster
Pour voir l’état des extensions installées sur votre cluster, exécutez la commande status de MicroK8s. Ces extensions fournissent plusieurs services, dont certains ont été traités précédemment. La fonctionnalité DNS en est un exemple.
Pour vérifier l’état de l’installation, exécutez la commande
microk8s.status --wait-ready
.sudo microk8s.status --wait-ready
Notez qu'il existe plusieurs modules complémentaires désactivés sur votre cluster. Ne vous souciez pas des extensions que vous ne reconnaissez pas.
microk8s is running addons: cilium: disabled dashboard: disabled dns: disabled fluentd: disabled gpu: disabled helm3: disabled helm: disabled ingress: disabled istio: disabled jaeger: disabled juju: disabled knative: disabled kubeflow: disabled linkerd: disabled metallb: disabled metrics-server: disabled prometheus: disabled rbac: disabled registry: disabled storage: disabled
Dans la liste, vous devez activer les modules complémentaires DNS, Tableau de bord et Registre. Les objectifs de chaque module complémentaire sont décrits ci-dessous :
Modules complémentaires Objectif DNS Déploie le service coreDNS
.Tableau de bord Déploie le service kubernetes-dashboard
et plusieurs autres services qui prennent en charge cette fonctionnalité. Il s’agit d’une interface utilisateur web à usage général pour les clusters Kubernetes.Registre Déploie un registre privé et plusieurs services qui prennent en charge cette fonctionnalité. Pour stocker des conteneurs privés, utilisez ce registre. Pour installer les extensions, exécutez la commande suivante.
sudo microk8s.enable dns dashboard registry
vous pouvez désormais accéder à votre cluster avec kubectl
.
Explorer le cluster Kubernetes
MicroK8s fournit une version de kubectl
que vous pouvez utiliser pour interagir avec votre nouveau cluster Kubernetes. Cette copie de kubectl
vous permet d’avoir une installation parallèle d’une autre instance de kubectl
à l’échelle du système sans impacter ses fonctionnalités.
Exécutez la commande
snap alias
afin de déclarerkubectl
comme alias demicrok8s.kubectl
. Cette étape simplifie l’utilisation.sudo snap alias microk8s.kubectl kubectl
La sortie suivante s’affiche quand la commande se termine correctement :
Added: - microk8s.kubectl as kubectl
Afficher des informations sur le nœud de cluster
Rappelez-vous qu’un cluster Kubernetes existe en dehors des plans de contrôle et des nœuds Worker. Nous allons explorer le nouveau cluster pour voir ce qui est installé.
Vérifier les nœuds en cours d’exécution dans votre cluster.
Vous savez que MicroK8s est une installation de cluster à un seul nœud : vous vous attendez donc à ne voir qu’un seul nœud. Gardez cependant à l’esprit que ce nœud est à la fois le plan de contrôle et un nœud Worker dans le cluster. Vérifiez cette configuration en exécutant la commande
kubectl get nodes
. Pour récupérer des informations sur toutes les ressources de votre cluster, exécutez la commandekubectl get
:sudo kubectl get nodes
Le résultat est similaire à l’exemple ci-dessous, qui vous indique qu’il n’existe qu’un seul nœud dans le cluster, dont le nom est microk8s-vm. Notez que le nœud est dans l’état Prêt. L’état Prêt indique que le plan de contrôle peut planifier des charges de travail sur ce nœud.
NAME STATUS ROLES AGE VERSION microk8s-vm Ready <none> 35m v1.17.3
Vous pouvez obtenir plus d’informations sur la ressource spécifique demandée. Par exemple, supposons que vous ayez besoin de trouver l’adresse IP du nœud. Pour extraire des informations supplémentaires du serveur d’API, exécutez le paramètre
-o wide
:sudo kubectl get nodes -o wide
Le résultat est similaire à l’exemple suivant. Notez que vous pouvez maintenables voir l’adresse IP interne du nœud, le système d’exploitation en cours d’exécution sur le nœud, la version du noyau et le runtime de conteneur.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME microk8s-vm Ready <none> 36m v1.17.3 192.168.56.132 <none> Ubuntu 18.04.4 LTS 4.15.0-88-generic containerd://1.2.5
L’étape suivante consiste à explorer les services s’exécutant sur votre cluster. Comme avec les nœuds, pour rechercher des informations sur les services exécutés sur le cluster, exécutez la commande
kubectl get
.sudo kubectl get services -o wide
Le résultat est similaire à l’exemple suivant, mais un seul service est répertorié. Vous avez installé précédemment des modules complémentaires sur le cluster et vous vous attendez à voir ces services également.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none>
Si un seul service est répertorié, c’est parce que Kubernetes utilise un concept appelé espaces de noms pour diviser logiquement un cluster en plusieurs clusters virtuels.
Pour extraire tous les services dans tous les espaces de noms, transmettez le paramètre
--all-namespaces
:sudo kubectl get services -o wide --all-namespaces
Le résultat est similaire à l’exemple suivant. Notez que vous avez trois espaces de noms dans votre cluster. Il s’agit de l’espace de noms par défaut, et des espaces de noms
container-registry
etkube-system
. Vous pouvez voir ici les instancesregistry
,kube-dns
etkubernetes-dashboard
que vous avez installées. Des services de prise en charge ont également été installés en même temps que certains modules complémentaires.NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR container-registry registry NodePort 10.152.183.36 <none> 5000:32000/TCP 28m app=registry default kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none> kube-system dashboard-metrics-scraper ClusterIP 10.152.183.130 <none> 8000/TCP 28m k8s-app=dashboard-metrics-scraper kube-system heapster ClusterIP 10.152.183.115 <none> 80/TCP 28m k8s-app=heapster kube-system kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 28m k8s-app=kube-dns kube-system kubernetes-dashboard ClusterIP 10.152.183.132 <none> 443/TCP 28m k8s-app=kubernetes-dashboard kube-system monitoring-grafana ClusterIP 10.152.183.88 <none> 80/TCP 28m k8s-app=influxGrafana kube-system monitoring-influxdb ClusterIP 10.152.183.232 <none> 8083/TCP,8086/TCP 28m k8s-app=influxGrafana
Maintenant que vous pouvez voir les services en cours d’exécution sur le cluster, vous pouvez planifier une charge de travail sur le nœud Worker.
Installer un serveur web sur un cluster
Vous voulez planifier un serveur web sur le cluster pour délivrer les services d’un site web à vos clients. Vous pouvez choisir parmi plusieurs options. Pour cet exemple, vous utilisez NGINX.
Rappelez-vous de ce qui précède que vous pouvez utiliser des fichiers manifestes de pods pour décrire vos pods, vos jeux de réplicas et vos déploiements pour définir des charges de travail. Ces fichiers n'ayant pas été traités en détail, vous exécutez kubectl
pour transmettre directement les informations au serveur API.
Bien que l’utilisation de kubectl
soit pratique, l’utilisation de fichiers manifestes est une bonne pratique. Les fichiers manifestes vous permettent de restaurer par progression ou d’annuler facilement des déploiements dans votre cluster. Ces fichiers vous aident également à documenter la configuration d’un cluster.
Pour créer votre déploiement NGINX, exécutez la commande
kubectl create deployment
. Spécifiez le nom du déploiement et l’image conteneur pour créer une seule instance du pod.sudo kubectl create deployment nginx --image=nginx
Le résultat est similaire à l’exemple suivant :
deployment.apps/nginx created
Pour extraire les informations relatives à votre déploiement, exécutez
kubectl get deployments
:sudo kubectl get deployments
Le résultat est similaire à l’exemple suivant. Notez que le nom du déploiement correspond au nom que vous lui avez donné, et qu’un déploiement portant ce nom est dans un état Prêt et disponible.
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 18s
Le déploiement a créé un pod. Pour extraire les informations relatives aux pods de votre cluster, exécutez la commande
kubectl get pods
:sudo kubectl get pods
Le résultat est similaire à l’exemple suivant. Le nom du pod est une valeur générée préfixée du nom du déploiement et l’état du pod est En cours d’exécution.
NAME READY STATUS RESTARTS AGE nginx-86c57db685-dj6lz 1/1 Running 0 33s
Tester l’installation du site web
Testez l’installation de NGINX en vous connectant au serveur web via l’adresse IP du pod.
Pour trouver l’adresse du pod, transmettez le paramètre
-o wide
:sudo kubectl get pods -o wide
Le résultat est similaire à l’exemple suivant. Notez que la commande retourne à la fois l’adresse IP du nœud et le nom du nœud sur lequel la charge de travail est planifiée.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 4m17s 10.1.83.10 microk8s-vm <none> <none>
Pour accéder au site web, exécutez
wget
sur l'IP indiquée précédemment :wget <POD_IP>
Le résultat est similaire à l’exemple suivant :
--2020-03-16 13:34:17-- http://10.1.83.10/ Connecting to 10.1.83.10:80... connected. HTTP request sent, awaiting response... 200 OK Length: 612 [text/html] Saving to: 'index.html' index.html 100%[==============================================================================================>] 612 --.-KB/s in 0s 2020-03-16 13:34:17 (150 MB/s) - 'index.html' saved [612/612]
Mettre à l’échelle le déploiement d’un serveur web sur un cluster
Supposons que le nombre d’utilisateurs accédant à votre site web augmente subitement et qu’il commence à montrer des signes de faiblesse en raison de la charge. Vous pouvez déployer plus d’instances du site dans votre cluster et répartir la charge entre les instances.
Pour mettre à l’échelle le nombre de réplicas dans votre déploiement, exécutez la commande kubectl scale
. Vous spécifiez le nombre de réplicas dont vous avez besoin et le nom du déploiement.
Pour faire passer le nombre total de pods NGINX à 3, exécutez la commande
kubectl scale
:sudo kubectl scale --replicas=3 deployments/nginx
Le résultat est similaire à l’exemple suivant :
deployment.apps/nginx scaled
La commande scale vous permet d’augmenter ou de baisser le nombre d’instances.
Pour vérifier le nombre de pods en cours d’exécution, exécutez la commande
kubectl get
et transmettez à nouveau le paramètre-o wide
:sudo kubectl get pods -o wide
Le résultat est similaire à l’exemple suivant. Notez que vous voyez maintenant trois pods en cours d’exécution, chacun avec une adresse IP unique.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 7m57s 10.1.83.10 microk8s-vm <none> <none> nginx-86c57db685-lzrwp 1/1 Running 0 9s 10.1.83.12 microk8s-vm <none> <none> nginx-86c57db685-m7vdd 1/1 Running 0 9s 10.1.83.11 microk8s-vm <none> <none> ubuntu@microk8s-vm:~$
Vous devez appliquer plusieurs configurations supplémentaires au cluster pour exposer efficacement votre site web en tant que site web public. Par exemple, vous allez installer un équilibreur de charge et mapper les adresses IP des nœuds. Ce type de configuration fait appel à concepts avancés que vous verrez plus tard. dans le résumé, il existe des instructions si vous choisissez de désinstaller et de nettoyer votre machine virtuelle.