Vagones estáticos en Kuberentes
Los Pods estáticos son gestionados directamente por el kubelet y el servidor de la API no tiene ningún control sobre estos pods. El kubelet es responsable de vigilar cada Pod estático y reiniciarlo si se bloquea.Los Pods estáticos que se ejecutan en un nodo son visibles en el servidor de la API, pero no pueden ser controlados por el servidor de la API. El Pod estático no tiene ningún controlador de replicación asociado, el propio servicio kubelet lo vigila y lo reinicia cuando se bloquea. No hay control de salud para los pods estáticos. El proceso kubelet vigila el directorio específico designado para los pods estáticos.
Para saber más sobre los Static Pods, visita la página oficial de Kubernetes aquí.
En este artículo, veremos los pasos para crear un Pod Estático a partir del archivo guardado en la ubicación por defecto de la que kubelet lee los manifiestos y también cambiaremos la ubicación por defecto a algún otro directorio y veremos cómo se crea un pod estático desde allí. Crearemos pods estáticos en el nodo Trabajador.
Requisitos previos
- Cluster Kubernetes con al menos 1 nodo trabajador.
Si quieres aprender a crear un Cluster de Kubernetes, haz clic aquí. Esta guía te ayudará a crear un cluster de Kubernetes con 1 Master y 2 Nodos en Instancias EC2 de AWS Ubuntu 18.04.
¿Qué vamos a hacer?
- Crear pods estáticos
Crear pods estáticos
Ejecuta los siguientes comandos desde el nodo maestro para obtener los detalles de los nodos y pods del cluster.
$master kubectl get nodes
$master kubectl get pods
Puedes comprobar los contenedores que se ejecutan como parte de los pods
$worker docker ps
$worker docker ps -a
Ahora, inicia sesión en el nodo trabajador y crea un nuevo archivo con el siguiente contenido en la ruta por defecto de los manifiestos de los pods estáticos.
$worker vim /etc/kubernetes/manifests/static-web.yaml
apiVersion: v1 kind: Pod metadata: name: static-web labels: role: myrole spec: containers: - name: web image: nginx ports: - name: web containerPort: 80 protocol: TCP
En cuanto creas una definición de pod en la ubicación por defecto del manifiesto de pods estáticos, se crea el pod que no está controlado por el servidor de la API.
Puedes comprobar el pod recién creado con el siguiente comando desde el nodo maestro.
$master kubectl get pods
$master kubectl get pods --all-namespaces
Para comprobar los contenedores creados como parte del pod, ejecuta el siguiente comando en el nodo trabajador
$worker docker ps
$worker docker ps -a
También podemos cambiar la ubicación por defecto de la que kubelet lee los manifiestos.
Ahora crea una nueva carpeta donde queramos almacenar los manifiestos de los Pods estáticos.
Aquí estamos creando «/etc/kubelet.d/».
$worker mkdir -p /etc/kubelet.d/
Crea un archivo de definición de pods en el directorio que hemos creado.
$worker vim /etc/kubelet.d/static-web.yaml
apiVersion: v1 kind: Pod metadata: name: static-web-2 labels: role: myrole spec: containers: - name: web image: nginx ports: - name: web containerPort: 80 protocol: TCP
Para cambiar la ruta por defecto desde la que Kubelets lee los manifiestos de los Static Pods, edita el archivo /var/lib/kubelet/config.yaml y cambia el valor de «staticPodPath» por «staticPodPath=/etc/kubelet.d».
Una vez realizada la configuración, reinicia el servicio Kubelet
$worker systemctl restart kubelet
En cuanto se reinicie el servicio, Kubelet detecta la nueva ubicación y lee los manifiestos de esa ubicación y crea los pods.
Comprueba si el pod se ha creado o no.
$master kubectl get pods
Comprueba el contenedor creado como parte del Pod en el nodo trabajador utilizando el siguiente comando.
$worker docker ps
Conclusión
En este artículo, hemos visto los pasos para crear pods estáticos y también hemos visto el cambio de configuración necesario en Kubelet para cambiar el directorio por defecto para los manifiestos de los pods estáticos.