Implementar Kubernetes en el escritorio en minutos con MicroK8s

Comenzar con Kubernetes no siempre es fácil. No todos tienen la infraestructura necesaria para implementar un clúster Kubernetes completo. Kubernetes ofrece la utilidad Minikube para operación local. Minikube es una herramienta bastante simple y conveniente, y hay varios cursos de capacitación sobre cómo trabajar con Minikube. Pero, sin embargo, no se puede decir acerca de Minikube que con esta utilidad puede implementar el entorno Kubernetes en unos minutos.

Hoy quiero hablar sobre el paquete MicroK8s , que, sin exagerar, le permite implementar Kubernetes localmente en unos minutos y comenzar el desarrollo. Ni siquiera se requieren Docker y Kubernetes preinstalados, ya que Todo incluido. En esta lección, considerará implementar la aplicación Django en el entorno local de Kubernetes.

Como fuente, seguí una serie de artículos de Mark Gituma que describían un trabajo similar, pero solo con Minikube, no con MicroK8.

Sin embargo, hay un requisito que debe cumplirse antes de comenzar a trabajar. Debe tener Snap instalado, lo que a su vez significa que debe tener Linux instalado.

La instalación de MicroK8s se describe en el manual del sitio . Sin embargo, esta es solo una línea:

sudo snap install microk8s --classic 

Además, puede ser necesario iniciar el entorno:

 sudo microk8s.start 

A continuación, debe activar la extensión. Se puede obtener una lista completa de extensiones con el comando microk8s.enable --help : panel de control, dns, gpu, ingreso, istio, servidor de métricas, registro, almacenamiento. Puede activar todo inmediatamente, excepto gpu e istio, porque el primero de ellos requiere un controlador preinstalado, y el segundo esencialmente actualiza el entorno y (personalmente, en mi escritorio débil) carga mucho el sistema.

 microk8s.enable dashboard dns ingress metrics-server registry storage 

Como ahora puede concluir de la lista de extensiones, tendrá acceso a muchos servicios, incluidos el tablero y las métricas.

Cree un Dockerfile para crear la imagen:

 FROM python:3-slim LABEL maintainer="mark.gituma@gmail.com" WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt RUN django-admin startproject mysite /app EXPOSE 8000 STOPSIGNAL SIGINT ENTRYPOINT ["python", "manage.py"] CMD ["runserver", "0.0.0.0:8000"] 

y el archivo con las dependencias necesarias required.txt:

 celery==4.1.0 Django==2.0 kombu==4.1.0 

Recojamos la imagen. Para esto, no necesita un Docker preinstalado, porque Viene con MicroK8s:

 microk8s.docker build django -t apapacy/tut-django:1.0.0 

Si recopila la imagen con la ventana acoplable instalada anteriormente, puede que no sea suficiente con que simplemente recopile la imagen y la envíe al registro local, que también viene con MicroK8s, y funciona en el puerto 32000:

 microk8s.docker tag apapacy/tut-django:1.0.0 localhost:32000/apapacy/tut-django:1.0.0 microk8s.docker push localhost:32000/apapacy/tut-django:1.0.0 

Lo más probable es que este paso no sea necesario, pero para completarlo, lo señalé y, al mismo tiempo, le llamé la atención de que tiene un registro local de acopladores.

El bloque de construcción básico de Kubernetes es Pod (Pod), en el que funciona el contenedor (la mayoría de las veces, pero puede haber varios). Las vainas se pueden crear por varios medios. Pero hoy estamos interesados ​​en la implementación (implementación). La implementación describe la plantilla mediante la cual se crean Pods. La implementación se define utilizando archivos de configuración yml. En la configuración de implementación, especifique el número de réplicas de Pod y la imagen de la que se recopilarán este Pod y sus réplicas, así como el puerto (puerto 8000 en el que funciona Django de Dockerfile, sin magia):

 apiVersion: apps/v1beta2 kind: Deployment metadata: name: django labels: app: django spec: replicas: 2 selector: matchLabels: pod: django-container template: metadata: labels: pod: django-container spec: containers: - name: django-web image: localhost:32000/apapacy/tut-django:1.0.0 ports: - containerPort: 8000 

El depósito es cargado el miércoles por el equipo:

 microk8s.kubectl apply -f config/deployment.yml 

Paralelamente, puede ejecutar un comando que monitoreará las acciones que ocurren durante la implementación:

 watch microk8s.kubectl get all 

Ahora tiene varios Pods con aplicaciones Django a las que no tiene acceso. Para que los Pods se comuniquen entre sí y con el mundo exterior, hay otra abstracción: este es el Servicio. El servicio, como la implementación, está definido por el archivo de configuración:

 kind: Service apiVersion: v1 metadata: name: django-service spec: selector: pod: django-container ports: - protocol: TCP port: 8000 # targetPort: 8001 type: ClusterIP # type: NodePort 

El selector pod: django-container determina qué Implementación será atendida por el Servicio (el nombre del selector de pod no está predefinido, es solo una etiqueta que debe coincidir). El servicio se carga de manera similar a la implementación:

 microk8s.kubectl apply -f config/service.yml 


Después de la descarga, se puede acceder al Servicio desde la dirección de red interna. Si ejecuta el comando microk8s.kubectl get all , puede ver esta dirección:

 service/django-service ClusterIP 10.152.183.156 none 8000/TCP 3h33m 


Al ejecutar el comando curl (o al abrir un navegador) obtenemos la página de bienvenida de Django:

 curl 10.152.183.156:8000 

Hay dos líneas comentadas en la configuración del Servicio. Si los descomenta, el servicio estará disponible adicionalmente desde una red externa a través de un puerto aleatorio en el rango de 32000 y superior.

Para obtener una dirección permanente para el Servicio, mediante la cual será posible contactar desde la red externa, MicroK8s ofrece dos opciones: 1) ingreso y 2) istio. La forma más fácil de hacer esto es con el ingreso. Si aún no está activado, entonces necesita activar el componente de ingreso:

 microk8s.enable ingress 

Después de eso, puede verificar que este componente esté instalado y funcionando ejecutando el comando microk8s.kubectl get all . Deben aparecer algunas entradas en la lista de aplicaciones y servicios con el nombre default-http-backend . En particular, debería aparecer un servicio que se ejecuta en el puerto 80:

 service/default-http-backend ClusterIP 10.152.183.42 none 80/TCP 179m 

El nombre default-http-backend es el nombre predefinido en MicroK8s. Es por este nombre que debe referirse a este servicio en las configuraciones de ingreso.

Las configuraciones de ingreso se asemejan a las configuraciones de un servidor web o servidor proxy, y en algún lugar dentro del sistema están. Por lo tanto, los hosts, las rutas y los puertos están presentes en ellos, todos los atributos que son familiares:

 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tut-django annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: backend: serviceName: default-http-backend servicePort: 80 rules: - host: localhost http: paths: - path: /django backend: serviceName: django-service servicePort: 8000 

La configuración de ingreso se carga con el comando:

 microk8s.kubectl apply -f config/ingress.yml 

Después de lo cual, la página de bienvenida de Django estará disponible en localhost / django

Eso es todo por hoy.

Enlaces utiles:

1. github.com/apapacy/microk8s-tut
2. medium.com/@markgituma/kubernetes-local-to-production-with-django-2-docker-and-minikube-ba843d858817

apapacy@gmail.com
10 de febrero de 2019

Source: https://habr.com/ru/post/439734/


All Articles