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ó

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
info:cursos:pue:devops2022:s7 [02/03/2022 11:01] mateinfo:cursos:pue:devops2022:s7 [09/03/2022 07:39] (actual) mate
Línia 1: Línia 1:
-= DevOps Sesión 7 (2022-03-02)+= DevOps Sesión 7 (2022-03-02) k8s
 == Documentación relacionada == Documentación relacionada
 +<callout type="info" icon="true">
   * lpi-devops-study-master -> documentación estudio   * lpi-devops-study-master -> documentación estudio
   * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorio kubernetes Curso-DevOps.txt   * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorio kubernetes Curso-DevOps.txt
   * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf   * 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/2-Laboratorios basicos kubernetes .pdf
 +</callout>
 +
 == Clase == Clase
   * **~/.kube/config**: credenciales para conectar con el cluster   * **~/.kube/config**: credenciales para conectar con el cluster
Línia 15: Línia 18:
  
 === deployment === deployment
 +<callout type="info" icon="true">
   * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pàg 37   * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pàg 37
   * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/deployment   * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/deployment
 +</callout>
   * [[https://kubernetes.io/es/docs/concepts/workloads/controllers/deployment/]]   * [[https://kubernetes.io/es/docs/concepts/workloads/controllers/deployment/]]
   * desplegamos:<code bash>kubectl apply -f /vagrant/kubernetes-curso/deployment/helloworld.yml --record   * desplegamos:<code bash>kubectl apply -f /vagrant/kubernetes-curso/deployment/helloworld.yml --record
Línia 59: Línia 64:
 kubectl delete service helloworld-deployment-service kubectl delete service helloworld-deployment-service
 kubectl get service,deployment</code> kubectl get service,deployment</code>
-  * estrategias de update: +=== estrategias de update: 
-    2-.../Seminario kubernetes Troubleshooting  Deployments Applications.pdf pag 41 +<callout type="info" icon="true"> 
-    * [[https://kubernetes.io/es/docs/concepts/workloads/controllers/deployment/#estrategia]] +2-Despliegue de Aplicaciones Kubernetes/Seminario kubernetes Troubleshooting  Deployments Applications.pdf pag 41 
-    * rollingupdate +2-Despliegue de Aplicaciones Kubernetes/Laboratorio-deployment-strategies/deployment-blue-green 
-      * actualización continua. Se crean los de la nueva versión, y cuando estén listos, va eliminando los viejos. +</callout> 
-      * maxSurge: +  * [[https://kubernetes.io/es/docs/concepts/workloads/controllers/deployment/#estrategia]] 
-      * maxUnavailable +  * rollingupdate 
-    * recreate +    * actualización continua. Se crean los de la nueva versión, y cuando estén listos, va eliminando los viejos. 
-      * los PODs se eliminan antes de que los nuevos se creen. +    * maxSurge: 
-      * se cae el servicio y se levanta. +    * maxUnavailable 
-      * para aplicaciones sin estado +  * recreate 
-    * Canary: +    * los PODs se eliminan antes de que los nuevos se creen. 
-      * despliegue progresivo, sustituyendo 1 a 1 y siguiendo si todo va bien +    * se cae el servicio y se levanta. 
-    * Blue-Green +    * para aplicaciones sin estado 
-      * se despliegan las 2 versiones y el servicio cambia de una a otra +  * Canary: 
-      * se elimina la versión anterior +    * despliegue progresivo, sustituyendo 1 a 1 y siguiendo si todo va bien 
-      * 2-Despliegue de Aplicaciones Kubernetes/Laboratorio-deployment-strategies/deployment-blue-green +  * Blue-Green 
-    * A/B +    * se despliegan las 2 versiones y el servicio cambia de una a otra 
-      * estrategia de pruebas de diferentes propotipos +    * se elimina la versión anterior 
 +  * A/B 
 +    * estrategia de pruebas de diferentes propotipos
   * HPA = Horizontal Pod autoscaler   * HPA = Horizontal Pod autoscaler
-    * defines max y mínimos y hasta donde puede ampliar los PODs+  * defines max y mínimos y hasta donde puede ampliar los PODs 
 === namespaces === namespaces
-  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf, pág 176+<callout type="info" icon="true"> 
 +2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf, pág 176 
 +</callout>
   * Los namespaces (espacios de nombres) en Kubernetes permiten establecer un nivel adicional de separación entre los contenedores que comparten los recursos de un clúster.   * Los namespaces (espacios de nombres) en Kubernetes permiten establecer un nivel adicional de separación entre los contenedores que comparten los recursos de un clúster.
     * colisión de nombres     * colisión de nombres
Línia 108: Línia 117:
 </code> </code>
  
 +=== descubrimiento (Kubernetes service discovery)
 +<callout type="info" icon="true">
 +2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf, pág 132
 +</callout>
 +  * Cada vez que se crea un nuevo servicio se crea un registro de tipo A con el nombre **<servicio>.<namespace>.svc.cluster.local**
 +  * Para cada puerto nombrado se crea un registro SRV del tipo **_nombre-puerto._nombre-protocolo.my-svc.my-namespace.svc.cluster.local** que resuelve el número del puerto y al CNAME: **servicio.namespace.svc.cluster.local**
 +  * Para cada pod creado con dirección IP 1.2.3.4, se crea un registro A de la forma **1-2-3-4.default.pod.cluster.local**.
 +  * pods en **kube-system** **coredns**
 +  * <code bash>kubectl get rs.apps -n kube-system
 +kubectl get pod -o wide -n kube-system
 +kubectl describe pod coredens -n kube-system
 +kubectl get service -o wide -n kube-system # DNS del cluster
 +</code>
 +
 +==== lab
 +<code bash>kubectl run -i --tty centos1 --image centos:centos7 --restart=Never -- bash
 +# en el pod:
 +yum install dns-utils
 +nslookup...
 +</code>
 +
 +=== Healthcheck
 +<callout type="info" icon="true">
 +2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf, pág 84
 +</callout>
 +  * Los Healthchecks son un mecanismo fundamental para cargas productivas. Es el principal mecanismo por el cual Kubernetes va a saber si nuestros Pods están funcionando correctamente o no.
 +  * por CLI (o comando) o por HTTPGets
 +  * 2 tipos "básicos":
 +    * ReadinessProbe: indica si está listo para recibir tráfico
 +    * LivenessProbe: indica que ese pod está funcionando
 +  * Kubernetes:
 +    * Si Readiness falla -> detiene el tráfico al POD
 +    * Si Liveness falla -> reinica el pod
 +    * Si Readiness funciona -> restablece el tráfico hacía el pod
 +  * <code yaml>...
 +  containers:
 +  - name: jboss-lab
 +    image: docker.example.com/jboss:1
 +    imagePullPolicy: IfNotPresent
 +    
 +   livenessProbe:
 +      initialDelaySeconds: 30
 +      periodSeconds: 15 
 +      exec:
 +        command:
 +          - /bin/sh
 +          - -c
 +          - /opt/jboss/wildfly/bin/jboss-cli.sh --connect --commands=ls | grep 'server-state=running'
 +   
 +   readinessProbe:
 +      initialDelaySeconds: 30
 +      periodSeconds: 5
 +      exec:
 +        command:
 +          - /bin/sh
 +          - -c
 +          - /opt/jboss/wildfly/bin/jboss-cli.sh --connect --commands=ls | grep 'server-state=running'
 +   
 +    livenessProbe:
 +          httpGet:
 +            path: /status
 +            port: 8080
 +          initialDelaySeconds: 30
 +          timeoutSeconds: 10</code>
 +  * InitialDelaySeconds: espera X a que arranque
 +  * timeoutSeconds: cada X comprueba de nuevo
 +  * failure Threshold: número de veces para darlo por malo
 +
 +==== lab
 +<callout type="info" icon="true">
 +2-Despliegue de Aplicaciones Kubernetes/k8-for-devs-master/healthchecks
 +</callout>
 +<code yaml>apiVersion: apps/v1
 +kind: Deployment
 +metadata:
 +  name: deployment-lab
 +  labels:
 +    app: nginx
 +spec:
 +  replicas: 3
 +  selector:
 +    matchLabels:
 +      app: nginx
 +  template:
 +    metadata:
 +      labels:
 +        app: nginx
 +    spec:
 +      containers:
 +      - name: nginx
 +        image: nginx
 +        ports:
 +        - containerPort: 80
 +        livenessProbe:
 +          httpGet:
 +            path: /
 +            port: 80
 +          initialDelaySeconds: 10
 +          timeoutSeconds: 10</code>
 +<code bash>kubectl apply -f /vagrant/k8-for-devs-master/healthchecks/healcheck.yaml
 +kubectl get pod
 +
 +kubectl get deployment.apps/deployment-lab -o yaml
 +
 +kubectl describe deployment.apps/deployment-lab  |grep -i Liveness
 +    # Liveness: http-get http://:80/ delay=30s timeout=10s period=10s #success=1 #failure=3
 +</code>
 +
 +==== lab
 +<callout type="info" icon="true">
 +2-Despliegue de Aplicaciones Kubernetes/2-Laboratorios basicos kubernetes .pdf pág 7
 +</callout>
 +<code bash>kubectl apply -f /vagrant/kubernetes-labs2/healthz/pod.yaml
 +kubectl describe pod hc
 +kubectl apply -f /vagrant/kubernetes-labs2/healthz/badpod.yaml
 +kubectl describe pod badpod
 +kubectl get pods # mirar reinicios
 +</code>
 +
 +==== lab
 +<code bash>
 +kubectl create ns miercoles2
 +kubectl config set-context --current --namespace=miercoles2
 +kubectl run --image nginx --port=80 aplica1
 +kubectl expose pod aplica1 --type=NodePort --name aplica1-service
 +kubectl describe service aplica1-service
 +</code>
  
-== TODO +== Extra 
-<callout type="info" icon="true"></callout>+  * ''kubectl get events'' 
 +  * ''kubectl logs --previous=true'': mostrar logs de pods/contenedores anteriores 
 +    * centralizar
  • info/cursos/pue/devops2022/s7.1646247676.txt.gz
  • Darrera modificació: 02/03/2022 11:01
  • per mate