Pod

Pods are the smallest deployable units of computing that you can create and manage in Kubernetes.


apiVersion: v1
kind: Pod
metadata:
  name: basic-pod
spec:
  containers:
  - name: webserver
    image: nginx
                    

deployments & replicasets

Deployments manages a replicated application on your cluster. ReplicaSet ensures that a specified number of Pod replicas are running at one time.


                apiVersion: apps/v1
                kind: Deployment
                metadata:
                  name: basic-deployment
                spec:
                  replicas: 2
                  selector:
                    matchLabels:
                      app: burger
                  template:
                    metadata:
                      labels:
                        app: burger
                    spec:
                      containers:
                        - name: webserver
                          image: nginx
                    

daemonset

DaemonSet ensures that all (or some) Nodes run a copy of a Pod.


                apiVersion: apps/v1
                kind: DaemonSet
                metadata:
                  name: basic-daemonset
                spec:
                  selector:
                    matchLabels:
                      app: pizza
                  template:
                    metadata:
                      labels:
                        app: pizza
                    spec:
                      containers:
                        - name: webserver
                          image: nginx
                    

jobs/cronjobs

Job creates one or more Pods and ensures that a specified number of them successfully terminate. Cronjobs creates Jobs on a repeating schedule.


                apiVersion: batch/v1
                kind: Job
                metadata:
                  name: bretzel
                spec:
                  template:
                    spec:
                      containers:
                        - name: date
                          image: alpine
                          command: ["sh", "-c", "date"]
                      restartPolicy: Never
                    

networking: services

A Service is an abstract way to expose an application running on a set of Pods as a network service.


                apiVersion: v1
                kind: Service
                metadata:
                  name: burger-service
                spec:
                  selector:
                    app: burger
                  ports:
                  - protocol: TCP
                    port: 80
                    targetPort: 8080
                    

networking: ingress

Ingress exposes HTTP and HTTPS routes from outside the cluster to Services within the cluster.


                apiVersion: networking.k8s.io/v1
                kind: Ingress
                metadata:
                  name: ingress-burger
                  annotations:
                    kubernetes.io/ingress.class: traefik
                spec:
                  rules:
                  - host: burger.fr.172.16.134.57.nip.io
                    http:
                      paths:
                      - path: /
                        pathType: Prefix
                        backend:
                          service:
                            name: burger-service
                            port: 
                              number: 80
                    

Quiz

# C'est quoi Kubernetes ? - [x] Un mot grec qui signifie "Sailing Master" - [ ] Un truc incompréhensible - [ ] Le nouveau meilleur ami de Laurent - [x] Un orchestrateur de containers
# Quel composant est le "cerveau" de Kubernetes ? - [x] Le control-plane - [ ] Le data-plane - [ ] Les nodes - [ ] La réponse "D"
# Qu'est-ce qu'un Pod ? - [x] La plus petite unité de déploiement de Kubernetes - [ ] Un serveur de calcul - [ ] Un container - [x] Un vaisseau de course de Star Wars
# Quels sont les patterns de Pods ? - [x] One-Container per Pod - [x] Sidecar - [ ] Init-Container - [ ] Singleton
# Quelles sont les propriétés d'un Pod qui sont vraies ? - [ ] Chaque container a une adresse IP - [x] Un Pod a une adresse IP - [x] Les containers d'un Pod peuvent communiquer via "loopback/localhost" - [ ] Les Pods d'un container peuvent se partager un volume
# Quelle commande permet de créer un Pod ? - [x] `kubectl create -f mon-joli-pod.yaml` - [ ] `kubectl get pod --create` - [ ] `docker image build --pod` - [ ] "Ok Google, crée un Pod"
# Qu'est ce qu'un Deployment ? - [x] Un objet qui manage des Pods - [ ] Un ensemble de containers - [x] La meilleure façon de déployer des applications - [ ] "Ok Google, qu'est ce qu'un deployment ?"
# Comment je peux récupérer les details d'un Pod nommé "luke" ? - [ ] `kubectl inspect pod luke` - [x] `kubectl describe pod luke` - [ ] `kubectl describe deployment luke` - [ ] "Je suis ton père"
# J'ai un deployment qui instancie 2 replicas de pods "nginx", que se passe t-il si un des pods est supprimé ? - [ ] Rien du tout - [x] Un pod "nginx" est re-créé - [ ] Le deployment tombe en erreur - [x] Le deployment indique 1/2 "Ready"
# Quelle commande permet d'exécuter des commandes dans un pod ? - [x] `kubectl exec -it -- /bin/bash` - [ ] `kubectl get pods --exec` - [ ] `kubectl logs ` - [ ] `kubectl exec /bin/bash`
# Quelle probe permet de détecter qu'un Pod est prêt à recevoir des requêtes ? - [x] readinessProbe - [ ] livenessProbe - [ ] startupProbe - [ ] droidProbe
# Quelle probe permet de détecter qu'un Pod est en train de démarrer ? - [ ] readinessProbe - [ ] livenessProbe - [x] startupProbe - [ ] droidProbe
# Comment peut-on implémenter une probe ? - [x] Une commande Linux qui retourne un code de sortie 0 - [x] Une requête HTTP GET qui retourne un code entre 200 et 399 - [x] Établir une connexion TCP vers un port - [x] A, B, C et donc D
# Quelle(s) commande permet de lister les pods ayant le label "app=star-wars" ? - [ ] `kubectl get pods -o yaml` - [x] `kubectl get pods -l app=star-wars` - [x] `kubectl get pods --selector app=star-wars` - [ ] `kubectl get services -l app=star-wars`
# Quel(s) objet(s) Kubernetes permet de lancer des tâches ? - [x] Job - [x] Cronjob - [ ] Batch - [ ] Pod
# Un Pod ayant: `resources.limits.cpu: 2` et `resource.requests.cpu: 1`: - [ ] Pourra consommer 1 CPU max - [x] Pourra consommer 2 CPU max - [x] Aura 1 CPU de réservé - [ ] Aura 2 CPU de réservé
# Que se passe-t-il lorsqu'un Pod a atteint sa consommation limite de CPU ? - [ ] Rien du tout - [x] Il est "throttled", et n'est plus schedulé pendant moment - [ ] Il est "OOMKilled", et est ensuite re-créé - [ ] Obi Wan Kenobi
# Que se passe-t-il lorsqu'un Pod a atteint sa consommation limite de RAM ? - [ ] Rien du tout - [ ] Il est "throttled", et n'est plus schedulé pendant moment - [x] Il est "OOMKilled", et est ensuite re-créé - [ ] Obi Wan Kenobi
# Un volume: - [x] Permet de partager des fichiers entre plusieurs containers d'un même pod - [x] Permet de partager des fichiers entre plusieurs pods - [x] Peut être persistant - [x] A, B, C, et donc D
# Un secret: - [x] a une taille limite de 1 Mo - [x] est encodé en base64 - [ ] est encrypté - [ ] n'est pas visible par les développeurs
# Dans un Pod, on peut utiliser un secret: - [x] en variable d'environnement - [x] en le montant comme un volume - [ ] on ne peut pas, c'est un secret - [ ] en sidecar
# On peut créer une configMap: - [x] à partir d'un fichier ou d'un répertoire - [x] à partir d'un fichier YAML - [x] avec la commande kubectl create configmap - [ ] à partir d'un secret
# Dans un Pod, on peut utiliser une configMap: - [x] en variable d'envionnement - [x] en la montant comme un volume - [ ] en sidecar - [ ] on ne peut pas utiliser une configmap dans un Pod, uniquement des secrets
# J'ai un pod qui utilise une configMap, je modifie la configMap pour en changer des valeurs. Pour que la nouvelle valeur soit prise en compte, je dois: - [x] redémarrer le Pod - [x] re-créer le Pod - [ ] attendre 30 secondes - [ ] ne rien faire
# Quelle commande permet de re-créer tous les pods d'un déploiement ? - [ ] `kubectl delete pods ` - [x] `kubectl rollout restart deployment ` - [ ] `kubectl rollout history deployment ` - [ ] `rm -rf /`
# Quelle commande permet de revenir à une version précédente d'un déploiement ? - [ ] `kubectl delete pods ` - [x] `kubectl rollout restart deployment ` - [ ] `kubectl rollout undo deployment ` - [ ] `rm -rf /`