Guide D'étude CKAD
Guide D'étude CKAD
Kubernetes certifié
Développeur d'application (CKAD)
Guide d'étude
Will Boyd
Février 2022
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Contenu
Déploiement d'application 13
Installation de Helm 18
Utiliser Helm 18
2
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
Services et Réseautage 35
3
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
4
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
Documentation pertinente
• Les images sont des fichiers qui incluent tous les logiciels nécessaires à l'exécution d'un
conteneur.
Un Dockerfile définit le contenu d'une image.
• Le construction dockerLa commande construit une image en utilisant un Dockerfile.
Un Dockerfile est un ensemble d'instructions pour construire une image de conteneur avec
Docker
DE nginx:stable
Construisez une image de conteneur à partir du répertoire actuel. Le -tle drapeau spécifie
le nom de la balise d'image.
5
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Documentation pertinente
• Emplois
• Tâche planifiée
• Un travail est conçu pour exécuter avec succès une tâche conteneurisée pour
achèvement.
Les CronJobs exécutent des tâches périodiquement selon un calendrier.
• Le politiqueDeRedémarragepour un Pod Job ou CronJob doit être Échecou
Jamais.
• Utiliser secondesActiveDeadlinedans la spécification du travail pour terminer le travail si cela
court trop longtemps.
Un emploi exécute une tâche conteneurisée et tente de l'exécuter avec succès pour
achèvement.
versionDeL'api: lot/v1
Emploi
mon-travail
spéc
modèle
spec
conteneurs
imprimer
busybox:stable
command: ["echo", "This is a test!"]
Jamais
backoffLimit: 4
activeDeadlineSeconds: 10
6
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
versionApi: batch/v1
CronJob
mon-cronjob
spécification
*/1 * * * *
jobTemplate
spécifications
modèle
spec
conteneurs
imprimer
busybox:stable
command: ["echo", "This is a test!"]
Jamais
backoffLimit: 4
activeDeadlineSeconds: 10
Documentation pertinente
Dans cet exemple, écrivainest le conteneur principal. Il écrit des données dans un fichier. Le
sidecarLe conteneur lit ces données à partir d'un volume partagé puis les écrit.
au journal du conteneur.
7
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
versionApi: v1
Pod
metadata:
test de sidecar
spec
conteneurs
écrivain
busybox:stable
commande: ['sh', '-c', 'echo "L'écrivain a écrit ceci !" > /
sortie/donné[Link]; pendant que vrai; faire dormir 5; terminé]
montagesDeVolume
partagé
/sortie
sidecar
busybox:stable
commande: ['sh', '-c', 'tant que véritable; faire cat /input/[Link];
sleep 5; done']
montagesDeVolume
partagé
/input
volumes
partagé
emptyDir: {}
Documentation pertinente
• Conteneurs d'init
Les conteneurs Init s'exécutent jusqu'à leur achèvement avant que le conteneur principal ne démarre.
• Ajoutez des conteneurs d'initialisation en utilisant le initContainerschamp du PodSpec.
Les conteneurs d'init exécutent des tâches pendant la phase de démarrage d'un Pod, avant le
le conteneur principal commence à se lancer.
8
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
apiVersion: v1
Pod
test-init
spécification
conteneurs
nginx
image: nginx:stable
initContainers:
busybox
busybox:stable
command: ['sh', '-c', 'sleep 60']
Documentation pertinente
• Volumes
Conseils d'examen
Le volumesLe champ dans la spécification du Pod définit les détails concernant les volumes utilisés.
dans le Pod.
• Le montages de volumesLe champ dans la spécification du conteneur monte un volume à un
conteneur spécifique à un emplacement spécifique.
• cheminHôteles volumes montent des données à partir d'un emplacement spécifique sur l'hôte
(nœud k8s)
• cheminHôtetypes de volume
• Répertoire– Monte un répertoire existant sur l'hôte.
• RépertoireOuCréerMonte un répertoire sur l'hôte et crée
s'il n'existe pas.
• Fichier– Monte un fichier unique existant sur l'hôte.
• FichierOuCréer– Monte un fichier sur l'hôte, et le crée si cela est nécessaire.
n'existe pas.
• dossierVideles volumes offrent un stockage temporaire qui utilise le fichier hôte
système et sont supprimés si le Pod est supprimé.
Les volumes sont utilisés pour fournir un stockage externe aux conteneurs.
Cet exemple de Pod utilise un volume hostPath pour lire des données à partir de l'hôte
machine à /etc/hostPath.
9
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
versionApi: v1
Pod
No text provided for translation.
test-volume-hostpath
spec
En cas d'échec
conteneurs
busybox
busybox:stable
commande: ['sh', '-c', 'cat /data/[Link]']
montagesDeVolume
données-hôte
/données
volumes
données-hôtes
hostPath
/etc/hostPath
Répertoire
Documentation pertinente
• Volumes Persistants
10
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Un PersistentVolume :
versionApi: v1
VolumePersistant
hostpath-pv
spec
capacité
1Gi
accessModes
LireÉcrireUneFois
lent
hostPath
/etc/hostPath
Répertoire
versionApi: v1
PersistentVolumeClaim
hostpath-pvc
spec
accessModes
LectureÉcritureUneFois
ressources
requests
200Mo
lent
11
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
Vous pouvez monter un PersistentVolumeClaim dans un Pod tout comme n'importe quel autre.
volume.
v1
Pod
test-pv-pod
spec
En cas d'échec
conteneurs
busybox
busybox:stable
command: ['sh', '-c', 'cat /data/[Link]']
volumeMounts
pv-hôte-données
/data
volumes
donnees-hôte-pv
persistentVolumeClaim
hostpath-pvc
12
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
Déploiement d'Application
Documentation pertinente
• Déploiement
apiVersion: apps/v1
Déploiement
déploiement-nginx
spec
replicas: 2
selector
matchLabels
nginx
modèle
étiquettes
nginx
spec
conteneurs
nginx
nginx:1.14.2
ports
- containerPort: 80
13
Guide d'études | Développeur d'applications Kubernetes certifié (CKAD)
Documentation pertinente
Une mise à jour progressive déploie progressivement des changements sur le Pod d'un Déploiement.
modèle en remplaçant progressivement les répliques par de nouvelles.
• Utiliser kubectl état de déploiementvérifier le statut d'une mise à jour en continu.
• Rétrogradez la dernière mise à jour progressive avec : kubectl rollback.
Les déploiements peuvent effectuer des mises à jour progressives en remplaçant progressivement les anciens Pods.
avec de nouveaux exécutant de nouveaux codes/configurations.
Vous pouvez initier une mise à jour continue simplement en changeant le modèle de Pod.
configuration (comme la version de l'image). Une façon de le faire est simplement par
modifier le déploiement, par exemple, avec kubectl modifier le déploiement.
Documentation pertinente
• Déploiement
• Service
Vous pouvez utiliser plusieurs Déploiements pour configurer des environnements blue/green.
dans Kubernetes.
14
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
• Utilisez des étiquettes et des sélecteurs sur les services pour diriger le trafic des utilisateurs vers différents
Gousses.
• Une méthode simple pour configurer un environnement canari dans Kubernetes est d'utiliser un
Service qui sélectionne des Pods de 2 déploiements différents. Variez le
nombre de répliques pour diriger moins d'utilisateurs vers l'environnement canari.
Les stratégies de déploiement comme le blue/green et le canary peuvent vous aider à améliorer
stabilité lors du déploiement de nouveau code.
Vous pouvez utiliser des objets Kubernetes comme des Déploiements et des Services pour
mettez en œuvre ces stratégies de déploiement.
apiVersion: apps/v1
Déploiement
déploiement-bleu
spec
replicas: 1
sélecteur
étiquettesDeCorrespondance
test-bleuvert
bleu
modèle
métadonnées :
labels
test-bleubleu
bleu
spécification
conteneurs
nginx
image: linuxacademycontent/ckad-nginx:blue
ports
- containerPort: 80
15
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
apiVersion: apps/v1
Déploiement
déploiement-vert
spec
replicas: 1
selector
matchLabels
test-bleuvert
vert
modèle
étiquettes
test-bleuvert
vert
spec
conteneurs
nginx
linuxacademycontent/ckad-nginx:vert
ports
- containerPort: 80
v1
Service
service-test-bleuvert
spec
selector
test bleu-vert
bleu
ports
TCP
port : 80
targetPort: 80
16
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
versionApi: apps/v1
Déploiement
déploiement-principal
spec
replicas: 3
selector
matchLabels
test-de-canari
principal
modèle
étiquettes
test-de-cannari
principal
spéc
conteneurs
nginx
linuxacademycontent/ckad-nginx:1.0.0
ports
- containerPort: 80
apiVersion : apps/v1
Déploiement
déploiement-canarien
spec
replicas: 1
selector
matchLabels
test-de-canet
canari
modèle
labels
test-canariste
canari
spécifications
conteneurs
nginx
linuxacademycontent/ckad-nginx:canary
ports
- containerPort: 80
17
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
versionApi: v1
Service
service-test-canari
spécifications
selector
test de canari
ports
TCP
port: 80
targetPort: 80
Installation de Helm
Documentation pertinente
• Installation de Helm
Utiliser Helm
Documentation pertinente
• Les Helm Charts sont des packages qui contiennent toutes les définitions de ressources.
nécessaire de faire fonctionner une application dans un cluster.
Un dépôt Helm est une collection de Charts et une source pour naviguer.
et les télécharger.
18
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Installer un graphique.
19
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Documentation pertinente
La dépréciation de l'API est le processus d'annonce des changements à une API à l'avance,
donner aux utilisateurs le temps de mettre à jour leur code et/ou leurs outils.
Kubernetes supprime le support des API obsolètes qui sont en GA.
(Disponibilité générale) uniquement après 12 mois ou 3 versions de Kubernetes,
le plus long des deux.
Documentation pertinente
Les sondes de vivacité vérifient si un conteneur est en bonne santé afin qu'il puisse être
redémarré s'il ne l'est pas.
• Les sondes de disponibilité vérifient si un conteneur est entièrement démarré et
prêt à être utilisé.
• Les probes peuvent exécuter une commande à l'intérieur du conteneur, effectuer une requête HTTP
demander ou tenter une connexion de socket TCP pour déterminer le conteneur
statut.
20
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
Une sonde de vivacité qui exécute une commande pour détecter l'état de santé du conteneur :
v1
Pod
pod-de-vitalité
spec
conteneurs
busybox
busybox:stable
command: ['sh', '-c', 'while true; do sleep 10; done']
livenessProbe
exécuter :
command: ['echo', 'health check!']
initialDelaySeconds: 5
periodSeconds: 5
apiVersion: v1
Pod
metadata:
pod de préparation
spec
conteneurs
nginx
nginx:1.20.1
ports
- containerPort: 80
livenessProbe
httpObtenir
/
port: 80
initialDelaySeconds: 3
periodSeconds: 3
readinessProbe
httpGet
/
80
initialDelaySeconds: 15
periodSeconds: 5
21
Guide d'études | Développeur d'applications Kubernetes certifié (CKAD)
Documentation pertinente
Conseils d'examen
L'API de métriques Kubernetes fournit des données métriques sur les conteneurs.
performance.
• Vous pouvez consulter les métriques des pods en utilisant kubectl top pod.
Lorsque le serveur de métriques est installé, vous pouvez utiliser kubectl topà voir
données d'utilisation des ressources.
Afficher l'utilisation des ressources pour les Pods dans le défautEspace de noms :
Documentation pertinente
• Architecture de journalisation
• Pour les Pods multi-conteneurs, utilisez le -cflag pour spécifier de quel conteneur
logs que vous souhaitez consulter.
22
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Utiliser -cpour spécifier quel conteneur obtenir les journaux. Cela est requis si le
Le pod a plus d'un conteneur.
Documentation pertinente
• Utiliser kubectl obtenir des podsvérifier le statut de tous les Pods dans un
Espace de noms. Utilisez le --tous-les-espaces-de-nomsdrapeau si vous ne savez pas quoi
Namespace à explorer.
• Utiliser kubectl décrireobtenir des informations détaillées sur Kubernetes
objets.
• Utiliser kubectl logspour récupérer les journaux des conteneurs.
• Vérifiez les journaux au niveau du cluster si vous ne pouvez toujours pas localiser des éléments pertinents.
information.
Lister les Pods pour voir l'état des Pods dans un Namespace :
Utiliser --tous-les-espaces-de-nomsvérifier l'état des Pods dans tous les espaces de noms. Ceci est
utile si vous ne savez pas dans quel espace de noms un problème est situé.
23
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
Obtenez les journaux du serveur API Kubernetes pour le cluster kubeadm (doit être exécuté sur un
nœud du plan de contrôle) :
24
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Sécurité
Documentation pertinente
Un exemple de CRD :
apiVersion: [Link]/v1
DéfinitionDeRessourcePersonnalisée
[Link]
spec
[Link]
names
ruche
ruche
Ruche
shortNames
ruche
Nommé
versions
v1
served: true
véridique
schema
openAPIV3Schema
objet
propriétés
spec
objet
propriétés
25
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
supers
entier
abeilles
entier
apiVersion: [Link]/v1
Ruche
test-ruche
spéc
supers: 3
bees: 60000
Vous pouvez interagir avec des ressources personnalisées, tout comme avec Kubernetes normal.
ressources, avec des commandes comme kubectl obteniret kubectl décrire.
Documentation pertinente
versionApi: v1
Compte de service
mon-sa
automountServiceAccountToken: true
26
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
v1
Pod
sa-pod
spéc.
mon-sa
conteneurs
nginx
image: nginx:stable
Documentation Pertinente
• Authentification
• Contrôle d'accès à l'API Kubernetes
• Utiliser l'autorisation RBAC
• Les utilisateurs normaux s'authentifient généralement à l'aide de certificats clients, tandis que
Les comptes de service utilisent généralement des jetons.
• L'autorisation pour les utilisateurs normaux et les comptes de service peut être
géré en utilisant le contrôle d'accès basé sur les rôles (RBAC).
• Les rôles et les ClusterRoles définissent un ensemble spécifique de permissions.
• Les RoleBindings et ClusterRoleBindings lient des Rôles ou des ClusterRoles à
utilisateurs/ComptesDeService.
Le contrôle d'accès basé sur les rôles (RBAC) fournit une autorisation pour le
API Kubernetes, détermination des autorisations accordées aux utilisateurs,
Comptes de service, etc.
27
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
versionApi: [Link]/v1
Rôle
liste-des-pods-rôle
règles
- apiGroups: [""]
resources: ["pods"]
verbs: ["list"]
apiVersion: [Link]/v1
LiensDeRôle
lister-des-pods-rb
sujets
Compte de service
mon-sa
espace de noms: par défaut
roleRef
Rôle
liste-des-pods-rôle
apiGroupe: [Link]
Documentation pertinente
Conseils d'examen
Les contrôleurs d'admission agissent sur les requêtes entrantes à l'API Kubernetes.
Ils peuvent valider/décliner et même modifier les demandes.
sudo vi /etc/kubernetes/manifests/[Link]
28
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
--enable-admission-
NodeRestriction, NamespaceAutoProvision
Documentation pertinente
Limites de ressources - Spécifiez une limite supérieure imposée pour l'utilisation des ressources. Le
le processus de conteneur sera terminé s'il dépasse ces limites.
29
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Un Pod avec des demandes de ressources et des limites pour cpuet mémoire .
versionApi: v1
Pod
ressources-pod
ressources-test
spec
conteneurs
busybox
busybox:stable
commande: ['sh', '-c', 'tandis que vrai; faire echo En cours...;
dormir 5 ; fait
ressources
demandes
64Mo
250m
limites
128Mi
500m
ResourceQuota - Spécifiez les limites d'utilisation des ressources pour un Namespace. Quand
en créant des Pods, le ResourceQuota vérifiera les demandes de ressources du Pod
à côté de tous les Pods existants. Cela refusera la création de Pod si cela devait causer le
Quota de l'espace de noms dépassé.
versionApi: v1
Quota de ressources
métadonnées:
ressources-test-quota
ressources-test
spécification
dur
128Mi
500m
256Mi
1
30
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
Documentation pertinente
• ConfigMaps
• Secrets
Un exemple de ConfigMap :
versionApi: v1
ConfigMap
ma-configmap
data
Bonjour, le monde!
|
Un fichier de configuration !
valeur1
valeur2
31
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Vous pouvez passer les données de ConfigMap à un conteneur soit sous forme d'environnement
variable ou comme un volume monté :
versionApi: v1
Pod
cm-pod
spécifications
Jamais
conteneurs
busybox
busybox:stable
command: ['sh', '-c', 'echo $MESSAGE; cat /config/[Link]']
env :
MESSAGE
valueFrom
configMapKeyRef:
ma-configmap
message
montagesDeVolume
config
/config
readOnly: true
volumes
configuration
configMap
ma-configmap
éléments
[Link]
[Link]
Les secrets sont similaires aux ConfigMaps, mais sont conçus pour stocker des données sensibles.
comme les mots de passe ou les clés API.
Lors de la création d'un manifeste Secret, vous devez d'abord encoder en base64 tout secret.
valeurs.
32
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
versionApi : v1
Secret
mon-secret
Opaque
data
Secret Stuff!
U2VjcmV0IHN0dWZmIGluIGEgZmlsZSEK
Vous pouvez passer des données secrètes à un conteneur en utilisant des variables d'environnement ou
volumes montés, tout comme un ConfigMap.
versionApi: v1
Pod
pod-secret
spec
Jamais
conteneurs
busybox
busybox:stable
commande: ['sh', '-c', 'echo $SENSITIVE_STUFF; cat /config/']
[Link]
env
CHARENT_STUFF
valueFrom
secretKeyRef
mon-secret
donné[Link]
montagesDeVolume
configuration-secrète
/config
readOnly: true
volumes
configuration-secrète
secret
mon-secret
articles
mots_de_passe.txt
mots_de_passe.txt
33
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Documentation pertinente
versionApi : v1
Pod
contexteSécurité-pod
spec
conteneurs
busybox
busybox:stable
commande: ['sh', '-c', 'tant que vrai; faire écho Exécution...;
dormir 5; fait
securityContext
runAsUser: 3000
runAsGroup: 4000
false
readOnlyRootFilesystem: true
34
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Services et Réseautage
Documentation pertinente
• PolitiquesDeRéseau
• Réseautage de cluster
Les NetworkPolicies vous permettent de contrôler quels trafics sont autorisés et lesquels ne le sont pas.
au sein du réseau de cluster.
35
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
Une NetworkPolicy de refus par défaut désactive tout le trafic par défaut, laissant le soin à
d'autres NetworkPolicies pour permettre spécifiquement le trafic souhaité. Notez que le
sélecteur de pod vide {}sélectionne tous les Pods dans l'Espace de noms.
apiVersion: [Link]/v1
PolitiqueRéseau
np-test-a-default-deny-ingress
espace de noms : np-test-a
spec
podSelector: {}
policyTypes
Ingress
versionApi: ré[Link]/v1
PolitiqueRéseau
np-test-client-allow
np-test-a
spec
podSelector
matchLabels
np-test-server
policyTypes
Ingress
ingress
from
namespaceSelector
matchLabels
équipe
podSelector
matchLabels
np-test-client
ports
TCP
port: 80
36
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
Cette politique s'applique à Sortie(sortant) du trafic. Il permet le trafic vers les Pods dans
tout espace de noms avec l'étiquette équipe.
apiVersion : [Link]/v1
PolitiqueRéseau
Il n'y a pas de texte à traduire.
np-test-client-allow-egress
np-test-b
spécification
podSelector
matchLabels
np-test-client
policyTypes
Sortie
sortie
-à:
namespaceSelector
matchLabels
équipe
ports
- protocole : TCP
port: 80
Documentation pertinente
• Service
Les services vous permettent d'exposer une application s'exécutant dans plusieurs Pods.
Les services ClusterIP exposent les Pods à d'autres applications au sein de
grappe.
Les services NodePort exposent les Pods à l'extérieur en utilisant un port qui écoute
sur chaque nœud du cluster.
Les services exposent des applications, dirigeant le trafic vers des Pods en arrière-plan.
37
Guide d'étude | Développeur d'applications Kubernetes certifié (CKAD)
Un ClusterIPLe service est axé sur l'exposition à d'autres Pods dans le cluster. Il
fournit une adresse IP et des noms d'hôtes au sein du réseau de cluster qui
d'autres Pods peuvent utiliser pour accéder au Service.
v1
Service
service-clusterip
spécifications
type: ClusterIP
selector
application: serveur de service
ports
TCP
port: 8080
targetPort: 80
versionApi: v1
Service
service-nodeport
spéc
NodePort
selector
application : serveur de service
ports
TCP
8080
targetPort: 80
nodePort: 30080
Documentation pertinente
• Ingress
38
Guide d'étude | Développeur d'application Kubernetes certifié (CKAD)
Vous avez besoin d'un contrôleur Ingress pour mettre en œuvre la fonctionnalité Ingress.
Le contrôleur que vous utilisez détermine les spécificités de la façon dont l'Ingress
va travailler.
apiVersion: [Link]/v1
Ingress
ingress-test-ingress
spécifications
nginx
règles
[Link]
http:
chemins
/
Préfixe
backend
service
service de test d'entrée
port
80
39