From 1dac15bbb4791ddc2b6232cedfac55a4d166e8c8 Mon Sep 17 00:00:00 2001 From: herveleclerc Date: Wed, 18 Sep 2024 10:46:18 +0200 Subject: [PATCH] console >> bash --- Dockerfile | 2 +- README.md | 4 +- .../kubernetes/k8s-core-api-objects.fr.md | 34 ++++++---- .../kubernetes/k8s-helm-intro.fr.md | 4 +- .../k8s-imperative-declarative-commands.fr.md | 16 ++--- .../kubernetes/k8s-installation.fr.md | 16 +++-- .../kubernetes/k8s-logging-monitoring.fr.md | 8 +-- .../kubernetes/k8s-maintenance.fr.md | 2 +- .../kubernetes/k8s-networking.fr.md | 14 ++-- .../k8s-observability-monitoring.fr.md | 8 +-- .../kubernetes/k8s-operations.fr.md | 38 +++++------ .../kubernetes/k8s-troubleshouting.fr.md | 40 +++++------ cours/containers/kubernetes/k8s-usage.fr.md | 68 +++++++++---------- .../k8s-workloads-configuration.fr.md | 10 +-- cours/terraform/terraform-introduction.fr.md | 2 +- 15 files changed, 140 insertions(+), 126 deletions(-) diff --git a/Dockerfile b/Dockerfile index f9c962d..2ab06f0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ RUN <$(basename $i)" >> /usr/share/nginx/html/index.html + echo "
- $(basename $i)
" >> /usr/share/nginx/html/index.html done echo '' >> /usr/share/nginx/html/index.html diff --git a/README.md b/README.md index 87636b9..5ecbc24 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ demandée. #### Exemples -```console +```bash ./build.sh -c docker -l fr -o html ./build.sh -o pdf ./build.sh -c openstack-user -u ~/reveal.js @@ -142,7 +142,7 @@ Le build se fait entièrement en local. Quelques exemples : -```console +```bash make openstack.pdf make docker-handout.pdf make docker-print.pdf diff --git a/cours/containers/kubernetes/k8s-core-api-objects.fr.md b/cours/containers/kubernetes/k8s-core-api-objects.fr.md index 9ead2ec..78eaa26 100644 --- a/cours/containers/kubernetes/k8s-core-api-objects.fr.md +++ b/cours/containers/kubernetes/k8s-core-api-objects.fr.md @@ -74,7 +74,7 @@ spec: - Il est possible de les voir en utilisant `--show-labels`: -```console +```bash $ kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx 1/1 Running 0 31s app=nginx,env=prod @@ -147,6 +147,12 @@ spec: port: ``` +### Kubernetes : `Pod` + +![](images/kubernetes/how-you-deploy-a-container-on-kubernetes.jpg){height="650px"} + + + ### Kubernetes : `Pod` - Un Pod n'est pas un processus, c'est un environnement pour les containers @@ -169,7 +175,7 @@ En savoir plus : ### Kubernetes : `Pod` -![pods](images/pods.png) +![](images/pods.png) ### Kubernetes : Pod @@ -200,13 +206,13 @@ Dans les statuts du pod on trouve la notion de phase d'exécution - `Unknown`: L'état du pod ne peut pas être déterminé -```console +```bash $ kubectl get pods -o wide ``` en sortie : -```console +```bash NAME READY STATUS RESTARTS AGE IP NODE xx-79c5968bdc-6lcfq 1/1 Running 0 84m 10.244.0.6 kind-cp yy-ss7nk 1/1 Running 0 84m 10.244.0.5 kind-cp @@ -223,13 +229,13 @@ dans les statuts du pod on trouve la notion de Conditions d'état des pods - `Initialized`: Les "Init containers sont démarrés" - `Ready`: Le pod est capable de répondre aux demandes ; par conséquent, il doit être inclus dans le service et les répartiteurs de charge. -```console -$ kubectl describe pods +```bash +kubectl describe pods ``` en sortie -```console +```bash ... Conditions: Type Status @@ -252,7 +258,7 @@ Les containers peuvent avoir seulement 3 états - `Terminated`: L'exécution du conteneur s'est déroulée et s'est terminée par un succès ou un échec. -```console +```bash $ kubectl get pods -o jsonpath='{.status}' | jq ``` @@ -322,7 +328,7 @@ spec: ou en ligne de commande -```console +```bash kubectl create deployment my-deployment --image=nginx:latest --replicas=3 ``` @@ -401,7 +407,7 @@ spec: - containerPort: 80 ``` -```console +```bash kubectl get po NAME READY STATUS RESTARTS AGE web-0 0/1 ContainerCreating 0 3s @@ -533,7 +539,7 @@ spec: En ligne de commande : -```console +```bash kubectl create job exemple-job --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster" ``` @@ -575,20 +581,20 @@ spec: En ligne de commande : -```console +```bash kubectl create cronjob exemple-cronjob --image=busybox --schedule="*/5 * * * *" -- /bin/sh -c "date; echo Hello from the Kubernetes cluster" ``` Susprendre un cronjob : -```console +```bash kubectl patch cronjob -p '{"spec" : {"suspend" : true }}' ``` Reprendre l'exécution : -```console +```bash kubectl patch cronjob -p '{"spec" : {"suspend" : false }}' ``` diff --git a/cours/containers/kubernetes/k8s-helm-intro.fr.md b/cours/containers/kubernetes/k8s-helm-intro.fr.md index 0022204..5958050 100644 --- a/cours/containers/kubernetes/k8s-helm-intro.fr.md +++ b/cours/containers/kubernetes/k8s-helm-intro.fr.md @@ -48,7 +48,7 @@ A voir : - Structure par défaut d'un chart -```console +```bash mychart/ ├── Chart.yaml ├── charts @@ -72,7 +72,7 @@ mychart/ ### Kubernetes : Helm installation premiers pas - Installer Helm (sur une distribution Linux): -```console +```bash curl \ https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get-helm-3 | bash ``` diff --git a/cours/containers/kubernetes/k8s-imperative-declarative-commands.fr.md b/cours/containers/kubernetes/k8s-imperative-declarative-commands.fr.md index 48e56e1..bfc8c57 100644 --- a/cours/containers/kubernetes/k8s-imperative-declarative-commands.fr.md +++ b/cours/containers/kubernetes/k8s-imperative-declarative-commands.fr.md @@ -46,19 +46,19 @@ L'approche impérative consiste à donner des instructions directes à Kubernete - Creation d'un pod NGINX: -```console +```bash kubectl run nginx --image=nginx ``` - Générez le fichier YAML du manifeste d'un pod (-o yaml), sans le créer (--dry-run): -```console +```bash kubectl run nginx --image=nginx --dry-run=client -o yaml ``` - Générer un déploiement avec 4 réplicas: -```console +```bash kubectl create deployment nginx --image=nginx --replicas=4 ``` @@ -66,13 +66,13 @@ kubectl create deployment nginx --image=nginx --replicas=4 - Mise à l'échelle d'un déploiement à l'aide de la commande `kubectl scale`: -```console +```bash kubectl scale deployment nginx --replicas=4 ``` - Il est possible aussi d'enregistrer la définition YAML dans un fichier et de le modifier: -```console +```bash kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > nginx-deployment.yaml ``` @@ -83,20 +83,20 @@ kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > nginx-d - Créer un service nommé redis-service de type ClusterIP pour exposer le pod redis sur le port 6379: -```console +```bash kubectl expose pod redis --port=6379 --name redis-service --dry-run=client -o yaml ``` - Créer un service nommé nginx de type NodePort pour exposer le port 80 du pod nginx sur le port 30080 des nœuds: -```console +```bash kubectl expose pod nginx --type=NodePort --port=80 --name=nginx-service --dry-run=client -o yaml ``` - Cela utilisera automatiquement les labels du pod comme sélecteurs, sans possibilité de spécifier le port du nœud. Avec le fichier généré, ajoutez le port de nœud manuellement avant de créer le service avec le pod. - Ou: -```console +```bash kubectl create service nodeport nginx --tcp=80:80 --node-port=30080 --dry-run=client -o yaml ``` diff --git a/cours/containers/kubernetes/k8s-installation.fr.md b/cours/containers/kubernetes/k8s-installation.fr.md index 5133bd7..82c5aa9 100644 --- a/cours/containers/kubernetes/k8s-installation.fr.md +++ b/cours/containers/kubernetes/k8s-installation.fr.md @@ -70,7 +70,7 @@ ou plus simplement : `curl -sfL https://get.k3s.io | sh -` - Licence obligatoire si autre utilisation que personnelle () -![docker desktop](images/docker-desktop.svg){height="350px"} +![Docker desktop](images/docker-desktop.svg){height="350px"} @@ -82,7 +82,7 @@ ou plus simplement : `curl -sfL https://get.k3s.io | sh -` - Build et Run de container (nerdctl ou Docker CLI) - Choix des version de kubernetes -![docker desktop](images/kubernetes/rancher-desktop.png){height="350px"} +![Rancher desktop](images/kubernetes/rancher-desktop.png){height="350px"} @@ -118,17 +118,21 @@ ou plus simplement : `curl -sfL https://get.k3s.io | sh -` ### kubeadm demo - + ### kubeadm fonctionnalités -- En plus de l'installation de Kubernetes, kubeadm peut : +- En plus de l'installation de Kubernetes, `kubeadm` peut : - Génération des fichiers de configuration: Crée les fichiers de configuration nécessaires pour les composants du cluster. + - Gestion des certificats: Génère et distribue les certificats nécessaires pour sécuriser les communications entre les composants du cluster. + - Gestion des tokens: Crée des tokens d'authentification pour les nœuds qui rejoignent le cluster. + - Vérification de la configuration: Valide que le système et les configurations sont compatibles avec Kubernetes. + - Mises à jour et modifications: Facilite les mises à jour des versions de Kubernetes et les modifications de la configuration du cluster. @@ -138,9 +142,11 @@ ou plus simplement : `curl -sfL https://get.k3s.io | sh -` - Amazon Elastic Kubernetes Service (EKS): - Documentation : https://aws.amazon.com/fr/eks/ - Offre une solution entièrement gérée pour déployer, gérer et mettre à l'échelle des clusters Kubernetes sur AWS. + - Google Kubernetes Engine (GKE): - Documentation : https://cloud.google.com/kubernetes-engine - Propose une plateforme hautement disponible et entièrement gérée pour exécuter des applications conteneurisées sur Google Cloud Platform. + - Azure Kubernetes Service (AKS): - Documentation : https://azure.microsoft.com/fr-fr/services/kubernetes-service/ - Permet de déployer et gérer des clusters Kubernetes sur Azure avec une intégration profonde avec les autres services Azure. @@ -169,7 +175,9 @@ ou plus simplement : `curl -sfL https://get.k3s.io | sh -` ### Installateurs de Kubernetes - Via Ansible : `kubespray` + - Via Terraform : + - Il existe d'autres projets open source basés sur le langage Go : - kube-aws : - kops : diff --git a/cours/containers/kubernetes/k8s-logging-monitoring.fr.md b/cours/containers/kubernetes/k8s-logging-monitoring.fr.md index 82d92f3..1410041 100644 --- a/cours/containers/kubernetes/k8s-logging-monitoring.fr.md +++ b/cours/containers/kubernetes/k8s-logging-monitoring.fr.md @@ -19,14 +19,14 @@ - Les performances des pods et des noeuds peuvent être affichées avec la commande `kubectl top pods` et `kubectl top nodes` -```console +```bash $ kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% gke-cka-pool1-8e771340-lzju 86m 4% 736Mi 13% gke-cka-pool1-f884d89f-pnbx 155m 8% 811Mi 14% ``` -```console +```bash $ kubectl -n lab top pods NAME CPU(cores) MEMORY(bytes) lab-middleware-c46cd576f-5vltl 1m 40Mi @@ -42,7 +42,7 @@ lab-middleware-c46cd576f-7zckz 1m 43Mi ### Logging -```console +```bash $ kubectl -n lab get pods NAME READY STATUS RESTARTS AGE lab-middleware-c46cd576f-5vltl 1/1 Running 0 17d @@ -50,7 +50,7 @@ lab-middleware-c46cd576f-7zckz 1/1 Running 0 17d ``` -```console +```bash $ kubectl -n lab logs lab-middleware-c46cd576f-5vltl info: serving app on http://0.0.0.0:3333 [bugsnag] Loaded! diff --git a/cours/containers/kubernetes/k8s-maintenance.fr.md b/cours/containers/kubernetes/k8s-maintenance.fr.md index ff1e17d..4007ca6 100644 --- a/cours/containers/kubernetes/k8s-maintenance.fr.md +++ b/cours/containers/kubernetes/k8s-maintenance.fr.md @@ -26,7 +26,7 @@ - Voici les étapes à suivre pour une mise à niveau d'un cluster avec Kubeadm: - La commande `kubeadm upgrade plan` fournit les informations sur la version actuelle de kubeadm installée, la version du cluster et la dernière version stable de Kubernetes disponible -```console +```bash kubectl drain worker-0 apt-get upgrade -y kubeadm=1.21.0-00 apt-get upgrade -y kubelet=1.21.0-00 diff --git a/cours/containers/kubernetes/k8s-networking.fr.md b/cours/containers/kubernetes/k8s-networking.fr.md index b8abdcd..d1fdf3c 100644 --- a/cours/containers/kubernetes/k8s-networking.fr.md +++ b/cours/containers/kubernetes/k8s-networking.fr.md @@ -71,7 +71,7 @@ spec: app: web ``` -```console +```bash # déploiement kubectl create deployment web --image=nginx @@ -113,7 +113,7 @@ spec: ``` -```console +```bash # déploiement kubectl create deployment web --image=nginx @@ -155,7 +155,7 @@ spec: app: my-nginx ``` -```console +```bash # déploiement kubectl create deployment web --image=nginx @@ -192,7 +192,7 @@ spec: type: LoadBalancer ``` -```console +```bash # déploiement kubectl create deployment web --image=myapp @@ -242,7 +242,7 @@ spec: En ligne de commande : -```console +```bash kubectl create service externalname my-service --external-name my.database.example.com ``` @@ -275,7 +275,7 @@ spec: En ligne de commande : -```console +```bash kubectl expose deploy nginx --port=80 --external-ip=1.2.3.4 ``` @@ -306,7 +306,7 @@ kubectl expose deploy nginx --port=80 --external-ip=1.2.3.4 - exemple : -```console +```bash kubectl get svc web ClusterIP 10.96.163.5 80/TCP 3m56s diff --git a/cours/containers/kubernetes/k8s-observability-monitoring.fr.md b/cours/containers/kubernetes/k8s-observability-monitoring.fr.md index ad7e148..e8ce80d 100644 --- a/cours/containers/kubernetes/k8s-observability-monitoring.fr.md +++ b/cours/containers/kubernetes/k8s-observability-monitoring.fr.md @@ -207,7 +207,7 @@ spec: L'API Kubernetes inclut également des points de terminaison de contrôle d'état : healthz (obsolète), readyz, livez. -```console +```bash kubectl get --raw='/readyz?verbose' ``` ### Sondes : Exemple Kubernetes API @@ -215,7 +215,7 @@ kubectl get --raw='/readyz?verbose' Point de terminaison **readyz** -```console +```bash [+]ping ok [+]log ok [+]etcd ok @@ -249,13 +249,13 @@ readyz check passed Point de terminaison **livez** -```console` +```bash` kubectl get --raw='/livez?verbose' ``` ### Sondes : Exemple Kubernetes API -```console +```bash +]ping ok [+]log ok [+]etcd ok diff --git a/cours/containers/kubernetes/k8s-operations.fr.md b/cours/containers/kubernetes/k8s-operations.fr.md index 1994a01..12a0543 100644 --- a/cours/containers/kubernetes/k8s-operations.fr.md +++ b/cours/containers/kubernetes/k8s-operations.fr.md @@ -8,7 +8,7 @@ - Et est copié aussi dans le `replicaSet` (annotation) - Cela permet de suivre quelle commande a créé ou modifié ce `replicatset` -```console +```bash $ kubectl create -f nginx.yaml --record deployment.apps/nginx created @@ -21,7 +21,7 @@ kubectl rollout history - Utiliser le flag `--record` -```console +```bash # déployer l'image worker:v0.2 kubectl create deployment worker --image=dockercoins/worker:v0.2 @@ -39,13 +39,13 @@ kubectl rollout history deployment worker - Il est possible d'augmenter le nombre de pods avec la commande `kubectl scale` : -```console +```bash kubectl scale --replicas=5 deployment nginx ``` - Il est possible de changer l'image d'un container utilisée par un _Deployment_ : -```console +```bash kubectl set image deployment nginx nginx=nginx:1.15 ``` @@ -54,20 +54,20 @@ kubectl set image deployment nginx nginx=nginx:1.15 - Dry run. Afficher les objets de l'API correspondant sans les créer : -```console +```bash kubectl run nginx --image=nginx --dry-run ``` - Démarrer un container en utiliser une commande différente et des arguments différents : -```console +```bash kubectl run nginx --image=nginx \ --command -- ... ``` - Démarrer un Cron Job qui calcule π et l'affiche toutes les 5 minutes : -```console +```bash kubectl run pi --schedule="0/5 * * * ?" --image=perl --restart=OnFailure \ -- perl -Mbignum=bpi -wle 'print bpi(2000)' ``` @@ -76,19 +76,19 @@ kubectl run pi --schedule="0/5 * * * ?" --image=perl --restart=OnFailure \ - Se connecter à un container: -```console +```bash kubectl run -it busybox --image=busybox -- sh ``` - S'attacher à un container existant : -```console +```bash kubectl attach my-pod -i ``` - Accéder à un service via un port : -```console +```bash kubectl port-forward my-svc 6000 ``` @@ -96,7 +96,7 @@ kubectl port-forward my-svc 6000 - Utiliser `kubectl` pour diagnostiquer les applications et le cluster kubernetes : -```console +```bash kubectl cluster-info kubectl get events kubectl describe node @@ -111,7 +111,7 @@ kubectl logs (-f) par exemple si l'on donne un nom de déploiement ou de replica set, les logs correspondront au premier pod - Par défaut les logs affichées sont celles du premier container dans le pod. -```console +```bash # exemple : kubectl logs deploy/nginx ``` @@ -126,7 +126,7 @@ kubectl logs deploy/nginx - `--since` pour n'afficher que les logs à partir d'une certaine date - `--timestamps`affichera le timestamp du message -```console +```bash # exemple : kubectl logs deploy/pingpong --tail 100 --follow --since=5s # Affichera toutes les logs depuis 5 secondes et commencera au 100eme messages et continuera l'affichage des nouveaux messages @@ -138,7 +138,7 @@ kubectl logs deploy/pingpong --tail 100 --follow --since=5s - Pour afficher les logs de plusieurs pod il faudra utiliser un `selecteur` (label) -```console +```bash kubectl logs -l app=my-app --tail 100 # -f ``` @@ -152,7 +152,7 @@ kubectl logs -l app=my-app --tail 100 # -f - Obtenir la liste des noeuds ainsi que les informations détaillées : -```console +```bash kubectl get nodes kubectl describe nodes ``` @@ -161,7 +161,7 @@ kubectl describe nodes - Marquer le noeud comme _unschedulable_ (+ drainer les pods) et _schedulable_ : -```console +```bash kubectl cordon kubectl drain kubectl uncordon @@ -171,7 +171,7 @@ kubectl uncordon - Dans le cas ou votre kubeconfig comporte plusieurs clusters -```console +```bash # lister les contextes kubectl config get-contexts @@ -192,7 +192,7 @@ alias kubectx='kubectl config use-context ' Évite de toujours préciser le flag `-n` -```console +```bash kubectl get ns @@ -213,7 +213,7 @@ alias kubens='kubectl config set-context --current --namespace ' installation de krew () -```console +```bash kubectl krew install example diff --git a/cours/containers/kubernetes/k8s-troubleshouting.fr.md b/cours/containers/kubernetes/k8s-troubleshouting.fr.md index 8b627df..6ddc983 100644 --- a/cours/containers/kubernetes/k8s-troubleshouting.fr.md +++ b/cours/containers/kubernetes/k8s-troubleshouting.fr.md @@ -4,7 +4,7 @@ - Vérifier l'état des pods -```console +```bash $ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deploy-8fd84bbd6-b8d48 1/1 Running 0 45d @@ -23,7 +23,7 @@ Faites une description sur le pod et regardez la section "Events". Vous remarquerez peut-être un warning "Back-off restarting failed" -```console +```bash $ kubectl describe pods mysql-database Events: Type Reason Age From Message @@ -40,7 +40,7 @@ Vous pouvez connaître la raison de l'échec en vérifiant les logs des conteneurs de votre pod -```console +```bash $ kubectl logs mysql-database --container=mysql 2020-03-06 10:07:26+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started. 2020-03-06 10:07:26+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' @@ -55,7 +55,7 @@ Faites une description sur le pod et regardez la section "Events". Vous pouvez remarquer l'erreur "ErrImagePull". Cela signifie que vous avez mis une mauvaise image de docker ou que vous avez une mauvaise autorisation d'accès au registre -```console +```bash $ kubectl describe pods mysql-database1 Events: Type Reason Age From Message @@ -75,7 +75,7 @@ Faites une description sur le pod et regardez la section "Events". Notez que le scheduler n'a pas de nœud dans lequel placer votre pod en raison d'une ressource insuffisante. Vous pouvez augmenter votre CPU ou votre mémoire (selon le message d'avertissement), cela peut se produire en ajoutant de nouveaux nœuds ou en diminuant le nombre de réplicas du déploiement -```console +```bash $ kubectl describe pods web-deploy-654fb8bb79-24nvd Events: Type Reason Age From Message @@ -100,7 +100,7 @@ - Commandes utiles -```console +```bash $ kubectl get pods $ kubectl describe pods pod-name $ kubectl logs pod-name --container=pods-containers-name @@ -110,7 +110,7 @@ ### Troubleshooting des Services -```console +```bash $ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.16.0.1 443/TCP 46d @@ -119,7 +119,7 @@ Il existe plusieurs problèmes courants qui peuvent empêcher les services de fonctionner correctement. Tout d'abord, vérifiez qu'il existe des endpoints pour le service. Pour chaque objet Service, l'API server met à disposition une ressource endpoint. -```console +```bash $ kubectl get endpoints web-service NAME ENDPOINTS AGE web-service 10.12.0.27:80,10.12.0.28:80,10.12.0.4:80 11m @@ -127,7 +127,7 @@ Assurez-vous que les endpoints correspondent au nombre de conteneurs que vous pensez être membres de votre service. Dans ce scénario, le service Web sert un déploiement Web avec 3 réplicas de pods. -```console +```bash $ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE web-deployment 3/3 3 3 4h43m @@ -138,7 +138,7 @@ au cas où les endpoints du service sont manquants, vérifiez le sélecteur du service -```console +```bash ... spec: - selector: @@ -147,7 +147,7 @@ Ce sélecteur doit correspondre aux labels des pods sinon le service ne pourra pas exposer les pods -```console +```bash $ kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS web-deployment-654fb8bb79-6n9q2 1/1 Running 0 4h53m run=web-deployment @@ -164,7 +164,7 @@ - Vérifier l'état des composants du Controlplane -```console +```bash $ kubectl get componentstatus NAME STATUS MESSAGE ERROR controller-manager Healthy ok @@ -173,7 +173,7 @@ - Vérifier l'état des nœuds -```console +```bash $ kubectl get nodes NAME STATUS ROLES AGE VERSION worker-1 Ready worker 8d v1.21.0 @@ -185,7 +185,7 @@ - Vérifier les pods du Controlplane -```console +```bash $ kubectl get pods -n kube-systems NAME READY STATUS RESTARTS AGE coredns-78fcdf6894-5dntv 1/1 Running 0 1h @@ -204,7 +204,7 @@ - Vérifier les services du Controlplane -```console +```bash $ service kube-apiserver status ● kube-apiserver.service - Kubernetes API Server Loaded: loaded (/etc/systemd/system/kube-apiserver.service; enabled; vendor preset: enabled) @@ -221,7 +221,7 @@ - Vérifier les logs de service -```console +```bash $ kubectl logs kube-apiserver-master -n kube-system I0401 13:45:38.190735 1 server.go:703] external host was not specified, using 172.17.0.117 @@ -244,14 +244,14 @@ - Vérifier l'état du nœud -```console +```bash $ kubectl get nodes NAME STATUS ROLES AGE VERSION worker-1 Ready 8d v1.21.0 worker-2 NotReady 8d v1.21.0 ```` -```console +```bash $ kubectl describe node worker-1 ... Conditions: @@ -266,7 +266,7 @@ ### Troubleshooting des noeuds -```console +```bash $ kubectl describe node worker-2 Conditions: Type Status LastHeartbeatTime Reason Message @@ -283,7 +283,7 @@ - Vérifier les certificats : -```console +```bash $ openssl x509 -in /var/lib/kubelet/worker-1.crt -text Certificate: Data: diff --git a/cours/containers/kubernetes/k8s-usage.fr.md b/cours/containers/kubernetes/k8s-usage.fr.md index 945360a..e4971af 100644 --- a/cours/containers/kubernetes/k8s-usage.fr.md +++ b/cours/containers/kubernetes/k8s-usage.fr.md @@ -114,7 +114,7 @@ kubectl config get-contexts - Afficher la liste des ressources API supportées par le serveur: -```console +```bash $ kubectl api-resources NAME SHORTNAMES APIGROUP NAMESPACED KIND configmaps cm true ConfigMap @@ -149,19 +149,19 @@ ingresses ing extensions - Le "man pages" de kubernetes - Explorer les types et définitions -```console +```bash kubectl explain type ``` - Expliquer la définition d'un champs de ressource, ex: -```console +```bash kubectl explain node.spec ``` - Boucler sur les définitions -```console +```bash kubectl explain node --recursive ``` @@ -181,13 +181,13 @@ kubectl explain node --recursive - Afficher les noeuds du cluster : -```console +```bash kubectl get nodes ``` - Ces commandes sont équivalentes: -```console +```bash kubectl get no kubectl get nodes ``` @@ -196,14 +196,14 @@ kubectl get nodes - plus d'infos -```console +```bash kubectl get nodes -o wide ``` - Sortie yaml / json -```console +```bash kubectl get nodes -o yaml kubectl get nodes -o json ``` @@ -213,7 +213,7 @@ kubectl get nodes -o json - Plus d'infos : https://kubernetes.io/docs/reference/kubectl/jsonpath/ -```console +```bash kubectl get pods -o=jsonpath='{@}' kubectl get pods -o=jsonpath='{.items[0]}' @@ -228,7 +228,7 @@ kubectl get pods \ - Utiliser `jq` -```console +```bash kubectl get nodes -o json | jq ".items[] | {name:.metadata.name} + .status.capacity" ``` @@ -239,7 +239,7 @@ kubectl get nodes -o json | ex: -```console +```bash # KO : kubectl get pods -o jsonpath='{.items[?(@.metadata.name=~/^test$/)].metadata.name}' @@ -253,7 +253,7 @@ kubectl get pods -o json | jq -r '.items[] | select(.metadata.name | test("test- - Afficher les _namespaces_ -```console +```bash kubectl get ns kubectl get namespaces ``` @@ -261,7 +261,7 @@ kubectl get namespaces - Par défaut, kubectl utilise le _namespace_ `default` - Il est possible de sélectionner un _namespace_ avec l'option `-n` ou `--namespace` -```console +```bash kubectl -n kube-system get pods ``` @@ -269,7 +269,7 @@ kubectl -n kube-system get pods - Afficher les pods (pour le namespace _default_) -```console +```bash kubectl get pods kubectl get pod ``` @@ -278,7 +278,7 @@ kubectl get pod - Afficher les services (pour le _namespace_ `default`): -```console +```bash kubectl get services kubectl get svc ``` @@ -288,7 +288,7 @@ kubectl get svc - Afficher les ressources d'un `namespace` particulier - Utilisable avec la plupart des commandes `kubectl` -```console +```bash kubectl get pods --namespace=kube-system kubectl get pods -n kube-system kubectl create -n NNN ... @@ -302,7 +302,7 @@ kubectl delete -n NNN ... - Depuis kubernetes 1.14 on peut utiliser le flag `-A` en raccourci - Il est possible de l'utiliser avec beaucoup de commande kubectl pour manipuler toutes les ressources -```console +```bash kubectl get pods --all-namespaces # ou kubectl get pods -A @@ -316,7 +316,7 @@ kubectl label -A ... Évite de toujours préciser le flag `-n` -```console +```bash kubectl get ns @@ -338,14 +338,14 @@ alias kubens='kubectl config set-context --current --namespace ' `kube-public` est créé par `kubeadm` -```console +```bash kubectl get all -n kube-public ``` - Le configMap contient les informations données par la commande `kubectl cluster-info` -```console +```bash kubectl -n kube-public get configmaps # voir le contenu du configmap (cm) kubectl -n kube-public get configmap cluster-info -o yaml @@ -367,7 +367,7 @@ curl -k https://{NodeIP}/api/v1/namespaces/kube-public/configmaps/cluster-info - Extraire le kubeconfig du configmap `cluster-info` -```console +```bash curl -sk https:///api/v1/namespaces/kube-public/configmaps/cluster-info \ | jq -r .data.kubeconfig ``` @@ -391,7 +391,7 @@ Un Lease est un objet qui expire après un certain temps s'il n'est pas renouvel - ex: -```console +```bash kubectl describe node/worker-0 kubectl describe node worker-0 ``` @@ -419,12 +419,12 @@ Un Lease est un objet qui expire après un certain temps s'il n'est pas renouvel - Cette commande avant la 1.18 créait un `deployment` - Depuis elle démarre un simple `pod` -```console +```bash # Création d'un pod en tâche de fond kubectl run pingu --image=alpine -- ping 127.1 ``` -```console +```bash # Création d'un pod en intératif kubectl run -i --tty my-pod --image=debian -- /bin/bash ``` @@ -436,7 +436,7 @@ kubectl run -i --tty my-pod --image=debian -- /bin/bash - `kubectl create deployment` ... - Depuis kubernetes 1.19, il est possible de préciser une commande au moment du `create` -```console +```bash kubectl create deployment pingu --image=alpine -- ping 127.1 ``` @@ -448,13 +448,13 @@ kubectl create deployment pingu --image=alpine -- ping 127.1 - Pour créer un object Kubernetes depuis votre fichier `YAML`, utilisez la commande `kubectl create` : -```console +```bash kubectl create -f object.yaml ``` - Il est possible de créer des objets Kubernetes à partir d'une URL : -```console +```bash kubectl create -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook/frontend-deployment.yaml ``` @@ -462,13 +462,13 @@ kubectl create -f https://raw.githubusercontent.com/kubernetes/examples/master/g - Pour les supprimer exécuter simplement : -```console +```bash kubectl delete -f object.yaml ``` - Mettre à jour un objet Kubernetes en écrasant la configuration existante: -```console +```bash kubectl replace -f object.yaml kubectl apply -f object.yaml ``` @@ -504,7 +504,7 @@ kubectl apply -f object.yaml Étape 1: Déployer le Dashboard -```console +```bash kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml ``` @@ -524,7 +524,7 @@ metadata: 2. Appliquer le fichier YAML pour créer le compte de service: -```console +```bash kubectl apply -f dashboard-adminuser.yaml ```` @@ -551,7 +551,7 @@ subjects: 4. Appliquer le fichier YAML pour créer le rôle d'administration: -```console +```bash kubectl apply -f admin-role-binding.yaml @@ -561,7 +561,7 @@ kubectl apply -f admin-role-binding.yaml Étape 3: Récupérer le token d'accès -```console +```bash kubectl -n kubernetes-dashboard create token admin-user ``` @@ -569,7 +569,7 @@ kubectl -n kubernetes-dashboard create token admin-user Démarrer un proxy pour accéder au Dashboard: -```console +```bash kubectl proxy ``` diff --git a/cours/containers/kubernetes/k8s-workloads-configuration.fr.md b/cours/containers/kubernetes/k8s-workloads-configuration.fr.md index 79bf17c..057479a 100644 --- a/cours/containers/kubernetes/k8s-workloads-configuration.fr.md +++ b/cours/containers/kubernetes/k8s-workloads-configuration.fr.md @@ -94,20 +94,20 @@ spec: - En utilisant le contenu complet d'un répertoire -```console +```bash kubectl create configmap my-config --from-file=./my/dir/path/ ``` - En utilisant le contenu d'un fichier d'un répertoire -```console +```bash kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2 ``` - En utilisant des clés valeurs -```console +```bash kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2 ``` @@ -130,13 +130,13 @@ kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key ### Kubernetes : Secrets -```console +```bash $ kubectl create secret docker-registry mydockerhubsecret \ --docker-username="employeeusername" --docker-password="employeepassword" \ --docker-email="employee.email@organization.com" ``` -```console +```bash kubectl create secret generic dev-db-secret --from-literal=username=devuser --from-literal=password='S!B\*d$zDsb' ``` diff --git a/cours/terraform/terraform-introduction.fr.md b/cours/terraform/terraform-introduction.fr.md index 8a70b14..f22bd73 100644 --- a/cours/terraform/terraform-introduction.fr.md +++ b/cours/terraform/terraform-introduction.fr.md @@ -154,7 +154,7 @@ Exemple : - Vérifier la version installée avec la commande : `terraform version` -```console +```bash terraform version Terraform v1.2.1 on darwin_amd64