Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
| info:cursos:pue:devops2022:s6 [09/02/2022 09:20] – mate | info:cursos:pue:devops2022:s6 [09/03/2022 07:43] (actual) – mate | ||
|---|---|---|---|
| Línia 1: | Línia 1: | ||
| - | = DevOps Sesión 6 (2022-02-28) | + | = DevOps Sesión 6 (2022-02-28) |
| == Documentación relacionada | == Documentación relacionada | ||
| + | ==== lab1 | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * lab-docker/ | ||
| + | * cluster 3 nodos k8s (1 master, 2 workers | ||
| + | </ | ||
| + | |||
| == Clase | == Clase | ||
| - | == TODO | + | === k8s |
| - | <callout type=" | + | <callout type=" |
| + | 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | * masters no ejecutan contenedores por defecto (al contrario que swarm) | ||
| + | * orquestados que soporta diferentes runtimes | ||
| + | * no solo docker. de hecho, desde la versión 1.20 no soporta docker si no containerd | ||
| + | * control plane - panel de control | ||
| + | * https:// | ||
| + | * servicios en master | ||
| + | * servicios en worker | ||
| + | * kubelet | ||
| + | * kube-proxy | ||
| + | * microk8s.io - minikube | ||
| + | |||
| + | === objetos k8s | ||
| + | * POD - unidad mínima (compuesta por 1 o varios contenedores) | ||
| + | * no escalable | ||
| + | * no alive | ||
| + | * -> replication controller | ||
| + | * SERVICE | ||
| + | * conceptualmente diferente a la idea de servicio de SWARM | ||
| + | * para llegar a un pod: | ||
| + | * **nodePort** | ||
| + | * **clusterIP** | ||
| + | * **loadBalancer** | ||
| + | * se gestiona por **labels** (de hecho, todos los objetos de k8s) | ||
| + | * REPLICATION CONTROLLER (RC) | ||
| + | * si escala | ||
| + | * si se mira si falla | ||
| + | * DEPLOYMENT | ||
| + | * REPLICA SET (RS) <- " | ||
| + | * permite el cambio de versiones en el POD, pero no lo permite RC | ||
| + | * POD | ||
| + | * SERVICE | ||
| + | |||
| + | === kubectl | ||
| + | * ficheros de trabajo, copiar a mv-kubernetes-Vagrant-2020 (accesible en la máquina virtual a través de /vagrant) | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | |||
| + | ==== lab | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | * https:// | ||
| + | * '' | ||
| + | * deplegamos un pod y miramos:< | ||
| + | kubectl get pod -o wide | ||
| + | kubectl describe pod nodehelloworld.example.com</ | ||
| + | * montamos el servicio al POD (que permite relacionarse con el exterior)< | ||
| + | kubectl get service'' | ||
| + | kubectl describe service nodehelloworld-service</ | ||
| + | * acceder a un contenedor:< | ||
| + | * logs: <code bash> | ||
| + | * eventos del cluster: '' | ||
| + | * eliminar (2 alternativas):< | ||
| + | kubectl delete pod -f / | ||
| + | kubectl delete service nodehelloworld-service</ | ||
| + | * '' | ||
| + | * Visual Studio Code, extensiones para facilitar los yaml | ||
| + | * kubernetes templates | ||
| + | * u otros... ¿? | ||
| + | |||
| + | ==== lab | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | * '' | ||
| + | * mala práctica: '' | ||
| + | * desplegar:< | ||
| + | * si elimino uno de los pods, el RC se encarga de levantar otro< | ||
| + | kubectl describe pod helloworld-controller-xxxxx | ||
| + | kubectl delete pod helloworld-controller-xxxxx | ||
| + | kubectl get pods --show-labels</ | ||
| + | * Para escalar nuestro rc, podemos realizarlo mediante las dos comandos:< | ||
| + | kubectl scale rc helloworld-controller --replicas=4</ | ||
| + | * <code bash> | ||
| + | kubectl get service | ||
| + | kubectl describe service helloworld-controller-service</ | ||
| + | * http:// | ||
| + | * Para finalizar el laboratorio eliminamos el rc, y veremos que se eliminan los pods, asiciados a este rc:<code bash> | ||
| + | kubectl delete rc helloworld-controller | ||
| + | kubectl get pod,rc | ||
| + | kubectl delete service helloworld-controller-service</ | ||
| + | |||
| + | === labels | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * todo se relaciona con etiquetas | ||
| + | * restricciones (documentación) | ||
| + | ==== lab (labels) | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | |||
| + | * desplegar un pod:< | ||
| + | kubectl get pods --show-labels</ | ||
| + | * cambiar etiquetas:< | ||
| + | kubectl get pods --show-labels | ||
| + | kubectl get pods --selector owner=miempresa | ||
| + | kubectl get pods -l env=development | ||
| + | </ | ||
| + | * lanzamos otro pod:< | ||
| + | kubectl get pods -l 'env in (production, | ||
| + | kubectl delete pods -l 'env in (production, | ||
| + | |||
| + | ==== lab | ||
| + | * [[https:// | ||
| + | * < | ||
| + | kind: Pod | ||
| + | metadata: | ||
| + | name: nginx | ||
| + | spec: | ||
| + | containers: | ||
| + | - name: nginx | ||
| + | image: nginx: | ||
| + | ports: | ||
| + | - containerPort: | ||
| + | * <code bash> | ||
| + | kube expose pod nginx --type=NodePort nginx-service # no funciona, falta una etiqueta | ||
| + | kube label pods nginx app=miapp | ||
| + | kubectl expose pod nginx --type=NodePort nginx-service # el servicio se engancha a través de la etiqueta | ||
| + | kubectl describe service nginx-service</ | ||
| + | * mirar **EndPoints** para ver que el servicio está relacionado con POD | ||
| + | * si hay varias etiquetas, relaciona con todas | ||
| + | * el **kubectl expose** hace el enganche entre el pod y el service que crea a través de **labels(parte pod)-selector(parte service)** y del **containerPort(parte pod)-targetPort(parte service)**. Estos valores los has de setear tu si pasas toda la inforación en el .yml | ||
| + | |||
| + | ==== lab | ||
| + | <callout type=" | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | * 2-Despliegue de Aplicaciones Kubernetes/ | ||
| + | </ | ||
| + | * despliegue POD desde CLI (demo):< | ||
| + | * desplegamos 2 contenedores:< | ||
| + | kubectl exec twocontainers -c shell -i -t -- bash # muestra la información del POD (y los dos contenedores) | ||
| + | </ | ||
| + | * para acceder a uno de los contenedores de ese pod, hay que usar el parámetro **-c**:< | ||
| + | * los contenedores no tienen IP propia, se hablan a través de localhost | ||
| + | * '' | ||
| + | * uso: concepto de sidecars container | ||
| + | * un pod no está **RUNNIG** si no están todos los contenedores arriba | ||