Despliegue GitOps con Argo CD y OCI Kubernetes Engine
GitOps es un tipo de integración y despliegue continuos que utiliza repositorios de Git como una única fuente de datos para ofrecer infraestructura como código. Se recomienda colocar la totalidad de la aplicación, desde el código fuente y la configuración de la aplicación, de forma declarativa en los repositorios de Git. Esto proporciona una forma consistente de desplegar cambios en la configuración de una aplicación y proporciona control de versiones mediante flujos de trabajo de Git conocidos, como solicitudes de extracción y solicitudes de fusión.
- Flujo de trabajo estándar para el desarrollo de aplicaciones.
- Mayor seguridad para configurar los requisitos de la aplicación por adelantado.
- Fiabilidad mejorada con visibilidad y control de versiones a través de Git.
- Coherencia en cualquier cluster, en cualquier nube y en cualquier entorno local.
Se recomienda tener repositorios de Git independientes para el código fuente y la configuración de la aplicación, ya que los cambios de configuración normalmente no requieren cambios en el código fuente de la aplicación. Tener diferentes repositorios le permite cambiar la configuración de la aplicación sin disparar una compilación de CI.
- Manifiestos de Kubernetes
- Gráficos de Helm
- Kustomize manifiestos.
Arquitectura
Puede acceder a la aplicación Argo CD a través de su interfaz de usuario web o la interfaz de línea de comandos Argo CD. Un servicio de equilibrador de carga desplegado en el cluster de OCI Kubernetes Engine proporciona conectividad a la herramienta de CD de Argo. Una vez desplegado el CD de Argo, configúrelo para que se sincronice con repositorios de Git alojados interna o externamente en Oracle Cloud Infrastructure, siempre que el cluster de OCI Kubernetes Engine tenga conectividad IP en los puertos necesarios y las credenciales para los repositorios de Git. Una vez que Argo CD se haya sincronizado con los repositorios, las actualizaciones de la configuración de la aplicación realizadas en el repositorio se aplicarán al cluster de OCI Kubernetes Engine. Si se realizan cambios en la aplicación fuera del repositorio de Git, Argo CD considerará la aplicación fuera de sincronización y revertirá los cambios para que esté en línea con el estado deseado del repositorio de Git.
El siguiente diagrama ilustra esta arquitectura de referencia.
Descripción de la ilustración argocd.png
- Tenancy
Oracle Autonomous Transaction Processing es un servicio de base de datos de autoservicio, seguridad y reparación optimizado para las cargas de trabajo de procesamiento de transacciones. No necesita configurar ni gestionar ningún hardware, ni instalar ningún software. Oracle Cloud Infrastructure se ocupa de la creación de la base de datos, así como de la copia de seguridad, la aplicación de parches, el cambio de versión y el ajuste de la base de datos.
- 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).
- Compartimento
Los compartimentos son particiones lógicas entre regiones dentro de un arrendamiento de Oracle Cloud Infrastructure. Utilice compartimentos para organizar los recursos en Oracle Cloud, controlar el acceso a los recursos y definir cuotas de uso. Para controlar el acceso a los recursos de un compartimento determinado, debe definir políticas que especifiquen quién puede acceder a los recursos y qué acciones pueden realizar.
- 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, es poco probable que un fallo en un dominio de disponibilidad afecte a los otros dominios de disponibilidad de la región.
- Dominios de errores
Un dominio de errores es una agrupación de hardware e infraestructura dentro de un dominio de disponibilidad. Cada dominio de disponibilidad cuenta con tres dominios de errores con energía y hardware independientes. Al distribuir los recursos entre varios dominios de errores, las aplicaciones pueden tolerar fallos físicos del servidor, mantenimiento del sistema y fallos de energía en un dominio de errores.
- 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 un control completo 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 distribución automatizada de tráfico desde un único punto de entrada a varios servidores en el backend. El equilibrador de carga proporciona acceso a diferentes aplicaciones.
- Repositorio de código
En el servicio DevOps, puede crear sus propios repositorios de código privado o conectarse a repositorios de código externos como GitHub, GitLab y Bitbucket Cloud.
- 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.
- Gateway de NAT
El gateway de NAT permite que los recursos privados de una VCN accedan a los hosts de Internet, sin exponerlos a las conexiones de Internet entrantes.
- Gateway de servicio
El gateway de servicios proporciona acceso desde una VCN a otros servicios como Oracle Cloud Infrastructure Object Storage. El tráfico desde la VCN al servicio Oracle recorre el tejido de red de Oracle y no internet.
- Cloud Guard
Puede utilizar Oracle Cloud Guard para controlar y mantener la seguridad de sus recursos 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.
- Zona de seguridad
Las zonas de seguridad garantizan las mejores prácticas de seguridad de Oracle desde el principio mediante la aplicación de políticas como el cifrado de datos y la prevención del acceso público a las redes de todo un compartimento. Una zona de seguridad está asociada a un compartimento con el mismo nombre e incluye políticas de zona de seguridad o una "receta" que se aplica al compartimento y sus subcompartimentos. No puede agregar ni mover un compartimento estándar a un compartimento de zona de seguridad.
- Object Storage
Object Storage proporciona acceso rápido a grandes cantidades de datos estructurados y no estructurados de cualquier tipo de contenido, incluidas copias de seguridad de base de datos, datos analíticos y contenido enriquecido, como imágenes y vídeos. Puede almacenar datos de forma segura y, a continuación, recuperarlos directamente desde Internet o desde la plataforma en la nube. Puede ampliar el almacenamiento sin problemas sin experimentar ninguna degradación del rendimiento ni de la fiabilidad del servicio. Utilice el almacenamiento estándar para el almacenamiento al que debe acceder de forma rápida, inmediata y frecuente. Utilice el almacenamiento de archivo para el almacenamiento "frío" al que conserva durante largos períodos de tiempo y al que rara vez accede.
- FastConnect
Oracle Cloud Infrastructure FastConnect proporciona una forma sencilla de crear una conexión privada y dedicada entre el centro de datos y Oracle Cloud Infrastructure. FastConnect proporciona opciones de mayor ancho de banda y una experiencia de red más fiable en comparación con las conexiones basadas en Internet.
- Gateway de intercambio de tráfico local (LPG)
Un LPG permite utilizar un intercambio de tráfico de VCN con otra VCN en la misma región. El intercambio de tráfico significa que las redes virtuales en la nube se comunican mediante direcciones IP privadas, sin que el tráfico recorra Internet ni se enrute a través de su red local.
- Base de datos autónoma
Las bases de datos autónomas de Oracle Cloud Infrastructure son entornos de base de datos totalmente gestionados y preconfigurados que puede utilizar para el procesamiento de transacciones y cargas de trabajo de almacenamiento de datos. No necesita configurar ni gestionar ningún hardware, ni instalar ningún software. Oracle Cloud Infrastructure se ocupa de la creación de la base de datos, así como de la copia de seguridad, la aplicación de parches, el cambio de versión y el ajuste de la base de datos.
- Autonomous Data Warehouse
Oracle Autonomous Data Warehouse es un servicio de base de datos autogestionado, autoseguridad y autorreparable optimizado para cargas de trabajo de almacenamiento de datos. No necesita configurar ni gestionar ningún hardware, ni instalar ningún software. Oracle Cloud Infrastructure se ocupa de la creación de la base de datos, así como de la copia de seguridad, la aplicación de parches, el cambio de versión y el ajuste de la base de datos.
- Autonomous Transaction Processing
Oracle Autonomous Transaction Processing es un servicio de base de datos de autoservicio, seguridad y reparación optimizado para las cargas de trabajo de procesamiento de transacciones. No necesita configurar ni gestionar ningún hardware, ni instalar ningún software. Oracle Cloud Infrastructure se ocupa de la creación de la base de datos, así como de la copia de seguridad, la aplicación de parches, el cambio de versión y el ajuste de la base de datos.
- Sistema de base de datos de Exadata
Exadata Cloud Service permite aprovechar la potencia de Exadata en la nube. Puede aprovisionar sistemas X8M flexibles que le permitan agregar servidores de cálculo y servidores de almacenamiento de base de datos al sistema a medida que aumenten sus necesidades. Los sistemas X8M ofrecen una red RoCE (RDMA sobre Ethernet convergente) para módulos de memoria persistente (PMEM) de gran ancho de banda y baja latencia, así como software de Exadata inteligente. Puede aprovisionar sistemas X8M mediante una unidad que sea equivalente a un sistema X8 de cuarto de rack y, a continuación, agregar la base de datos y los servidores de almacenamiento en cualquier momento después del aprovisionamiento.
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 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.
Utilizar subredes regionales.
- Seguridad
Utilice Oracle Cloud Guard para supervisar y mantener la seguridad de sus recursos en Oracle Cloud Infrastructure de forma proactiva. 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, Oracle Cloud Infrastructure valida las operaciones con respecto a las políticas de la receta de zona de seguridad y deniega las operaciones que violan cualquiera de las políticas.
- Cloud Guard
Clone y personalice las recetas por defecto proporcionadas por Oracle para crear recetas personalizadas de detector y responsable de respuesta. Estas recetas permiten especificar qué tipo de violaciones de seguridad generan una advertencia y qué acciones se pueden realizar en ellas. Por ejemplo, puede que desee detectar cubos de Object Storage que tengan la visibilidad definida en pública.
Aplique Cloud Guard en el nivel de arrendamiento para abarcar el ámbito más amplio y reducir la carga administrativa de mantener varias configuraciones.
También puede utilizar la función de lista gestionada para aplicar determinadas configuraciones a los detectores.
- Zonas de seguridad
Clone y personalice las recetas por defecto proporcionadas por Oracle para crear recetas personalizadas de detector y responsable de respuesta. Estas recetas permiten especificar qué tipo de violaciones de seguridad generan una advertencia y qué acciones se pueden realizar en ellas. Por ejemplo, puede que desee detectar cubos de Object Storage que tengan la visibilidad definida en pública.
Aplique Cloud Guard en el nivel de arrendamiento para abarcar el ámbito más amplio y reducir la carga administrativa de mantener varias configuraciones. También puede utilizar la función de lista gestionada para aplicar determinadas configuraciones a los detectores.
- Grupos de seguridad de red (NSG)
Puede utilizar NSG para definir un juego de reglas de entrada y salida que se aplican a VNIC específicas. Recomendamos utilizar NSG en lugar de listas de seguridad, ya que los NSG permiten separar la arquitectura de subred de la VCN de los requisitos de seguridad de la aplicación.
Puede utilizar NSG para definir un juego de reglas de entrada y salida que se aplican a VNIC específicas. Recomendamos utilizar NSG en lugar de listas de seguridad, ya que los NSG permiten separar la arquitectura de subred de la VCN de los requisitos de seguridad de la aplicación.
- 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.
Despliegue
El código de Terraform para esta arquitectura de referencia está disponible como pila de ejemplo en Oracle Cloud Infrastructure Resource Manager. Esta pila de Terraform de ejemplo despliega un entorno de aplicación de OCI Data Flow, junto con políticas de IAM y cubos de OCI Object Storage (no almacenamiento de terceros). Por defecto, también se desplegará una aplicación Spark de Python de demostración. También puede descargar el código de GitHub y personalizarlo para que se adapte a sus necesidades específicas.
- Realice el despliegue con la pila de ejemplo en Oracle Cloud Infrastructure Resource Manager:
- Haga clic en
.
Si aún no ha iniciado sesión, introduzca el arrendamiento y las credenciales de usuario.
- Seleccione la región en la que desea desplegar la pila.
- Siga las indicaciones e instrucciones en pantalla para crear la pila.
- Después de crear la pila, haga clic en Acciones de Terraform y seleccione Plan.
- Espere a que se complete el trabajo y revise el plan.
Para realizar cambios, vuelva a la página Detalles de pila, haga clic en Editar pila y realice los cambios necesarios. A continuación, vuelva a ejecutar la acción Plan.
- Si no es necesario realizar más cambios, vuelva a la página Detalles de pila, haga clic en Acciones de Terraform y seleccione Aplicar.
- Haga clic en
- Realice el despliegue con el código de Terraform en GitHub:
- Vaya a GitHub.
- Clone o descargue el repositorio en su computadora local.
- Siga las instrucciones del documento
README
.
Además del código de Terraform proporcionado en GitHub, los siguientes fragmentos de código ilustran cómo conectarse a Amazon Web Services S3 y cómo consultar los datos.
- Para conectarse a datos de S3 y consultarlos, debe incluir los paquetes
hadoop-aws.jar
yaws-java-sdk.jar
. Puede hacer referencia a estos paquetes en el archivopom.xml
de la siguiente manera:<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-aws</artifactId> <version>2.9.2</version> <exclusions> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.7.4</version> </dependency>
- Utilice un código similar al siguiente para conectarse a Amazon Web Services S3. Debe proporcionar su clave de acceso y su clave secreta. En el siguiente fragmento, estos valores están representados por las variables
ACCESS
ySECRET
respectivamente:SparkSession spark = SparkSession.builder().master("local") .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") .config("spark.hadoop.fs.s3a.access.key", ACCESS) .config("spark.hadoop.fs.s3a.secret.key", SECRET) .config("fs.s3a.connection.ssl.enabled", "false") .getOrCreate();
- Utilice un código similar al siguiente para consultar los datos mediante la ubicación S3 y el nombre de tabla especificado.
Dataset<Row> ds = sqlContext.read().format("csv").option("header","true").load("<S3 Location>"); ds.createOrReplaceTempView("<Table Name>"); Dataset<Row> result_ds = sqlContext.sql("<SQL Query Using <Table Name>>");