Nota:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a Oracle Cloud Infrastructure Free Tier.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Cree pipelines DevOps de OCI para crear y desplegar microservicios de Golang
Introducción
Esto forma parte de cuatro de una serie de tutoriales de seis partes que muestra cómo desplegar un juego temporal de recursos en un cluster de OKE mediante microservicios de Golang que representan el uso del SDK de OCI, OCI-CLI, Resource Manager, OCI Devops y Helm para desplegar y destruir Apache Airflow.
Objetivo
En este tutorial aprenderá a crear pipelines DevOps de OCI para la creación y el despliegue.
Requisitos
- Finalización del tutorial anterior en esta ruta de aprendizaje, Parte 3/6: creación de un proyecto de OCI Devops, configuración de permisos y repositorio de código para microservicios.
Tarea 1: Explorar el código de inicio de sesión
-
Este microservicio es un código de ejemplo en Golang que se utiliza para crear un token JWT y devolverlo al usuario. Este token será utilizado por los microserviciosgo para autenticar la llamada. Este es un método sencillo de autenticación para garantizar la seguridad de este tutorial.
-
El repositorio contiene todos los archivos necesarios para el despliegue en OKE mediante el servicio OCI DevOps, como gráficos de Helm, Dockerfile y
build_spec.yaml
.
Nota
El código ya se ha cargado en el repositorio de OCI denominado conexión en pasos anteriores de esta práctica.
Tarea 2: Explorar el código de acceso a microservicios
-
Este microservicio es un código de ejemplo para realizar las siguientes tareas:
Método Descripción /oci-init Esta ruta ejecutará un trabajo de aplicación de pila en el gestor de recursos de OCI. Esto ejecutará un terraform para crear un nuevo pool de nodos en el cluster OKE. También iniciará el pipeline de creación de OCI Devops para instalar la circulación de aire en los nuevos nodos. /oci-destruir Esto suprimirá el despliegue de flujo de aire en OKE y, a continuación, ejecutará la destrucción de pila en el gestor de recursos para eliminar la agrupación de nodos adicional. -
El repositorio contiene todos los archivos necesarios para desplegar en OKE mediante el servicio OCI DevOps, como gráficos de Helm, Dockerfile y
build_spec.yaml
.
Nota
El código ya se ha cargado en el repositorio de OCI denominado go-microservice en pasos anteriores de esta práctica.
Tarea 3: Creación de los artefactos DevOps para go-login y go-microservice
Antes de crear el pipeline de compilación DevOps, necesitamos crear los artefactos que se conectarán con los resultados de la compilación (paquete Helm e imagen de contenedor).
-
Vaya al registro de OCI que ha creado para este tutorial.
-
Haga clic en los artefactos del proyecto DevOps, haga clic en Agregar artefacto y, a continuación, escriba Repositorio de imágenes de contenedor.
Nota importante sobre la URL del registro:
-
Esta es la base del registro para la región sa-saopaulo-1.
-
Compruebe el código de región, que será diferente si no utiliza "sa-saopaulo-1". Para obtener más información, consulte Regiones y dominios de disponibilidad.
-
-
Repita el paso 2 y agregue el artefacto go-microservice.
-
Cree un nuevo artefacto general para almacenar los valores de Helm para go-login pegando el contenido del archivo
values.yaml
del repositorio de código. -
Cree un nuevo artefacto general para almacenar los valores de Helm para go-microservice pegando el contenido del archivo
values.yaml
del repositorio de código. -
Cree un nuevo artefacto de tipo de gráfico de Helm para go-login. Debe definir el espacio de nombres y el código de región correctos en la URL del gráfico.
-
Cree un nuevo artefacto de tipo de gráfico de Helm para ir a microservicio. Debe definir el espacio de nombres y el código de región correctos en la URL del gráfico.
En este punto, debe tener los siguientes artefactos en el proyecto DevOps.
Tarea 4: Creación del pipeline de creación de Devops para go-login
-
Vaya a la página de la consola del DevOps proyecto y seleccione el proyecto DevOps que ha creado.
-
Seleccione Crear pipelines y, a continuación, haga clic en Crear pipeline de compilación, introduzca el nombre y la descripción y haga clic en Crear.
-
Haga clic en Agregar etapa y, a continuación, seleccione Creación gestionada.
-
En Repositorio de código principal, seleccione el repositorio de OCI para conectar.
- Confirme el repositorio, seleccione y haga clic en Agregar.
-
Agregue una nueva etapa en el pipeline de compilación para publicar el artefacto en el registro. Seleccione la opción Enviar artefactos y, a continuación, seleccione el artefacto go-login-image creado en los pasos anteriores.
El pipeline se debe parecer a este.
Tarea 5: Crear el pipeline de creación DevOps para el servicio de microempresa
-
Vaya a la página de la consola del DevOps proyecto y seleccione el proyecto DevOps que ha creado.
-
Seleccione Crear pipelines, haga clic en Crear pipeline de compilación, introduzca el nombre y la descripción y haga clic en Crear.
-
Haga clic en Agregar etapa y, a continuación, seleccione Creación gestionada.
-
En Repositorio de código principal, seleccione el repositorio de OCI para go-microservice.
- Confirme el repositorio, seleccione y haga clic en Agregar.
-
Agregue una nueva etapa en el pipeline de compilación para publicar el artefacto en el registro. Seleccione la opción Enviar artefactos y, a continuación, seleccione el artefacto go-microservice-image creado en los pasos anteriores.
El pipeline se debe parecer a este.
Tarea 6: Pipeline de compilación {build_spec.yaml} - go-login
El archivo build_spec
es un archivo yaml que describe los pasos que se deben realizar durante la ejecución del pipeline de compilación. Se ejecuta en un ejecutor de compilación en la nube y admite la mayoría de los lenguajes populares en las aplicaciones nativas en la nube. El archivo se encuentra en la raíz del código de repositorio go-login en OCI. Este archivo utiliza algunas variables del VAULT y necesitamos cambiarlo a nuestros ocids del tutorial Vault.
Para obtener más detalles sobre las especificaciones de compilación, consulte Especificación de compilación.
Se deben definir las dos variables siguientes.
-
HELM_REPO_USER
: nombre de usuario que ha almacenado como secreto en el almacén. -
USER_AUTH_TOKEN
: token de autorización para el usuario almacenado en el almacén.
-
Vaya a sus secretos de almacén y obtenga el OCID para cada secreto.
-
Vaya a los repositorios de proyectos y obtenga
ssh url
para go-login.-
Actualice el archivo build_spec.yaml y sustituya los valores por los secretos de OCID copiados y, a continuación, confirme los cambios en el código.
-
-
Vaya a la consola de shell bastion jump-box.
cd $HOME # If you still have the old go-login.git and go-microservices.git directory, delete it! rm -rf go-login.git rm -rf go-microservice.git git clone <your ssh url for the repo> cd go-login/ vi build_spec.yaml #perform the needed changes for your ocid variables and save the file. git add . git commit -m "fixed ocid variables" git push
-
Vaya al pipeline de compilación go-login del proyecto DevOps, seleccione el separador "Parámetros" y agregue los siguientes parámetros nuevos.
HELM_REPO
: base de su registro de OCI xxx.ocir.io.HELM_REPO_URL
: URL del registro de OCI para el gráfico de Helm relacionado.APP_HOST
: el host se utilizará para acceder a la aplicación en el controlador de entrada.IMAGE_URL
: URL de imagen de registro de OCI sin la etiqueta.
-
Haga clic en el separador Crear pipeline y, a continuación, haga clic en Iniciar ejecución manual.
-
Como podemos ver, la creación se ha completado correctamente junto con la transferencia de imagen al registro de OCI.
-
-
Vaya a OCI Container Registry y compruebe si hay una imagen allí.
Tarea 7: Configurar credenciales de OCI para ir a microservicios
Los microservicios de go interactúan con OCI mediante SDK y, para poder hacerlo, necesitamos configurar las credenciales correctas. Utilizaremos la información similar que hemos utilizado para configurar la CLI de OCI durante la configuración del bastión a partir de los pasos anteriores de este tutorial.
Todas las credenciales requeridas se almacenarán en el configmap de OKE y se inyectarán en las variables de entorno dentro del contenedor en ejecución.
-
Vaya a sus repositorios de OCI y obtenga
ssh url
para su repositorio go-microservice. -
Vaya a la página de la consola para el cluster de OKE, copie el cluster ocid y reemplace el comando para la variable env
ENV_CLUSTER_ID
en el siguiente paso. -
Abra el terminal de shell bastion jump-box. Asegúrese de que ha creado la clave ssh en: ~/.oci/oci_api_key.pem. A excepción de la variable ENV_CLUSTER_ID, todas las demás variables se pueden encontrar en el archivo ~/.oci/config en el host bastión que configuró previamente la CLI de OCI.
cat ~/.oci/config
-
La siguiente lista de comandos de shell creará un nuevo archivo configmap/values.yaml con todas las variables necesarias para inyectarse en el contenedor en ejecución y, a continuación, lo enviará al repositorio de código de OCI. Antes de ejecutar los comandos en el terminal de host bastión, sustituya los valores "PASTE SU..." a continuación.
cd $HOME rm -rf go-microservice/ git clone <PAST YOUR ssh url> cd go-microservice/chart-go-microservice/configmap/ rm values.yaml pem=$(cat ~/.oci/oci_api_key.pem|base64 -w 0) echo 'ENV_PEM: "'$pem'"' > values.yaml echo 'ENV_TENANCY_OCID: "PASTE YOUR TENANCY OCID"' >> values.yaml echo 'ENV_USER_OCID: "PASTE YOUR USER OCID"' >> values.yaml echo 'ENV_REGION: "PASTE YOUR REGION NAME"' >> values.yaml echo 'ENV_FINGERPRINT: "PASTE YOUR FINGERPRINT"' >> values.yaml echo 'ENV_CLUSTER_ID: "PASTER YOUR CLUSTER OCID"' >> values.yaml cd $HOME/go-microservice git add . git commit -m "added correct values on configmap" git push
Ahora, el microservicio de inicio puede comunicarse con OCI mediante el SDK.
Tarea 8: pipeline de compilación {build_spec.yaml} - microservicios de go
El archivo build_spec es un archivo yaml que describe los pasos que se deben realizar durante la ejecución del pipeline de compilación. Se ejecuta en un ejecutor de compilación en la nube y admite la mayoría de los lenguajes populares en las aplicaciones nativas en la nube. El archivo se encuentra en la raíz del código de repositorio go-microservice en OCI. Este archivo utiliza algunas variables del VAULT y necesitamos cambiarlo a nuestros ocids del tutorial Vault.
Para obtener más detalles sobre las especificaciones de compilación, consulte Especificación de compilación.
Se deben definir las dos variables siguientes.
-
HELM_REPO_USER
: nombre de usuario que ha almacenado como secreto en el almacén. -
USER_AUTH_TOKEN
: token de autorización para el usuario almacenado en el almacén.
-
Vaya a sus secretos de almacén y obtenga el OCID para cada secreto.
-
Vaya a los repositorios del proyecto y obtenga la URL ssh para go-login.
- Deberá actualizar el archivo build_spec.yaml y sustituir los valores por los secretos de OCID copiados y, a continuación, confirmar los cambios en el código.
-
Vaya a la consola de shell bastion jump-box.
cd $HOME # If you still have the old go-login.git and go-microservices.git directory, delete it! rm -rf go-login.git rm -rf go-microservice.git git clone <your ssh url for the repo> cd go-microservice/ vi build_spec.yaml #perform the needed changes for your ocid variables and save the file. git add . git commit -m "fixed ocid variables" git push
-
Vaya al pipeline de compilación go-microservice del proyecto Devops, seleccione el separador "Parámetros" y agregue nuevos parámetros.
HELM_REPO
: base de su registro de OCI xxx.ocir.io.HELM_REPO_URL
: URL del registro de OCI para el gráfico de Helm relacionado.APP_HOST
: el host se utilizará para acceder a la aplicación en el controlador de entrada.IMAGE_URL
: URL de imagen de registro de OCI sin la etiqueta.
-
Haga clic en el separador Crear pipeline y, a continuación, haga clic en Iniciar ejecución manual.
-
Como podemos ver, la creación se ha completado correctamente junto con la transferencia de imagen al registro de OCI.
-
-
Vaya a OCI Container Registry y compruebe si hay una imagen allí.
Tarea 9: Preparación de OKE para recibir los despliegues
En este tutorial, crearemos manualmente los espacios de nombres de OKE para go-login y go-microservices. También necesitamos configurar las credenciales del registro de contenedor de OCI en cada uno de los espacios de nombres mediante secretos. Esto es necesario; de lo contrario, el despliegue no podrá recuperar la imagen de contenedor del registro.
-
Obtenga el texto sin formato TOKEN y el nombre de usuario del registro de OCI que ha almacenado en el almacén.
-
Abra la consola de shell bastion jump-box y ejecute el siguiente comando.
Nota: Asegúrese de sustituir las variables de los comandos siguientes por las credenciales que obtuvo en el paso anterior y también compruebe el docker-server correcto según la región gru.ocir.io.
cd $HOME kubectl get ns kubectl create ns go-login kubectl create ns go-microservices kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-login kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-microservices
-
Ahora vamos a desplegar el controlador de entrada para poder acceder a los microservicios a través de Internet. Utilizamos la imagen de entrada oficial en la versión v1.4.0.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml kubectl scale --replicas=4 deployment ingress-nginx-controller -n ingress-nginx
-
Ahora, vamos a comprobar si los servicios de entrada son buenos, debería ser así.
kubectl get svc -n ingress-nginx
-
Después de crear el nodo de entrada, se crea automáticamente un nuevo equilibrador de carga en OCI. Ahora, actualice la unidad del equilibrador de carga a una unidad más barata y evite costos adicionales.
-
-
Vaya a la consola, seleccione Equilibradores de carga en Red y, a continuación, seleccione el equilibrador de carga recién creado.
-
Haga clic para actualizar el SHAPE y seleccione la casilla de control Usar un equilibrador de carga flexible.
Tarea 10: Crear un nuevo entorno DevOps de OCI
Para poder desplegar sus aplicaciones, necesitamos crear el entorno.
-
Seleccione el proyecto DevOps, haga clic en Entornos y, a continuación, haga clic en Crear entorno.
Tarea 11: Despliegue de go-login en OCI DevOps mediante gráficos de Helm
-
Vaya al proyecto DevOps, haga clic en Pipelines de despliegue y cree un nuevo pipeline para conectar.
-
Haga clic para agregar una nueva etapa que desplegar, seleccione "Instalar gráficos de Helm en cluster de Kubernetes", seleccione el artefacto de helm y el artefacto de valores para go-login. Asegúrese de rellenar el nombre del espacio de nombres como go-login.
-
Cree un disparador en el pipeline de compilación para iniciar el despliegue automáticamente una vez terminada la compilación.
-
Vaya al pipeline de compilación go-login en el proyecto de DevOps y haga clic en Agregar etapa.
-
Seleccione Despliegue de disparador, haga clic en Seleccionar pipeline de despliegue y, a continuación, seleccione go-login-deploy.
-
-
Haga clic en Iniciar ejecución manual para probar el pipeline.
-
En la página Depura el proyecto, haga clic en Despliegues para comprobar el estado de despliegue en ejecución.
Tarea 12: Verificación del despliegue de inicio de sesión
-
Vaya al terminal del host bastión y compruebe lo siguiente:
-
Compruebe el estado del pod.
kubectl get pod -n go-login
-
Compruebe el host de entrada y la dirección de la aplicación.
kubectl get ingress -n go-login
-
Este despliegue utiliza el tráfico de enrutamiento de control de entrada sobre el nombre de host, lo que significa que necesitamos llamar al servicio con el nombre de host correcto como parte de la URL.
-
En este tutorial, no utilizamos certificados SSL. Para poder llamar a los servicios que necesitamos incluir en el /etc/hosts local de su portátil la ruta DNS adecuada para él. No se recomienda para entornos de producción.
-
Tome nota de la dirección IP externa y agregue la entrada en /etc/hosts.
sudo vi /etc/hosts
-
Agregue una nueva línea al final del archivo.
your.ip.aaa.xx go-login.superocilab.com
-
Ejecute el siguiente comando.
cat /etc/hosts
-
/etc/hosts debe tener este aspecto.
-
-
Ahora puede llamar al servicio go-login mediante una curl y generar un TOKEN de jwt llamando al punto final /login.
curl http://go-login.superocilab.com curl http://go-login.superocilab.com/login
Tarea 13: despliegue del microservicio en OCI Devops mediante gráficos de Helm
-
Vaya a su proyecto DevOps, haga clic en Pipelines de despliegue y cree un nuevo pipeline para hacer microservicio.
-
Haga clic para agregar una nueva etapa que desplegar, seleccione Instalar gráficos de Helm en cluster de Kubernetes, seleccione el artefacto de helm y el artefacto de valores para go-microservice. Asegúrese de rellenar el nombre del espacio de nombres como go-microservices.
-
Cree un disparador en el pipeline de compilación para iniciar el despliegue automáticamente una vez terminada la compilación.
-
Vaya al pipeline de compilación go-microservice en el proyecto DevOps y haga clic en Agregar etapa.
-
Seleccione Despliegue de disparador y, a continuación, haga clic en Seleccionar pipeline de despliegue y, a continuación, seleccione go-microservice-deploy.
-
-
Haga clic en Iniciar ejecución manual para probar el pipeline.
-
En la página Depura el proyecto, haga clic en Despliegues para comprobar el estado de despliegue en ejecución.
Tarea 14: Verificación del despliegue de microservicios básicos
-
Vaya al terminal del host bastión y compruebe los siguientes detalles:
-
Compruebe el estado del pod.
kubectl get pod -n go-microservices
-
Compruebe el host de entrada y la dirección de la aplicación.
kubectl get ingress -n go-microservices
-
Este despliegue utiliza el tráfico de enrutamiento de control de entrada sobre el nombre de host, lo que significa que necesitamos llamar al servicio con el nombre de host correcto como parte de la URL.
-
En este tutorial, no utilizamos certificados SSL. Para poder llamar a los servicios que necesitamos incluir en el /etc/hosts local de su portátil la ruta DNS adecuada para él. No se recomienda para entornos de producción.
-
Tome nota de la dirección IP externa y agregue la entrada a /etc/hosts (también puede agregar a su máquina local).
sudo vi /etc/hosts
-
Agregue una nueva línea al final del archivo.
your.ip.aaa.xx go-microservice.superocilab.com
-
Ejecute el siguiente comando.
cat /etc/hosts
-
/etc/hosts debe tener este aspecto.
-
Ahora puede llamar al servicio go-microservice.
curl curl http://go-microservice.superocilab.com
Siguiente Paso
Para continuar con el siguiente tutorial en esta ruta de aprendizaje, haga clic aquí.
Enlaces relacionados
Agradecimientos
- Autor: Joao Tarla (ingenier de soluciones de equipos A de LAD de Oracle)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre los productos, visite Oracle Help Center.
Create OCI DevOps pipelines to build and deploy the Golang microservices
F79787-01
April 2023
Copyright © 2023, Oracle and/or its affiliates.