Amplíe y optimice Jenkins enOracle Cloud Infrastructure Kubernetes Engine
Jenkins es un sistema de integración y despliegue continuos utilizado por desarrolladores para verificar, crear y desplegar automáticamente su código, de modo que solo pueden centrarse en ofrecer nuevas funciones.
Con el lanzamiento de Kubernetes, las arquitecturas distribuidas y de nada compartido se han convertido gradualmente en la norma, tanto que todos los sistemas de integración y despliegue continuos más recientes se implementan en Kubernetes. En cuanto a Jenkins, la arquitectura de controlador/agente podría no ser lo suficientemente escalable para grandes organizaciones y equipos de desarrollo, pero gracias al esfuerzo de la comunidad es posible contenedorizar Jenkins y desplegarlo de una manera nativa en la nube.
Puede alojar Jenkins en Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine u OKE) para centralizar la automatización de compilación y ampliarla a medida que crecen los proyectos de software. Al implementar un Jenkins escalable en OKE, los desarrolladores podrán desarrollar nuevos servicios con agilidad y, además, escalar fácilmente sus pipelines de integración y despliegue continuos.
Arquitectura
Esta arquitectura de referencia de alto nivel muestra un ejemplo de varios despliegues de Jenkins en OKE. Al desplegar Jenkins en OKE as a Service, es posible escalar según sea necesario.
Cada pod de controlador de Jenkins tiene un volumen persistente asociado para mantener el historial de pipeline y los plugins adicionales instalados por los equipos. Los agentes de Jenkins se crearán cada vez que se dispare un trabajo de pipeline y se destruya automáticamente al final.
Cada instancia de Jenkins se puede exponer individualmente a través de un equilibrador de carga o mediante una entrada de Kubernetes.
El siguiente diagrama ilustra esta arquitectura de referencia.
oci-jenkins-oke-arch-oracle.zip
La arquitectura tiene los siguientes componentes:
- Región
Una región de Oracle Cloud Infrastructure es un área geográfica localizada que contiene uno o más centros de datos, denominados dominios de disponibilidad. Las regiones son independientes entre sí y puede haber grandes distancias que las separen (entre países e incluso continentes).
- Dominios de disponibilidad
Los dominios de disponibilidad son centros de datos independientes dentro de una región. Los recursos físicos de cada dominio de disponibilidad están aislados de los recursos de los otros dominios de disponibilidad, lo que proporciona tolerancia a fallos. Los dominios de disponibilidad no comparten infraestructura, como la alimentación o la refrigeración, ni la red interna del dominio de disponibilidad. Por lo tanto, un fallo en un dominio de disponibilidad no debería afectar a los otros dominios de disponibilidad de la región.
- Red y subredes virtuales en la nube (VCN)
Una VCN es una red personalizable y definida por software que puede configurar en una región de Oracle Cloud Infrastructure. Al igual que las redes de los centros de datos tradicionales, las redes virtuales le proporcionan el control de su entorno de red. Una VCN puede tener varios bloques de CIDR no superpuestos que puede cambiar después de crear la VCN. Puede segmentar una VCN en subredes, las cuales se pueden acotar a una región o a un dominio de disponibilidad. Cada subred está formada por un rango contiguo de direcciones que no se solapan con las demás subredes de la VCN. Puede cambiar el tamaño de una subred después de la creación. Una subred puede ser pública o privada.
- Equilibrador de carga
El servicio Oracle Cloud Infrastructure Load Balancing proporciona una distribución automatizada del tráfico desde un único punto de entrada a varios servidores en el backend.
- Lista de seguridad
Para cada subred, puede crear reglas de seguridad que especifiquen el origen, el destino y el tipo de tráfico que se debe permitir dentro y fuera de la subred.
- Kubernetes Engine
Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine u OKE) es un servicio totalmente gestionado, escalable y disponible que puede utilizar para desplegar las aplicaciones en contenedores en la nube. Especifique los recursos informáticos que necesitan sus aplicaciones y Kubernetes Engine los provisionará en Oracle Cloud Infrastructure en un arrendamiento existente. OKE utiliza Kubernetes para automatizar el despliegue, la ampliación y la gestión de aplicaciones en contenedores en clusters de hosts.
Recomendaciones
- VCN
Al crear una VCN, determine el número de bloques CIDR necesarios y el tamaño de cada bloque en función del número de recursos que planea asociar a las subredes de la VCN. Utilice bloques CIDR que estén dentro del espacio de direcciones IP privadas estándar.
Seleccione bloques de CIDR que no se solapen con ninguna otra red (en Oracle Cloud Infrastructure, su centro de datos local u otro proveedor en la nube) a la que desee configurar conexiones privadas.
Después de crear una VCN, puede cambiar, agregar y eliminar sus bloques CIDR.
Al diseñar las subredes, tenga en cuenta el flujo de tráfico y los requisitos de seguridad. Asocie todos los recursos de un nivel o rol específico a la misma subred, que puede servir como límite de seguridad.
- Seguridad
Utiliza Oracle Cloud Guard para supervisar y mantener de forma proactiva la seguridad de tus recursos de OCI en Oracle Cloud Infrastructure. Cloud Guard utiliza recetas de detector que puede definir para examinar los recursos en busca de deficiencias de seguridad y para supervisar a los operadores y usuarios en busca de actividades de riesgo. Cuando se detecta una configuración incorrecta o una actividad no segura, Cloud Guard recomienda acciones correctivas y ayuda a realizar esas acciones, en función de las recetas de responsable de respuesta que pueda definir.
Para los recursos que requieren la máxima seguridad, Oracle recomienda utilizar zonas de seguridad. Una zona de seguridad es un compartimento asociado a una receta de políticas de seguridad definida por Oracle que se basa en las mejores prácticas. Por ejemplo, no se puede acceder a los recursos de una zona de seguridad desde la Internet pública y se deben cifrar mediante claves gestionadas por el cliente. Al crear y actualizar recursos en una zona de seguridad, OCI valida las operaciones con respecto a las políticas de la receta de zona de seguridad y niega las operaciones que violan cualquiera de las políticas.
- Ancho de banda de equilibrador de carga
Al crear el equilibrador de carga, puede seleccionar una unidad predefinida que proporcione un ancho de banda fijo o especificar una unidad personalizada (flexible) en la que defina un rango de ancho de banda y permita que el servicio amplíe el ancho de banda automáticamente en función de los patrones de tráfico. Con cualquiera de los enfoques, puede cambiar la unidad en cualquier momento después de crear el equilibrador de carga.
- Oracle Cloud Infrastructure Kubernetes Engine y unidades de computación
Como mínimo, se despliegan dos pools de nodos en OCI Kubernetes Engine: uno para los controladores de Jenkins y otro para los agentes de Jenkins.
Para ahorrar costos y optimizar toda la solución, se recomienda utilizar VM.Standard.A1. Instancias flexibles para controladores Jenkins, ya que Jenkins es totalmente compatible con instancias de ARM. Para el pool de nodos de agente, se recomienda utilizar instancias preferentes, ya que, por lo general, los trabajos de pipeline son de corta duración y tolerantes a fallos.
- Oracle Cloud Infrastructure Registry
Oracle Cloud Infrastructure Registry es un repositorio de contenedores privado compatible con OCI para alojar imágenes. En esta arquitectura es opcional y se puede utilizar para alojar sus propias imágenes personalizadas de Jenkins con todos los plugins necesarios instalados. Se recomienda crear una imagen de controlador de Jenkins personalizada para aplicar seguridad y empaquetar todos los plugins comúnmente utilizados en una sola imagen de contenedor.
Consideraciones
Tenga en cuenta los siguientes puntos al desplegar esta arquitectura de referencia.
- Rendimiento y escalabilidad
Mediante el uso de Kubernetes, es fácil escalar tanto el controlador de Jenkins como los agentes a medida que el equipo de desarrollo crece o se reduce. Además, como los pods de agente se crean cada vez que se ejecuta un trabajo de pipeline, es posible personalizar los recursos utilizados por estos pods en una base por pipeline.
- Disponibilidad
Para maximizar la disponibilidad, se recomienda aprovisionar varios nodos de OKE en distintos dominios de errores o de disponibilidad. Además, para proteger a Jenkins de interrupciones voluntarias e involuntarias, es posible utilizar el mecanismo estándar de Kubernetes, como los presupuestos de interrupción de pod y la anti-afinidad de pod.
- Costo
El objetivo de esta arquitectura es también minimizar los costos al utilizar Jenkins en OKE. Es posible utilizar nodos de ARM para controladores de Jenkins, que cuestan una cuarta parte de las instancias informáticas flexibles. En cuanto a los agentes de Jenkins, los nodos de instancia preferentes permiten a los clientes ahorrar la mitad del presupuesto.
Explorar más
Revise estos recursos adicionales para obtener más información sobre las funciones de esta arquitectura de referencia.
- Blog: Ampliación y optimización de Jenkins en Oracle Container Engine
- Gráfico de Helm de la comunidad Jenkins
- Documentación de Oracle Cloud Infrastructure Kubernetes Engine
- Marco de mejores prácticas para Oracle Cloud Infrastructure
- Documentación de Oracle Cloud Infrastructure
- Estimador de costos de Oracle Cloud