0% ont trouvé ce document utile (0 vote)
350 vues11 pages

Kubernetes: Guide d'Installation et Configuration

Transféré par

elhianisafae
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
350 vues11 pages

Kubernetes: Guide d'Installation et Configuration

Transféré par

elhianisafae
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

M41: Virtualization et Cloud Computing IRIC (S4)

TP
Installation et Configuration de Kubernetes

Au cours de nos TPs nous allons passer rapidement en revue deux manières de mettre en place
Kubernetes :

 Un cluster de développement avec minikube


 Un cluster managed loué chez un provider (Scaleway, DigitalOcean, Azure ou Google
Cloud)

Nous allons d’abord passer par la première option.

1. Découverte de Kubernetes
1.1. Installer le client CLI kubectl

kubectl est le point d’entré universel pour contrôler tous les type de cluster Kubernetes. C’est
un client en ligne de commande qui communique en REST avec l’API d’un cluster.

Noter que :

 kubectl peut gérer plusieurs clusters/configurations et switcher entre ces configurations


 kubectl est nécessaire pour le client graphique Lens que nous utiliserons plus tard.

Pour installer kubectl sur Ubuntu nous ferons simplement :

sudo snap install kubectl --classic

 Pour afficher la version du client kubectl : kubectl version

1.2. Installer Minikube

Minikube est la version de développement de Kubernetes (en local) la plus répandue. Elle est
maintenue par la cloud native foundation et très proche de kubernetes upstream. Elle permet
de simuler un ou plusieurs nœuds de cluster sous forme de conteneurs docker ou de machines
virtuelles.

 Pour installer minikube la méthode recommandée est indiquée


ici: [Link]

Pr H. IDRISSI
1
M41: Virtualization et Cloud Computing IRIC (S4)

Nous utiliserons classiquement docker comme runtime pour minikube (les nœuds k8s seront
des conteneurs simulant des serveurs). Ceci est une configuration de développement. Elle se
comporte cependant de façon très proche d’un véritable cluster.

 Si Docker n’est pas installé, installer Docker avec la commande en une seule ligne :

curl -fsSL [Link] | sh

puis, ajoutez-vous au groupe Docker avec :

sudo usermod -a -G docker <votrenom>

pour que cela prenne effet, faites : sudo reboot .

 Pour lancer le cluster faites simplement : minikube start

(il est également possible de préciser le nombre de cœurs de calcul, la mémoire et


d’autre paramètre pour adapter le cluster à nos besoins.)

Minikube configure automatiquement kubectl (dans le fichier ~/.kube/config) pour


qu’on puisse se connecter au cluster de développement.

 Testez la connexion avec : kubectl get nodes


 Affichez à nouveau la version : kubectl version

Cette fois-ci la version de kubernetes qui tourne sur le cluster actif est également affichée.
Idéalement le client et le cluster devrait être dans la même version mineure par
exemple 1.20.x.

Bash completion

Pour permettre à kubectl de compléter le nom des commandes et ressources avec <Tab> il
est utile d’installer l’auto-complétion pour Bash :

Vous pouvez désormais appuyer sur <Tab> pour compléter vos commandes kubectl, c’est
très utile !

Pr H. IDRISSI
2
M41: Virtualization et Cloud Computing IRIC (S4)

2. Explorer le cluster k8s


Notre cluster k8s est plein d’objets divers, organisés entre eux de façon dynamique pour
décrire des applications, tâches de calcul, services et droits d’accès. La première étape
consiste à explorer un peu le cluster :

 Listez les nœuds pour récupérer le nom de l’unique node : kubectl get nodes
 Puis, affichez ses caractéristiques avec : kubectl describe node/minikube

La commande get est générique et peut être utilisée pour récupérer la liste de tous les types
de ressources.

De même, la commande describe peut s’appliquer à tout objet k8s. On doit cependant
préfixer le nom de l’objet par son type (ex : node/minikube ou nodes minikube) car
k8s ne peut pas deviner ce que l’on cherche quand plusieurs ressources ont le même nom.

 Pour afficher tous les types de ressources à la fois que l’on utilise :

kubectl get all

Il semble qu’il n’y a qu’une ressource dans notre cluster. Il s’agit du service d’API Kubernetes,
pour qu’on puisse communiquer avec le cluster.

En réalité il y en a généralement d’autres cachés dans les autres namespaces. En effet les
éléments internes de Kubernetes tournent eux-mêmes sous forme de services et de daemons
Kubernetes. Les namespaces sont des groupes qui servent à isoler les ressources de façon
logique et en termes de droits (avec le Role-Based Access Control (RBAC) de Kubernetes).

Pour vérifier cela on peut :

 Afficher les namespaces : kubectl get namespaces

Un cluster Kubernetes a généralement un namespace appelé default dans lequel les


commandes sont lancées et les ressources créées si on ne précise rien. Il y a également aussi
un namespace kube-system dans lequel résident les processus et ressources système de
k8s. Pour préciser le namespace on peut rajouter l’argument -n à la plupart des commandes
k8s.

 Pour lister les ressources liées au namespace :

kubectl get all -n kube-system

Pr H. IDRISSI
3
M41: Virtualization et Cloud Computing IRIC (S4)

 Ou encore : kubectl get all --all-namespaces

(peut être abrégé en kubectl get all -A) qui permet d’afficher le contenu de tous les
namespaces en même temps.

 Pour avoir des informations sur un namespace :

kubectl describe namespace/kube-system

3. Déployer une Application


Nous allons maintenant déployer une première application conteneurisée. Le déploiement est
plus complexe qu’avec Docker (et Swarm), en particulier car il est séparé en plusieurs objets
et plus configurable.

 Pour créer un déploiement en ligne de commande (par opposition au mode déclaratif


que nous verrons plus loin), on peut lancer par exemple :

kubectl create deployment microbot --image=monachus/rancher-demo

Cette commande crée un objet de type deployment. Nous pouvons étudier ce déploiement
avec la commande :

kubectl describe deployment/microbot

 Agrandissons ce déploiement avec :

kubectl scale deployment microbot --replicas=5

 kubectl describe deployment/microbot permet de constater que le


service est bien passé à 5 réplicas.

A ce stade le déploiement n’est pas encore accessible de l’extérieur du cluster pour cela nous
devons l’exposer en tant que service :

kubectl expose deployment microbot --type=NodePort --port=8080


--name=microbot-service

 Affichons la liste des services pour voir le résultat : kubectl get services

Un service permet d’exposer un déploiement soit par port soit grâce à un loadbalancer.

Pr H. IDRISSI
4
M41: Virtualization et Cloud Computing IRIC (S4)

Pour exposer cette application sur le port de notre choix, nous devrions avoir recours à un
LoadBalancer.

Nous ne verrons pas ça ici (il faudrait utiliser l’addon MetalLB de Minikube).

Mais nous pouvons quand même lancer une commande dans notre environnement de dev:

kubectl port-forward svc/microbot-service 8080:8080 --address [Link]

Vous pouvez désormais accéder à votre app via : [Link]

Minikube intègre aussi une façon d’accéder à notre service : c’est la commande

minikube service microbot-service

Sauriez-vous expliquer ce que l’app fait ?

Simplifier les lignes de commande k8s

 Pour gagner du temps dans les commandes Kubernetes, on définit généralement un


alias : alias kc='kubectl'

À mettre dans votre .bash_profile en faisant :

echo "alias kc='kubectl'" >> ~/.bash_profile

puis, source ~/.bash_profile

 Vous pouvez ensuite remplacer kubectl par kc dans les commandes.


 Également pour gagner du temps en ligne de commande, la plupart des mots-clés de
type Kubernetes peuvent être abrégés :
o services devient svc
o deployments devient deploy
o etc.

La liste complète : [Link]


c8eff9fb7202

 Essayez d’afficher les serviceaccounts (users) et les namespaces avec une commande
courte.

4. Installer Lens
Lens est une interface graphique sympathique pour Kubernetes.
Pr H. IDRISSI
5
M41: Virtualization et Cloud Computing IRIC (S4)

Elle se connecte en utilisant la configuration ~/.kube/config par défaut et nous


permettra d’accéder à un dashboard bien plus agréable à utiliser.

Vous pouvez l’installer en lançant ces commandes :

5. Mettre en place un cluster K8s dans le cloud avec un


provider type DigitalOcean ou Scaleway
 Créez un compte (ou récupérez un accès) sur DigitalOcean ou Scaleway
 Créez un cluster Kubernetes avec l’interface DigitalOcean ou bien l’interface Scaleway

La création prend environ 5 minutes.

 Sur DigitalOcean, il vous est proposé dans l’étape 3 ou sur la page de votre cluster
Kubernetes de télécharger le fichier kubeconfig. (download the cluster
configuration file, ou bien Download Config File).

 De même, sur Scaleway, sur la page décrivant votre cluster, un gros bouton en bas de
la page vous incite à télécharger ce même fichier kubeconfig (Download
Kubeconfig).

Ce fichier contient la configuration kubectl adaptée pour la connexion à notre cluster.

6. Merger la configuration kubectl


 Ouvrez avec gedit les fichiers kubeconfig et ~/.kube/config.

 Fusionnez dans ~/.kube/config les éléments des listes YAML de:


 clusters
 contexts
 users

 Mettez la clé current-context : à <nom_cluster> (compléter avec votre


valeur).

 Testons la connexion avec : kubectl get nodes

Pr H. IDRISSI
6
M41: Virtualization et Cloud Computing IRIC (S4)

7. Déployer l’Application

 Lancez kubectl cluster-info , l’API du cluster est accessible depuis un nom


de domaine généré par le provider.
 Déployez l’application microbot comme dans la partie précédente
avec minikube
 Pour visitez l’application vous devez trouver l’IP publique d’un des nœuds du cluster
en listant les objets de type Service, ou sur la page du fournisseur de cloud.

8. Cloud Azure
Nous allons déployer une application dans Azure à l’aide de charts Helm
: [Link]

8.1. Helm
Dans Kubernetes la configuration des services / applications se fait généralement via de
multiples fichiers YAML.

Le langage YAML (Yet Another Markup Language) est un langage de sérialisation de données
lisible par l’homme servant à écrire des fichiers de configuration. Il est populaire, car il est
conçu pour être facile à comprendre par rapport à d’autres langages de programmation.
Pour toutes ces raisons, il est utilisé par des logiciels comme Kubernetes ou Ansible.

===> Les fichiers de kustomization

Il est courant de décrire un ensemble de ressources dans le même fichier, séparées par ---.
Mais on pourrait préférer rassembler plusieurs fichiers dans un même dossier et les appliquer
d’un coup. Pour cela K8s propose le concept de kustomization.

Exemple :

On peut ensuite l’appliquer avec kubectl apply -k ./

Pour visualiser l’ensemble des modifications avant de les appliquer :

Pr H. IDRISSI
7
M41: Virtualization et Cloud Computing IRIC (S4)

kubectl kustomize

(kubectl kustomize . | less pour mieux lire).

Quand on a une seule application cela reste gérable avec des kustomizations ou sans, mais
dès qu’on a plusieurs environnements, applications et services, on se retrouve vite submergées
de fichiers de centaines, voire de milliers, de lignes qui sont, de plus, assez semblables. Pour
pallier ce problème, il existe l’utilitaire Helm, qui produit les fichiers de déploiement que l’on
souhaite.

o Helm est le package manager recommandé par Kubernetes, il utilise les


fonctionnalités de templating du langage Go.

o Helm permet donc de déployer des applications / stacks complètes en utilisant un


système de templating et de dépendances, ce qui permet d’éviter la duplication et d’avoir
ainsi une arborescence cohérente pour nos fichiers de configuration.

o Helm propose également :

 la possibilité de mettre les Charts dans un répertoire distant (Git, disque local
ou partagé…), et donc de distribuer ces Charts publiquement.
 un système facilitant les Updates et Rollbacks de vos applications.

o Il existe des sortes de stores d’applications Kubernetes packagées avec Helm, le plus
gros d’entre eux est Kubeapps Hub,

8.2. Créer un Cluster AKS


Configurer l’environnement Azure

Tout d’abord, il faut créer un compte Azure. Si c’est la première fois, du crédit gratuit est
disponible : [Link] Ensuite on peut utiliser le Cloud Shell
Azure ou n’importe quel terminal.

Au préalable, installer kubectl, si ce n’est pas déjà fait (pas besoin dans le Cloud Shell) :

Pr H. IDRISSI
8
M41: Virtualization et Cloud Computing IRIC (S4)

Créer le Cluster k8s

Créer le registry pour les images Docker

Pour créer le registry, il faut choisir un nom unique, remplacez pommedeterrepoirekiwi par
un autre nom.

8.3. Pousser une image sur son registry Azure

Pour installer Docker :

curl -sSL [Link] | sudo sh

Pr H. IDRISSI
9
M41: Virtualization et Cloud Computing IRIC (S4)

8.4. Appliquer une Chart Helm


Pour installer Helm :

Curl
[Link]
-helm-3 | bash

Des messages s’affichent suite à l’application de la chart Helm, suivez les instructions pour
accéder au Wordpress.

Liens Utiles

Scaling d’application dans Azure

[Link]

Stockage dans Azure

[Link]

Registry dans Azure

[Link]

Terraform avec Azure

Terraform est un outil permettant de décrire des ressources cloud dans un fichier pour utiliser le
concept d’infrastructure-as-code avec tous les objets des fournisseurs de Cloud.

Pr H. IDRISSI
10
M41: Virtualization et Cloud Computing IRIC (S4)

[Link]
r

Le réseau dans Azure

Vidéo “K8s Networking in Azure”


[Link]
&index=2

Pr H. IDRISSI
11

Vous aimerez peut-être aussi