{"id":91199,"date":"2020-08-10T01:42:03","date_gmt":"2020-08-09T23:42:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov"},"modified":"2020-08-10T01:42:03","modified_gmt":"2020-08-09T23:42:03","slug":"kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","title":{"rendered":"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Me llamo V\u00edctor Yagofarov y desarrollo la plataforma de Kubernetes en la empresa DomClick como l\u00edder t\u00e9cnico del equipo de Ops (operaciones). Quiero hablar sobre c\u00f3mo est\u00e1n organizados nuestros procesos Dev  Ops, sobre las particularidades de la gesti\u00f3n de uno de los cl\u00fasteres de k8s m\u00e1s grandes de Rusia, as\u00ed como sobre las pr\u00e1cticas de DevOps\/SRE que aplica nuestro equipo.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios\" src=\"\/wp-content\/uploads\/2020\/08\/6c908104c734b36cc7a960fbe4d65e3f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Equipo de Ops<\/h4>\n<p>\nActualmente, en el equipo de Ops trabajan 15 personas. Tres de ellas se encargan de la oficina, dos trabajan en otra zona horaria y est\u00e1n disponibles, incluso, durante la noche. As\u00ed, siempre hay alguien del equipo de Ops frente al monitor y listo para reaccionar ante cualquier incidente. No tenemos turnos nocturnos, lo que preserva nuestra salud mental y permite a todos dormir bien y disfrutar de su tiempo libre fuera del ordenador.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios\" src=\"\/wp-content\/uploads\/2020\/08\/47051db273f116df376e64bad67c6f37.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLas competencias son variadas: hay expertos en redes, DBA, especialistas en la pila ELK, administradores\/desarrolladores de Kubernetes, expertos en monitoreo, virtualizaci\u00f3n, hardware, etc. Lo que une a todos es que cada uno puede, en cierta medida, reemplazar a cualquier otro: por ejemplo, a\u00f1adir nuevos nodos al cl\u00faster de k8s, actualizar PostgreSQL, escribir un pipeline CI\/CD + Ansible, automatizar algo en Python\/Bash\/Go, conectar hardware en el centro de datos. Tener habilidades fuertes en un \u00e1rea no impide cambiar de direcci\u00f3n y empezar a desarrollarse en otra. Por ejemplo, me un\u00ed a la empresa como especialista en PostgreSQL, y ahora mi principal responsabilidad son los cl\u00fasteres de Kubernetes. En el equipo, cualquier crecimiento es bienvenido y hay un fuerte sentido de apoyo mutuo.<\/p>\n<p>Por cierto, estamos buscando talento. Los requisitos para los candidatos son bastante est\u00e1ndar. Personalmente, me importa que la persona se integre bien en el equipo, sea no conflictiva, pero tambi\u00e9n sepa defender su punto de vista, desee desarrollarse y no tema hacer algo nuevo, proponiendo sus ideas. Adem\u00e1s, son imprescindibles habilidades de programaci\u00f3n en lenguajes de script, conocimientos b\u00e1sicos de Linux y un nivel de ingl\u00e9s suficiente. El ingl\u00e9s es necesario simplemente para que la persona, en caso de error, pueda buscar la soluci\u00f3n al problema en 10 segundos en lugar de 10 minutos. Actualmente, es muy dif\u00edcil encontrar especialistas con un profundo conocimiento de Linux: es curioso, pero dos de cada tres candidatos no pueden responder a la pregunta \u00ab\u00bfQu\u00e9 es el Load Average? \u00bfDe qu\u00e9 se compone?\u00bb, y consideran que la pregunta \u00ab\u00bfC\u00f3mo generar un core dump de un programa en C?\u00bb es algo del mundo de los superhumanos\u2026 o de los dinosaurios. Hay que aceptar esto, ya que generalmente las personas tienen competencias muy desarrolladas en otros \u00e1mbitos, y nosotros podemos ense\u00f1arles sobre Linux. La respuesta a la pregunta \u00ab\u00bfpor qu\u00e9 todo esto es necesario para un ingeniero DevOps en el mundo actual de la nube?\u00bb tendr\u00e1 que quedar fuera del alcance del art\u00edculo, pero en tres palabras: todo esto es necesario.<\/p>\n<h4>Equipo de Herramientas<\/h4>\n<p>\nEl equipo de Herramientas juega un papel importante en la automatizaci\u00f3n. Su tarea principal es crear herramientas gr\u00e1ficas y de l\u00ednea de comandos convenientes para los desarrolladores. Por ejemplo, nuestro desarrollo interno Confer permite, literalmente, desplegar una aplicaci\u00f3n en Kubernetes con solo unos clics, configurar sus recursos, claves de vault, etc. Antes utiliz\u00e1bamos Jenkins + Helm 2, pero fue necesario desarrollar nuestra propia herramienta para eliminar el copiar y pegar y aportar uniformidad al ciclo de vida del software.<\/p>\n<p>El equipo de Ops no escribe pipelines para los desarrolladores, pero puede asesorar sobre cualquier cuesti\u00f3n relacionada con su redacci\u00f3n (algunos todav\u00eda usan Helm 3).<\/p>\n<h4>DevOps<\/h4>\n<p>\nEn cuanto a DevOps, lo vemos as\u00ed:<\/p>\n<p>Los equipos de Dev escriben c\u00f3digo y lo despliegan a trav\u00e9s de Confer en dev -&gt; qa\/stage -&gt; prod. La responsabilidad de que el c\u00f3digo no se detenga y no arroje errores recae en los equipos de Dev y Ops. Durante el d\u00eda, la persona de guardia del equipo de Ops debe ser la primera en reaccionar ante un incidente con su aplicaci\u00f3n, y durante la noche, el administrador de guardia (Ops) debe despertar al desarrollador de guardia si sabe con certeza que el problema no est\u00e1 en la infraestructura. Todas las m\u00e9tricas y alertas en la monitorizaci\u00f3n aparecen de manera autom\u00e1tica o semi-autom\u00e1tica.<\/p>\n<p>La zona de responsabilidad de Ops comienza en el momento del despliegue de la aplicaci\u00f3n en producci\u00f3n, pero la responsabilidad de Dev no termina ah\u00ed; hacemos lo mismo y estamos en el mismo barco.<\/p>\n<p>Los desarrolladores consultan a los administradores si necesitan ayuda para escribir un microservicio administrativo (por ejemplo, backend en Go + HTML5), y los administradores consultan a los desarrolladores sobre cualquier cuesti\u00f3n de infraestructura o sobre temas relacionados con k8s.<\/p>\n<p>Por cierto, no tenemos monolitos, solo microservicios. Su n\u00famero oscila entre 900 y 1000 en el cl\u00faster k8s de producci\u00f3n, si medimos por la cantidad de <i>despliegues<\/i>. La cantidad de pods var\u00eda entre 1700 y 2000. Actualmente hay alrededor de 2000 pods en el cl\u00faster de producci\u00f3n.<\/p>\n<p>No puedo dar n\u00fameros exactos, ya que estamos monitoreando los microservicios innecesarios y los eliminamos de forma semi-autom\u00e1tica. Monitorear las entidades innecesarias en k8s nos ayuda <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Nastradamus\/useless-operator\">useless-operator<\/a><\/noindex>, lo que ahorra recursos y dinero.<\/p>\n<h2> Gesti\u00f3n de recursos <\/h2>\n<p><\/p>\n<h4> Monitoreo <\/h4>\n<p>\nLa piedra angular de la explotaci\u00f3n de un gran cl\u00faster es un monitoreo bien estructurado e informativo. A\u00fan no hemos encontrado una soluci\u00f3n universal que cubra el 100% de todas las necesidades de monitoreo, por lo que peri\u00f3dicamente creamos diferentes soluciones personalizadas en este entorno.<\/p>\n<ul>\n<li><b>Zabbix<\/b>. El antiguo y buen monitoreo, que est\u00e1 destinado, en primer lugar, a rastrear el estado general de la infraestructura. Nos informa cu\u00e1ndo un nodo falla por CPU, memoria, discos, red, etc. No es nada sobrenatural, pero tambi\u00e9n tenemos un DaemonSet separado de agentes, con los que, por ejemplo, monitoreamos el estado de DNS en el cl\u00faster: buscamos pods de coredns que se est\u00e1n estancando, comprobamos la disponibilidad de hosts externos. Podr\u00eda parecer innecesario preocuparse por eso, pero a grandes vol\u00famenes de tr\u00e1fico, este componente se convierte en un punto cr\u00edtico de fallo. Anteriormente ya he <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/495450\/\">descrito<\/a><\/noindex>, c\u00f3mo luch\u00e9 contra el rendimiento de DNS en el cl\u00faster.<\/li>\n<li><b>Prometheus Operator<\/b>. Un conjunto de diversos exportadores proporciona una visi\u00f3n amplia de todos los componentes del cl\u00faster. Luego, visualizamos todo esto en grandes tableros en Grafana, y para las notificaciones utilizamos alertmanager.\n<\/li>\n<\/ul>\n<p>\nOtro instrumento \u00fatil para nosotros ha sido <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Nastradamus\/list-ingress\">list-ingress<\/a><\/noindex>. Lo escribimos despu\u00e9s de enfrentar varias veces situaciones en las que un equipo obstaculizaba el Ingress de otro equipo, lo que provocaba errores 50x. Ahora, antes de desplegar en producci\u00f3n, los desarrolladores verifican que no impacten a nadie, y para mi equipo, es una buena herramienta para un diagn\u00f3stico inicial de problemas con los Ingress. Es curioso que al principio se escribi\u00f3 para administradores y luc\u00eda bastante \u00abtosco\u00bb, pero despu\u00e9s de que a las equipos de desarrollo les gust\u00f3, se transform\u00f3 significativamente y dej\u00f3 de parecer que \u00abun administrador hizo una interfaz web para administradores\u00bb. Pronto abandonaremos esta herramienta y situaciones similares ser\u00e1n validadas incluso antes del despliegue del pipeline.<\/p>\n<h4>Recursos de los equipos en \"Kube\"<\/h4>\n<p>\nAntes de proceder con los ejemplos, vale la pena explicar c\u00f3mo trabajamos la asignaci\u00f3n de recursos para <i>microservicios<\/i>.<\/p>\n<p>Para entender qu\u00e9 equipos y en qu\u00e9 cantidades utilizan sus <i>recursos<\/i> (CPU, memoria, SSD local), asignamos a cada equipo su propio <i>namespace<\/i> en \u00abKubernetes\u00bb y limitamos sus capacidades m\u00e1ximas en cuanto a CPU, memoria y disco, discutiendo previamente las necesidades de los equipos. Por lo tanto, un equipo, en t\u00e9rminos generales, no bloquear\u00e1 todo el cl\u00faster para su despliegue, asign\u00e1ndose miles de n\u00facleos y terabytes de memoria. Los accesos en el namespace se otorgan a trav\u00e9s de AD (utilizamos RBAC). Los namespaces y sus l\u00edmites se a\u00f1aden a trav\u00e9s de pull request en el repositorio GIT, y luego, a trav\u00e9s del pipeline de Ansible, todo se despliega autom\u00e1ticamente.<\/p>\n<p>Ejemplo de asignaci\u00f3n de recursos para un equipo:<\/p>\n<pre><code class=\"go\">namespaces:\n\n  chat-team:\n    pods: 23\n    limits:\n      cpu: 11\n      memory: 20Gi\n    requests:\n      cpu: 11\n      memory: 20Gi\n<\/code><\/pre>\n<p><\/p>\n<h4>Solicitudes y l\u00edmites<\/h4>\n<p>\nEn \"Kube\" <i>Request<\/i> \u2014 es la cantidad de recursos garantizados reservados para <i>pod<\/i> (uno o m\u00e1s contenedores de Docker) en el cl\u00faster. Limit es un m\u00e1ximo no garantizado. A menudo se puede observar en los gr\u00e1ficos c\u00f3mo alg\u00fan equipo se asign\u00f3 demasiadas solicitudes para todas sus aplicaciones y no puede desplegar una aplicaci\u00f3n en \u00abKubernetes\u00bb, ya que todas las solicitudes dentro de su namespace ya han sido \u00abgastadas\u00bb.<\/p>\n<p>La salida correcta de tal situaci\u00f3n: observar el consumo real de recursos y compararlo con la cantidad solicitada (Request).<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios\" src=\"\/wp-content\/uploads\/2020\/08\/417373d4421064f28d57a03b6bb5bf94.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios\" src=\"\/wp-content\/uploads\/2020\/08\/3168ad6dc8b159059b21e1177e145376.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn las capturas de pantalla anteriores, se puede ver que las \"solicitadas\" (Requested) CPU se ajustan a la cantidad real de hilos, mientras que los l\u00edmites pueden exceder la cantidad real de hilos de los procesadores centrales =)<\/p>\n<p>Ahora desglosaremos un namespace (he elegido el namespace kube-system, que es el namespace del sistema para los componentes de \"Kube\") y veremos la relaci\u00f3n entre el tiempo de CPU y la memoria realmente utilizada y la solicitada:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios\" src=\"\/wp-content\/uploads\/2020\/08\/ed6160de5397b8cd39cbae172d4bb872.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs evidente que se ha reservado mucho m\u00e1s memoria y CPU para los servicios del sistema de lo que se utiliza realmente. En el caso del kube-system, esto es justificado: ha habido ocasiones en que el controlador de ingreso nginx o nodelocaldns en su pico alcanzaron el l\u00edmite de CPU y consumieron mucha RAM, por lo que este margen es justificable. Adem\u00e1s, no podemos depender de los gr\u00e1ficos de las \u00faltimas 3 horas; es preferible ver m\u00e9tricas hist\u00f3ricas durante un periodo m\u00e1s amplio.<\/p>\n<p>Se ha desarrollado un sistema de \"recomendaciones\". Por ejemplo, aqu\u00ed se puede ver qu\u00e9 recursos ser\u00eda mejor aumentar los \"l\u00edmites\" (el l\u00edmite superior permitido) para que no ocurra \"throttling\": el momento en que se ha consumido CPU o memoria por el tiempo asignado y se est\u00e1 a la espera de que lo \"descongelen\":<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios\" src=\"\/wp-content\/uploads\/2020\/08\/f23aece10a585e6847bcacfe947031d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nY aqu\u00ed est\u00e1n los pods que deber\u00edan moderar su apetito:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios\" src=\"\/wp-content\/uploads\/2020\/08\/1ec9996ce6355aeba603008d51aac209.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSobre <i>throttling<\/i> + el monitoreo de recursos puede dar para no un art\u00edculo, por lo tanto, hagan preguntas en los comentarios. En pocas palabras, puedo decir que la tarea de automatizar m\u00e9tricas de este tipo es bastante complicada y requiere mucho tiempo y equilibrio con las funciones \"window\" y \"CTE\" de Prometheus \/ VictoriaMetrics (estos t\u00e9rminos est\u00e1n entre comillas, ya que en PromQL casi no hay nada similar, y hay que elaborar consultas complejas que ocupan varias pantallas de texto y optimizarlas).<\/p>\n<p>Al final, los desarrolladores tienen herramientas para monitorear sus namespaces en \"Kube\", y pueden elegir por s\u00ed mismos d\u00f3nde y cu\u00e1ndo se pueden \"recortar\" recursos de ciertas aplicaciones, mientras que a algunos pods se les puede dejar todo el CPU toda la noche.<\/p>\n<h4>Metodolog\u00edas<\/h4>\n<p>\nEn la empresa, como est\u00e1 de moda ahora <i>de moda<\/i>, nos adherimos a las pr\u00e1cticas de DevOps y <i>SRE<\/i>-pr\u00e1cticas. Cuando hay 1000 microservicios en la empresa, alrededor de 350 desarrolladores y 15 administradores para toda la infraestructura, se tiene que \"estar a la moda\": detr\u00e1s de todos esos \"buzzwords\" se esconde una necesidad urgente de automatizaci\u00f3n de todo, y los administradores no deben ser un cuello de botella en los procesos.<\/p>\n<p>Como Ops, proporcionamos diversas m\u00e9tricas y tableros para desarrolladores relacionados con la velocidad de respuesta de los servicios y sus errores.<\/p>\n<p>Utilizamos metodolog\u00edas como: <noindex><a rel=\"nofollow\" href=\"https:\/\/thenewstack.io\/monitoring-microservices-red-method\/\">RED<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/usemethod.html\">USE<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/forepaas\/distributed-monitoring-101-the-four-golden-signals-305bbbc33d35\">Se\u00f1ales de oro<\/a><\/noindex>, combin\u00e1ndolos juntos. Nos esforzamos por minimizar la cantidad de paneles para que a simple vista sea claro qu\u00e9 servicio est\u00e1 degrad\u00e1ndose en este momento (por ejemplo, c\u00f3digos de respuesta por segundo, tiempo de respuesta en el percentil 99), y as\u00ed sucesivamente. En cuanto necesitamos nuevas m\u00e9tricas para los paneles generales, inmediatamente las dise\u00f1amos y a\u00f1adimos.<\/p>\n<p><i>No he dibujado gr\u00e1ficos en un mes. Tal vez eso sea una buena se\u00f1al: significa que la mayor\u00eda de los 'deseos' ya se han realizado. En ocasiones, durante una semana, al menos una vez al d\u00eda dibujaba un nuevo gr\u00e1fico.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios\" src=\"\/wp-content\/uploads\/2020\/08\/574f1b4d2be78fb779f1771bffac51dd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios\" src=\"\/wp-content\/uploads\/2020\/08\/6ab2aa05f912839b14bdbcf84faaeb3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl resultado conseguido es valioso porque ahora los desarrolladores rara vez vienen a los administradores con preguntas de 'd\u00f3nde ver alguna m\u00e9trica'.<\/p>\n<p>Implementaci\u00f3n <i>Service Mesh<\/i> no est\u00e1 lejos y deber\u00eda facilitar mucho la vida a todos, los colegas de Tools ya est\u00e1n cerca de implementar el 'Istio del hombre sano': el ciclo de vida de cada solicitud HTTP(s) ser\u00e1 visible en la monitorizaci\u00f3n, y siempre se podr\u00e1 entender 'en qu\u00e9 etapa todo se rompi\u00f3' durante las interacciones entre servicios (y no solo). Suscr\u00edbete a las noticias del hub de la empresa DomClick. =)<\/p>\n<h2>Soporte de la infraestructura de Kubernetes<\/h2>\n<p>\nHist\u00f3ricamente, hemos utilizado una versi\u00f3n parcheada <i>Kubespray<\/i> \u2014 un rol de Ansible para desplegar, expandir y actualizar Kubernetes. En alg\u00fan momento, se elimin\u00f3 el soporte para instalaciones no kubeadm de la rama principal, y el proceso de transici\u00f3n a kubeadm no se propuso. Como resultado, la empresa Southbridge hizo su propio fork (con soporte para kubeadm y una r\u00e1pida soluci\u00f3n de problemas cr\u00edticos). <\/p>\n<p>El proceso de actualizaci\u00f3n de todos los cl\u00fasteres de k8s es el siguiente:<\/p>\n<ul>\n<li>Tomamos <i>Kubespray<\/i> de Southbridge, comparamos con nuestra rama, fusionamos.<\/li>\n<li>Desplegamos la actualizaci\u00f3n en <i>Stress<\/i>- 'Cubo'.<\/li>\n<li>Desplegamos la actualizaci\u00f3n nodo por nodo (en Ansible es 'serial: 1') en <i>Dev<\/i>- 'Cubo'.<\/li>\n<li>Actualizamos <i>Prod<\/i> el s\u00e1bado por la noche nodo por nodo.<\/li>\n<\/ul>\n<p>\nEn el futuro, hay planes de reemplazar <i>Kubespray<\/i> por algo m\u00e1s r\u00e1pido y cambiar a <i>kubeadm<\/i>.<\/p>\n<p>En total, tenemos tres 'Cubos': Stress, Dev y Prod. Planeamos lanzar otro (<i>hot standby<\/i>) el Prod-'Cubo' en el segundo centro de datos. <i>Stress<\/i> y <i>Dev<\/i> viven en 'virtual machines' (oVirt para Stress y VMWare cloud para Dev). <i>Prod<\/i>- 'Cubo' vive en 'hardware desnudo' (bare metal): son nodos id\u00e9nticos con 32 hilos de CPU, 64-128 GB de memoria y 300 GB SSD RAID 10 \u2014 en total hay 50. Tres nodos 'delgados' est\u00e1n reservados para el 'maestro' <i>Prod<\/i>- 'Cubo': 16 GB de memoria, 12 hilos de CPU.<\/p>\n<p>Para la producci\u00f3n, preferimos utilizar 'hardware desnudo' y evitamos capas innecesarias como <i>OpenStack<\/i>: no necesitamos 'vecinos ruidosos' y tiempo de CPU <i>steal time<\/i>La complejidad de la administraci\u00f3n aumenta aproximadamente el doble en el caso de OpenStack in-house.<\/p>\n<p>Para CI\/CD de componentes \u00abKube\u00bb y otras infraestructuras, utilizamos un servidor GIT separado, Helm 3 (pasamos de manera algo dolorosa de Helm 2, pero estamos muy contentos con la opci\u00f3n <i>atomic<\/i>), Jenkins, Ansible y Docker. Nos gustan las feature branches y el despliegue en diferentes entornos desde un solo repositorio.<\/p>\n<h3>Conclusi\u00f3n<\/h3>\n<p><img decoding=\"async\" alt=\"Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios\" src=\"\/wp-content\/uploads\/2020\/08\/34ddcd1f275c63c1ad821218d16b5abb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAs\u00ed, a grandes rasgos, se ve el proceso de DevOps en la empresa DomClick desde la perspectiva de un ingeniero de operaciones. El art\u00edculo result\u00f3 ser menos t\u00e9cnico de lo que esperaba: por lo tanto, mantente al tanto de las novedades de DomClick en Habr: habr\u00e1 art\u00edculos m\u00e1s \u00abhardcore\u00bb sobre Kubernetes y m\u00e1s.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/501122\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f). \u042f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 Dev &lt;-&gt; Ops, \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 k8s-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e DevOps\/SRE-\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 Ops \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91200,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91199","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Kubernetes \u0432 \u0414\u043e\u043c\u041a\u043b\u0438\u043a: \u043a\u0430\u043a \u0441\u043f\u0430\u0442\u044c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u043d\u0430 1000 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-09T23:42:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-09T23:42:03+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kubernetes en DomClick: c\u00f3mo dormir tranquilo gestionando un cl\u00faster de 1000 microservicios | ProHoster","description":"Me llamo V\u00edctor Yagofarov, y me encargo del desarrollo de la plataforma Kubernetes en la empresa DomClick en calidad de l\u00edder t\u00e9cnico de desarrollo en el equipo Ops (operaciones).","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Kubernetes \u0432 \u0414\u043e\u043c\u041a\u043b\u0438\u043a: \u043a\u0430\u043a \u0441\u043f\u0430\u0442\u044c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u043d\u0430 1000 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 | ProHoster","og:description":"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-09T23:42:03+00:00","article:modified_time":"2020-08-09T23:42:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91199","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:32:23","updated":"2022-09-28 06:43:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/91199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=91199"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/91199\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/91200"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=91199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=91199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=91199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}