Kubectl. Herramienta para trabajar con un cluster de kubernetes

Que es kubectl

Es una Herramienta CLI que nos permite gestionar y trabajar con clusters.

Es una Herramienta agnostica, lo que significa que no depende de ninguna distribucion de kubernetes en concreto. Se conecta contra cualquier distribucion de kubernetes del mercado.

Intruduccion a Minikube

Es una herramienta que permite ejecutar un entorno kubernetes de forma local.

Permite aprender y conocer kubernetes en un entorno sencillo y sin necesidad de muchos recursos.

Funciona dentro de un entorno de virtualizacion (vms) o de contenedores como Docker.

Dispone de casi todas la caracteristicas de sus hermanos mayores.

  • DNS
  • Dashboards
  • ConfigMaps y Secrets
  • ETC.

Soporta distitnos tipos de Container runtime: rkt, containerd,CRI-O

Requisitos de Minikube

  • Instalar kubectl, una herramienta para trabajar con un cluster kubernetes.
  • Un hypervisor o un container runtime
    • Docker
    • Podman
    • VirtualBox
    • KVM
    • QEMU
    • None
  • Usar el flag --driver para identificar el tipo de entorno que queremos usar, por ejemplo: --diver=docker, --driver=virtualbox.
  • La maquina donde trabajamos tiene que tener en la BIOS activado la virtualizacion. VT-X/AMD-v

Start Minikube

Una vez lo hayamos instalado:

minikube start --driver=docker

Comandos minikube

Para ver todos los comandos de minikube hacemos minikube.

  1. minukube status: Vemos si esta funcionando minikube.
  2. minukube logs: Genera la salida de los logs. 3, minikube ip: Nos permite saber a que ip conectarnos cuando tengamos que hacer algun tipo de acceso. 4.Otros son stop,start, delete, dashboard (para monitoreo), pause,unpause

Si usamos delete hay que tener cuidado porque perderiamos todo.

Comandos avanzados

  1. mount: Se utiliza para montar un directorio de tu máquina anfitriona (host) dentro de la máquina virtual (VM) que ejecuta Minikube. Esto permite que las aplicaciones y los contenedores que se ejecutan en Minikube accedan y utilicen archivos y directorios de tu sistema local.
  2. ssh: Nos permite meternos dentro del entorno de minikube. 3, kubectl: Este viene con minikube, pero nosotros usaremos el que instalamos antes. Si quisieramos usar el de minukube seria minikube kubectl. 4.node nos muestra los nodos (en las ultimas versiones podemos crear mas de uno). 5.cp copia un archivo dentro de minukube.

Donde estan los ficheros de Minikube?

En el $HOME encontramos .kube es un directorio importante porque lo utilizan todos los kubernertes.

Tambien tenemos .minukube este si que es exclusivo de minukube.

Que hay en .kube?

Si nos posicionamos dentro de .kube y hacemos cat config veremos las conexiones de los clusters de kubernetes con los que estamos trabajando.

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /home/akerman/.minikube/ca.crt
    extensions:
    - extension:
        last-update: Sat, 28 Sep 2024 06:26:12 -03
        provider: minikube.sigs.k8s.io
        version: v1.34.0
      name: cluster_info
    server: https://192.168.49.2:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    extensions:
    - extension:
        last-update: Sat, 28 Sep 2024 06:26:12 -03
        provider: minikube.sigs.k8s.io
        version: v1.34.0
      name: context_info
    namespace: default
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /home/akerman/.minikube/profiles/minikube/client.crt
    client-key: /home/akerman/.minikube/profiles/minikube/client.key

En pocas palabras tiene la informacion de conexion contra otros entornos de kubernetes.

Que hay en .minikube?

Aquí tienes la explicación en formato Markdown:

El directorio .minikube se encuentra en tu carpeta de usuario y contiene todos los archivos y configuraciones necesarios para administrar tu entorno de Minikube. Este directorio es esencial para el funcionamiento de Minikube y contiene tanto configuraciones como datos específicos para los clústeres creados.

Estructura y contenido común de .minikube

  1. addons/:

    • Contiene archivos relacionados con los complementos (addons) que puedes habilitar o deshabilitar en tu clúster Minikube, como el dashboard de Kubernetes, metrics-server, entre otros.
  2. cache/:

    • Almacena imágenes y binarios que Minikube descarga para configurar y actualizar el entorno. Esto puede incluir:
      • images/: Imágenes de contenedores que Minikube necesita, como imágenes del contenedor de Kubernetes.
      • iso/: La imagen ISO de Minikube utilizada para crear la máquina virtual.
      • v1.x.x/: Versiones específicas de Kubernetes o de otras herramientas que Minikube cachea para su uso.
  3. certs/:

    • Este directorio contiene certificados SSL/TLS que son necesarios para la comunicación segura entre los componentes del clúster y tu entorno local.
  4. config/:

    • Aquí se almacenan los archivos de configuración de Minikube, como config.json. Contiene información sobre los perfiles, configuraciones predeterminadas, drivers, etc.
  5. files/:

    • Archivos que se copian dentro de la máquina virtual de Minikube. Si montas directorios o transfieres archivos al clúster, estos podrían almacenarse temporalmente aquí.
  6. logs/:

    • Los archivos de registro (logs) de las sesiones de Minikube, que incluyen detalles sobre el estado del clúster, errores, y cualquier mensaje generado por las operaciones de Minikube.
  7. machines/:

    • Almacena los datos relacionados con las máquinas virtuales o los clústeres que Minikube crea. Cada clúster activo o perfil tiene su propio subdirectorio que contiene archivos de configuración de la VM, información del estado del clúster, etc.
    • Aquí también se encuentran detalles sobre el estado del clúster, la VM y los archivos de configuración específicos de la instancia de Minikube.
  8. profiles/:

    • Si tienes varios perfiles de Minikube, este directorio contendrá las configuraciones y datos asociados con cada uno. Cada perfil tendrá su propia subcarpeta con archivos de configuración específicos.
  9. addons.json:

    • Un archivo JSON que contiene el estado de los complementos instalados o habilitados en tu clúster Minikube.
  10. config.json:

    • Archivo de configuración principal que guarda información sobre el estado y preferencias de Minikube, como los perfiles predeterminados, la versión de Kubernetes, el driver utilizado, etc.
  11. ca.crt y client.crt / client.key:

    • Certificados y claves que Minikube utiliza para asegurar la comunicación entre el cliente (tu máquina local) y el servidor de Kubernetes.

Importancia

El directorio .minikube es clave para administrar y ejecutar Minikube en tu máquina local. Permite mantener configuraciones personalizadas y cachés que optimizan el rendimiento, evitando descargas o configuraciones repetidas cada vez que inicias un clúster.

Ubicación

En la mayoría de los sistemas operativos, el directorio .minikube se encuentra en:

  • Linux/macOS: ~/.minikube
  • Windows: C:\Users\<TuUsuario>\.minikube

Nota

No deberías modificar manualmente los archivos dentro de .minikube a menos que sepas lo que estás haciendo, ya que algunos cambios incorrectos podrían romper tu entorno de Minikube.

Crear un cluster de minikube con multiples nodos

  1. minukube profile list nos devolvera una lista de los cluster que tengo dentro de minukube:

|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|

ProfileVM DriverRuntimeIPPortVersionStatusNodesActive ProfileActive Kubecontext
minikubedockerdocker192.168.49.28443v1.31.0Running1**
---------------------------------------------------------------------------------------------------------------
  1. Crearemos un cluster y ademas le diremos que tenga mas de un nodo.
minukube start --driver=docker -p clusterDev --nodes=2

Cada nodo ocupa cpu y ram

Los nombres de los cluster como clusterDev no pueden llevar caracteres como ”_” custer_dev seria invalido.

Cambiar la configuracion de un cluster.

Cambiemos la memoria y la cpu de nuestro cluster.aca mas configs

  1. Vizualizamos los perfiles con minikube profile list

|------------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|

ProfileVM DriverRuntimeIPPortVersionStatusNodesActive ProfileActive Kubecontext
clusterDevdockerdocker192.168.58.28443v1.31.0Running2*
minikubedockerdocker192.168.49.28443v1.31.0Running1*
-----------------------------------------------------------------------------------------------------------------
  1. minikube config (nos permite tanto cambiar como ver las configuraciones que estamos poniendo dentro del cluster)
minikube config set memory 4G -p minukube

Estos cambios surten efecto luego de elimiar y volver a levantar el minikube start, asi que hay que tener cuidado,ya que perderemos todo.

Para ver los recursos,hariamos asi :

minikube config get minikube

Pero esto solo muestra los recursos que que fueron modificados, no los que son por default.

Ejercicio

Vamos a cambiar la memory de clusterDev y luego si que podremos apreciar con minikube config get memory -p clusterDev

  1. minikube config set memory 4G -p clusterDev
  2. minikube delete -p clusterDev
  3. minikube start -p clusterDev
  4. minikube config get memory -p clusterDev -> 4G

Cambiar de cluster.

Si hacemos minikube profile nos dira el nombre del cluster sobre el cual estamos trabajando.

Tene en cuenta que cuando creamos un cluster este se genera en .kube ahi veremos tanto los creados con minikube como los que hayamos creados con cualquier otra herramienta.

Cuando hacemos minikube profile lo que hace es ir a .kube lee el fichero config y dentro hay un valor current-context que dice cual es el cluster del contexto actual.

Si nos quisieramos cambiar podriamos cambiar ese valor a clusterDev.

Pero lo podemos hacer asi con minikube minikube profile clusterDev

akerman@akerman ~/.m/p/clusterDev> mk profile clusterDev
✅  minikube profile was successfully set to clusterDev

Con minikube profile list veremos que tenemos activo clusterDev. |------------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|

ProfileVM DriverRuntimeIPPortVersionStatusNodesActive ProfileActive Kubecontext
clusterDevdockerdocker192.168.58.28443v1.31.0Running2**
minikubedockerdocker192.168.49.28443v1.31.0Running1
-----------------------------------------------------------------------------------------------------------------

Cambiar de container runtime

Con minikube tenemos 3 opciones:

  1. containerd
  2. CRI-O
  3. docker
minikube start --container-runtime=docker

|-----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|

ProfileVM DriverRuntimeIPPortVersionStatusNodesActive ProfileActive Kubecontext
miClusterdockerdocker192.168.49.28443v1.31.0Running2**
----------------------------------------------------------------------------------------------------------------