Kubernetes parece tener que ver con la implementación de contenedores en una nube de clústeres. Lo que no parece tocar son los 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 pueda 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 actualizará automáticamente al guardar el archivo local, lo que se puede hacer si monta el código fuente y usa algunas cosas como Yeoman ).
De manera similar, es posible que desee un entorno no público para la integración continua .
¿Kubernetes admite este tipo de entorno de desarrollo o es algo que uno tiene que construir, esperando que durante la producción siga funcionando?
microk8s
instalación liviana de k8s para su máquina local. He publicado la respuesta para lo mismo, cómo instalarlo. Su instalación solo toma alrededor de un minuto.Respuestas:
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 tiene un servidor web simple y monta un volumen desde su máquina host. Cuando acceda al servidor web, leerá el volumen y, si ha cambiado el archivo en su disco local, puede ofrecer la última versión.
fuente
Hemos estado trabajando en una herramienta para hacer esto. La idea básica es que tiene un clúster de Kubernetes remoto, efectivamente un entorno de prueba, y luego ejecuta el código localmente y se transfiere al clúster remoto. Obtiene acceso transparente a la red, copia de variables de entorno, acceso a volúmenes ... lo más cerca posible del entorno remoto, pero con su código ejecutándose localmente y bajo su control total.
Entonces puedes hacer desarrollo en vivo, digamos. Documentos en http://telepresence.io
fuente
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 aproximadamente) para sincronizar un directorio local en un contenedor cada vez que cambia. Puede usar rsync con kubectl u osc exec así:
fuente
Otro gran punto de partida es esta configuración de Vagrant , especialmente. si su sistema operativo host es Windows. Las ventajas obvias son
Las desventajas: necesitas 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 de RC: uno que simplemente descarga una imagen de la ventana acoplable de nuestros servidores de aplicaciones; la otra 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 la configuración
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 que se ejecutan en un contenedor pueden tardar 5 minutos cuando tardan 8 segundos en el sistema operativo host. Parece ser un buen compromisomount_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 lenguaje, pero estamos contentos con el devserver de Django para Python y Nodemon para Node.js. Para los 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 una actualización dura tradicional.
Conservamos 4 conjuntos de archivos yaml para Kubernetes. Dev, "devstable", etapa, prod. Las diferencias entre esos son
Es muy útil crear muchos alias de bash y autocompletar; puedo escribir
rec users
y funcionarákubectl delete -f ... ; kubectl create -f ...
. Si quiero que comience toda la configuración, escriborecfo
y recrea una docena de servicios, extrayendo las últimas imágenes de la ventana acoplable, importando el último volcado de base de datos de Staging env y limpiando los archivos antiguos de Docker para ahorrar espacio.fuente
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 de Kubernetes.
fuente
Consulte https://github.com/kubernetes/kubernetes/issues/12278 para saber cómo montar un volumen desde la máquina host, el equivalente a:
fuente
Tener un buen circuito de retroalimentación de desarrollo local es un tema de rápido desarrollo en el ecosistema de Kubernetes.
Desglosando esta pregunta, hay algunas herramientas que creo que apoyan bien este objetivo.
Docker para Mac Kubernetes
Docker para Mac Kubernetes ( Docker Desktop es el nombre genérico de plataforma cruzada) 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 de Kubernetes se lanzó por primera vez como beta en el canal de borde en enero de 2018 y ha recorrido un largo camino desde que se convirtió en un Kubernetes certificado en abril de 2018 y se graduó en el 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 extraer actualizaciones localmente, Helm es una de las opciones más populares. Puede publicar sus aplicaciones a través de CI / CD como gráficos de 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 de Helm localmente y actualizarlos en su clúster local.
Borrador azul
También puede usar una herramienta como Azure Draft para realizar implementaciones locales simples y generar gráficos de Helm básicos a partir de plantillas de idiomas comunes, como paquetes de construcción, para automatizar esa pieza del rompecabezas.
Skaffold
Skaffold es como Azure Draft pero más maduro, de alcance 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 utilizado React, pienso en Skaffold como " Crear una aplicación React para Kubernetes".
Kompose o Compose 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 sus configuraciones de producción y desarrollo local.
Kompose es un convertidor de Docker Compose a Kubernetes. Esta podría ser una ruta útil para alguien que ya esté ejecutando sus aplicaciones como colecciones de contenedores localmente.
Compose on Kubernetes es una oferta de código abierto recientemente (diciembre de 2018) de Docker que permite implementar archivos de Docker Compose directamente en un clúster de Kubernetes a través de un controlador personalizado.
fuente
Kubespary es útil para configurar clústeres locales. Principalmente, utilicé un clúster basado en vagabundos en una máquina local.
Configuración de Kubespray Puede modificar estas variables para tener la versión de kubernetes deseada.
fuente
La desventaja de usar
minkube
es que genera otra máquina virtual sobre su máquina. Además, con las últimasminikube
versión, requiere como mínimo 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 me
microk8s
cambié para el desarrollo en kubernetes y me encanta.microk8s
admite DNS, almacenamiento local, tablero, istio, ingreso y muchos más, todo lo que necesita para probar sus microservicios.Está diseñado para ser una instalación ascendente de Kubernetes rápida y ligera aislada de su entorno local. Este aislamiento se logra empaquetando todos los binarios para Kubernetes, Docker.io, iptables y CNI en un solo paquete instantáneo.
Se puede instalar un clúster de kubernetes de un solo nodo en un minuto con un solo comando:
Asegúrese de que su sistema no tenga ningún servicio Docker o Kubelet en ejecución.
Microk8s
instalará todos los servicios requeridos automáticamente.Eche un vistazo al siguiente enlace para habilitar otros complementos
microk8s
.Puede verificar el estado usando:
fuente
Eche 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 Docker, 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 brindan 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.
fuente
Como lo especificó anteriormente Robert, minikube es el camino a seguir.
Aquí hay una guía rápida para comenzar con 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 de Docker de su archivo de aplicación (usando Dockerfile)
Ejecute la imagen creando una implementación
Cree un servicio que exponga su aplicación para que pueda acceder a ella.
fuente
Esta es la forma en que hice una configuración local para Kubernetes en Windows 10: -
Usar Docker Desktop
Habilite Kubernetes en la opción de configuración de Docker Desktop
En Docker Desktop, el recurso predeterminado asignado para la memoria es de 2 GB, por lo que para usar Kubernetes con Docker Desktop, aumente la memoria.
Instale kubectl como cliente para comunicarse con el clúster de Kubernetes
Ejecute el comando kubectl config get-contexts para obtener el clúster disponible
Ejecute el comando kubectl config use-context docker-desktop para usar el escritorio docker
Cree una imagen de Docker de su aplicación
Escriba un archivo YAML (método descriptivo para crear su implementación en Kubernetes) apuntando a la imagen creada en el clúster de pasos anterior
Exponga un servicio de tipo puerto de nodo para cada una de sus implementaciones para que esté disponible para el mundo exterior
fuente