Kubernetes

Categoria:

Contenido:


K0s

Para la instalación de kubernetes utilizaremos como referencia k0s debido a su simplicidad para instalar un clúster y las herramientas que incluye que mas adelante veremos.

K0s es una empaquetado de kubernetes junto a otras herramientas para facilitar la administración, no se trata de un fork.

Instalación

Para instalar la última versión k0s nos proporciona una instalación manual con un solo comando:

curl -sSLf https://get.k0s.sh | sh

ctr

Es una de las herramientas que incluye k0s.

Se trata de un gestor de imágenes de contenedores, con el se puede descargar versiones de contenedores, importar imágenes propias o incluso poner nuevos tags a imágenes ya almacenadas.

Podemos ver un listado de las imágenes que tenemos con:

k0s ctr image list

Para importar una imagen de un contenedor podemos hacerlo con:

k0s ctr image import container.tar

Este comando devuelve el nombre y tag del contenedor con un mensaje indicando que se ha desempaquetado la imagen.

Node

Un nodo en Kubernetes es una máquina física o virtual que forma parte del clúster y ejecuta los contenedores de las aplicaciones. Cada nodo tiene un agente (kubelet) que se comunica con el controlador del clúster y gestiona los contenedores. Los nodos proporcionan capacidad de cómputo y recursos como CPU, memoria y almacenamiento para ejecutar aplicaciones en contenedores dentro del entorno de Kubernetes.

Se pueden ver con:

k0s kubectl get nodes

Role

Existen diferentes tipos de roles:

Roles de nodo

Los roles para nodos en Kubernetes definen los permisos y responsabilidades que un nodo tiene dentro del clúster. Define qué acciones puede realizar un nodo, como la programación de pods, el acceso a recursos del clúster y la interacción con otros componentes. Los roles aseguran que los nodos solo realicen las operaciones autorizadas, lo que contribuye a la seguridad y el control en el entorno de Kubernetes.

Roles de permisos

Los roles en Kubernetes especifican permisos para acceder y realizar acciones en recursos dentro del clúster, como pods y servicios. Ayudan a controlar el acceso y la seguridad al definir qué operaciones pueden realizar usuarios, grupos o servicios en el entorno de Kubernetes, contribuyendo así a una gestión más eficiente y segura del clúster.

Label

Un label en Kubernetes es una etiqueta que se asigna a objetos, como pods o servicios, para identificar y organizarlos. Son pares clave-valor que permiten etiquetar recursos de manera flexible, facilitando la búsqueda, selección y agrupación de objetos dentro del clúster para tareas como la implementación, el escalado y la administración.

Un ejemplo de label puede ser las etiquetas de los nodos que podemos ver con:

k0s kubectl get nodes --show-labels

Podemos establecer un label para un nodo con el siguiente comando:

#kubectl label nodes <nombre_del_nodo> <clave>=<valor>
kubectl label nodes my-node disk-type=ssd

O con un fichero yaml:

label.yml
---
apiVersion: v1
kind: Node
metadata:
  name: <nombre_del_nodo>
  labels:
    <clave>: <valor>
...

Y luego lo aplicamos:

k0s kubectl apply-f label.yml

Namespace

Un namespace en Kubernetes es una forma de organizar y limitar recursos dentro de un clúster. Permite dividir el clúster en espacios virtuales separados, lo que ayuda a evitar conflictos y a administrar recursos de manera más eficiente al agrupar objetos relacionados, como pods, servicios y volúmenes, dentro de un mismo ámbito.

Podemos ver los namespaces con:

k0s kubectl get namespaces

Pod

Un pod en Kubernetes es la unidad más básica de implementación, representando una instancia de un contenedor o varios.

Es la unidad de ejecución más pequeña y puede contener uno o más contenedores que comparten almacenamiento y red.

Son efímeros y pueden ser destruidos y reemplazados fácilmente en respuesta a cambios en la demanda o actualizaciones de la aplicación.

Podemos verlos con:

# Todos los namespaces
k0s kubectl get pods -A
# Un namespace
k0s kubectl get -n ${nombre_namespace} pods

Deployment

Un deployment en Kubernetes es un recurso que permite gestionar la implementación y actualización de aplicaciones en contenedores de manera declarativa.

Define cómo se ejecutan y escalan los pods, facilitando la gestión de réplicas, actualizaciones y rollback de la aplicación de manera automatizada y controlada.

k0s kubectl get -n ${nombre_namespace} depoloyment

Statefulset

Un StatefulSet en Kubernetes es un controlador que administra la implementación y escalado de aplicaciones que requieren identidad persistente y ordenada.

Proporciona un manejo robusto para aplicaciones que necesitan almacenamiento persistente y garantiza que cada instancia tenga un nombre único y estable, así como el acceso a volúmenes de almacenamiento persistentes, lo que lo hace ideal para bases de datos y otras aplicaciones con estado.

k0s kubectl get -n ${nombre_namespace} statefulset

Daemonset

Un DaemonSet en Kubernetes es un controlador que asegura que una copia de un pod se ejecute en cada nodo del clúster, garantizando la ejecución de tareas específicas en todos los nodos, como la recopilación de registros o la supervisión de recursos.

Es útil para aplicaciones que necesitan ejecutarse en cada nodo, como agentes de monitoreo o recolección de logs.

k0s kubectl get -n ${nombre_namespace} daemonset

Service

Un Service en Kubernetes es un recurso que define un conjunto lógico de pods y una política de acceso a ellos.

Proporciona una dirección IP estable y un nombre DNS para permitir la comunicación entre los pods y otros servicios dentro del clúster, facilitando la conexión de aplicaciones distribuidas y la exposición de servicios a través de una red interna o externa.

k0s kubectl get -n ${nombre_namespace} service

Configmap

Un ConfigMap en Kubernetes es un recurso que almacena configuraciones no confidenciales en formato clave-valor, como variables de entorno o archivos de configuración.

Permite separar la configuración de la aplicación del código fuente, facilitando la gestión y la actualización de la configuración sin necesidad de modificar la aplicación en sí.

k0s kubectl get -n ${nombre_namespace} configmap

Secret

Un Secret en Kubernetes es un recurso que almacena datos confidenciales, como contraseñas, tokens de autenticación o claves de API, de forma encriptada.

Permite separar los datos sensibles del código fuente y proporciona un mecanismo seguro para gestionar secretos en aplicaciones desplegadas en el clúster.

k0s kubectl get -n ${nombre_namespace} secret

Job

Un Job en Kubernetes es un controlador que supervisa la ejecución de una tarea o proceso específico hasta su finalización exitosa.

Es útil para tareas puntuales, como migraciones de base de datos o procesamiento por lotes, garantizando que se complete correctamente y proporcionando una manera de manejar la salida y los errores de manera eficiente.

k0s kubectl get -n ${nombre_namespace} job

Cronjob

Un CronJob en Kubernetes es un controlador que permite programar tareas o trabajos para que se ejecuten en intervalos regulares, similares a las tareas programadas en sistemas operativos.

Permite automatizar procesos recurrentes, como copias de seguridad o actualizaciones de datos, facilitando la gestión de tareas programadas en entornos de contenedores.

k0s kubectl get -n ${nombre_namespace} cronjob

Serviceaccount

Un ServiceAccount en Kubernetes es una entidad que proporciona identidad a los procesos de contenedor dentro del clúster, permitiendo que los pods accedan a recursos y realicen acciones autorizadas.

Ayuda a garantizar la seguridad y el control de acceso al proporcionar credenciales y permisos específicos para las aplicaciones en ejecución dentro del entorno de Kubernetes.

k0s kubectl get -n ${nombre_namespace} serviceaccount