Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cc:laboratoare:07 [2021/12/05 22:28]
alexandru.hogea
cc:laboratoare:07 [2021/12/06 12:33] (current)
alexandru.hogea [Secrete în Kubernetes]
Line 1: Line 1:
-===== Laboratorul 07 - Secrete ​și variabile de mediu în Kubernetes =====+===== Laboratorul 07 - Secretevariabile de mediu și persistența datelor ​în Kubernetes =====
  
 În laboratoarele anterioare am folosit variabilele de mediu direct în fișierele YAML ale pod-urilor. Evident, în cazul datelor sensibile, nu este o idee bună pentru ca oricine are acces la fișierele de configurare YAML să aibă posibilitatea de a vedea variabilele de mediu definite. Problema apare în momentul în care în variabilele de mediu definim nume de utilizatori și parole. ​ În laboratoarele anterioare am folosit variabilele de mediu direct în fișierele YAML ale pod-urilor. Evident, în cazul datelor sensibile, nu este o idee bună pentru ca oricine are acces la fișierele de configurare YAML să aibă posibilitatea de a vedea variabilele de mediu definite. Problema apare în momentul în care în variabilele de mediu definim nume de utilizatori și parole. ​
Line 28: Line 28:
 Creați acest secret: Creați acest secret:
 <code bash> <code bash>
-kubectl ​create ​-f db-secret.yaml+kubectl ​apply -f db-secret.yaml 
 +</​code>​
 Incercati sa vizualizati datele din acest secret: Incercati sa vizualizati datele din acest secret:
 +<code bash>
 kubectl get secret db-secret kubectl get secret db-secret
 kubectl describe secret db-secret kubectl describe secret db-secret
Line 125: Line 127:
   AMQPURL: amqp://​rabbitmq-cluster-ip-service   AMQPURL: amqp://​rabbitmq-cluster-ip-service
   PGPORT: "​5432"​   PGPORT: "​5432"​
-  ​PORT"​8000"​+  ​PGHOSTdb-cluster-ip-service
 kind: ConfigMap kind: ConfigMap
 metadata: metadata:
Line 157: Line 159:
             name: proc-cmap             name: proc-cmap
             key: PGPORT             key: PGPORT
-      - name: PORT+      - name: PGHOST
         valueFrom:         valueFrom:
           configMapKeyRef:​           configMapKeyRef:​
             name: proc-cmap             name: proc-cmap
-            key: PORT      ​+            key: PGHOST ​      
 </​code> ​ </​code> ​
 Observați modul în care am injectat variabilele din configMap. Am exemplificat acest mod pentru scopul didactic, ele pot fi injectate la fel ca mai sus la secret. Observați modul în care am injectat variabilele din configMap. Am exemplificat acest mod pentru scopul didactic, ele pot fi injectate la fel ca mai sus la secret.
 +
 +Pentru pod-ul de API, urmăm pașii făcuți pentru procesator. Putem să observăm că datele sensibile sunt aceleași, deci putem să folosim același secret creat la pasul anterior. Restul variabilelor de mediu sunt și ele identice, dar avem în plus variabila ''​PORT''​. Pentru a exemplifica faptul că putem folosi ''​envFrom''​ din mai multe surse, o sa creăm un nou configMap:
 +<code yaml>
 +apiVersion: v1
 +data:
 +  AMQPURL: amqp://​rabbitmq-cluster-ip-service
 +  PGPORT: "​5432"​
 +  PGHOST: db-cluster-ip-service
 +  PORT: "​8000"​
 +kind: ConfigMap
 +metadata:
 +  name: api-cmap
 +</​code>​
 +
 +Acest configMap este identic cu cel de mai sus, dar a fost adăugată variabila ''​PORT''​.
 +Pentru a injecta variabilele de mediu în pod folosim ''​envFrom'',​ ca in fișierul de mai jos:
 +<code yaml>
 +apiVersion: v1
 +kind: Pod
 +metadata:
 +  labels:
 +    run: api
 +  name: api
 +spec:
 +  containers:
 +  - image: axonedge/​lab-k8s-api
 +    name: api
 +    envFrom:
 +      - secretRef:
 +          name: proc-secret
 +      - configMapRef:​
 +          name: api-cmap
 +</​code>​
 +
 +Puteți observa ca am folosit două surse pentru ''​envFrom'',​ o sursă fiind un secret, iar cealaltă sursă fiind un configMap. Astfel, am exeplificat cele mai folosite două metode prin care pot fi injectate variabilele dintr-un configMap într-un pod.
 +
 +=== Temă ===
 +Modificați deployment-ul astfel încât să nu folosim pod-uri, ci să folosim deployment-uri acolo unde este nevoie.
 +
 +==== Persistența datelor ====
 +Adăugați câteva intrări în baza de date. Verificați ca acestea există. Ștergeți podul de DB, creați unul nou și executați o cerere de tip GET. Mai avem intrări în baza de date?
 +
 +Pentru ca datele din baza de date să nu dispară odată cu ștergerea pod-ului, folosim PV (PersistentVolume) și PVC (PersistentVolumeClaims).
 +
 +Un fișier de bază pentru a crea un PersistentVolume găsiti mai jos. Proprietățile pe care le folosim aici sunt destul de intuitive.
 +
 +<code yaml>
 +apiVersion: v1
 +kind: PersistentVolume
 +metadata:
 +    name: mypv
 +spec:
 +  accessModes:​
 +    - ReadWriteMany
 +  capacity:
 +    storage: 1Gi
 +  hostPath:
 +    path: /tmp/data
 +</​code>​
 +
 +Dupa ce creăm acest volum, verificăm că acesta există:
 +<code bash>
 +kubectl get pv # în continuare urmăriți câmpul de status
 +</​code>​
 +
 +Creăm un PVC pe baza următorului fișier de configurare:​
 +<code yaml>
 +apiVersion: v1
 +kind: PersistentVolumeClaim
 +metadata:
 +  name: mypvc
 +spec:
 +  accessModes:​
 +    - ReadWriteMany
 +  resources:
 +    requests:
 +      storage: 1Gi
 +</​code>​
 +
 +După ce am creat și un PVC, verificați din nou atât PV, cât și PVC:
 +<code bash>
 +kubectl get pv # urmăriți câmpul de status
 +kubectl get pvc
 +</​code>​
 +
 +Cum folosim un volum într-un pod? Modificăm fișierul de configurare al pod-ului pentru baza de date astfel încât acesta să folosească noul volum:
 +<code yaml>
 +apiVersion: v1
 +kind: Pod
 +metadata:
 +  creationTimestamp:​ null
 +  labels:
 +    run: db
 +  name: db
 +spec:
 +  containers:
 +  - image: axonedge/​lab-k8s-database
 +    name: db
 +    envFrom:
 +      - secretRef:
 +          name: db-secret
 +    volumeMounts:​
 +      - mountPath: /​var/​lib/​postgresql/​data
 +        name: mypd
 + 
 + 
 +  volumes:
 +  - name: mypd
 +    persistentVolumeClaim:​
 +      claimName: mypvc
 +</​code>​
 +
 +Ștergeți pod-ul de DB creat anterior și creați altul pe baza fișierului de mai sus.
 +Adăugați câteva intrări în baza de date, ștergeți pod-ul și apoi creați altul nou. Putem observa că de data aceasta baza de date nu este goală. ​
  
cc/laboratoare/07.1638736123.txt.gz · Last modified: 2021/12/05 22:28 by alexandru.hogea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0