Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Següent revisió
Revisió prèvia
info:cursos:pue:devops2022:s8 [09/02/2022 09:17] – creat mateinfo:cursos:pue:devops2022:s8 [09/03/2022 07:28] (actual) mate
Línia 1: Línia 1:
-= DevOps Sesión (2022-03-07)+= DevOps Sesión (2022-03-07) k8s
 == Documentación relacionada == Documentación relacionada
 +<callout type="info" icon="true">
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf
 +  * 2-Despliegue de Aplicaciones Kubernetes/2-Laboratorios basicos kubernetes .pdf
 +  * 2-Despliegue de Aplicaciones Kubernetes/Laboratorio kubernetes Curso-DevOps.txt línea 481
 +</callout>
 +
 == Clase == Clase
-== TODO +=== secretos 
-<callout type="info" icon="true"></callout>+<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pag 91 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/mariadb-deployment-secret.yaml 
 +</callout> 
 +  * ''create secret...'' 
 +    * docker-registry 
 +    * generic 
 +    * tls 
 +  * desde directorio, fichero o literal 
 +  * no son seguros, no están encriptados, estan en base64 -> ''kubectl get secret <nombre> -o yaml'' y ''echo "...." | base64 --decode'' 
 +    * si tienes privilegios administrativos, puedes verlos (no será lo normal) 
 +    * ''kubectl config get-contexts'' 
 +  * <code bash>kubectl create secret generic mariadb --from-literal=password=00000000 
 +kubectl describe pod ... 
 +kubectl delete secret mariadb 
 +kubectl delete pod ... 
 +kubectl describe pod ... 
 +</code> 
 +=== en volumenes 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/deployment/helloworld-secrets-volumes.yml 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/deployment/helloworld-secrets.yml 
 +</callout> 
 + 
 +  * desplegar secretos usando volúmenes, al estilo SWARM 
 +    * creamos secreto 
 +    * creamos volumen asociando al secreto 
 +    * montamos el volumen en el pod 
 +    * <code bash>##El secreto: 
 +kubectl apply -f /vagrant/kubernetes-curso/deployment/helloworld-secrets.yml 
 +kubectl apply -f /vagrant/kubernetes-curso/deployment/helloworld-secrets-volumes.yml 
 +kubectl describe pod helloworld-deployment-... 
 +kubectl exec -ti helloworld-deployment-... -- /bin/bash 
 +#root@helloworld-deployment-78457f7dfc-zn2bf:/app# cat /etc/creds/password 
 +#root@helloworld-deployment-78457f7dfc-zn2bf:/app# cat /etc/creds/username 
 +</code> 
 + 
 +=== configmap 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pag 106 
 +</callout> 
 +  * cambios de configuración en caliente (si la aplicación lo soporta) 
 +  * no encriptación, todo en texto plano 
 +  * ''kubectl create configmap'' 
 +==== lab 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/mariadb-deployment-configmap.yaml 
 +</callout> 
 + 
 +<code bash>kubectl create cm mariadb --from-literal=root_password=00000000 --from-literal=mysql_usuario=usuario --from-literal=mysql_password=00000000 --from-literal=basededatos=test 
 +kubectl get cm 
 +kubectl describe cm mariadb 
 +kubectl apply -f /vagrant/kubernetes-curso/mariadb-deployment-configmap.yaml 
 +kubectl get pod 
 +kubectl exec -it mariadb-deploy-cm-... -- mysql -u usuario -p 
 +# show databases; 
 +</code> 
 +==== lab 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/configmap/
 +</callout> 
 + 
 +  * pasar un fichero de configuración a un POD 
 +  * creamos el CM 
 +  * creamos el volumen asociado al CM 
 +  * asociamos el POD al volumen 
 +    * este POD tiene 2 contenedores (se hablan como **localhost**) y las peticiones al :80 van a :3000 (del otro contenedor). NGINX en proxypass 
 +  * asociamos el servicio al pod (en este caso, están en ficheros separados) 
 +<code bash> 
 +kubectl create configmap nginx-config --from-file=/vagrant/kubernetes-curso/configmap/reverseproxy.conf 
 +kubectl get cm 
 +kubectl describe cm nginx-config 
 +kubectl get configmap nginx-config -o yaml 
 +kubectl apply -f /vagrant/kubernetes-curso/configmap/ # desplegamos los 2 ficheros .yml 
 +</code> 
 + 
 +=== volúmenes 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pag 144 
 +</callout> 
 + 
 +  * muchos tipos: 
 +    * aws 
 +    * iscsi 
 +    * azure.. 
 +    * emptyDir: 
 +      * no persiste (en memoria). Desaparece si cae el POD 
 +      * me permite compartir un directorio entre 2 contenedores de un POD 
 +    * hostPath: 
 +      * asociamos el volumen a un nodo 
 +    * nfs: 
 +      * Para cualquiera de ellas en Kubernetes tendremos que crear: 
 +        * PersistentVolume: Donde especificamos el volumen persistente 
 +        * PersistentVolumeClaim: Donde reclamamos espacio en el volumen 
 +      * Modos de acceso: 
 +        * ReadWriteOnce: read-write solo para un nodo (RWO) 
 +        * ReadOnlyMany: read-only para muchos nodos (ROX) 
 +        * ReadWriteMany: read-write para muchos nodos (RWX) 
 +      * Políticas de reciclaje de volúmenes son son: 
 +        * Retain: Reclamación manual 
 +        * Recycle: Reutilizar contenido 
 +        * Delete: Borrar contenido 
 +      * Estados de un volumen: 
 +        * Available: disponible para reclamación 
 +        * Bound: No disponible, se esta utilizando por una reclamación. 
 +        * Released: La reclamación del volumen se a eliminado y esta esperando otra petición del cluster. 
 +        * Failed: En estado de fallo. 
 + 
 +==== lab 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/Laboratorio kubernetes Curso-DevOps.txt línea 685 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/webtest-volum-emptydir.yml 
 +</callout> 
 + 
 +  * <code bash>kubectl apply -f /vagrant/kubernetes-curso/webtest-volum-emptydir.yml 
 +kubectl get pod 
 +kubectl describe pod webtest 
 +kubectl exec -ti webtest -c contenedor2 -- bash 
 +# touch /web2/contenedor2 
 +kubectl exec -ti webtest -c contenedor1 -- ash 
 +# touch /web1/contenedor1 
 +</code> 
 + 
 +==== lab 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/Laboratorio kubernetes Curso-DevOps.txt línea 717 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/mysql-affinity.yml 
 +</callout> 
 + 
 +  * en este caso se usa **affinity** (más sencillo con **nodeSelector** o **nodeName**) 
 +  * <code bash>kubectl get nodes 
 +kubectl describe nodes worker1 |grep -i labels -A 10  
 +kubectl label nodes worker1 env=bd # Etiquetamos nuestro nodo con la variable env con el valor bd 
 +kubectl describe nodes worker1 |grep -i labels -A 10 # Describimos el nodo para visualizar sus labels 
 +kubectl apply -f /vagrant/kubernetes-curso/mysql-affinity.yml 
 +kubectl exec -it mysql-... -- mysql -u root -p 
 +mysql> create database kubernetes; 
 +mysql> show databases; 
 +kubectl delete deployment mysql 
 +kubectl apply -f /vagrant/kubernetes-curso/mysql-affinity.yml 
 +kubectl exec -it mysql-... -- mysql -u root -p 
 +mysql> show databases; 
 +kubectl label node worker1 env- # elimina la etiqueta (el guión final) 
 +</code> 
 + 
 +==== lab 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/Laboratorio kubernetes Curso-DevOps.txt línea 790 
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pag 151 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/nfs-pv-pvc.yaml 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/mysql-storage-nfs.yaml 
 +</callout> 
 + 
 +  * instalar NFS en master:<code bash>sudo apt install nfs-kernel-server 
 +sudo mkdir /bd-nfs 
 +sudo mkdir /var/shared 
 +sudo chmod 777  /bd-nfs/ 
 +sudo chown nobody:nogroup  /bd-nfs/ 
 +sudo vi /etc/exports 
 +# /bd-nfs *(rw,no_root_squash) 
 +# /var/shared 10.0.0.0/24(rw,sync,no_root_squash,no_all_squash) 
 +sudo systemctl restart nfs-kernel-server 
 +sudo systemctl status nfs-kernel-server 
 +sudo systemctl enable nfs-kernel-server</code> 
 +  * <code bash>kubectl apply -f /vagrant/kubernetes-curso/nfs-pv-pvc.yaml 
 +kubectl get pv,pvc 
 +kubectl apply -f /vagrant/kubernetes-curso/mysql-storage-nfs.yml 
 +kubectl describe pod mysql-storage-nfs-... 
 +kubectl exec -ti mysql-storage-nfs-... -- bash 
 +# df -h 
 +</code> 
 +  * para controlar realmente el espacio usado, hay que usar un storageClass 
 +    * los PersistentVolume se crean dinámicamente 
 +  * ''kubectl drain worker1 %%--%%delete-local-data %%--%%ignore-daemonsets'' 
 +  * ''kubectl uncordon worker1'' 
 + 
 +=== k0sctl 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/Install kubernetes k0sctl 
 +  * 2-Despliegue de Aplicaciones Kubernetes/Laboratorio Instalar Cluster Kubernetes Alumnos (kubeadm) 
 +</callout> 
 +  * https://k0sproject.io 
 +  * Lens (portainer para k8s) 
 + 
 +=== extra 
 +  * ''kubectl get pod -A -o wide'' 
 +  * ''kubectl -n kube-system describe pod kube-flannel...'' -> ConfigMap <- 1 pod en cada nodo (servicio global en Swarm) 
 +  * HELM:  
 +    * yum o apt en k8s 
 +    * kubeapps hub 
 +  * RBAC - reglas de acceso 
 +  * [[https://ngrok.com/]] 
 + 
  • info/cursos/pue/devops2022/s8.1644427039.txt.gz
  • Darrera modificació: 09/02/2022 09:17
  • per mate