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
.
minukube status
: Vemos si esta funcionando minikube.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 sonstop
,start
,delete
,dashboard
(para monitoreo),pause
,unpause
Si usamos delete
hay que tener cuidado porque perderiamos todo.
Comandos avanzados
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.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 seriaminikube 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
-
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.
- Contiene archivos relacionados con los complementos (
-
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.
- Almacena imágenes y binarios que Minikube descarga para configurar y actualizar el entorno. Esto puede incluir:
-
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.
-
config/
:- Aquí se almacenan los archivos de configuración de Minikube, como
config.json
. Contiene información sobre los perfiles, configuraciones predeterminadas, drivers, etc.
- Aquí se almacenan los archivos de configuración de Minikube, como
-
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í.
-
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.
- Los archivos de registro (
-
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.
-
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.
-
addons.json
:- Un archivo JSON que contiene el estado de los complementos instalados o habilitados en tu clúster Minikube.
-
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.
-
ca.crt
yclient.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
minukube profile list
nos devolvera una lista de los cluster que tengo dentro de minukube:
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes | Active Profile | Active Kubecontext |
---|---|---|---|---|---|---|---|---|---|
minikube | docker | docker | 192.168.49.2 | 8443 | v1.31.0 | Running | 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
- Vizualizamos los perfiles con
minikube profile list
|------------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes | Active Profile | Active Kubecontext |
---|---|---|---|---|---|---|---|---|---|
clusterDev | docker | docker | 192.168.58.2 | 8443 | v1.31.0 | Running | 2 | * | |
minikube | docker | docker | 192.168.49.2 | 8443 | v1.31.0 | Running | 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
minikube config set memory 4G -p clusterDev
minikube delete -p clusterDev
minikube start -p clusterDev
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.
|------------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes | Active Profile | Active Kubecontext |
---|---|---|---|---|---|---|---|---|---|
clusterDev | docker | docker | 192.168.58.2 | 8443 | v1.31.0 | Running | 2 | * | * |
minikube | docker | docker | 192.168.49.2 | 8443 | v1.31.0 | Running | 1 | ||
------------ | ----------- | --------- | -------------- | ------ | --------- | --------- | ------- | ---------------- | -------------------- |
Cambiar de container runtime
Con minikube tenemos 3 opciones:
- containerd
- CRI-O
- docker
minikube start --container-runtime=docker
|-----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes | Active Profile | Active Kubecontext |
---|---|---|---|---|---|---|---|---|---|
miCluster | docker | docker | 192.168.49.2 | 8443 | v1.31.0 | Running | 2 | * | * |
----------- | ----------- | --------- | -------------- | ------ | --------- | --------- | ------- | ---------------- | -------------------- |