Este documento forma parte de una serie en la que se analizan los patrones de arquitectura que las empresas pueden usar para optimizar su huella en la nube a gran escala con Active Assist. En el instructivo, se muestra cómo compilar una canalización de automatización para recomendaciones de Active Assist que funcionan con la cadena de herramientas de GKE Enterprise. Está dirigido a personas que usan el Sincronizador de configuración para administrar sus entornos de GKE Enterprise y Config Connector para administrar recursos de Google Cloud . Las otras partes de la serie son las siguientes:
- Patrones para usar Active Assist a gran escala
- Usa canalizaciones sin servidores con Active Assist
- Usa la cadena de herramientas de GKE Enterprise con Active Assist (este documento)
La canalización de automatización que compilarás en este instructivo puede ayudarte a lograr lo siguiente:
- Escalar el uso de la cartera de Active Assist en tu organización
- Hacer que Active Assist sea parte de la canalización de integración continua y entrega continua (canalización de CI/CD).
- Controlar la revisión y la activación de las recomendaciones de Active Assist mediante construcciones como los problemas de GitHub y las solicitudes de extracción
En este instructivo, también se usa kpt, un kit de herramientas de código abierto que desarrolló Google para ayudarte a administrar, manipular, personalizar y aplicar archivos de datos de configuración de recursos de Kubernetes.
Arquitectura
En el siguiente diagrama de arquitectura, se muestran los componentes que usas en este instructivo.
Los componentes se usan de las siguientes maneras:
- Un repositorio de GitHub no te repitas (DRY), que se usa para las plantillas de Config Connector que implementas en los proyectos de tu organización de Google Cloud .
- Uno o más repositorios de GitHub específicos para un proyecto o entorno y conservar archivos de configuración hidratados. Estos repositorios hidratados son para los entornos que administra el Sincronizador de configuración. Usan Config Connector para activar y administrar recursos de Google Cloud en la organización de Google Cloud .
- Un clúster de GKE que usa el Sincronizador de configuración para el control de versiones y la detección de desvío. Este clúster también tiene instalado Config Connector. Config Connector permite que el clúster administre recursos de Google Clouden toda la organización de Google Cloud .
- Un activador de Cloud Build que activa una compilación cuando se envía una plantilla al repositorio de DRY de GitHub
- Un activador de Cloud Build programado que activa una compilación de forma periódica. El trabajo de compilación usa una función kpt. La función invoca las API del recomendador de Active Assist para recuperar recomendaciones activas. Revisa y analiza las recomendaciones para determinar si se deben cambiar el tamaño o la optimización de los recursos deGoogle Cloud que administra Config Connector. La función kpt crea un problema de GitHub en el repositorio de DRY con los detalles del cambio recomendado si los recursos Google Cloud administrados por Config Connector se deben optimizar o cambiar de tamaño.
El flujo de trabajo de esta arquitectura es el siguiente:
- Los equipos autorizados con acceso al repositorio de DRY crean y administran las plantillas de Config Connector en el repositorio.
- Un trabajo de Cloud Build se activa cuando se crea o modifica una plantilla y se verifica en la rama
main
. - El trabajo de Cloud Build hidrata las plantillas mediante la invocación de métodos kpt. El trabajo envía los archivos de configuración hidratados al repositorio de GitHub hidratado. Secret Manager se usa a fin de almacenar claves de implementación de GitHub para el repositorio privado.
- El Sincronizador de configuración supervisa los cambios en el repositorio híbrido y aplica las actualizaciones del repositorio al clúster administrado.
- Config Connector supervisa los cambios y activa Google Cloudrecursos si es necesario crear o actualizar recursos como resultado de los cambios del modelo de recursos de Kubernetes (KRM) que aplica el Sincronizador de configuración.
- Un activador de Cloud Build programado se ejecuta de forma periódica con el fin de invocar la API de recomendador a fin de recuperar recomendaciones activas para los proyectos que administra Config Connector.
- El trabajo programado de Cloud Build ejecuta una función kpt personalizada para invocar la API de recomendador y recuperar y analizar recomendaciones activas.
- La función kpt crea un problema de GitHub que muestra una comparación de la configuración de recursos actual y la configuración recomendada para el recurso. Con este enfoque, los problemas de GitHub se crean en el repositorio DRY, lo que facilita el seguimiento de los cambios del repositorio.
Configura tu entorno
En este instructivo, ejecutas todos los comandos en Cloud Shell.
In the Google Cloud console, activate Cloud Shell.
Configura las variables para el ID del proyecto y el número del proyecto
build
Google Cloud actual:export RECO_MGR_PROJECT=PROJECT_ID gcloud config set project $RECO_MGR_PROJECT export RECO_MGR_PROJECT_NUMBER=$(gcloud projects describe $RECO_MGR_PROJECT --format='value(projectNumber)')
Reemplaza
PROJECT_ID
por el ID del proyecto que anotaste en la sección anterior.Establece las variables para la región de implementación:
export REGION=us-central1 export ZONE=us-central1-a
Clona el repositorio que contiene el código de la app de ejemplo que se usa en este instructivo:
git clone https://github.com/GoogleCloudPlatform/activeassist-anthos-toolchain.git
Ve al directorio del proyecto:
cd activeassist-anthos-toolchain
Crea un repositorio privado de GitHub para el repositorio de DRY. Toma nota del nombre que le asignas al repositorio.
En Cloud Shell, crea una variable de entorno para tu nombre de usuario de GitHub y el nombre del repositorio de DRY:
export REPO_OWNER=YOUR_GITHUB_USERNAME export DRY_REPO_NAME=YOUR_PRIVATE_DRY_REPO
Reemplaza lo siguiente:
YOUR_GITHUB_USERNAME
: es tu nombre de usuario de GitHubYOUR_PRIVATE_DRY_REPO
es el nombre de tu repositorio de DRY.
Crea un token de acceso personal (PAT) para crear problemas en este repositorio. La canalización crea problemas de GitHub si hay recomendaciones de Active Assist que se deben revisar. Si deseas obtener más información para crear PAT en GitHub, consulta la documentación de GitHub.
Cuando configures un alcance para este token, selecciona Control total de los repositorios privados.
En Cloud Shell, crea una variable de entorno para el PAT que generaste:
export GITHUB_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN
Reemplaza
YOUR_PERSONAL_ACCESS_TOKEN
por tu propio token.Crea un repositorio privado de GitHub para el repositorio hidratado. Toma nota del nombre que le asignas al repositorio.
En Cloud Shell, configura una variable de entorno para el repositorio hidratado:
export HYDRATED_REPO_NAME=YOUR_PRIVATE_HYDRATED_REPO export HYDRATED_REPO='git@github.com:$REPO_OWNER/$HYDRATED_REPO_NAME.git'
Reemplaza
YOUR_PRIVATE_HYDRATED_REPO
por el nombre de tu repositorio hidratado.Crea un par de claves de implementación:
ssh-keygen -t rsa -b 4096 \ -C 'active-assist-robot' \ -N '' \ -f $(pwd)/active-assist-robot
Una clave de implementación te permite implementar en tu repositorio privado de GitHub cuando ejecutas un trabajo de Cloud Build para hidratar los archivos de configuración.
Imprime la clave generada:
cat $(pwd)/active-assist-robot.pub
Agrega la clave de implementación al repositorio privado de GitHub. Asegúrate de seleccionar Permitir acceso de escritura cuando agregues la clave de implementación. Si deseas obtener información para agregar claves de implementación a los repositorios de GitHub, consulta la documentación de GitHub a fin de administrar claves de implementación.
En Cloud Shell, crea un secreto para almacenar la clave privada del par de claves de implementación:
gcloud secrets create github-ssh-key \ --data-file=$(pwd)/active-assist-robot
Crea un secreto para almacenar el PAT:
echo $GITHUB_TOKEN | gcloud secrets create github-pat --data-file=-
En Cloud Shell, crea un clúster de GKE nuevo con el complemento de Config Connector habilitado:
gcloud container clusters create sample-ops \ --machine-type n1-standard-4 \ --zone $ZONE \ --release-channel regular \ --addons ConfigConnector \ --workload-pool=$RECO_MGR_PROJECT.svc.id.goog \ --enable-stackdriver-kubernetes \ --enable-ip-alias
Completa las siguientes secciones en la guía Instala con el complemento de GKE para crear una identidad y configurar Config Connector.
Instala el Sincronizador de configuración en el clúster de GKE que creaste. Cuando configuras el Sincronizador de configuración, debes hacer lo siguiente:
- Usa un token para otorgar acceso de solo lectura al Sincronizador de configuración a Git.
Usa el token de GitHub que creaste cuando configuraste un repositorio privado de GitHub DRY.
El token está disponible a través de la variable de entorno
$GITHUB_TOKEN
. - Configura el Sincronizador de configuración mediante gcloud.
Establece la siguiente configuración:
- sourceFormat:
hierarchy
- syncRepo:
https://github.com/YOUR_GITHUB_USERNAME/YOUR_PRIVATE_HYDRATED_REPO
- syncBranch:
main
- secretType:
token
- policyDir: No completes esta opción.
- sourceFormat:
- Usa un token para otorgar acceso de solo lectura al Sincronizador de configuración a Git.
Usa el token de GitHub que creaste cuando configuraste un repositorio privado de GitHub DRY.
El token está disponible a través de la variable de entorno
Ve a la página GitHub Marketplace de la app de Cloud Build.
Haz clic en Configurar con Google Cloud Build (Setup with Google Cloud Build).
Si se te solicita, accede a GitHub.
Selecciona Only select repositories.
Usa el menú desplegable Seleccionar repositorios para habilitar el acceso a tus repositorios
YOUR_PRIVATE_DRY_REPO
yYOUR_PRIVATE_HYDRATED_REPO
a través de la app de Cloud Build.Haz clic en Install.
Accede a Google Cloud. Se mostrará la página de autorización, en la que se te pide que autorices a la app de Google Cloud Build para que se conecte a Google Cloud.
Haz clic en Autorizar Google Cloud Build a través de GoogleCloudBuild. Se te redireccionará a la consola de Google Cloud .
Seleccionar tu Google Cloud proyecto.
Marca la casilla de verificación de consentimiento y haz clic en Siguiente.
Haz clic en Install.
Accede a Google Cloud. Se mostrará la página de autorización, en la que se te pide que autorices a la app de Google Cloud Build para que se conecte a Google Cloud.
Haz clic en Autorizar Google Cloud Build a través de GoogleCloudBuild. Se te redireccionará a la consola de Google Cloud .
Seleccionar tu Google Cloud proyecto.
Marca la casilla de verificación de consentimiento y haz clic en Siguiente.
En la página Seleccionar repositorio que aparece, selecciona los siguientes repositorios de GitHub:
YOUR_PRIVATE_DRY_REPO
YOUR_PRIVATE_HYDRATED_REPO
Haz clic en Conectar y, luego, en Listo.
En Cloud Shell, ejecute el siguiente comando:
envsubst < cloudbuild.template.yaml > cloudbuild.yaml
El comando genera un archivo
cloudbuild.yaml
.Crea el activador:
gcloud beta builds triggers create github \ --name ActiveAssistDemo \ --repo-name=$DRY_REPO_NAME \ --repo-owner=$REPO_OWNER \ --branch-pattern="main" \ --build-config=cloudbuild.yaml
Otorga permiso a la cuenta de servicio de Cloud Build para acceder a Secret Manager:
gcloud secrets add-iam-policy-binding github-ssh-key \ --member="serviceAccount:${RECO_MGR_PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding github-pat \ --member="serviceAccount:${RECO_MGR_PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor"
En Cloud Shell, compila y envía una imagen de Docker a Container Registry:
gcloud auth configure-docker docker build -t gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1 ./recommender-kpt-function docker push gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1
En Cloud Shell, crea el archivo de configuración necesario para configurar el activador de Cloud Build programado:
envsubst < cloudbuild-scheduled-recommendations.template.yaml > cloudbuild-scheduled-recommendations.yaml
Cree el activador de Cloud Build:
gcloud beta builds triggers create github \ --name ActiveAssistScheduledRecommendations \ --repo-name=YOUR_PRIVATE_HYDRATED_REPO \ --repo-owner=$REPO_OWNER \ --branch-pattern="main" \ --build-config=cloudbuild-scheduled-recommendations.yaml
Obtén el ID de este activador:
export TRIGGER_ID=`gcloud beta builds triggers describe \ ActiveAssistScheduledRecommendations \ --format="value(id)"`
En Cloud Shell, crea una cuenta de servicio:
gcloud iam service-accounts create build-invoker \ --description "Service Account used by Cloud Scheduler to invoke the sample scheduled Cloud Build job" \ --display-name "recommender-scheduler-sa" \ --project $RECO_MGR_PROJECT
Los trabajos de Cloud Scheduler usan esta cuenta de servicio para ejecutar el servicio
recommender-parser
.Otorga a la cuenta de servicio los permisos para invocar un trabajo de Cloud Build:
gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:build-invoker@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/cloudbuild.builds.editor \ --project $RECO_MGR_PROJECT gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:build-invoker@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/serviceusage.serviceUsageConsumer \ --project $RECO_MGR_PROJECT
Crea un trabajo de Cloud Scheduler para invocar el activador que creaste en el paso anterior:
gcloud scheduler jobs create http scheduled-build \ --project $RECO_MGR_PROJECT \ --time-zone "America/Los_Angeles" \ --schedule="0 */3 * * *" \ --uri="https://cloudbuild.googleapis.com/v1/projects/${RECO_MGR_PROJECT}/triggers/${TRIGGER_ID}:run" \ --description="Scheduler job to invoke Cloud Build" \ --oauth-service-account-email="build-invoker@$RECO_MGR_PROJECT.iam.gserviceaccount.com" \ --headers="Content-Type=application/json" \ --http-method="POST" \
Selecciona
Y
si ves el mensaje siguiente:There is no App Engine app in the project.
Si se te solicita que elijas la región en la que deseas que se ubique tu aplicación de App Engine, selecciona la región
us-central
.En Cloud Shell, en el clúster
sample-ops
, valida que tengas un espacio de nombres llamadoactiveassist-kcc
:kubectl get ns | grep activeassist-kcc
Config Connector implementa una instancia de Compute Engine de muestra en ejecución en el proyecto
PROJECT_ID
.Valida que la instancia de Compute Engine esté en el proyecto:
gcloud compute instances list | grep \ computeinstance-sample-cloudmachine
El tipo
MACHINE_TYPE
para esta máquina esn1-standard-1
.Abre la página Activador de compilación en la Google Cloud consola.
Selecciona el activador
ActiveAssistScheduledRecommendations
.Para probar el activador de forma manual, haz clic en Ejecutar en la entrada de tu activador en la lista.
El activador crea un problema de GitHub en tu repositorio
YOUR_PRIVATE_DRY_REPO
. El problema es similar a este:gcloud auth configure-docker docker build -t gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1 ./recommender-kpt-function docker push gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1
En el problema de muestra, el resultado de la función kpt muestra que el tipo
MACHINE_TYPE
actual para la instancia de Compute Engine es del tipon1-standard-1
. La recomendación de Active Assist es cambiarla a un tipog1-small
.Los revisores de control de versiones de tu empresa pueden revisar los problemas automatizados de GitHub y tomar medidas según corresponda para tu empresa.
Compila la canalización
En esta sección, crearás los componentes para compilar la canalización. Las recomendaciones de Active Assist se generan en función de los patrones de uso y las métricas del sistema. Cada categoría de recomendación puede usar un período predeterminado diferente para analizar los datos de uso y las métricas según las recomendaciones que se generen. Para probar la canalización de extremo a extremo, el repositorio que clonaste en un paso anterior proporciona recomendaciones de muestra (stubs) que usas para ejecutar la canalización de extremo a extremo.
Como alternativa, si ejecutas la canalización en un proyecto de muestra que tiene recursos y recomendaciones existentes, puedes realizar los cambios adecuados en el código de muestra y, luego, ejecutar la canalización.
Configura repositorios de GitHub privados de muestra
En las siguientes secciones, configurarás los repositorios de GitHub de muestra para este instructivo.
Configura un repositorio privado de GitHub para DRY
Configura un repositorio hidratado y privado de GitHub
Sube claves de GitHub a Secret Manager
Crea un clúster de GKE
En esta sección, crearás un clúster de GKE con el complemento de Config Connector, crearás una identidad y configurarás Config Connector. También debes configurar el Sincronizador de configuración. Puedes usar el Sincronizador de configuración para crear una configuración común en toda tu infraestructura, incluidas las políticas personalizadas, y aplicarla en entornos locales y en la nube. El Sincronizador de configuración evalúa los cambios y los implementa en todos los clústeres de Kubernetes para que el estado deseado siempre se refleje en tus clústeres.
Crea un activador de Cloud Build para enviar al repositorio hidratado
En las siguientes secciones, crearás un activador de Cloud Build que se activa cuando las plantillas se envían a la rama principal del repositorio YOUR_PRIVATE_DRY_REPO
. Este activador ejecuta los pasos que hidratan las plantillas de configuración de KRM en el repositorio YOUR_PRIVATE_DRY_REPO
y envían los archivos de configuración hidratados a tu repositorio YOUR_PRIVATE_HYDRATED_REPO
.
Conecta Cloud Build a tu repositorio de GitHub.
En esta sección, conectarás los repositorios de GitHub YOUR_PRIVATE_DRY_REPO
y YOUR_PRIVATE_HYDRATED_REPO
a Cloud Build.
Crea un activador de Cloud Build para el repositorio de DRY
Crea un activador de Cloud Build programado para recomendaciones de Active Assist
En las siguientes secciones, crearás un activador de Cloud Build programado que se ejecute de forma periódica. Este activador recupera recomendaciones de Active Assist mediante una función kpt y determina si hay recomendaciones activas para los recursos de tu repositorio YOUR_PRIVATE_HYDRATED_REPO
. La función kpt también crea un problema de GitHub en tu repositorio YOUR_PRIVATE_HYDRATED_REPO
si hay recomendaciones activas para la configuración de recursos que se deben revisar y activar.
Generar una imagen de Cloud Build
En esta sección, debes generar una imagen de Cloud Build que tenga componentes kpt, gh y Node.
Crea un activador de Cloud Build para tu repositorio hidratado
Crea un trabajo de Cloud Scheduler para invocar el activador
Confirma y envía los archivos de configuración de Cloud Build a GitHub
Envía los dos archivos de configuración de Cloud Build que creaste a tu repositorio YOUR_PRIVATE_DRY_REPO
:
git remote add dry https://github.com/$REPO_OWNER/$DRY_REPO_NAME.git
git add cloudbuild.yaml
git add cloudbuild-scheduled-recommendations.yaml
git commit -m "Added cloudbuild configuration YAMLs"
git push dry main
Es posible que se te solicite ingresar tus credenciales de GitHub cuando envíes a tu repositorio privado.
Revisa el resultado del trabajo de Cloud Build
Cuando confirmas y envías cambios a tu repositorio YOUR_PRIVATE_DRY_REPO
, se activa el trabajo de Cloud Build. Si el trabajo de Cloud Build se ejecuta de forma correcta, se crean varios recursos. En esta sección, debes verificar si los recursos se crean después de que se complete el trabajo de Cloud Build.
Ejecuta pruebas de extremo a extremo
A fin de permitirte probar la canalización de extremo a extremo, el repositorio que clonaste para este instructivo proporciona recomendaciones de muestra (stubs). Usa estos stubs para ejecutar la canalización de extremo a extremo. El stub imita una carga útil de recomendación de Active Assist y tiene una recomendación para cambiar el tipo de máquina de la instancia de Compute Engine que se implementó del tipo de instancia n1-standard-1
al tipo de instancia g1-small
.
En esta sección, invocarás el activador de Cloud Build programado de forma manual para ejecutar el trabajo que usa una función kpt a fin de recuperar recomendaciones de Active Assist. También verificas que se haya creado un problema de GitHub en tu repositorio YOUR_PRIVATE_DRY_REPO
.