Categoría: Infraestructura

Guía Comprensiva de Kubernetes

Esta Guía Comprensiva de Kubernetes incluye los comandos más utilizados y utilitarios para administrar y gestionar Kubernetes. Adicionalmente se incluye una referencia cómoda para los manifiestos de Kubernetes.

Es muy conveniente que antes de continuar pases por este artículo de Docker y sus generalidades.

1. Instalación y generalidades

Cuando tenemos aplicaciones en contenedores como docker, puede existir una cantidad importante de contenedores y su administración manual comienza a ser difícil, Kubernetes ayuda a administrar los diferentes contenedores estableciendo abstracciones de más alto nivel para gestionar facílmente aplicaciones.

Los comandos recopilados a continuación no pretenden ser una guía extensiva, pero si los más usados en el día a día de la administración de un cluster de kubernetes.

Antes de iniciar con el uso de Kubernetes deberás instalar kubectl y minikube que son las utilidades de administración de kubernetes y un pequeño cluster que puede correr localmente un un pc o laptop.

Finalmente, algo útil para observar es que casi todos los comandos tienen las mismas versiones, por ejemplo, casi todos permiten listar, crear, eliminar recursos de forma parecida, observar esto ayuda a memorizar los comandos.

2. Kubectl

Los siguientes comandos permiten verificar la instalación de kubectl y el estado del cluster actual.

kubectl version
kubectl cluster-info
kubectl get svc

2.1. Crear un nuevo deployment y pods

Un Deployment, es el concepto que mas se asemeja a una aplicación en Kubernetes. El comando típico para crear un nuevo deployment es el siguiente. Se pueden crear a partir de imágenes o usando especificaciones en formato yaml.

kubectl create deployment <nombre> --image=<imagen> --port=<puerto>

2.2. Deployments

Los siguientes comandos permiten gestionar los deployments.

kubectl get deployments
kubectl delete deployment <nombre-deployment>
kubectl describe deployment <nombre-deployment>

2.3. Pods

El concepto de Pod se puede entender fácilmente como un contenedor dentro de nuestra aplicación. Los siguientes comandos permiten adminsitrar los Pod.

kubectl get pods
kubectl delete pod <nombre-pod>
kubectl describe pod <nombre-pod>

3. Minikube

Minikube es un pequeño cluster de contendores que permite correr kubernetes a continuación se muestran los comandos más usados para su administración.

minikube status
minikube start
minikube stop
minikube delete
minikube profile list

Instalar minikube

4. Ejemplos

4.1. echoserver

Este ejemplo muestra muchas de las características para crear una aplicación partiendo de un contenedor, en este caso usamos el servicio de Google Cloud Registry para obtener la imagen que queremos usar.

kubectl create deployment hello-minikube --image=gcr.io/google_containers/echoserver:1.10 --port=8080
kubectl expose deployment hello-minikube --type=NodePort
minikube service hello-minikube --url
kubectl get pod
kubectl get deployments

4.2. webserver

Similar al caso anterior podemos crear un nuevo deployment usando como base nginx. Note que aquí se usa la última versión de nginx, sin embargo esto no es recomendable puesto que si el cluster de kubernetes ya ha descargado el tag latest, no lo volverá hacer a menos que hagamos algún cambio significativo en nuestro despliegue, por lo cual siempre es conveniente especificar la versión que queremos usar para evitar problemas de actualización de nuestros contenedores.

kubectl create deployment hello-nginx --image=nginx --port=80
kubectl expose deployment hello-nginx --type=NodePort
minikube service hello-nginx --url
kubectl get pod
kubectl get deployments

5. Artículos de Intéres

Comandos básicos en Docker

Este artículo contiene una recopilación de principios y Comandos básicos en Docker que permitirán realizar las acciones más comunes de administración y gestión de contenedores, así mismo, crear, y manipular imágenes, contenedores y utilizar las fuentes oficiales para descargar imágenes preconfiguradas.

Si quiere aprender a programar un buen lugar para empezar es este: Historia Funcionamiento y Características

1. ¿Qué es Docker?

Docker es una popular aplicación para correr contenedores super livianos en nuestra máquina, en muchos sentidos se asemeja a una máquina virtual con la principal diferencia que en Docker los contenedores suelen ser muy livianos lo cual nos permite tener incluso varios corriendo simultaneamente.

Estas máquinas virtuales se crean a partir de imágenes que corresponden a sistemas operativos y comandos que permiten configurar el sistema operativo con las aplicaciones y paquetes que necesitaremos, por razones de desempeño y tamaño se suele utilizar Linux en alguna de sus distribuciones.

Otro aspecto importante es que Docker permite la configuración a nivel de detalle de los contenedores, en este sentido permite cambiar los tamaños de los discos, las configuraciones de la red e incluso monitorear las máquinas, además de que todo lo anterior se puede hacer con código habilitando el escalamiento vertical.

2. DockerFile

Si quieres descargar imágenes oficiales preconfiguradas de software popular puedes utilizar el siguiente enlace

Hub Docker

Para crear tus propias imágenes puedes crear un archivo llamado Dockerfile con un contenido similar al del siguiente código. Observa que es necesario parámetros como -y, ya que no tendremos la posibilidad de interactuar con la consola.

FROM ubuntu

RUN apt install apache2 -y

Luego puedes construir la imagen usando el siguiente comando, estará disponible para crear contenedores como se indicará posteriormente. Observa que el directorio actual debe contener el archivo Dockerfile y además puedes personalizar el nombre de la imagen.

docker build --tag httpd-ubuntu .

Alternativamente, se puede descargar la imagen preconfigurada de un servidor http usando el siguiente comando. Link de la imagen httpd. Es importante anotar que las imágenes se pueden versiona y cuando descargamos una sin versión estaremos descargando la etiquetada como latest.

docker pull htttp

Un archivo Dockerfile completo tiene las siguiente secciones, cada uno de ellos comandos para acciones especificas, por ejemplo FROM especifica la imagen a usar y RUN ejecuta un comando, tal como se vio en el código anterior.

Comments
FROM
CMD
ENTRYPOINT
WORKDIR
ENV
COPY
LABEL
RUN
ADD
.dockerignore
ARG
EXPOSE
USER
VOLUME

3. Imágenes

Las imágenes de docker pueden ser descargadas desde las fuentes oficiales como se mostró anteriormente o construidas, en cualquier caso la manipulación de las mismas se realiza con los siguientes comandos.

docker images
docker rmi image_name:version
docker -f dangling=true

4. Contenedores

Una vez contamos con imágenes descargadas las podemos poner a correr en contenedores o pequeñas máquinas virtuales que emulan nuestro software, el siguiente comando permite verificar los contenedores que están corriendo, algunas opciones como -a muestran todos los contenedores incluso los detenidos.

docker ps

Algunos otros comandos como los listados a continuación permiten: renombrar contenedores, detener un contenedor, iniciar un contenedor, reiniciar un contenedor, abrir una consola del contenedor, respectivamente.

docker rename old_name new_name
docker stop id
docker start id
docker restart id
docker exec -u root -ti container_name bash

Las imágenes se pueden poner a correr, con lo cual se crea un contenedor, usando un comando como el siguiente que especifica puertos y volúmenes, es decir el mapeo de puertos y volúmenes desde el contenedor hacia la máquina host. Las opciones completas del comando se encuentran aquí.

docker run -d --name image_name -p hostport:containerport -e "envirment_variables_assing" -v volhost:volcontainer

5. Volúmenes

Los siguientes comandos permiten verificar los volúmenes y administrarlos

docker volumen ls
docker volumen ls -f dangling=true
docker volumen rm id

6. Red

Los siguientes comandos permiten administrar las configuraciones de red de los contenedores.

docker network ls
docker network create -d bridge --subnet ip/mask --gateway ip name
docker network inspect name

7. Artículos de Interés

© 2024 ochoscar's blog

Tema por Anders NorenArriba ↑