{"meta":{"title":"Desplegar a Google Kubernetes Engine","intro":"Aprende a implementar un proyecto en Google Kubernetes Engine (GKE) como parte de un flujo de trabajo de implementación continua (CD).","product":"GitHub Actions","breadcrumbs":[{"href":"/es/actions","title":"GitHub Actions"},{"href":"/es/actions/how-tos","title":"Procedimientos"},{"href":"/es/actions/how-tos/deploy","title":"Desplegar"},{"href":"/es/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"Implementa en plataformas de terceros"},{"href":"/es/actions/how-tos/deploy/deploy-to-third-party-platforms/google-kubernetes-engine","title":"Google Kubernetes Engine"}],"documentType":"article"},"body":"# Desplegar a Google Kubernetes Engine\n\nAprende a implementar un proyecto en Google Kubernetes Engine (GKE) como parte de un flujo de trabajo de implementación continua (CD).\n\n## Requisitos previos\n\nAntes de proceder con la creación del flujo de trabajo, necesitarás completar los siguientes pasos par tu proyecto de Kubernetes. Esta guía asume que la raíz de su proyecto ya tiene un elemento `Dockerfile` y un archivo de configuración para la implementación de Kubernetes.\n\n### Crear un clúster de GKE\n\nPara crear un clúster de GKE, primero necesitará autenticarse mediante la CLI de `gcloud`. Para obtener más información sobre este paso, consulta los siguientes artículos:\n\n* [`gcloud auth login`](https://cloud.google.com/sdk/gcloud/reference/auth/login)\n* [\n  `gcloud` CLI](https://cloud.google.com/sdk/gcloud/reference)\n* [\n  `gcloud` CLI y SDK en la nube](https://cloud.google.com/sdk/gcloud#the_gcloud_cli_and_cloud_sdk)\n\nPor ejemplo:\n\n```shell copy\n$ gcloud container clusters create $GKE_CLUSTER \\\n    --project=$GKE_PROJECT \\\n    --zone=$GKE_ZONE\n```\n\n### Habilitar las API\n\nHabilita las API de Kubernetes Engine y del Registro de Contenedor. Por ejemplo:\n\n```shell copy\n$ gcloud services enable \\\n    containerregistry.googleapis.com \\\n    container.googleapis.com\n```\n\n### Configuración de una cuenta de servicio y almacenamiento de sus credenciales.\n\nEste procedimiento demuestra cómo crear la cuenta de servicio para tu integración con GKE. Explica cómo crear la cuenta, agregar roles a ella, recuperar sus claves y almacenarlas como un secreto de repositorio cifrado codificado en base64 denominado `GKE_SA_KEY`.\n\n1. Crea una cuenta de servicio:\n\n   ```shell copy\n   gcloud iam service-accounts create $SA_NAME\n   ```\n\n2. Recupera la dirección de correo electrónico de la cuenta de servicio que acabas de crear:\n\n   ```shell copy\n   gcloud iam service-accounts list\n   ```\n\n3. Agrega roles a la cuenta de servicio.\n\n   > \\[!NOTE]\n   > Aplica roles más restrictivos que se ajusten a tus requisitos.\n\n   ```shell copy\n   gcloud projects add-iam-policy-binding $GKE_PROJECT \\\n     --member=serviceAccount:$SA_EMAIL \\\n     --role=roles/container.admin\n   gcloud projects add-iam-policy-binding $GKE_PROJECT \\\n     --member=serviceAccount:$SA_EMAIL \\\n     --role=roles/storage.admin\n   gcloud projects add-iam-policy-binding $GKE_PROJECT \\\n     --member=serviceAccount:$SA_EMAIL \\\n     --role=roles/container.clusterViewer\n   ```\n\n4. Descarga el archivo de llave JSON para la cuenta de servicio:\n\n   ```shell copy\n   gcloud iam service-accounts keys create key.json --iam-account=$SA_EMAIL\n   ```\n\n5. Almacena la clave de la cuenta de servicio como un secreto denominado `GKE_SA_KEY`:\n\n   ```shell copy\n   export GKE_SA_KEY=$(cat key.json | base64)\n   ```\n\n   Para obtener más información sobre cómo almacenar un secreto, consulta [Uso de secretos en Acciones de GitHub](/es/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\n### Almacenar el nombre de tu proyecto\n\nAlmacene el nombre del proyecto como un secreto denominado `GKE_PROJECT`. Para obtener más información sobre cómo almacenar un secreto, consulta [Uso de secretos en Acciones de GitHub](/es/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\n### (Opcional) Configurar kustomize\n\nKustomize es una herramietna opcional que se utiliza para administrar las especificaciones YAML. Después de crear un archivo `kustomization`, el siguiente flujo de trabajo puede utilizarse para configurar campos de la imagen dinámicamente y agregar el resultado en `kubectl`. Para obtener más información, consulte [Uso de Kustomize](https://github.com/kubernetes-sigs/kustomize#usage).\n\n### (Opcional) Configurar un ambiente de despliegue\n\nLos entornos se usan para describir un destino de implementación general como `production`, `staging` o `development`. Cuando un GitHub Actions flujo de trabajo se implementa en un entorno, el entorno se muestra en la página principal del repositorio. Puedes usar entornos para requerir aprobación para que un trabajo continúe, restringir qué ramas pueden desencadenar un flujo de trabajo, controlar las implementaciones con reglas de protección de implementación personalizadas o limitar el acceso a los secretos. Para más información sobre la creación de entornos, consulta [Administrar entornos para la implementación](/es/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments).\n\n## Crear un flujo de trabajo\n\nUna vez que hayas completado los prerequisitos, puedes proceder con la creación del flujo de trabajo.\n\nEl siguiente flujo de trabajo demuestra cómo crear una imagen de contenedor y cómo subirla a GCR. Después, usa las herramientas de Kubernetes (como `kubectl` y `kustomize`) para extraer la imagen para el despliegue del clúster.\n\nEn la clave `env`, cambie el valor de `GKE_CLUSTER` por el nombre del clúster, `GKE_ZONE` por la zona del clúster, `DEPLOYMENT_NAME` por el nombre de la implementación y `IMAGE` por el nombre de la imagen.\n\nSi ha configurado un entorno de implementación, cambie el valor de `environment` por el nombre del entorno. Si no ha configurado un entorno o si el flujo de trabajo está en un repositorio privado y no usa GitHub Enterprise Cloud, borre la clave `environment`.\n\n```yaml copy\n# Este flujo de trabajo usa acciones que no GitHub no certifica.\n# Estas las proporcionan entidades terceras y las gobiernan\n# condiciones de servicio, políticas de privacidad y documentación de soporte\n# en línea.\n\n# GitHub recomienda anclar acciones a un SHA de confirmación.\n# Para obtener una versión más reciente, debes actualizar el SHA.\n# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.\n\nname: Build and Deploy to GKE\n\non:\n  push:\n    branches:\n      - main\n\nenv:\n  PROJECT_ID: ${{ secrets.GKE_PROJECT }}\n  GKE_CLUSTER: cluster-1    # Add your cluster name here.\n  GKE_ZONE: us-central1-c   # Add your cluster zone here.\n  DEPLOYMENT_NAME: gke-test # Add your deployment name here.\n  IMAGE: static-site\n\njobs:\n  setup-build-publish-deploy:\n    name: Setup, Build, Publish, and Deploy\n    runs-on: ubuntu-latest\n    environment: production\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v6\n\n    # Setup gcloud CLI\n    - uses: google-github-actions/setup-gcloud@1bee7de035d65ec5da40a31f8589e240eba8fde5\n      with:\n        service_account_key: ${{ secrets.GKE_SA_KEY }}\n        project_id: ${{ secrets.GKE_PROJECT }}\n\n    # Configure Docker to use the gcloud command-line tool as a credential\n    # helper for authentication\n    - run: |-\n        gcloud --quiet auth configure-docker\n\n    # Get the GKE credentials so we can deploy to the cluster\n    - uses: google-github-actions/get-gke-credentials@db150f2cc60d1716e61922b832eae71d2a45938f\n      with:\n        cluster_name: ${{ env.GKE_CLUSTER }}\n        location: ${{ env.GKE_ZONE }}\n        credentials: ${{ secrets.GKE_SA_KEY }}\n\n    # Build the Docker image\n    - name: Build\n      run: |-\n        docker build \\\n          --tag \"gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA\" \\\n          --build-arg GITHUB_SHA=\"$GITHUB_SHA\" \\\n          --build-arg GITHUB_REF=\"$GITHUB_REF\" \\\n          .\n\n    # Push the Docker image to Google Container Registry\n    - name: Publish\n      run: |-\n        docker push \"gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA\"\n\n    # Set up kustomize\n    - name: Set up Kustomize\n      run: |-\n        curl -sfLo kustomize https://github.com/kubernetes-sigs/kustomize/releases/download/v3.1.0/kustomize_3.1.0_linux_amd64\n        chmod u+x ./kustomize\n\n    # Deploy the Docker image to the GKE cluster\n    - name: Deploy\n      run: |-\n        ./kustomize edit set image gcr.io/PROJECT_ID/IMAGE:TAG=gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA\n        ./kustomize build . | kubectl apply -f -\n        kubectl rollout status deployment/$DEPLOYMENT_NAME\n        kubectl get services -o wide\n```\n\n## Información adicional\n\nPara obtener más información sobre las herramientas que se utilizan en estos ejemplos, consulta la siguiente documentación:\n\n* Para obtener la plantilla de flujo de trabajo completa, vea el [flujo de trabajo \"Compilación e implementación en GKE](https://github.com/actions/starter-workflows/blob/main/deployments/google.yml)\".\n* Motor de personalización YAML de Kubernetes: [Kustomize](https://kustomize.io/).\n* [Implementación de una aplicación web contenedorizada](https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app) en la documentación de Google Kubernetes Engine."}