Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Següent revisió | Revisió prèvia | ||
| info:cursos:pue:devops2022:s8 [09/02/2022 09:17] – creat mate | info:cursos:pue:devops2022:s8 [09/03/2022 07:28] (actual) – mate | ||
|---|---|---|---|
| Línia 1: | Línia 1: | ||
| - | = DevOps Sesión | + | = DevOps Sesión |
| == Documentación relacionada | == Documentación relacionada | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | |||
| == Clase | == Clase | ||
| - | == TODO | + | === secretos |
| - | <callout type=" | + | <callout type=" |
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | * '' | ||
| + | * docker-registry | ||
| + | * generic | ||
| + | * tls | ||
| + | * desde directorio, fichero o literal | ||
| + | * no son seguros, no están encriptados, | ||
| + | * si tienes privilegios administrativos, | ||
| + | * '' | ||
| + | * <code bash> | ||
| + | kubectl describe pod ... | ||
| + | kubectl delete secret mariadb | ||
| + | kubectl delete pod ... | ||
| + | kubectl describe pod ... | ||
| + | </ | ||
| + | === en volumenes | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | |||
| + | * desplegar secretos usando volúmenes, al estilo SWARM | ||
| + | * creamos secreto | ||
| + | * creamos volumen asociando al secreto | ||
| + | * montamos el volumen en el pod | ||
| + | * <code bash>## | ||
| + | kubectl apply -f / | ||
| + | kubectl apply -f / | ||
| + | kubectl describe pod helloworld-deployment-... | ||
| + | kubectl exec -ti helloworld-deployment-... -- /bin/bash | ||
| + | # | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | === configmap | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | * cambios de configuración en caliente (si la aplicación lo soporta) | ||
| + | * no encriptación, | ||
| + | * '' | ||
| + | ==== lab | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | kubectl get cm | ||
| + | kubectl describe cm mariadb | ||
| + | kubectl apply -f / | ||
| + | kubectl get pod | ||
| + | kubectl exec -it mariadb-deploy-cm-... -- mysql -u usuario -p | ||
| + | # show databases; | ||
| + | </ | ||
| + | ==== lab | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | |||
| + | * 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=/ | ||
| + | kubectl get cm | ||
| + | kubectl describe cm nginx-config | ||
| + | kubectl get configmap nginx-config -o yaml | ||
| + | kubectl apply -f / | ||
| + | </ | ||
| + | |||
| + | === volúmenes | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | |||
| + | * 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: | ||
| + | * PersistentVolumeClaim: | ||
| + | * Modos de acceso: | ||
| + | * ReadWriteOnce: | ||
| + | * ReadOnlyMany: | ||
| + | * ReadWriteMany: | ||
| + | * 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=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | |||
| + | * <code bash> | ||
| + | kubectl get pod | ||
| + | kubectl describe pod webtest | ||
| + | kubectl exec -ti webtest -c contenedor2 -- bash | ||
| + | # touch / | ||
| + | kubectl exec -ti webtest -c contenedor1 -- ash | ||
| + | # touch / | ||
| + | </ | ||
| + | |||
| + | ==== lab | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | |||
| + | * en este caso se usa **affinity** (más sencillo con **nodeSelector** o **nodeName**) | ||
| + | * <code bash> | ||
| + | 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 / | ||
| + | kubectl exec -it mysql-... -- mysql -u root -p | ||
| + | mysql> create database kubernetes; | ||
| + | mysql> show databases; | ||
| + | kubectl delete deployment mysql | ||
| + | kubectl apply -f / | ||
| + | kubectl exec -it mysql-... -- mysql -u root -p | ||
| + | mysql> show databases; | ||
| + | kubectl label node worker1 env- # elimina la etiqueta (el guión final) | ||
| + | </ | ||
| + | |||
| + | ==== lab | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | |||
| + | * instalar NFS en master:< | ||
| + | sudo mkdir /bd-nfs | ||
| + | sudo mkdir / | ||
| + | sudo chmod 777 /bd-nfs/ | ||
| + | sudo chown nobody: | ||
| + | sudo vi / | ||
| + | # /bd-nfs *(rw, | ||
| + | # /var/shared 10.0.0.0/ | ||
| + | sudo systemctl restart nfs-kernel-server | ||
| + | sudo systemctl status nfs-kernel-server | ||
| + | sudo systemctl enable nfs-kernel-server</ | ||
| + | * <code bash> | ||
| + | kubectl get pv,pvc | ||
| + | kubectl apply -f / | ||
| + | kubectl describe pod mysql-storage-nfs-... | ||
| + | kubectl exec -ti mysql-storage-nfs-... -- bash | ||
| + | # df -h | ||
| + | </ | ||
| + | * para controlar realmente el espacio usado, hay que usar un storageClass | ||
| + | * los PersistentVolume se crean dinámicamente | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | === k0sctl | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | * https:// | ||
| + | * Lens (portainer para k8s) | ||
| + | |||
| + | === extra | ||
| + | * '' | ||
| + | * '' | ||
| + | * HELM: | ||
| + | * yum o apt en k8s | ||
| + | * kubeapps hub | ||
| + | * RBAC - reglas de acceso | ||
| + | * [[https:// | ||
| + | |||