tag run library images hub example dockers docker google-cloud-platform kubernetes openshift-origin

run - dockers images



¿Cómo crear un entorno de desarrollo local para Kubernetes? (11)

Acabo de empezar con Skaffold

Es realmente útil aplicar cambios en el código automáticamente a un clúster local.

Para implementar un clúster local, la mejor manera es Minikube o simplemente Docker para Mac y Windows, ambos incluyen una interfaz Kubernetes.

Kubernetes parece tener que ver con la implementación de contenedores en una nube de clústeres. Lo que no parece tocar es entornos de desarrollo y puesta en escena (o similares).

Durante el desarrollo, desea estar lo más cerca posible del entorno de producción con algunos cambios importantes:

  • Implementado localmente (o al menos en algún lugar donde usted y solo usted puede acceder )
  • Use el último código fuente en la actualización de la página (suponiendo que sea un sitio web; idealmente, la página se actualiza automáticamente en el archivo local guardado, lo que se puede hacer si monta el código fuente y usa algunas cosas como Yeoman ).

Del mismo modo, uno puede desear un entorno no público para realizar una integración continua .

¿Kubernetes admite este tipo de entorno de desarrollo o es algo que uno tiene que construir, con la esperanza de que durante la producción todavía funcione?


Actualización (2016-07-15)

Con el lanzamiento de Kubernetes 1.3, Minikube es ahora la forma recomendada de ejecutar Kubernetes en su máquina local para el desarrollo.

Puede ejecutar Kubernetes localmente a través de Docker . Una vez que tenga un nodo en ejecución, puede iniciar un pod que tenga un servidor web simple y monte un volumen desde su máquina host. Cuando llegue al servidor web, leerá el volumen y, si ha cambiado el archivo en su disco local, puede servir la última versión.



Echa un vistazo a https://github.com/okteto/okteto y Okteto Cloud . La propuesta de valor es tener la experiencia de desarrollo clásica que trabajar localmente, antes de la ventana acoplable, donde puede tener recargas en caliente, compilaciones incrementales, depuradores ... pero todos sus cambios locales se sincronizan inmediatamente con un contenedor remoto. Los contenedores remotos le dan acceso a la velocidad de la nube, permiten un nuevo nivel de colaboración e integran el desarrollo en un entorno similar a la producción. Además, elimina la carga de las instalaciones locales.


El tipo de "recarga en caliente" es algo que tenemos planes de agregar, pero no es tan fácil como podría ser hoy. Sin embargo, si se siente aventurero, puede usar rsync con docker exec, kubectl exec u osc exec (todos hacen lo mismo más o menos) para sincronizar un directorio local en un contenedor siempre que cambie. Puede usar rsync con kubectl u osc exec de esta manera:

# rsync using osc as netcat $ rsync -av -e ''osc exec -ip test -- /bin/bash'' mylocalfolder/ /tmp/remote/folder


Hemos estado trabajando en una herramienta para hacer esto. La idea básica es que tiene un clúster Kubernetes remoto, efectivamente un entorno de ensayo, y luego ejecuta el código localmente y se aproxima al clúster remoto. Obtiene acceso transparente a la red, copia de variables de entorno, acceso a volúmenes ... lo más cercano posible al entorno remoto, pero con su código ejecutándose localmente y bajo su control total.

Entonces puedes hacer desarrollo en vivo, por ejemplo. Documentos en http://telepresence.io


La desventaja de usar minkube es que genera otra máquina virtual sobre su máquina. Además, con la última versión de minikube , el mínimo requiere tener 2 CPU y 2GB de RAM de su sistema, lo que lo hace bastante pesado si no tiene el sistema con suficientes recursos.

Esta es la razón por la que microk8s a microk8s para el desarrollo en kubernetes y me encanta. microk8s admite DNS, almacenamiento local, panel de control, istio, ingreso y muchos más, todo lo que necesita para probar sus microservicios.

Está diseñado para ser una instalación de Kubernetes aguas arriba rápida y liviana aislada de su entorno local. Este aislamiento se logra empaquetando todos los archivos binarios para Kubernetes, Docker.io, iptables y CNI en un solo paquete de complemento.

Se puede instalar un clúster de kubernetes de un solo nodo en un minuto con un solo comando:

snap install microk8s --classic

Asegúrese de que su sistema no tenga ningún servicio de Docker o Kubelet en ejecución. Microk8s instalará todos los servicios requeridos automáticamente.

Eche un vistazo al siguiente enlace para habilitar otros complementos en microk8s .

https://github.com/ubuntu/microk8s

Puede verificar el estado usando:

velotio@velotio-ThinkPad-E470:~/PycharmProjects/k8sClient$ microk8s.status microk8s is running addons: ingress: disabled dns: disabled metrics-server: disabled istio: disabled gpu: disabled storage: disabled dashboard: disabled registry: disabled


Otro gran punto de partida es esta configuración de Vagrant , especialmente. si su sistema operativo host es Windows. Las ventajas obvias son

  • configuración rápida e indolora
  • fácil de destruir / recrear la máquina
  • límite implícito de recursos
  • capacidad de probar la escala horizontal creando múltiples nodos

Las desventajas: necesita mucha RAM, y VirtualBox es VirtualBox ... para bien o para mal.

Una ventaja / desventaja mixta es la asignación de archivos a través de NFS. En nuestra configuración, creamos dos conjuntos de definiciones RC: una que simplemente descarga una imagen acoplable de nuestros servidores de aplicaciones; el otro con 7 líneas adicionales que configuran el mapeo de archivos desde HostOS -> Vagrant -> VirtualBox -> CoreOS -> Kubernetes pod; sobrescribiendo el código fuente de la imagen de Docker.

La desventaja de esto es el caché de archivos NFS: con él, es problemático, sin él, es problemáticamente lento. Incluso configurando las mount_options: ''nolock,vers=3,udp,noac'' montaje mount_options: ''nolock,vers=3,udp,noac'' no elimina por completo los problemas de almacenamiento en caché, pero funciona la mayor parte del tiempo. Algunas tareas de Gulp ejecutadas en un contenedor pueden tardar 5 minutos cuando tardan 8 segundos en el sistema operativo host. Un buen compromiso parece ser mount_options: ''nolock,vers=3,udp,ac,hard,noatime,nodiratime,acregmin=2,acdirmin=5,acregmax=15,acdirmax=15'' .

En cuanto a la recarga automática de código, eso es específico del idioma, pero estamos contentos con el devserver de Django para Python y Nodemon para Node.js. Para proyectos frontend, por supuesto, puede hacer mucho con algo como gulp + browserSync + watch, pero para muchos desarrolladores no es difícil servir desde Apache y simplemente hacer la actualización dura tradicional.

Mantenemos 4 conjuntos de archivos yaml para Kubernetes. Dev, "devstable", escenario, prod. Las diferencias entre esos son

  • variables de entorno que configuran explícitamente el entorno (dev / stage / prod)
  • cantidad de réplicas
  • devstable, stage, prod usa imágenes de docker
  • dev usa imágenes de docker y asigna la carpeta NFS con el código fuente sobre ellas.

Es muy útil crear muchos alias bash y autocompletar. Solo puedo escribir rec users y hará kubectl delete -f ... ; kubectl create -f ... kubectl delete -f ... ; kubectl create -f ... Si quiero que se inicie toda la configuración, recfo , y recrea una docena de servicios, extrayendo las últimas imágenes de Docker, importando el último volcado de db de Staging env y limpiando archivos Docker antiguos para ahorrar espacio.


Según lo especificado por Robert, minikube es el camino a seguir.

Here hay una guía rápida para comenzar a usar minikube. Los pasos generales son:

  • Instalar minikube

  • Cree un clúster de minikube (en una máquina virtual que puede ser VirtualBox o Docker para Mac o HyperV en el caso de Windows)

  • Cree una imagen Docker de su archivo de aplicación (utilizando Dockerfile)

  • Ejecute la imagen creando una implementación

  • Cree un servicio que exponga su aplicación para que pueda acceder a ella.


Tener un buen ciclo de retroalimentación del desarrollo local es un tema de rápido desarrollo en el ecosistema de Kubernetes.

Desglosando esta pregunta, hay algunas herramientas que creo que respaldan bien este objetivo.

Docker para Mac Kubernetes

Docker para Mac Kubernetes ( Docker Desktop es el nombre genérico multiplataforma) proporciona una excelente opción para el desarrollo local. Para la virtualización, utiliza HyperKit que se basa en el marco nativo de Hypervisor en macOS en lugar de VirtualBox.

La función Kubernetes se lanzó por primera vez como beta en el canal perimetral en enero de 2018 y ha recorrido un largo camino desde entonces, convirtiéndose en un Kubernetes certificado en abril de 2018 y graduándose al canal estable en julio de 2018 .

En mi experiencia, es mucho más fácil trabajar con Minikube, particularmente en macOS, y especialmente cuando se trata de problemas como RBAC, Helm, hipervisor, registro privado, etc.

Timón

En cuanto a distribuir su código y obtener actualizaciones localmente, Helm es una de las opciones más populares. Puede publicar sus aplicaciones a través de CI / CD como gráficos Helm (y también las imágenes subyacentes de Docker a las que hacen referencia). Luego puede extraer estos gráficos de su registro de gráficos Helm localmente y actualizarlos en su clúster local.

Borrador azur

También puede usar una herramienta como Azure Draft para realizar implementaciones locales simples y generar gráficos básicos de Helm a partir de plantillas de lenguaje común, como paquetes de compilación, para automatizar esa pieza del rompecabezas.

Skaffold

Skaffold es como Azure Draft, pero más maduro, mucho más amplio y creado por Google. Tiene una arquitectura muy conectable. Creo que en el futuro más personas lo usarán para el desarrollo de aplicaciones locales para Kubernetes.

Si ha usado React, pienso en Skaffold como " Crear una aplicación React para Kubernetes".

Componer o componer en Kubernetes

Docker Compose , aunque no está relacionado con Kubernetes, es una alternativa que algunas empresas utilizan para proporcionar un entorno de desarrollo local simple, fácil y portátil análogo al entorno de Kubernetes que ejecutan en producción. Sin embargo, seguir esta ruta significa divergir las configuraciones de producción y desarrollo local.

Kompose es un convertidor Docker Compose a Kubernetes. Esta podría ser una ruta útil para alguien que ya ejecuta sus aplicaciones como colecciones de contenedores localmente.

Compose on Kubernetes es una oferta de código abierto (diciembre de 2018) de Docker que permite implementar archivos Docker Compose directamente en un clúster de Kubernetes a través de un controlador personalizado.


Kubespary es útil para configurar clústeres locales. Sobre todo, usé un clúster basado en vagabundo en una máquina local.

Configuración de Kubespray Puede ajustar estas variables para tener la versión de kubernetes deseada.