¿Qué es común entre pelar huevos y DevOps?

Aquí hay una traducción del artículo de Patrick Lee Scott publicado en hackernoon.com. El autor ofrece familiarizarse con varios principios importantes que lo ayudarán a bombear DevOps.

imagen

Hace un par de días intenté pelar un huevo de una manera estúpida, y mi novia Angeli me preguntó por qué estaba haciendo esto.

Tomó otro huevo duro y lo golpeó en una tabla de cortar, luego lo presionó y lo rodó sobre la mesa. Le tomó solo 3 segundos limpiar. Y me puse de pie y me quité la concha pieza por pieza.

Lo que quiero decir con esto: exageramos la importancia de los esfuerzos.

Las mejores soluciones son simples y efectivas. ¿Es difícil limpiar un tornillo oxidado? Probablemente si. Pero solo si no sabe que esto se puede hacer con Coca-Cola. ¿Todavía complicado? No Solo necesita poner el perno en el vidrio y esperar.

Sin conocer técnicas simples, no puedes aplicarlas. En lugar de implementar, llevas a cabo experimentos; en lugar de replicar, investigas.

Si en la programación utiliza algún tipo de enfoque una y otra vez, ya que le permite simplificar el problema que se está resolviendo, este enfoque se convierte en una plantilla o la llamada mejor práctica.

A pesar de los nombres complejos y atemorizantes como la segregación de responsabilidad de consulta de comando (CQRS) o el aprovisionamiento de eventos (ES), estas prácticas ayudan a resolver problemas. Especialmente aquellos que surgen al construir sistemas distribuidos.

Si observa el desarrollo en su conjunto, veremos que existen principios más universales, por ejemplo, "Keep it Simple, Stupid" (KISS) y "Don't Repeat Yourself" (DRY). Me gustaría hablar sobre patrones y principios similares en relación con DevOps.

DevOps a menudo se presenta como la tierra prometida, en la que los pájaros cantan y el sol brilla. Pero sin usar los métodos correctos, DevOps se convertirá en un infierno y perforarás todos tus dedos con un caparazón (como yo).

Al crear sistemas DevOps, encontré varias soluciones para mí además de principios universales como KISS y DRY. Si bien no se pueden llamar plantillas, lo ayudarán a limpiar rápidamente el huevo. Estas soluciones (en orden aleatorio):

  • No hagas lo que otros han hecho antes que tú.
  • Deje que los desarrolladores sean lo más productivos posible.
  • La producción es un mito.
  • Transfiera todo al clúster y realice una copia de seguridad del conjunto.
  • La VPN es demasiado complicada; las soluciones son más fáciles.
  • ¡Organiza, automatiza y conquista!

Lección 1. No hagas lo que otros han hecho antes que tú


Si tiene la oportunidad de comprar un producto terminado o si tiene la herramienta necesaria y conveniente en el dominio público, úsela.

No reinventes la rueda, cómprala.

¿Sabía que puede usar el mismo servidor de correo que Craigslist? ¿Y qué es gratis? Necesita un servidor de correo: no cree uno nuevo, trabaje con uno existente.

Me gusta buscar herramientas en listas increíblemente alojadas o usar Helm Hub para esto.

A pesar de que Helm es una herramienta bastante nueva para encontrar software, este sitio ya se ha creado: https://v3.helm.sh/

Con Helm, puedes buscar fácilmente tus bicicletas terminadas.

Retrocedamos en el tiempo cuando recién comenzaba a programar. En noveno grado, aprendí mi primer idioma "real": QBasic. Antes de eso, he estado creando sitios HTML y CSS durante un par de años. Entonces, Internet era nuevo, y aunque las personas sabían cómo crear paquetes, no los compartían, como lo somos ahora. Usualmente usaba disquetes para el almacenamiento; sería genial encontrarlos junto con un juego como Arkanoid, que escribí en Java Swing en el grado 11 ...

Todo lo que usé entonces fue bibliotecas estándar, bebé! Al menos a los 13 años solo sabía de ellos. Aunque estoy seguro de que algunos profesionales de Java (¡hola, Vlad y Nick!) Ya eran geniales entonces. ;)

Ahora todo está mal. Hoy puede encontrar bibliotecas de interfaz de usuario completas. Puede encontrar una biblioteca para tratar de manera elegante y fácil las fechas con un solo comando.

Sería genial si hubiera una herramienta para usar e instalar subsistemas en pleno funcionamiento, ¿verdad? ¿Necesitas una base de datos? instalar base de datos

Buenas noticias: ¡existe una herramienta así! Con Helm, también puede instalar subsistemas completamente funcionales que están empaquetados y listos para usar.

El principio es el mismo que para NPM y Gradle, pero los paquetes que administramos en Helm se denominan gráficos. Los gráficos marcan los contenedores para que se ejecuten en Kubernetes de varias maneras.

Resulta una solución llave en mano, comprar una bicicleta. Los gráficos son la rueda, y los contenedores con descripciones que se ejecutan dentro de Kubernetes son ruedas.

Lo bueno de los gráficos es la capacidad de empaquetar servicios y ejecutarlos en cualquier clúster de Kubernetes e incluso compartirlos con otras personas si lo desea.

Esto significa que puede describir todo el entorno utilizando el código:

- name: backup repository: http://jenkins-x-chartmuseum:8080 version: 0.0.2 - name: monitor repository: http://jenkins-x-chartmuseum:8080 version: 0.0.3 - name: marketing-site repository: http://jenkins-x-chartmuseum:8080 version: 1.1.10 - name: denormalizer-service repository: http://jenkins-x-chartmuseum:8080 version: 1.0.0 - name: mongo repository: https://kubernetes-charts.storage.googleapis.com/ version: 1.0.0 

¿Necesita actualizar su sitio de marketing a 1.2.0? Solo haz cambios y comprométete.

Lección 2. Deje que los desarrolladores sean lo más productivos posible.


Una vez me senté a la mesa, miré mi código e intenté rastrear el error. Los usuarios han estado quejándose de él durante varias semanas, y finalmente tuve un poco de tiempo libre para pasar el rato.

Tada-a-am! Lo encontré! Arreglado!

Me senté detrás de una partición en mi lugar de trabajo en una habitación iluminada por el sol y grité a los demás: "¡Arreglé el error!"

El próximo martes, cuando los usuarios vean el lanzamiento, ¡definitivamente apreciarán mis esfuerzos! Pero para esto tendremos que empacar e intentar mover el lanzamiento del lugar ... Tal vez tengamos éxito si no sucede nada ...

Bueno, está bien, si el lanzamiento aún llega el próximo martes, ¡los usuarios definitivamente lo apreciarán!

Así fue como hice el despliegue en mi primer trabajo universitario, como programador junior.

Desde entonces, mucho ha cambiado.

Ahora uso el desarrollo basado en troncales y despliego módulos muchas veces al día. Cuando envío una solicitud de extracción, el bot publicará un comentario correspondiente con el código de revisión con el entorno recopilado después de que las pruebas hayan pasado y las compilaciones se hayan recopilado.

Hoy no tienes que gritar a través de la partición en la oficina.

Cuanta más libertad les dé a los programadores, la libertad de controlar las partes de la infraestructura que necesitan, más fácil le resultará trabajar como ingeniero de DevOps.

En la primera lección, vimos que para actualizar en producción es suficiente cambiar un dígito y confirmar. En un mundo ideal en el que empaquetamos aplicaciones en gráficos, cada programador de un equipo tiene la oportunidad de influir en el funcionamiento de la herramienta en la etapa de producción. Kubernetes entiende los gráficos como descripciones de contenedores, por lo que describen los requisitos de recursos.

La lógica es algo como esto: no puedo adivinar cuánta memoria o qué configuraciones de CPU se necesitarán para un nuevo servicio (y creo que no soy el único). Por lo tanto, también implemento monitoreo y alertas con reglas según las cuales mi equipo y yo seremos informados en Slack de que estas configuraciones deben modificarse. Es decir, el sistema le informará sobre la configuración necesaria cuando la implementemos. Solía ​​sentarme durante horas, enviando solicitudes a través de Prometheus y ajustando la configuración, al igual que solía elegir el caparazón. Y ahora he aprendido a hacer todo sabiamente.

Ya puedo oírte decir: "¡Suena demasiado complicado!" No Solo establece el gráfico.

Si puede automatizar o simplificar algo, continúe. Por ejemplo, ¿qué pasaría si pudiera asignar una ruta DNS simplemente desplegando el servicio con la etiqueta "exponer: verdadero"? Aquí es donde aparecen los operadores. Esta es una herramienta de Kubernetes más avanzada, y debería conocerla. Pero no profundicemos demasiado en los detalles.

Lección 3. La producción es un mito.


Esta fue una verdadera revelación para mí. Tenía que mirar las cosas desde un ángulo diferente, así que escucha con atención.

Durante más de diez años, pensé que en el mundo solo hay unos pocos tipos de entornos. En el escenario más simple, hay puesta en escena y producción del medio ambiente. Primero se implementó en la puesta en escena, luego se probó, se pasó a la siguiente etapa, se implementó, se probó, etc. Tan pronto como todo esté unido, el hijo está integrado, puede entrar en producción.

Seguí este patrón año tras año y nunca lo dudé. Siempre ha sido así.

Y este esquema es otra forma improductiva de deshacerse del caparazón.

En esencia, un gráfico es un gráfico de dependencia. Se puede usar para representar el entorno, y luego el proceso de implementación en producción se reduce a la implementación de un solo gráfico.

Si cada equipo, proyecto o grupo conectado por un contexto común tiene su propio gráfico, aparecen varios entornos que le permiten agrupar y actualizar todos los servicios en una sola transacción.

No tome la producción como un gran entorno que lo abarca todo, de hecho, es una gran cantidad de producción pequeña.

Los cambios importantes son aterradores en su escala. Y si tiene varios entornos de desarrollo pequeños, puede aislar los cambios y hacer que el sistema sea más flexible.

Además, si todo está organizado en forma de gráficos, las variables se establecerán y se pueden cambiar desde el exterior, de la misma manera. Por ejemplo, para conectar un cluster kafka menos potente a la preproducción, donde no es necesario, solo necesita cambiar la configuración.

Lección 4. Transfiera todo al clúster y realice una copia de seguridad de todo


Entonces, resolvimos la producción. ¿Qué hacer con las bases de datos? Con kafka? Con problemas de seguridad?

Si lees detenidamente, recuerda: escribí que las bases de datos se pueden incluir en el paquete de gráficos.

Kubernetes tiene una API separada para ejecutar bases de datos y otras aplicaciones con estado en una forma conveniente: StatefulSets.

La esencia misma de Kubernetes es mejorar la confiabilidad del lanzamiento del contenedor. Con él y con la herramienta Velero (instalada a través de Helm Chart), puede crear una copia de seguridad de todo el clúster de Kubernetes, junto con los discos adjuntos, por ejemplo, los creados por StatefulSet, y restaurar todo con un solo comando. Además, es fácil configurar la copia de seguridad automática en un horario.

Las copias de seguridad, la recuperación en un equipo y el administrador de Kubernetes lo ayudarán a implementar un clúster completamente nuevo y restaurar su copia de seguridad con solo dos equipos. Un máximo de tres, si primero desea crear una nueva copia de seguridad.

En lugar de pensar en servidores, puede operar en clústeres completos.

¿Es molesta la preproducción? Quítelo de la vista - a la distancia de copia de seguridad, recuperación y cambio de DNS.

Lección 5. VPN es demasiado complicado, hay soluciones más fáciles


¿Alguna vez has usado una VPN con placer?

No realmente. ¿Es posible?

Google tuvo tal intento. Pero hace un par de años, la compañía anunció que no usaría una VPN. Creo que tampoco lo disfrutaron.

Google cambió a redes sin confianza. No tienen una clave maestra adecuada para ninguna red, pero a la entrada de cada servicio hay una clave en forma de pantalla de inicio de sesión SSO. ¿Desea iniciar sesión en el servicio de monitoreo? Inicie sesión con el nombre de usuario y contraseña de su empresa.

Solo se necesita un pequeño turno: en lugar de usar una VPN para la autorización, use un proxy.

La VPN también aloja el enlace de administración de Kubernetes en la red privada, mientras que SSO no. Pero tienen su propio mecanismo de autorización. En el caso de Google Cloud y AWS, esta es la Gestión de Identidad y Acceso (IAM) y la capacidad de incluir en la lista blanca las direcciones IP.

Si es posible trabajar con una arquitectura menos voluminosa sin mucha pérdida, ¿por qué no? Sea como Google: cambie de VPN a sistemas "sin confianza".

Lección 6. Organizar, automatizar y conquistar


Ah, ¿te parece que sistematizar es mucho tiempo? ¡Tonterías! En el futuro, esto le ahorrará horas, días e incluso semanas. A trabajar!

La sistematización es la única forma realista de recrear la infraestructura más de una vez.

Si cada elemento de configuración se puede mejorar cambiando y confirmando algo en git, esencialmente toda su organización tecnológica es declarativa. Cualquier desarrollador con acceso a git puede mantener fácilmente cualquier sistema en condiciones de trabajo.

Para hacer esto, use varios repositorios pequeños. Los monorepos hacen que las personas corten esquinas y dependan de estructuras con importancia artificial. En cambio, es mejor usar muchos repositorios pequeños que puede vincular más adelante.

Mi amigo Matt y yo estamos creando una herramienta llamada meta para ayudar a hacer esto en la etapa de desarrollo. Helm hace esto en la etapa de producción: ¡para él todo es un gráfico de dependencia!

Conclusión


No recoja la cáscara del huevo pieza por pieza. Batir y rodar.

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


All Articles