# **Brief 6** ### *Raja Choukri* ---- ### Plan 1. ***Chapitre 1 : Déployer un cluster AKS*** 2. ***Chapitre 2 : Déployer un container Redis*** 3. ***Chapitre 3 : Déployer un container Voting App*** 4. ***Chapitre 4 : Un mot de passe pour Redis*** 5. ***Chapitre 5 : Configurer un stockage persistent pour Redis*** ## **Chapitre 1 : Déployer un cluster AKS** --- ***1.Déployer un cluster Azure Kubernetes Service (AKS)*** - Azure Cli; - Créer une groupes de ressources : * az group create --location eastus --resource-group brief6-raja - Créer un cluster AKS avec 2 nodes : * az aks create --resource-group brief6-raja --name myAKSCluster --node-count 2 --ssh-key-value /Users/rajac/.ssh/id_rsa.pub* - Installer Kubernetes Servers : * sudo apt update * sudo apt -y upgrade * sudo apt -y install curl apt-transport-https * curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - * echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list * sudo apt update * sudo apt -y install vim git curl wget kubelet kubeadm kubectl * sudo apt-mark hold kubelet kubeadm kubectl ## **Chapitre 2 : Déployer un container Redis** --- ***1. Créer un Deployment avec une image Redis*** * az login * az aks get-credentials --resource-group brief6-raja --name myAKSCluster -> creation yml -> nano redis.yml * nano redis.yml ``` consol apiVersion: apps/v1 kind: Deployment metadata: name: redis spec: replicas: 1 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - name: redis image: redis env: - name: ALLOW_EMPTY_PASSWORD value: "yes" ports: - containerPort: 6379 name: redis --- apiVersion: v1 kind: Service metadata: name: redis spec: ports: - port: 6379 selector: app: redis ``` - Je lance la comande suivant pour verifié que le fichier redis et été bien crée: * kubectl apply -f redis.yml ***2. Installer un client Redis sur votre poste de travail*** * sudo apt-get update * sudo apt-get install redis ***Tester la connection au container Redis déployé*** * redis-cli -h 20.119.122.206 ## **Chapitre 3 : Déployer un container Voting App** ***Créer un Deployment avec une image de l’application Azure Voting App qui dépend de Redis*** - **nano redis.yml** ```consol apiVersion: apps/v1 kind: Deployment metadata: name: redis labels: app: redislb spec: selector: matchLabels: app: redislb replicas: 1 template: metadata: labels: app: redislb spec: containers: - name: redis image: redis ports: - containerPort: 6379 name: redis --- apiVersion: v1 kind: Service metadata: name: clustredis spec: type: ClusterIP ports: - port: 6379 selector: app: redislb ``` - Executé la command pour deployer le redis: *kubectl apply -f redis.yml - **nano vote.yml** ``` consol apiVersion: apps/v1 kind: Deployment metadata: name: voteapp labels: app: voteapplb spec: selector: matchLabels: app: voteapplb replicas: 1 template: metadata: labels: app: voteapplb spec: containers: - name: voteapp image: whujin11e/public:azure_voting_app ports: - containerPort: 80 env: - name: REDIS value: "clustredis" - name: STRESS_SECS value: "2" --- apiVersion: v1 kind: Service metadata: name: loadvoteapp spec: type: LoadBalancer ports: - port: 80 selector: app: voteapplb ``` - Executé la command suivant pour voir si été bien deployer le vote: * kubectl apply -f vote.yml - Nous vérifions que le déploiement a bien été créé sur le portail Azure: aller sur myAKSCluster -> Services et entrées -> et on voir que tout bien deployer on vais clique sur l'adresse IP et il vais nou ovrire l'application vote. myAKSCluster -> Charges de travail ## **Chapitre 4 : Un mot de passe pour Redis** * Cree mot de passe pour Redis: * PASSWORD=brief6raja * echo -n ${PASSWORD} | base64 * Creation fichier secret.yml ``` consol apiVersion: v1 kind: Secret metadata: name: redispw type: Opaque data: password: YnJpZWY2cmFqYQ== ``` * Ajouter dans la fichier redis.yml la partie secret: ``` consol apiVersion: apps/v1 kind: Deployment metadata: name: redis labels: app: redislb spec: selector: matchLabels: app: redislb replicas: 1 template: metadata: labels: app: redislb spec: containers: - name: redis image: redis ** args: ["--requirepass", "$(REDIS_PWD)"] env: - name: REDIS_PWD valueFrom: secretKeyRef: name: redispw key: password - name: ALLOW_EMPTY_PASSWORD ** value: "no" ports: - containerPort: 6379 name: redis --- apiVersion: v1 kind: Service metadata: name: clustredis spec: type: ClusterIP ports: - port: 6379 selector: app: redislb ``` * Ajouter dans la fichier vote.yml la partie secret ``` consol apiVersion: apps/v1 kind: Deployment metadata: name: voteapp labels: app: voteapplb spec: selector: matchLabels: app: voteapplb replicas: 1 template: metadata: labels: app: voteapplb spec: containers: - name: voteapp image: whujin11e/public:azure_voting_app ports: - containerPort: 80 env: - name: REDIS value: "clustredis" - name: STRESS_SECS value: "2" ** - name: REDIS_PWD valueFrom: secretKeyRef: name: redispw ** key: password --- apiVersion: v1 kind: Service metadata: name: loadvoteapp spec: type: LoadBalancer ports: - port: 80 selector: app: voteapplb ``` ## **Chapitre 5 : Configurer un stockage persistent pour Redis** - **Créer un PersistentVolumeClaim:** ``` consol apiVersion: v1 kind: PersistentVolumeClaim metadata: name: redisclaim spec: accessModes: - ReadWriteOnce ressources: requests: storage: 10Gi storageClassName: redistor ``` - **Crée le StorageClass** ``` consol apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: redisstor provisioner: kubernetes.io/azure-disk parameters: skuName: Standard_LRS allowVolumeExpannsion: true ``` ## **Chapitre 6 : Utiliser Azure Application Gateway avec AKS** 1. ***Supprimer le cluster AKS:*** * az aks delete --resource-group brief6-raja --name myAKSCluster* 2. ***Recréer un cluster AKS avec l’add-on AGIC et 4 nodes*** * az aks create -g brief6-raja -n agic --ssh-key-value /Users/rajac/.ssh/id_rsa.pub --node-count 4 --enable-managed-identity -a ingress-appgw --appgw-name myApplicationGateway --appgw-subnet-cidr "10.225.0.0/16" * az aks get-credentials --name agic --resource-group brief6-raja 3. ***Créer un ingress dans votre configuration Kubernetes pour l’Application Gateway*** * Créer un Ingress dans la configuration Kubernetes: ``` consol apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: guestbook annotations: kubernetes.io/ingress.class: azure/application-gateway spec: rules: - http: paths: - pathType: Prefix path: / backend: service: name: loadvoteapp port: number: 80 ``` * ***créer un nouveau mot de passe pour le fichier secret.yml*** * PASSWORD=brief6 * echo -n ${PASSWORD} | base64 * ***modifier la partie services de vote.yml supprimer les loadBalancers pour ClusterIP*** ## **Chapitre 7 : Un nom de domaine pour Voting App** * Adresse IP Gateway: 20.241.198.121 * http://brief6.simplon-raja.space/ ## **Chapitre 8 : Un certificat TLS pour Voting App** 1. ***Créer un certificat TLS pour la Voting App en utilisant Certbot et le challenge DNS sur votre poste de travail.*** * sudo apt-get update * sudo apt-get upgrade * sudo apt install software-properties-common -y * sudo add-apt-repository ppa:deadsnakes/ppa -y * sudo apt install python3.10 * sudo apt-get update * sudo apt-get upgrade * pip3 install certbot-plugin-gandi * creation nano gandi.ini * chmod 600 gandi.ini * certbot certonly --authenticator dns-gandi --dns-gandi-credentials gandi.ini -d brief6.simplon-raja.space * cd /etc/letsencrypt/live/brief6.simplon-raja.space * ls * cat cert.pem privkey.pem > certificat.pem * ls * mv certificat.pem /home * cd /home * ls * mv certificat.pem /home/raja * cd raja * ls 2. ***Updater le certificat de l’Application Gateway*** - Création d'un fichier secrettls.yml où j'ai encoder en base64 les données de clé et de certificat. : * cat tls.crt | base64 * cat tls.key | base64 * at /var/log/letsencrypt/letsencrypt.log - dans le fichier ingress.yml que j'ai ajouté dans la partie spec. le nom secret ## **Chapitre 9 : Scaling de la Voting App** * pwd * /home/raja * nano test_charge.sh * nano test_charge.r - dans le fichier nano test_de_charge.r j'ai ajouté l'installation des packages suivants : - install.packages("data.table") - install.packages("ggplot2") - install.packages("dplyr") - après avoir exécuté le script et installé avec succès les trois packages, vous pouvez ensuite les supprimer du fichier nano. * sudo apt install parallel * sudo apt install r-base-core * sudo apt install r-cran-littler * sudo Rscript test_de_charge.r * Après avoir installé tout ce dont j'avais besoin pour faire fonctionner le test de charge, j'ai exécuté le script mais j'ai eu quelques problèmes, où le test de charge ne fonctionnait que pour la moitié et donc j'avais des trous découverts, alors j'ai fait un ls et j'ai cherché le test_file et je trouvé que j'avais en fait un ***502 BAD GATEWAY***, pour résoudre le problème que j'ai rencontré de la manière suivante : * nano test_charge.sh * J'ai ajouté cette ligne dans le fichier: * sed '/ 502 Bad Gateway/I,+2 d' test_file > test_file2 * enfin j'ai exécuté le script plusieurs fois avec sudo bash test_charge.sh
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up