Marques
Catégories de formation
Technique Microsoft
Utilisateur final Microsoft
Dans ce module du cours de préparation en ligne CKA Broad Skills, nous couvrirons les sujets d'architecture, d'installation et de configuration du cluster identifiés par le programme d'examen CNCF CKA. Si vous n'êtes pas déjà familiarisé avec le programme, prenez un moment pour vous familiariser, car vous devrez connaître chacun des sujets afin de réussir le test.
Un déploiement est un contrôleur qui garantit que les pods d'une application s'exécutent selon un état souhaité. Les déploiements créent et contrôlent des ReplicaSets, qui créent et suppriment des pods en fonction de l'état souhaité du déploiement. Les Kubelets signalent l'état actuel au serveur d'API Kubernetes. Le serveur API compare l'état actuel à l'état souhaité (stocké dans etcd). Si les états actuel et souhaité diffèrent, le serveur d'API Kubernetes demande au(x) kubelet d'apporter des modifications au déploiement pour correspondre à l'état souhaité. La spécification de déploiement déclare l'état souhaité des configurations de pod sous le modèle de pod. L'exemple suivant est un déploiement de 3 pods nginx à l'aide de l'image nginx version 1.16 :
$apiVersion : apps/v1
genre : Déploiement
métadonnées :
Étiquettes:
exécuter : nginx
nom : nginx
spécification :
répliques : 3
sélecteur:
matchÉtiquettes :
exécuter : nginx
modèle:
métadonnées :
Étiquettes:
exécuter : nginx
spécification :
conteneurs :
- nom : nginx
image: nginx:1.16
Les rôles et ClusterRoles sont attribués aux utilisateurs et aux processus à l'aide de RoleBindings et ClusterRoleBindings. Les RoleBindings associent un utilisateur, comme un compte de service, à un rôle. Toutes les autorisations accordées par un rôle sont transmises à l'utilisateur via le RoleBinding. Les liaisons de rôle peuvent également être créées impérativement à l'aide de kubectl create rolebinding . Les liaisons de rôles lient les rôles aux utilisateurs à l'aide de l'indicateur --user et serviceAccounts à l'aide de l'indicateur --serviceaccount. L'exemple suivant lie le rôle default-appmanager au compte de service par défaut de l'espace de noms par défaut :
apiVersion : apps/v1
genre : Déploiement
métadonnées :
Étiquettes:
exécuter : nginx
nom : nginx
spécification :
répliques : 3
sélecteur:
matchÉtiquettes :
exécuter : nginx
modèle:
métadonnées :
Étiquettes:
exécuter : nginx
spécification :
conteneurs :
- nom : nginx
image: nginx:1.16
Les mises à jour du modèle de pod du déploiement déclenchent une mise à jour progressive. Lorsqu'un modèle de pod de déploiement est mis à jour, un nouveau ReplicaSet est créé qui crée ensuite de nouveaux pods en fonction de la spécification de pod mise à jour. Lorsque les nouveaux pods sont créés, le ReplicaSet de la version précédente est mis à l'échelle à zéro pour supprimer les anciens pods. Cette stratégie est connue sous le nom de mise à jour continue. L'exemple suivant crée un déploiement de pods nginx avec 3 réplicas. L'option --record annote et enregistre la commande kubectl pour référence future. L'état et l'historique du déploiement du déploiement sont vérifiés avec kubectl rollout .
$ kubectl crée le déploiement nginx --image=nginx:1.16 --replicas=3 --record
deploy.apps/nginx créé
$ kubectl état de déploiement déployer nginx
déploiement "nginx" déployé avec succès
$ kubectl historique de déploiement déployer nginx
déploiement.apps/nginx
RÉVISION CHANGEMENT-CAUSE
1 kubectl crée le déploiement nginx --image=nginx:1.16 --replicas=3 --record=true
$
Étant donné que l'option --record a été utilisée pour créer le déploiement, l'annotation est répertoriée dans la colonne CHANGE-CAUSE. Si --record n'a pas été utilisé pour annoter, aucun n'apparaîtra sous CHANGE-CAUSE pour la révision 1. Ensuite, mettez à jour le déploiement pour utiliser l'image nginx version 1.17. Cette mise à jour déclenchera une mise à jour progressive. Un nouveau ReplicaSet sera créé et les pods sous les anciens ReplicaSets seront terminés (mis à l'échelle à 0). Après avoir mis à jour le déploiement, vérifiez immédiatement l'état du déploiement pour capturer la mise à jour progressive.
$ kubectl set image deploy nginx nginx=nginx:1.17 --record
mise à jour de l'image deploy.apps/nginx
$ kubectl état de déploiement déployer nginx
En attente de la fin du déploiement "nginx" : 2 nouvelles répliques sur 3 ont été mises à jour...
En attente de la fin du déploiement "nginx" : 2 nouvelles répliques sur 3 ont été mises à jour...
En attente de la fin du déploiement "nginx" : 2 nouvelles répliques sur 3 ont été mises à jour...
En attente de la fin du déploiement "nginx" : 1 anciennes répliques sont en attente de résiliation...
En attente de la fin du déploiement "nginx" : 1 anciennes répliques sont en attente de résiliation...
déploiement "nginx" déployé avec succès
$
Kubernetes permet aux utilisateurs d'annuler les mises à jour de déploiement. Les déploiements peuvent être restaurés vers une version précédente avec kubectl rollout undo deploy ou vous pouvez spécifier une révision spécifique. En utilisant l'exemple précédent, regardons les révisions disponibles.
$ kubectl historique de déploiement déployer nginx
déploiement.apps/nginx
RÉVISION CHANGEMENT-CAUSE
1 kubectl crée le déploiement nginx --image=nginx:1.16 --replicas=3 --record=true
2 kubectl set image deploy nginx nginx=nginx:1.17 --record=true
$
La mise à jour du déploiement est maintenant en révision 2. Encore une fois, si --record n'était pas utilisé pour annoter, aucun ne serait répertorié dans la colonne CHANGE-CAUSE. Ensuite, nous annulons le déploiement vers une révision spécifique, observons l'état et vérifions l'historique de déploiement.
$ kubectl rollout undo deploy nginx --to-revision=1
deploy.apps/nginx annulé
$ kubectl état de déploiement déployer nginx
En attente de la fin du déploiement "nginx" : 2 nouvelles répliques sur 3 ont été mises à jour...
En attente de la fin du déploiement "nginx" : 2 nouvelles répliques sur 3 ont été mises à jour...
En attente de la fin du déploiement "nginx" : 2 nouvelles répliques sur 3 ont été mises à jour...
En attente de la fin du déploiement "nginx" : 1 anciennes répliques sont en attente de résiliation...
En attente de la fin du déploiement "nginx" : 1 anciennes répliques sont en attente de résiliation...
déploiement "nginx" déployé avec succès
$ kubectl historique de déploiement déployer nginx
déploiement.apps/nginx
RÉVISION CHANGEMENT-CAUSE
2 kubectl set image deploy nginx nginx=nginx:1.17 --record=true
3 kubectl crée le déploiement nginx --image=nginx:1.16 --replicas=3 --record=true
$
Le déploiement utilise à nouveau l'image nginx 1.16.
Il existe plusieurs façons de configurer les applications exécutées sous Kubernetes. L'une des méthodes consiste à modifier la commande et les arguments exécutés dans le conteneur à l'aide des tableaux command et args dans un fichier yaml :
apiVersion : v1
genre: Pod
métadonnées :
Étiquettes:
exécuter : occupébox
nom: busybox
spécification :
conteneurs :
- commande :
- /bin/sh
arguments :
- -c
- tail -f /dev/null
image : boîte occupée
nom: busybox
Les configurations d'application et les informations d'identification peuvent être stockées dans le cluster en tant que ressources ConfigMap ou secrètes. Les conteneurs s'exécutant dans des pods peuvent utiliser ConfigMaps et Secrets en tant que volumes ou variables d'environnement. Les ConfigMaps peuvent être créés à partir de paires clé-valeur littérales ou à partir de fichiers. Ci-dessous, nous créons un ConfigMap à partir d'un fichier de configuration redis sur le disque.
$ chat redis.conf
lier 127.0.0.1
mode protégé oui
port 6379
tcp-arriéré 511
délai d'attente 0
tcp-garder en vie 300
$ kubectl create configmap --from-file redis.conf redisconf
configmap/redisconf créé
$ kubectl décrit configmap redisconf
Nom : redisconf
Espace de noms : par défaut
Étiquettes:
Annotations :
Données
====
redis.conf:
----
lier 127.0.0.1
mode protégé oui
port 6379
tcp-arriéré 511
délai d'attente 0
tcp-garder en vie 300
Événements:
$
Le fichier redis.conf est désormais disponible pour n'importe quel pod à utiliser et à monter. ConfigMaps est un bon moyen de rendre les fichiers de configuration courants disponibles pour les applications s'exécutant n'importe où dans un cluster Kubernetes. L'exemple ci-dessous montre un pod qui exécute redis à l'aide du fichier redis.conf stocké en tant que ConfigMap :
piVersion : v1
genre: Pod
métadonnées :
Étiquettes:
exécuter : redis-dev
nom : redis-dev
spécification :
conteneurs :
- commande :
- redis-serveur
- /config/redis.conf
image: redis
nom : redis-dev
volumeMontages :
- nom : redis
chemin de montage : /config
tomes :
- nom : redis
configMap :
nom : redisconf
restartPolicy : OnFailure
Les applications déployées à l'aide d'un contrôleur comme un Deployment ou un StatefulSet peuvent être augmentées ou réduites en modifiant le nombre de réplicas. La modification de la valeur de la clé de réplicas dans la spécification du contrôleur déclenchera une mise à jour du jeu de réplicas actuel de l'application qui augmente (ou réduit) le nombre de pods qui exécutent l'application. Cela se fait impérativement à l'aide de l'échelle kubectl :
$ kubectl scale deploy redis-prod --replicas=3
deploy.apps/redis-prod mis à l'échelle
$
Ou de manière déclarative en modifiant le YAML de la spécification du contrôleur et en l'appliquant au cluster :
$ nano redis-prod.yaml
apiVersion : apps/v1
genre : Déploiement
métadonnées :
Étiquettes:
application : retour-prod
nom: redis-prod
spécification :
répliques : 5
sélecteur:
matchÉtiquettes :
application : retour-prod
modèle:
métadonnées :
Étiquettes:
application : retour-prod
spécification :
conteneurs :
- image: redis:4.0
nom : redis
$ kubectl applique -f redis-prod.yaml
deploy.apps/redis-prod configuré
$
Une application d'auto-guérison dans le contexte de Kubernetes :
Les utilisateurs peuvent créer une application d'auto-réparation simple à l'aide d'un contrôleur pour maintenir un état souhaité (au moins un pod en cours d'exécution) et un service pour maintenir une identité réseau cohérente face à la suppression/récréation de pod.
$ kubectl create deploy apache-prod --image httpd
deploy.apps/apache-prod créé
$ kubectl expose deploy apache-prod --port 80
service/apache-prod exposé
$
Cela crée un déploiement, qui garantit qu'au moins une seule copie de l'application s'exécute à tout moment et un service qui maintient l'identité du réseau cohérente.
Une sonde d'activité configurée dans la spécification de déploiement fournit au kubelet de gestion du pod un moyen de vérifier si l'application est active.
apiVersion : apps/v1
genre : Déploiement
métadonnées :
Étiquettes:
application : apache-prod
nom: apache-prod
spécification :
avancementDélaiSecondes : 600
répliques : 1
sélecteur:
matchÉtiquettes :
application : apache-prod
modèle:
métadonnées :
creationTimestamp : null
Étiquettes:
application : apache-prod
spécification :
conteneurs :
- image : httpd
imagePullPolicy : Toujours
vivacitéSonde :
Seuil d'échec : 1
httpObtenir :
chemin: /
ports : 80
schéma : HTTP
périodeSecondes : 10
Seuil de réussite : 1
timeoutSecondes : 1
nom : httpd
Ressources: {}
TerminationMessagePath : /dev/termination-log
résiliationMessagePolicy : Fichier
dnsPolicy : ClusterFirst
restartPolicy : Toujours
Si le livenessProbe de cette sonde renvoie un échec, le kubelet indique au runtime du conteneur de redémarrer le conteneur et de ramener l'application d'un état défectueux.
Créez un déploiement avec cinq réplicas nommés cicd qui crée des pods qui exécutent l'image jenkins/jenkins:lts.