PuppetConf 2016. Kubernetes para administradores de sistemas. Parte 2

PuppetConf 2016. Kubernetes para administradores de sistemas. Parte 1

Establezca un límite de recursos. Usando cálculos matemáticos simples, puede calcular cuántas copias de la aplicación puede ejecutar: si una copia necesita 1 GB de RAM, entonces con 10 GB de memoria, puede ejecutar 10 copias. Esto no necesitará ser monitoreado, porque sé que el núcleo del sistema simplemente comenzará a cumplir con el contrato estipulado. Este contrato, o acuerdo entre usted y el sistema, es muy importante porque si está disponible, todas las herramientas funcionan mucho mejor. Por lo tanto, introducimos la disciplina de ejecución en el sistema.



Por lo tanto, el planificador iniciará esto solo si cada una de las réplicas obtiene 1 GB de memoria libre. Si no hay suficiente memoria, el proceso no comenzará. Entonces, ingreso el comando kubectl create, y después de su ejecución se creará el contenedor mysql.



Aquí hay una advertencia relacionada con los sistemas con estado: tiene varias opciones. Destaqué un fragmento de código en el que indiqué que quiero usar el PersistentDisk de mi proveedor de la nube.



Puede ser NFS, ISCSI o cualquier otro protocolo que proporcione acceso a nivel de bloque de red a dispositivos de almacenamiento. Hago esto para desconectar mi almacenamiento de las máquinas. Si una de las máquinas falla, puedo recrear el proceso en la otra máquina usando el mismo almacén de datos. Si monta el almacenamiento desde el host en el que ocurre la falla, simplemente pierde sus datos y tendrá que restaurar todo desde la copia de seguridad nuevamente.

Por lo tanto, nuestro objetivo es que el almacenamiento se ejecute más rápido a medida que nuestras redes crecen más rápido. No se trata de la migración, sino de la capacidad de montar y desmontar rápidamente el almacenamiento fuera de la máquina. Esto es bastante posible de hacer. Veamos cómo están las cosas con nuestro hogar: todavía se está creando, y ahora quiero crear servicios para que otras aplicaciones puedan encontrar la nuestra.



Tan pronto como cree este servicio, Kubernetes generará un registro DNS, por lo que puede llamar a mysql y detectar automáticamente que este contenedor se está ejecutando. Continuemos e ingresemos el comando $ kubectl create –f services / mysql.yaml. Como puede ver, el contenedor aún se está creando. Por cierto, puedes ver este video de demostración en mi sitio web. Verá cómo se ve el servicio para una aplicación mysql: contiene las direcciones IP del clúster, las direcciones IP externas, los números de puerto y los protocolos de red.



Veamos qué pasa con este contenedor en particular. Como puedes ver, funciona.



Entonces, por el momento, creo que la aplicación mysql realmente funciona. Lo siguiente que necesitamos es una aplicación web. Entonces, implementemos una aplicación llamada "langostas", la tomé en GitHub, este es un clon de Hacker News. Es un proyecto Ruby-on-Rails, acabo de crear un contenedor basado en los datos proporcionados aquí y la configuración básica.



Si no está actualizado: Hacker News lo hará muy popular en cualquier conferencia de hackers. Simplemente lea lo que está escrito aquí, y puede discutir todos los temas populares del mundo de la tecnología informática. Entonces, si desea impresionar a otros, lea las noticias de este portal.

Entonces, quiero crear un clon de esta cosa y ponerlo en Internet para ganar dinero. Por supuesto, este no es un proyecto empresarial real, sino solo una demostración de oportunidades.
Actualmente estoy implementando una aplicación llamada Lobsters. De mi secreto obtengo la URL de la base de datos, para lo cual uso el comando $ kubectl get secrets. Secret también tiene un nombre de usuario y contraseña.



Luego, quiero crear un contenedor que se comunique con mi aplicación, para lo cual uso el comando $ kubectl create –f deployments / lobsters.yaml. Como puede ver, la aplicación se está ejecutando.



Además, tenemos una dirección IP. Ingreso el comando $ kubectl get svc y uso el equilibrador de carga global, que apunta a la página con la dirección IP externa 101.198.12.60.





Iremos al navegador e intentaremos ingresar esta dirección a través de HTTP. Sí, ¡error esperando la migración! Este es Ruby-on-Rails, así que esperaba algo así.



Entonces, necesitamos una migración de la base de datos. Necesitamos ejecutar este proceso una vez, y eso es todo. Sin embargo, queremos hacer esto de la misma manera: no hay autorización en el servidor, no hay servidores especiales como Jump box, queremos contactar al planificador y decir: "¡Oye, ejecuta esta tarea una vez y después de la ejecución, acaba con el proceso!". Es decir, quiero ejecutar solo un comando y salir. Por lo tanto, para realizar el procesamiento por lotes con el comando $ cat jobs / lobsters-db-schema-load.yaml, creo un objeto Jobs que implementa dicho esquema.



El indicador de comando de ataque "db: schema: load" se envía directamente al sitio web de GitHub y dice: "tome la imagen del código: kelseyhightower / lobsters: 2.0.0 y ejecute este comando 1 vez". El reinicio de la política: nunca la línea al final del código le dice a Kubernetis que debe ejecutar esto solo una vez y nunca repetirlo. También limito los recursos del procesador y la memoria, es decir, indico los parámetros de una máquina adecuada en la que se puede iniciar y ejecutar, después de lo cual se completará la transferencia de la base de datos. Así que "puse en marcha" todos los objetos de Jobs que deberían ejecutarse en el sistema usando el comando $ kubectl create –f jobs / lobsters-db-schema-load.yaml.
Verá que se crea el trabajo correspondiente, después de lo cual escribo el comando $ watch kubectl get jobs.



Entonces, el contenedor fue llevado a la máquina, el programador trabajó, se creó la tarea de rastrillo. Volvamos y refresquemos la página de error de la base de datos. Como puede ver, ahora nuestro esquema se ha implementado con éxito.



Luego necesito iniciar sesión. Uso el comando $ kubectl create –f jobs / lobsters-db-seed.yaml. Verá que el planificador todavía está cargando el contenedor y, después de unos segundos, se completa el trabajo. Para comenzar la migración, usamos el mismo nivel de código que antes. Me conecto a esta página, y todo lo que hay que hacer ahora es obtener el contenido. El contenido es necesario si queremos "recaudar" algo de dinero. Así es como se ve la piratería de crecimiento, o "crecimiento de piratería": va al sitio de otra persona, toma el contenido desde allí y lo publica en su propio sitio, que se parece al original.



Pero no solo necesitamos contenido, sino buen contenido. Sería una lástima dejar que las cosas vayan a la deriva, así que tomo prestada algunas noticias manualmente. Puede copiar el contenido automáticamente, pero no es legal. Así que selecciono las noticias, copio la dirección del enlace, configuro la etiqueta de "prueba", marco la casilla "Soy el autor de la historia ubicada en esta URL" y presiono el botón Enviar. ¡Mira lo bien que se ven las noticias robadas!



Ahora es el momento de escalar la aplicación. Para hacer esto, solo necesita cambiar la definición de lo que estamos haciendo; en lugar de 1 réplica, vaya, por ejemplo, a 10. Luego ejecuto el bloque de comandos nuevamente.



Kubernetes acepta esta información, realiza una acción y ahora tenemos 10 copias de la aplicación Lobsters ejecutándose en nuestro hogar. Además, este proceso se agrega automáticamente al equilibrador de carga gracias al trabajo de los Servicios.



Veamos qué sucede en el backend. Para hacer esto, utilizo el comando $ kubectl get svc, obtengo un estado breve y solicito describirlo con el comando $ kubectl describe svc. Kubernetes detecta automáticamente todos nuestros puntos finales y los coloca detrás de un equilibrador de carga.



Al mismo tiempo, todo lo que es inútil se elimina y todo lo que se necesita se agrega automáticamente. No necesitamos crear esto una y otra vez, todo está completamente integrado en la plataforma.
La siguiente pregunta importante es cómo actualizar y cómo obtener registros. Si recuerda, le quité el acceso SSH, por lo que debe centralizar los registros utilizando algo como Log Stash o el registro interno de Google Cloud. Pero si solo desea ver registros ad hoc, recuerde que no tiene acceso a las máquinas. Sin embargo, puede usar la API para capturar registros utilizando nombres de contenedor. Para hacerlo, ingrese el comando $ kubectl logs lobsters-240734871-03rmn –f, donde 03rmn es el nombre de una copia específica de la aplicación lobsters-240734871 en el contenedor. Para que pueda ver el registro de cada contenedor con una réplica, de modo que, si es necesario, solucione los problemas.



Veamos nuestro contenido usando el comando $ kubectl get pods, como puede ver, todo funciona. Lo siguiente que debe hacer es contratar a un vendedor. Mira esta página y dice: "¡Haz lo que quieras, pero elimina estos puntos blancos del sitio!".



Todo lo que necesita hacer para esto es crear un nuevo contenedor además del ya creado y personalizar el CSS para lo que queremos promocionar. Permítame recordarle que no estamos hablando de nodos, los nodos no son importantes para nosotros, porque el sistema en sí mismo proporcionará exactamente lo que queremos.

Continuará muy pronto ...


Un poco de publicidad :)


Gracias por estar con nosotros. ¿Te gustan nuestros artículos? ¿Quieres ver más materiales interesantes? Apóyenos haciendo un pedido o recomendando a sus amigos VPS basado en la nube para desarrolladores desde $ 4.99 , un análogo único de servidores de nivel básico que inventamos para usted: toda la verdad sobre VPS (KVM) E5-2697 v3 (6 núcleos) 10GB DDR4 480GB SSD 1Gbps desde $ 19 o cómo dividir el servidor? (las opciones están disponibles con RAID1 y RAID10, hasta 24 núcleos y hasta 40GB DDR4).

Dell R730xd 2 veces más barato en el centro de datos Equinix Tier IV en Amsterdam? ¡Solo tenemos 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV desde $ 199 en los Países Bajos!Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ¡desde $ 99! Lea sobre Cómo construir un edificio de infraestructura. clase c con servidores Dell R730xd E5-2650 v4 que cuestan 9,000 euros por un centavo?

All Articles