DevOps Sesión 8 (2022-03-07) k8s
Documentación relacionada
- 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/Laboratorio kubernetes Curso-DevOps.txt línea 481
Clase
secretos
- 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pag 91
- 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/mariadb-deployment-secret.yaml
create secret…
- docker-registry
- generic
- tls
- desde directorio, fichero o literal
- no son seguros, no están encriptados, estan en base64 →
kubectl get secret <nombre> -o yaml
yecho «….» | base64 –decode
- si tienes privilegios administrativos, puedes verlos (no será lo normal)
kubectl config get-contexts
kubectl create secret generic mariadb --from-literal=password=00000000 kubectl describe pod ... kubectl delete secret mariadb kubectl delete pod ... kubectl describe pod ...
en volumenes
- 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/deployment/helloworld-secrets-volumes.yml
- 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/deployment/helloworld-secrets.yml
- desplegar secretos usando volúmenes, al estilo SWARM
- creamos secreto
- creamos volumen asociando al secreto
- montamos el volumen en el pod
##El secreto: kubectl apply -f /vagrant/kubernetes-curso/deployment/helloworld-secrets.yml kubectl apply -f /vagrant/kubernetes-curso/deployment/helloworld-secrets-volumes.yml kubectl describe pod helloworld-deployment-... kubectl exec -ti helloworld-deployment-... -- /bin/bash #root@helloworld-deployment-78457f7dfc-zn2bf:/app# cat /etc/creds/password #root@helloworld-deployment-78457f7dfc-zn2bf:/app# cat /etc/creds/username
configmap
- 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pag 106
- cambios de configuración en caliente (si la aplicación lo soporta)
- no encriptación, todo en texto plano
kubectl create configmap
lab
- 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/mariadb-deployment-configmap.yaml
kubectl create cm mariadb --from-literal=root_password=00000000 --from-literal=mysql_usuario=usuario --from-literal=mysql_password=00000000 --from-literal=basededatos=test kubectl get cm kubectl describe cm mariadb kubectl apply -f /vagrant/kubernetes-curso/mariadb-deployment-configmap.yaml kubectl get pod kubectl exec -it mariadb-deploy-cm-... -- mysql -u usuario -p # show databases;
lab
- 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/configmap/*
- 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)
kubectl create configmap nginx-config --from-file=/vagrant/kubernetes-curso/configmap/reverseproxy.conf kubectl get cm kubectl describe cm nginx-config kubectl get configmap nginx-config -o yaml kubectl apply -f /vagrant/kubernetes-curso/configmap/ # desplegamos los 2 ficheros .yml
volúmenes
- 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pag 144
- 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: Donde especificamos el volumen persistente
- PersistentVolumeClaim: Donde reclamamos espacio en el volumen
- Modos de acceso:
- ReadWriteOnce: read-write solo para un nodo (RWO)
- ReadOnlyMany: read-only para muchos nodos (ROX)
- ReadWriteMany: read-write para muchos nodos (RWX)
- 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
- 2-Despliegue de Aplicaciones Kubernetes/Laboratorio kubernetes Curso-DevOps.txt línea 685
- 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/webtest-volum-emptydir.yml
kubectl apply -f /vagrant/kubernetes-curso/webtest-volum-emptydir.yml kubectl get pod kubectl describe pod webtest kubectl exec -ti webtest -c contenedor2 -- bash # touch /web2/contenedor2 kubectl exec -ti webtest -c contenedor1 -- ash # touch /web1/contenedor1
lab
- 2-Despliegue de Aplicaciones Kubernetes/Laboratorio kubernetes Curso-DevOps.txt línea 717
- 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/mysql-affinity.yml
- en este caso se usa affinity (más sencillo con nodeSelector o nodeName)
kubectl get nodes 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 /vagrant/kubernetes-curso/mysql-affinity.yml kubectl exec -it mysql-... -- mysql -u root -p mysql> create database kubernetes; mysql> show databases; kubectl delete deployment mysql kubectl apply -f /vagrant/kubernetes-curso/mysql-affinity.yml kubectl exec -it mysql-... -- mysql -u root -p mysql> show databases; kubectl label node worker1 env- # elimina la etiqueta (el guión final)
lab
- 2-Despliegue de Aplicaciones Kubernetes/Laboratorio kubernetes Curso-DevOps.txt línea 790
- 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pag 151
- 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/nfs-pv-pvc.yaml
- 2-Despliegue de Aplicaciones Kubernetes/kubernetes-curso/mysql-storage-nfs.yaml
- instalar NFS en master:
sudo apt install nfs-kernel-server sudo mkdir /bd-nfs sudo mkdir /var/shared sudo chmod 777 /bd-nfs/ sudo chown nobody:nogroup /bd-nfs/ sudo vi /etc/exports # /bd-nfs *(rw,no_root_squash) # /var/shared 10.0.0.0/24(rw,sync,no_root_squash,no_all_squash) sudo systemctl restart nfs-kernel-server sudo systemctl status nfs-kernel-server sudo systemctl enable nfs-kernel-server
kubectl apply -f /vagrant/kubernetes-curso/nfs-pv-pvc.yaml kubectl get pv,pvc kubectl apply -f /vagrant/kubernetes-curso/mysql-storage-nfs.yml 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
kubectl drain worker1 --delete-local-data --ignore-daemonsets
kubectl uncordon worker1
k0sctl
- 2-Despliegue de Aplicaciones Kubernetes/Install kubernetes k0sctl
- 2-Despliegue de Aplicaciones Kubernetes/Laboratorio Instalar Cluster Kubernetes Alumnos (kubeadm)
- Lens (portainer para k8s)
extra
kubectl get pod -A -o wide
kubectl -n kube-system describe pod kube-flannel…
→ ConfigMap ← 1 pod en cada nodo (servicio global en Swarm)- HELM:
- yum o apt en k8s
- kubeapps hub
- RBAC - reglas de acceso