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:s6 [09/02/2022 09:16] – creat mateinfo:cursos:pue:devops2022:s6 [09/03/2022 07:43] (actual) mate
Línia 1: Línia 1:
-= DevOps Sesión (2022-02-28)+= DevOps Sesión (2022-02-28) k8s
 == Documentación relacionada == Documentación relacionada
 +==== lab1
 +<callout type="info" icon="true">
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorio kubernetes Curso-DevOps.txt
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios  Kubernetes 2020.pdf, pág 20
 +  * 2-Despliegue de Aplicaciones Kubernetes/2-Laboratorios basicos kubernetes .pdf
 +  * 2-Despliegue de Aplicaciones Kubernetes/Seminario kubernetes.pdf
 +  * lab-docker/mv-kubernetes-Vagrant-2020
 +    * cluster 3 nodos k8s (1 master, 2 workers
 +</callout>
 +
 == Clase == Clase
-== TODO +=== k8s 
-<callout type="info" icon="true"></callout>+<callout type="info" icon="true"> 
 +2-Despliegue de Aplicaciones Kubernetes/Seminario kubernetes.pdf 
 +</callout> 
 +  * 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://kubernetes.io/es/docs/concepts/overview/components/  
 +    * 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) <- "avanzado" de RC 
 +      * 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/k8-for-devs-master 
 +    * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso 
 +    * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-Helm3-API-Metrics-Server 
 +    * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-labs2 
 +    * 2-Despliegue de Aplicaciones Kubernetes/Laboratorio-deployment-strategies 
 + 
 +==== lab 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios  Kubernetes 2020.pdf, pág 20 
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorio kubernetes Curso-DevOps.txt pag 52-100 
 +</callout> 
 +  * https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#run  
 +  * ''kubectl run'' 
 +  * deplegamos un pod y miramos:<code bash>kubectl apply -f /vagrant/kubernetes-curso/first-app/helloworld.yml 
 +kubectl get pod -o wide 
 +kubectl describe pod nodehelloworld.example.com</code> 
 +  * montamos el servicio al POD (que permite relacionarse con el exterior)<code bash>kubectl expose pod nodehelloworld.example.com %%--%%type NodePort %%--%%name nodehelloword-service 
 +kubectl get service'' # información del servicio 
 +kubectl describe service nodehelloworld-service</code> 
 +  * acceder a un contenedor:<code bash>kubectl exec -ti nodehelloworld.example.com %%--%% bash</code> 
 +  * logs: <code bash>kubectl logs nodehelloworld.example.com</code> 
 +  * eventos del cluster: ''kubectl get events'' 
 +  * eliminar (2 alternativas):<code bash>kubectl delete pod nodehelloworld.example.com 
 +kubectl delete pod -f /vagrant/kubernetes-curso/first-app/helloworld.yml 
 +kubectl delete service nodehelloworld-service</code> 
 +    * ''... --wait=false'': devuelve el control al prompt sin esperar a ejecutar la orden 
 +  * Visual Studio Code, extensiones para facilitar los yaml 
 +    * kubernetes templates 
 +    * u otros... ¿? 
 + 
 +==== lab 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios  Kubernetes 2020.pdf, pág 29 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/replication-controller/ 
 +  * 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorio kubernetes Curso-DevOps.txt pag. 100-142 
 +</callout> 
 +  * ''kubectl scale rc <controller> %%--%%replicas=3'' 
 +  * mala práctica: ''kubectl edit rc <controller>'' 
 +  * desplegar:<code bash>kubectl apply -f /vagrant/kubernetes-curso/replication-controller/helloworld-repl-controller.yml</code> 
 +  * si elimino uno de los pods, el RC se encarga de levantar otro<code bash>kubectl get rc -o wide 
 +kubectl describe pod helloworld-controller-xxxxx 
 +kubectl delete pod helloworld-controller-xxxxx 
 +kubectl get pods --show-labels</code> 
 +  * Para escalar nuestro rc, podemos realizarlo mediante las dos comandos:<code bash>kubectl scale --replicas=4 -f /vagrant/kubernetes-curso/replication-controller/helloworld-repl-controller.yml 
 +kubectl scale rc helloworld-controller --replicas=4</code> 
 +  * <code bash>kubectl expose rc  helloworld-controller --type=NodePort --name helloworld-controller-service 
 +kubectl get service 
 +kubectl describe service helloworld-controller-service</code> 
 +    * http://10.0.0.11:nodeport 
 +  * Para finalizar el laboratorio eliminamos el rc, y veremos que se eliminan los pods, asiciados a este rc:<code bash>kubectl get rc 
 +kubectl delete rc helloworld-controller 
 +kubectl get pod,rc 
 +kubectl delete service helloworld-controller-service</code> 
 + 
 +=== labels 
 +  * ''kubectl get pods %%--%%show-labels'' 
 +  * ''kubectl get all -l app=helloworld'' (o %%--%%selector) 
 +  * ''kubectl fet pods -l 'env in (production,development)' %%--wait%%=false'' 
 +  * todo se relaciona con etiquetas 
 +  * restricciones (documentación) 
 +==== lab (labels) 
 +<callout type="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/2-Laboratorios básicos kubernetes.pdf, pág 4 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-labs2/labels/ 
 +</callout> 
 + 
 +  * desplegar un pod:<code bash>kubectl apply -f /vagrant/kubernetes-labs2/labels/pod.yaml 
 +kubectl get pods --show-labels</code> 
 +  * cambiar etiquetas:<code bash>kubectl label pods labelex owner=miempresa 
 +kubectl get pods --show-labels 
 +kubectl get pods --selector owner=miempresa 
 +kubectl get pods -l env=development 
 +</code> 
 +  * lanzamos otro pod:<code bash>kubectl apply -f /vagrant/kubernetes-labs2/labels/anotherpod.yaml 
 +kubectl get pods -l 'env in (production, development)' 
 +kubectl delete pods -l 'env in (production, development)'</code> 
 + 
 +==== lab 
 +  * [[https://kubernetes.io/docs/concepts/workloads/pods]] 
 +  * <code>apiVersion: v1 
 +kind: Pod 
 +metadata: 
 +  name: nginx 
 +spec: 
 +  containers: 
 +  - name: nginx 
 +    image: nginx:1.14.2 
 +    ports: 
 +    - containerPort: 80</code> 
 +  * <code bash>kubectl apply -f pod.yml 
 +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</code> 
 +    * 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="info" icon="true"> 
 +  * 2-Despliegue de Aplicaciones Kubernetes/kubernetes-labs2/pods 
 +  * 2-Despliegue de Aplicaciones Kubernetes/2-Laboratorios básicos kubernetes.pdf, pág 1 
 +</callout> 
 +  * despliegue POD desde CLI (demo):<code bash> kubectl run sise --image=mhausenblas/simpleservice:0.5.0 --port=9876</code> 
 +  * desplegamos 2 contenedores:<code bash>kubectl apply -f /vagrant/kubernetes-labs2/pods/pod.yaml 
 +kubectl exec twocontainers -c shell -i -t -- bash # muestra la información del POD (y los dos contenedores) 
 +</code> 
 +  * para acceder a uno de los contenedores de ese pod, hay que usar el parámetro **-c**:<code bash>kubectl exec twocontainers -c shell -i -t -- bash</code> 
 +    * los contenedores no tienen IP propia, se hablan a través de localhost 
 +    * '' curl -s localhost:9876/info'' (desde shell) 
 +    * uso: concepto de sidecars container 
 +    * un pod no está **RUNNIG** si no están todos los contenedores arriba 
  • info/cursos/pue/devops2022/s6.1644426999.txt.gz
  • Darrera modificació: 09/02/2022 09:16
  • per mate