Saltar al contenido principal

Conceptos básicos y kubectl

En este capítulo vamos a ver como configurar nuestro kubectl para que pueda comunicarse con nuestro cluster de kubernetes y cómo definir manifiestos para poder aplicarlos de forma sencilla.

Dentro vídeo: https://youtu.be/cOFcLadQa70

Conceptos básicos

Conceptos básicos

Para empezar, tenemos que tener claro que en kubernetes todo es un recurso o objeto. Un recurso es cualquier cosa que se pueda definir en un cluster de kubernetes, como un pod, un deployment, un service, etc. Cada recurso es de un tipo y tiene unas propiedades y atributos que lo definen. Estos recursos se pueden definir en archivos manifiesto que se aplican al cluster para que se creen o modifiquen.

Esquema de recursos en kubernetes

El pod es el recurso más básico de kubernetes, el cuál es a su vez un grupo de uno o varios contenedores. Los pods no suele crearse directamente, sino que se suelen crear a través de otros recursos como deployments, statefulsets, etc. Estos recursos son los que se encargan de gestionar los pods y asegurarse de que siempre haya el número de pods que se ha definido en el cluster.

Ademas de los pods, hay otros recursos que se pueden definir en kubernetes, como los services, que se encargan de exponer los pods al exterior, los volumes, que se encargan de almacenar datos de forma persistente, los namespaces, que se encargan de agrupar recursos, etc.

Iremos profundizando en cada uno de estos recursos a lo largo del curso, pero es importante tener claro que todo en kubernetes es un recurso y que se definen en archivos manifiesto que se aplican al cluster para que se creen o modifiquen.

Manifiestos

Por debajo de todas las acciones de kubernetes, lo que el motor entiende, son archivos manifiesto que definen el tipo de cada elemento. Pueden ser escritos en formato yaml o json. Aunque kubernetes los procesa finalmente en formato json, lo más normal para los humanos es escribirlos en yaml.

Cuando se coge cierta experiencia se dejan de usar comandos para usar manifiestos y poder aplicar varios a la vez, haciendo el proceso menos tedioso.

Además, un manifiesto nos puede servir para versionar la configuración de los recursos de nuestro cluster en un repositorio git, por ejemplo. También, no solo sirven para crearlos, también podemos coger cualquier recursos existente en un cluster y obtener su manifiesto para guardarlo o modificarlo. Esto facilita mucho la gestión de los recursos en un cluster. Manifiestos

¿Cómo se estructura un manifiesto?

Un manifiesto de kubernetes se compone de 3 partes:

  • apiVersion: Versión de la API de kubernetes que se va a usar.
  • kind: Tipo de recurso que se va a definir.
  • metadata: Información adicional del recurso (nombre, etiquetas, etc).
  • spec: Especificación del recurso (contenedores, volúmenes, etc).

Ejemplo de un manifiesto

apiVersion: v1
kind: Pod
metadata:
name: podtest
spec:
containers:
- name: cont1
image: nginx:alpine

Esto sería un ejemplo muy sencillo, pero en un manifiesto podemos definir cualquier tipo de recurso de kubernetes, como pods, deployments, services, etc.

Definir un pod en un manifiesto

Vamos a ponerlo en práctica.

Creamos la definición de un pod de prueba que escribirá “Hello world” y se quedará en ejecución durante 1 hora.:

apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello World!; sleep 3600']

Luego podríamos crear el elemento o aplicar cualquier manifiesto con el comando:

kubectl apply -f <manifiesto.yaml>

En nuestro caso, sería:

kubectl apply -f pod.yaml

También podríamos eliminarlo usando el manifiesto con el comando:

kubectl delete -f pod.yaml

Kubectl

Kubectl es la herramienta de línea de comandos que nos permite interactuar con nuestro cluster de kubernetes. Con ella podemos crear, modificar, eliminar y ver los recursos de nuestro cluster. Además, también nos permite ver logs, ejecutar comandos en los contenedores, etc.

Configurar kubectl

En la creación del cluster de kubernetes se nos proporcionó un archivo de configuración que nos permite conectarnos a él. Este se encuentra en el nodo maestro ( o controlplane) en la ruta /etc/kubernetes/admin.conf. Para poder usarlo en nuestro equipo local, lo copiaremos a la carpeta ~/.kube/config de nuestro equipo local.

Kubectl busca por defecto en la carpeta ~/.kube/config para encontrar la configuración del cluster. Si queremos usar otro archivo de configuración, podemos usar la variable de entorno KUBECONFIG para indicarle a kubectl donde buscar.

export KUBECONFIG=/ruta/al/archivo.conf

Kubeconfig

Este fichero de configuración, contiene la ruta del API del clúster, el certificado de seguridad, el token de acceso y el contexto de kubectl.

apiVersion: v1
kind: Config
clusters:
- name: mi-cluster
cluster:
server: https://192.168.1.100:6443
certificate-authority: /ruta/ca.crt # Certificado del clúster
users:
- name: mi-usuario
user:
client-certificate: /ruta/client.crt
client-key: /ruta/client.key
contexts:
- name: mi-contexto
context:
cluster: mi-cluster
user: mi-usuario
current-context: mi-contexto

Kubectl config y contextos

El comando kubectl config nos permite gestionar la configuración de kubectl. Algunos comandos útiles son:

  • kubectl config view: Muestra la configuración actual.
  • kubectl config get-contexts: Muestra los contextos disponibles.
  • kubectl config use-context <nombre-contexto>: Cambia el contexto actual.

También podemos añadir nuevos contextos con el comando kubectl config set-context <nombre-contexto> --cluster=<nombre-cluster> --user=<nombre-usuario> y no tener que modificar el archivo de configuración manualmente.

Resumen

Ya iremos profunfizando, con tener claro el funcionamiento general y como configurar kubectl es suficiente para empezar a trabajar con kubernetes.

A lo largo del curso veremos todos los objetos que podemos definir en kubernetes y las distintas etiquetas, atributos y propiedades que podemos usar para definirlos en estos manifiestos.


Volver al índice

X

Graph View