Práctica de operación y mantenimiento automatizada del clúster Kubernetes a gran escala vivo
I. Antecedentes
A medida que el negocio de vivo migra a k8, necesitamos implementar k8 en múltiples centros de datos. Los nodos de Kubernetes requieren la instalación y configuración de OS, Docker, etcd, k8s, cni y complementos de red. Mantener estas dependencias es tedioso y propenso a errores.
Anteriormente, la implementación y el escalado del clúster se realizaban principalmente a través de manuales de ansible mediante tareas de orquestación de ansible, operaciones de pantalla negra y configuración de los manifiestos y variables del clúster. Las principales dificultades en la operación y mantenimiento del clúster son las siguientes:
2.1 Introducción a la implementación del clúster
Las principales tareas de implementación del clúster se basan en el sistema operativo, Docker, etc.d, k8s y add. -en componentes definidos por ansible.
Los procesos principales son los siguientes:
La figura anterior es el proceso clave de la implementación del clúster con un solo clic. Después de implementar los clústeres k8s en múltiples centros de datos, los cambios en los clústeres en línea, como las vulnerabilidades de seguridad en los componentes del clúster, el lanzamiento de nuevas funciones y las actualizaciones de componentes, deben manejarse con cuidado. Abordamos los módulos individuales de manera gradual. Evite ejecutar scripts ansibles por completo para evitar aumentar la dificultad de mantenimiento. Para la administración y operación modular de Docker, etcd, k8s, complementos de red y complementos, debemos proporcionar una entrada de script ansible separada para realizar operaciones de operación y mantenimiento más refinadas, que cubra la mayor parte de la administración del ciclo de vida del clúster. Al mismo tiempo, la API del operador de Kubernetes está diseñada para facilitar a los usuarios seleccionar la operación yml correspondiente para realizar operaciones.
La optimización de la implementación del clúster es la siguiente:
(1) La gestión de parámetros de componentes de k8s identifica el archivo de configuración a través de la API proporcionada por
ComponentConfig[1] .
(2) Plan para cambiar a la implementación de kubeadm
(3) Especificaciones de uso de Ansible
2.2 Prueba de matriz de CI
Requisitos para la implementación fuera del clúster Amplias pruebas y simulación de escenarios. Esto garantiza la confiabilidad y estabilidad de los cambios del entorno en línea.
A continuación se enumeran algunos casos de prueba de CI Matrix.
(1) Prueba de sintaxis:
(2) Prueba de implementación de clúster:
(3) Prueba de rendimiento y funcionalidad:
Aquí Se utilizaron GitLab, gitlab-runner [2], gitlab-variant [4], gitlab-runner [5], gitlab-runner [6], gitlab-runner [7] y gitlab-runner [8]. Utilice el corredor [2], ansible y kubevirt [3] para crear procesos de CI.
Los pasos de implementación detallados son los siguientes:
Como se muestra arriba, cuando un desarrollador envía un PR en GitLab, se activan una serie de acciones. Lo que se muestra aquí es principalmente la creación de máquinas virtuales y la implementación de clústeres. De hecho, gitlab-runner para verificación de sintaxis y pruebas de rendimiento también se implementa en nuestro clúster, y los trabajos de CI se crean a través de gitlab-runner para ejecutar el proceso de CI.
El proceso de CI específico es el siguiente:
Como se muestra en la figura anterior, cuando un desarrollador envía varios PR, se crearán varios trabajos en el clúster k8s y cada trabajo ejecute las pruebas de CI anteriores y no se afecten entre sí. Este uso principal de la funcionalidad kubevirt habilita la arquitectura k8s en k8s.
Las funciones principales de kubevirt son las siguientes:
3. Práctica del operador Kubernetes
3.1 Introducción al operador
El operador es un Controlador específico de la aplicación, que amplía la funcionalidad de la API de K8s para crear, configurar y administrar instancias de aplicaciones complejas en nombre de los usuarios de k8s. Se basa en los conceptos de recursos y controladores de k8, que a su vez incorporan conocimientos específicos del dominio o de la aplicación de la propia aplicación.
Resuma las funciones del operador:
3.2 Introducción a Kubernetes-Operator CR
kubernetes-operator utiliza muchos recursos y controladores de CR personalizados. A continuación se ofrece una breve introducción. a su función y papel.
ClusterDeployment: un CR único configurado por el administrador del que MachineSet, Machine y Cluster son subrecursos o están asociados. ClusterDeployment es el punto de entrada para todos los parámetros de configuración, que define etcd, k8s, lb, lvb, lvb y otros parámetros.
La implementación del clúster es el punto de entrada para todos los parámetros de configuración y define etcd, k8s, lb, lvb, lvb y otros parámetros.
MachineSet: una colección de roles de clúster, incluida la configuración y el estado de ejecución de los nodos de control, los nodos informáticos, etc.
Máquina: Información específica sobre cada máquina, incluyendo su rol, información sobre el propio nodo y su estado de ejecución.
Clúster: Corresponde a ClusterDeployment, cuyo estado se define como subrecurso, lo que puede reducir la presión de activación de
clusterDeployment. Se utiliza principalmente para almacenar el estado de los scripts ejecutados por el ejecutor ansible.
ejecutor ansible: incluye principalmente los trabajos propios de k8, configMap, Secret y el controlador de trabajos de desarrollo propio. El trabajo se utiliza principalmente para ejecutar scripts de ansible. Debido a que el estado del trabajo de k8 se puede dividir en éxito y fracaso, el controlador del trabajo puede observar bien el éxito o el fracaso de la ejecución de ansible. ser visto a través del registro de pod correspondiente al trabajo. configmap se utiliza principalmente para almacenar inventario y datos de los que depende ansible durante la ejecución. configmap se usa para almacenar la lista y las variables de las que depende ansible durante la ejecución y se monta en el trabajo. El secreto se utiliza para almacenar la clave para iniciar sesión en el host y también se monta en el trabajo.
Controlador de extensión: Controlador adicional utilizado para ampliar las capacidades de gestión del clúster. Al implementar Kubernetes-operator, lo personalizamos para que pueda elegir el controlador de escalado que desee. Por ejemplo, el controlador de complementos es responsable de instalar y administrar complementos, el controlador de instalación de clústeres es responsable de generar archivos ejecutables ansibles y remotoMachineSet se utiliza para la administración de múltiples clústeres y la sincronización del estado de la máquina de los clústeres de metadatos y los clústeres comerciales. Existen otros controladores, como el acoplamiento de nube pública, dns, lb y otros controladores.
3.3 Arquitectura Kubernetes-Operator
Las aplicaciones de Vivo se distribuyen en múltiples clústeres k8 en el centro de datos, proporcionando funciones clave como administración centralizada de múltiples nubes, programación unificada, alta disponibilidad y fallas. recuperación. La plataforma de paso del clúster de metadatos se utiliza principalmente para gestionar múltiples clústeres k8 empresariales. Entre los componentes clave, los operadores de Kubernetes se implementan en clústeres de metadatos, mientras que los controladores de máquinas individuales administran los recursos físicos.
Algunos ejemplos de escenarios de aplicación son los siguientes:
Escenario de aplicación 1:
Cuando se migra una gran cantidad de aplicaciones a Kubernet, los administradores evaluarán si Es necesario ampliar el grupo. Primero, los recursos físicos deben aprobarse y los recursos CR de la máquina correspondiente deben generarse a través de la plataforma de paso. En este momento, la máquina física está en el grupo de espera y el estado de CR de la máquina está inactivo. Cuando un administrador crea un ClusterDeploment, el MachineSet al que pertenece se asocia con una máquina inactiva. Con los recursos de la máquina inactiva, podemos generar el manifiesto y las variables correspondientes observando la dirección IP de la máquina que necesita ser operada, crear un mapa de configuración y montarlo en el trabajo. Ejecute el script ansible de expansión. Si el trabajo se completa con éxito, el estado de la máquina se actualizará para implementarse. Al mismo tiempo, el controlador del nodo de sincronización entre clústeres verificará si el nodo de expansión actual está listo. está listo, la máquina actual se actualizará para estar listo. Se completa todo el proceso de expansión.
Escenario 2:
Cuando uno de los clústeres empresariales no puede proporcionar servicios, se activará el proceso de recuperación de fallas para realizar una programación unificada de recursos. Al mismo tiempo, las políticas del servicio se distribuyeron entre varios clústeres empresariales, mientras se configuraba un clúster en espera y no se asignaban instancias en el clúster en espera que en realidad no existieran.
Existen los siguientes 2 escenarios:
3.4 Proceso de ejecución del operador Kubernetes
4. Resumen
Clúster K8s a gran escala de Vivo La práctica de operación y mantenimiento, desde la optimización de las herramientas de implementación de clústeres de nivel más bajo hasta una gran cantidad de pruebas matriciales de CI, garantiza la seguridad y estabilidad de nuestra operación y mantenimiento de clústeres en línea. K8s administrado K8s se utiliza para la gestión automatizada del clúster (K8s como servicio). Cuando el operador detecta el estado actual del clúster, determina si es consistente con el objetivo. Cuando hay una inconsistencia, el operador iniciará una operación específica. proceso para impulsar a todo el clúster a alcanzar el estado objetivo.
Actualmente, las aplicaciones de Vivo se distribuyen principalmente en múltiples clústeres K8 en centros de datos de construcción propia. Con el crecimiento continuo de las aplicaciones y la aparición de escenarios comerciales complejos, es necesario proporcionar múltiples clústeres K8 en salas de computadoras y nubes de construcción propia para ejecutar aplicaciones nativas generadas en la nube. Es necesario proporcionar Kubernetes-Operator para interactuar con la infraestructura de la nube pública, el equilibrio de carga del servidor, la red, el dns y los proveedores de la nube. Luego será necesario mejorarlo para que sea más fácil de operar y mantener los clústeres K8.
Autor de este artículo: Zhang Rong Fuente: vivo Internet Technology
CIO Home www.ciozj.com Cuenta pública de WeChat: imciow