# Kubernetes exercise ##### Luca Moos et Yann-Ivain Beffa ## TASK 1 - DEPLOY THE APPLICATION ### SUBTASK 1.2 - DEPLOY THE APPLICATION #### What value must be set for this URL? API_ENDPOINT_URL doit être affecté à la valeur suivante : `http://api-svc:8081`. En effet, Kubernetes utilise un DNS interne pour la résolution de noms et du coup il est possible de simplement utiliser le nom du service pour que le pod puisse s'y connecter. ## TASK 2 - ADD AND EXERCISE RESILIENCE ### SUBTASK 2.1 - ADD DEPLOYMENTS #### Use only 1 instance for the Redis-Server. Why? La configuration de redis actuelle fait en sorte de stocker chaque mise à jour dans un fichier sur disque, il est possible de partager des volumes entre les pods, cependant cela ne va pas suffire. En effet, redis charge ce fichier dans la RAM au démarrage. Si on utilisait plusieurs instances, on aurait accès à différentes données en fonction du pod sur lequel on tombe et donc avoir des données incohérentes. ### SUBTASK 2.2 - VERIFY THE FUNCTIONALITY OF THE REPLICA SETS #### What happens if you delete a Frontend or API Pod? How long does it take for the system to react? Dès qu'une instance est supprimée, le replicat set prend la main et recrée une nouvelle instance quasiment immédiatement. C'est grâce au *HEALTH CHECK* que cette opération est possible. #### What happens when you delete the Redis Pod? Comme aucun volume n'est fait sur le pod redis. Dès qu'on le supprime, toutes les données sont effacées. Il serait possible de contourner se problème en utilisant des volumes persistants. #### How can you change the number of instances temporarily to 3? Kubernetes permet via la commande `kubectl` d'augmenter le nombre d'instance d'un pod déployé. `kubectl scale --replicas=3 <deployed-pod-name>` #### What autoscaling features are available? Which metrics are used? Kubernetes permet via la commande `kubectl` d'auto-scaler un pod déployé. `kubectl autoscale deployment <deployed-pod-name> --cpu-percent=50 --min=1 --max=10` Kubernetes propose comme metrics le pourcentage du processeur utilisé par machine (pour tous les pods). Il est cependant possible de créer ses propres metrics. #### How can you update a component? ##### Mettre à jour l'image d'un replication controller `kubectl rolling-update <NAME> <NEW_NAME> --image=<IMAGE>:<TAG>` ou bien en lui donnant une nouvelle configuration: `kubectl rolling-update <NAME> -f <FILE>` ##### Mettre à jour la configuration d'un pod/deployement/service/etc. déjà créé: `kubectl apply -f <FILE>` ## Résultat ![](https://i.imgur.com/U9EEubF.png)