Kubernetes: Udemy Kubernetes al Completo

  • Otros Orquestadores
  • Historia

Estandares

  • Son dos estandares
  • Espeficiación de la imagen
  • Especificación de Runtime
  • RunC donado por docker
  • Otras herramientas

cncf

Arquitectura Maestro / Control Plane

1. API-SERVER

  • El maestro crear una API-SERVER (permite solicitudes http POST tipo YAML para desplegar componentes)

2. Controller Manager

  • El siguiente componente es el controlller manager
  • Gestiona varias caracteristicas del cluster
  • Tiene varios componentes que estan escuchando y cuando itienen que
    • Node Controller: gestion los nodos (esta vivo se cayó)
    • Replication Controller (hace que las copias esten correctas)
    • Endpoints Controller (ofrece un punto de entrada a un servicio)
    • Service Account & Token Controllers (cuentas, autorización)

3. Scheduler

  • Es el que define donde se despliega cada contenedor dentro del cluster

4. ETCD Almacen Clave Valor

  • Es una base de datos llamada ETCD
  • De tipo clave-valor

5. Kubernetes DNS

  • Es un DNS interno
  • Que esta configurado en todos los nodos
  • Que define todos los dominios

6. Cloud Controller Manager

  • Si el despliegue se da en un servicio de nube
  • Este controlador es el encargado de comunicarse con esos servicios del proveedor

Arquitectura Esclavo / Nodo

1. Container Runtime

  • Es el que ejecuta los contenedores en el nodo
  • puede ser docker / Containerd / Cri io /
  • Pero cualquiera que compatible con Kubernetes CRI

2. POD

  • Es el componente más pequeño
  • Se podría decir que es un contenedor pero pueden ser varios
  • Forman una unidad de trabajo
  • Esto es lo que se despliega

3. Kuberlet (data plane)

  • Es el servicio que se comunica con el maestro
  • escuchando peticiones / estado del nodo / recibiendo y mandando mensajes
  • Es el core de kubernet dentro del nodo

4. Kube-proxy

  • Es un network proxy que permite la conectividad del nodo con todos los componentes del cluster

Tipos de Instalación

  • Hay varias formas
    • Local o un solo nodo
    • Instalación manual a través de alguna herramienta como kubeadm
    • Instalación automatica con herramienta kubespray
    • Gestionados por proveedor AWS o Azure

1. Un solo nodo

2. Instalación Manual

3. Instalación Automática

4. Gestionado por Proveedor

Distribuciones de Kubernetes

  • On -premise
  • Cloud

Playground

kubectl

  • Es una herramienta de tipo comando que nos permite trabajar con cluster de kubernetes
  • No viene con ninguna herramienta hay que instalarla
  • La versión puede afectar si no es compatible con versiones anteriores de kubernetes
  • en esta ruta contramos como instarla
  • https://kubernetes.io/docs/tasks/tools/

Install kubectl en linux

  • con snap
snap install kubectl --classic
kubectl version --client

Install Minikube

  • Es una herramienta que nos permite crear un cluster de kubernetes de un solo nodo
  • Soporta distintos tipos de container Runtimes: rkt, conteinerd, CRI-O
  • Para arrancarlo hay que indicarle el driver

Instalación de docker

  • Ejecutamos
# Actualizar
sudo apt update
sudo apt upgrade -y

# Dependencias
sudo apt install -y ca-certificates curl gnupg lsb-release

# Agregar la clave GPG
sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg


# Agregar el repositorio de Docker
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Actualizar índices de paquetes e instalar Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Verificar que Docker esté funcionando
sudo docker run hello-world

# (Opcional) Permitir ejecutar Docker sin sudo
# NOTA: Salir de root
sudo usermod -aG docker $USER
#NOTA: Cerramos la sesion y volvemos a ingresar

# Verifica la versión de Docker
docker --version

Instalación de Minikube

apt install curl

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb

sudo dpkg -i minikube_latest_amd64.deb

minikube version
  • Para iniciarlo
minikube start --driver=docker 
  • Resultado
  • estado
minikube status

Minikube Comandos

  • Conocer todos los comando
minikube
  • Resultado
minikube provisions and manages local Kubernetes clusters optimized for development workflows.

Comandos basicos:
  start            Starts a local Kubernetes cluster
  status           Gets the status of a local Kubernetes cluster
  stop             Stops a running local Kubernetes cluster
  delete           Elimina un cluster de Kubernetes local
  dashboard        Acceder al panel de Kubernetes que corre dentro del cluster minikube
  pause            pause Kubernetes
  unpause          unpause Kubernetes

Images Commands:
  docker-env       Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)
  podman-env       Configura un entorno para usar el servicio Podman de minikube
  cache            Manage cache for images
  image            Manage images

Comandos de configuración y administración
  addons           Habilita o deshabilita un complemento de minikube
  config           Modify persistent configuration values
  profile          Obtener o listar los perfiles actuales (clusters)
  update-context   Update kubeconfig in case of an IP or port change

Networking and Connectivity Commands:
  service          Returns a URL to connect to a service
  tunnel           Conectar a los servicios LoadBalancer

Comandos avanzados: 
  mount            Mounts the specified directory into minikube
  ssh              Log into the minikube environment (for debugging)
  kubectl          Run a kubectl binary matching the cluster version
  node             Usa (add, remove, list) para agregar, eliminar o listar nodos adicionales.
  cp               Copie el fichero dentro de minikube

Troubleshooting Commands:
  ssh-key          Retrieve the ssh identity key path of the specified node
  ssh-host         Retrieve the ssh host key of the specified node
  ip               Retrieves the IP address of the specified node
  logs             Returns logs to debug a local Kubernetes cluster
  update-check     Print current and latest version number
  version          Print the version of minikube
  options          Show a list of global command-line options (applies to all commands).

Other Commands:
  completion       Generate command completion for a shell
  license          Outputs the licenses of dependencies to a directory

Use "minikube <command> --help" for more information about a given command.
  • Estado
minikube status
  • logs
minikube logs
  • IP saber la ip
minikube ip
  • Basicos
Comandos basicos:
  start            Starts a local Kubernetes cluster
  status           Gets the status of a local Kubernetes cluster
  stop             Stops a running local Kubernetes cluster
  delete           Elimina un cluster de Kubernetes local
  dashboard        Acceder al panel de Kubernetes que corre dentro del cluster minikube
  pause            pause Kubernetes
  unpause          unpause Kubernetes
  • Avanzados
Comandos avanzados: 
  mount            Mounts the specified directory into minikube
  ssh              Log into the minikube environment (for debugging)
  kubectl          Run a kubectl binary matching the cluster version
  node             Usa (add, remove, list) para agregar, eliminar o listar nodos adicionales.
  cp               Copie el fichero dentro de minikube
  • Logearse dentro del cluster
minikube ssh

minikube: Directorios

  • En el directorio del usuario donde se instala minikube se crean 2 directorios
ls -la /home/cgi/
  • .kube: directorio del kubernete
  • .minikube: directorio de configuración de minikube

.kube

  • Contiene el archivo de configuración del cluster
cat /home/cgi/.kube/config
  • Contenido
apiVersion: v1
clusters:
- cluster:
    certificate-authority: /home/cgi/.minikube/ca.crt
    extensions:
    - extension:
        last-update: Wed, 11 Jun 2025 09:52:48 CST
        provider: minikube.sigs.k8s.io
        version: v1.36.0
      name: cluster_info
    server: https://192.168.58.2:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    extensions:
    - extension:
        last-update: Wed, 11 Jun 2025 09:52:48 CST
        provider: minikube.sigs.k8s.io
        version: v1.36.0
      name: context_info
    namespace: default
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /home/cgi/.minikube/profiles/minikube/client.crt
    client-key: /home/cgi/.minikube/profiles/minikube/client.key
  • Información del cluster
- cluster:
    certificate-authority: /home/cgi/.minikube/ca.crt
    extensions:
    - extension:
        last-update: Wed, 11 Jun 2025 09:52:48 CST
        provider: minikube.sigs.k8s.io
        version: v1.36.0
      name: cluster_info
    server: https://192.168.58.2:8443
  name: minikube
  • Información del contexto
- context:
    cluster: minikube
    extensions:
    - extension:
        last-update: Wed, 11 Jun 2025 09:52:48 CST
        provider: minikube.sigs.k8s.io
        version: v1.36.0
      name: context_info
    namespace: default
    user: minikube
  name: minikube
current-context: minikube
  • Información de la conexión
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /home/cgi/.minikube/profiles/minikube/client.crt
    client-key: /home/cgi/.minikube/profiles/minikube/client.key

Minikube Listar Clúster

  • Para listar los cluster existentes
minikube profile list

Minikube crear clúster de más de un nodo

  • ejecutamos
minikube start --driver=docker -p clusterDesarrollo --nodes=2
  • Esto lo que hace es añadir la información del cluster en el archivo
nano /home/cgi/.kube/config
  • Como se ve aquí
clusters:
- cluster:
    certificate-authority: /home/cgi/.minikube/ca.crt
    extensions:
    - extension:
        last-update: Tue, 15 Jul 2025 16:12:05 CST
        provider: minikube.sigs.k8s.io
        version: v1.36.0
      name: cluster_info
    server: https://192.168.67.2:8443
  name: clusterDesarrollo
- cluster:
    certificate-authority: /home/cgi/.minikube/ca.crt
    extensions:
    - extension:
        last-update: Tue, 15 Jul 2025 14:19:20 CST
        provider: minikube.sigs.k8s.io
        version: v1.36.0
      name: cluster_info
    server: https://192.168.58.2:8443
  name: minikube
  • Además agrega un contexto por cada cluster
contexts:
- context:
    cluster: clusterDesarrollo
    extensions:
    - extension:
        last-update: Tue, 15 Jul 2025 16:12:05 CST
        provider: minikube.sigs.k8s.io
        version: v1.36.0
      name: context_info
    namespace: default
    user: clusterDesarrollo
  name: clusterDesarrollo
- context:
    cluster: minikube
    extensions:
    - extension:
        last-update: Tue, 15 Jul 2025 14:19:20 CST
        provider: minikube.sigs.k8s.io
        version: v1.36.0
      name: context_info
    namespace: default
    user: minikube
  name: minikube
current-context: clusterDesarrollo

Minikube: Modificar propiedades de procesamiento de los contenedores

  • Asignar memoria RAM se asigna
  • Pero va a tener efecto hasta que reinicie
minikube config set memory 4GB

Consultar los valores de la configuración

  • Solo para los valores que yo ya modificado no lo valores defecto
minikube config get memory
  • Estos valores se encuentran aquí
nano /home/cgi/.minikube/config/config.json

Cluster defecto

  • ejecutamos
minikube profile
  • esto lo que hace es obtener la propiedad current-profile del archivo de configuración de minikube
cat /home/cgi/.kube/config | grep current-context

minikube: cambiar de profile

  • ejecutamos
minikube profile nombre_cluster
  • verificación
cat /home/cgi/.kube/config | grep current-context
  • Y con
cat /home/cgi/.kube/config | grep current-context
  • Podemos ver el activo

Minikube: Dashboard

  • Para abrir el dashboard ejecutamos cuando estamos trabajando en un sistema localhost que tiene interfaz gráfica
minikube dashboard
  • Si es una MV tenemos un problema por que no puede ser accedido desde afuera de la MV
  • Tendriamos que ingresar por reminna

Minikube: Modificar el container-runtime

minikube start --container-runtime=docker
minikube start --container-runtime=containerd
minikube start --container-runtime=crio
  • Por ejemplo crear nuevo cluster con cri-o
minikube start --container-runtime=cri-o -p cluster2

Minikube: Borrar cluster

  • Ejecuta
minikube delete -p nombre_cluster

#Ejemplo
minikube delete -p cluster2

Windows: Instalación de Docker Desktop

  • Docker desktop se puede instarla de dos formas con:
    • Hyper-V
    • WSL2- Windows SubSystem for Linux (Recomendada, permite utilizar un linux bajo Windows)
  • Para descargar docker desktop:
  • Requisitos WSL2
  • Requisitos hiper-v

Instalación de WSL2

  • Abrimos cmd y digitamos
winver
  • Y nos muestra la información para ver si cumplimos los requisitos

Activar WSL2

  • Ingresamos a Activar y desactivar Caracteristicas de Windows
  • Y marcar Subsistema de Windows para Linux
  • Comienza a instalar