Instalamos kubectl y minikube

#!/bin/bash

curl -LO «https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl»
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# install minikube

curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

minikube start –driver=docker –force
sudo sysctl fs.protected_regular=0 # si vas a ejecutar minikube como root

# minikube start –driver=docker –force -p cluster DEV –nodes=2

kube config set memory 4G -p nombredelperfil
reiniciará el container que tiene el cluster de kubernetes

ver con que clsuter estas trabajando
minikube profile
se puede revisar el fichero de configuración de conexión contra cluster de kubernetes, está en .kube/config
cada vez que se crea un cluster, se añase info a este fichero

a cada cluster le corresponde un contexto, indica a que cluster, usuario y carpeta con la que va a trabajar
importante el current-context, que indica con que cluster estas trabajando

para cambiar de cluster, puede ejecutar:wq
minikube profile nombrecluster

kubectl get nodes
# minihube status
# minikube logs
# minikube ip
# minikube delete -p nombreclsuter

minikube ssh -> permite conectar por SSH directamente con el cluster

con el dashboard se puede gestionar
minikube dashboard

indicara una url para conectar, ejemplo:
http://127.0.0.1:45115/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

ejecutar en otra consola
kubectl proxy –address=0.0.0.0 –accept-hosts=’.*’

ahora podras acceder a través del proxy:
http://192.168.24.139:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/daemonset?namespace=default

minikube, puede tener diferentes containers runtime
https://minikube.sigs.k8s.io/docs/runtimes/

minikube start –container-runtime=cri-o -p newcluster

PODS
Los PODS son la unidad mínima de trabajo en kubernetes. Envoltura donde se ejecutan contenedores. El POD va a darle una funcionalidades adiciaonales que no tiene un contenedor por si mismo. un PDO puede tener varios contenedores, aunque lo más habitual es que los PODS sólo tengan un contenedor.
el POD, va a proveer al container de direcciones, puertos, hostname, memoria, sockets, volúmenes, etc englobado dentro de una sola IP
un POD, se despliega dentro de un nodo de un worker del cluster

los POD no tienen estado, similar a un container.

lo ideal es tener containers independientes en cada POD, de forma que no tengan dependencias respecto al ciclo de vida, para hacer un upgrade, un reinicio, un backup, etc

además sólo existe una IP para todos los containers que estén dentro del mismo POD
si tienes 2 componentes que están unidos, de forma dependiente uno con el otro, y no dependiente de otros servicios, en ese caso podrían estar 2 containers juntos en el mismo POD

Creación de forma imperativa
kubectl run nginxpro –image=nginx
kubectl get pods -o wide

kubectl describe pod/nginxpro

ejecutar un comando en su interior:
kubectl exec nginxpro — ls

entra en modo interactivo
kubectl exec nginxpro -it — bash
otro ejemplo:
kubectl run apache –image=httpd –port=8080
kubectl logs apache

para desplegar imágenes en kubernetes, se puede realizar de modo imperativo. Cuando tenemos un cluster se despliega directamente un container en un POD. Lo recomendado es realizarlo de forma declarativa mediante un YAML, fichero de manifest

kubectl proxy –> escuchará el servicio en 127.0.0.1
kubectl proxy –address=0.0.0.0 –accept-hosts=’.*’ –> escuchara externamente
abrirá en el server un puerto para consultar por el cluster y aplicaciones

8001/healthz
indica si el cluster está correcto

8001/api/v1
muestra todos los recursos

8001/api/v1/namespaces/default/pods/nginxpro/proxy
se mostrará el contenido del pod nginxpro

para exponer un pod que está dentro del cluster

kubectl expose pod nginxpro –port=80 –name=nginxpro –type=LoadBalancer
responderá:
service/nginxpro exposed

–port es el puerto interno del servicio
–name sino se especifica dejará el mismo nombre del pod

ahora con el comando kubectl get svc se mostrarán 2 servicios

kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 20h
nginxpro LoadBalancer 10.100.227.98 80:30524/TCP 62s

el puerto 30524 redirige al puerto 80 de nginxpro
el servicio permite exponer un recurso fuera del cluster

minikube ip
la ip por defecto 192.168.49.2 por el puerto 30524 muestra el servicio del pod, pero sólo escucha localmente en la maquina dicha IP

con el port-forwarding es un recurso general de redes, también añadido a kubernetes. Es útil para hacer prubas y no estar creando servicios.
kubectl port-forward nginxpro 8082:80
escucha localmente

Conectando a un nodo de un cluster, existen multitud de containers con diferentes funciones de kubernetes. Puedes acceder con minikube ssh

ejecutar docker ps

ahora vamos a desplegar un pod mediante un fichero de manifest, ejemplo

kubectl create -f nginx.yaml

kubectl describe pod/nginx