Mostra la pàginaRevisions anteriorsQuè hi enllaçaExporta a PDFTorna dalt Aquesta pàgina és només de lectura. Podeu veure'n el codi font, però no podeu canviar-la. Consulteu el vostre administrador si penseu que això és degut a algun error. = DevOps Sesión 6 (2022-02-28) k8s == 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 === k8s <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.txt Darrera modificació: 09/03/2022 07:43per mate