{"meta":{"title":"Bereitstellen auf der Google Kubernetes Engine","intro":"Hier erfährst, du, wie du ein Projekt im Rahmen eines CD-Workflows (Continuous Deployment) in Google Kubernetes Engine (GKE) bereitstellst.","product":"GitHub Actions","breadcrumbs":[{"href":"/de/actions","title":"GitHub Actions"},{"href":"/de/actions/how-tos","title":"Anleitungen"},{"href":"/de/actions/how-tos/deploy","title":"Bereitstellen"},{"href":"/de/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"Bereitstellen auf Drittanbieterplattformen"},{"href":"/de/actions/how-tos/deploy/deploy-to-third-party-platforms/google-kubernetes-engine","title":"Google Kubernetes Engine"}],"documentType":"article"},"body":"# Bereitstellen auf der Google Kubernetes Engine\n\nHier erfährst, du, wie du ein Projekt im Rahmen eines CD-Workflows (Continuous Deployment) in Google Kubernetes Engine (GKE) bereitstellst.\n\n## Voraussetzungen\n\nBevor du mit dem Erstellen des Workflows fortfährst, musst du die folgenden Schritte für dein Kubernetes-Projekt ausführen. In diesem Leitfaden wird davon ausgegangen, dass der Stamm deines Projekts bereits über eine `Dockerfile`-Datei und eine Konfigurationsdatei für die Kubernetes-Bereitstellung verfügt.\n\n### Erstellen eines GKE-Clusters\n\nUm den GKE-Cluster zu erstellen, musst du dich zuerst mithilfe der `gcloud`-CLI authentifizieren. Weitere Informationen zu diesem Schritt findest du in den folgenden Artikeln:\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 und Cloud SDK](https://cloud.google.com/sdk/gcloud#the_gcloud_cli_and_cloud_sdk)\n\nBeispiel:\n\n```shell copy\n$ gcloud container clusters create $GKE_CLUSTER \\\n    --project=$GKE_PROJECT \\\n    --zone=$GKE_ZONE\n```\n\n### Aktivieren der APIs\n\nAktiviere die Kubernetes Engine- und Container Registry-APIs. Beispiel:\n\n```shell copy\n$ gcloud services enable \\\n    containerregistry.googleapis.com \\\n    container.googleapis.com\n```\n\n### Konfigurieren eines Dienstkontos und Speichern seiner Anmeldeinformationen\n\nIn diesem Verfahren wird gezeigt, wie du das Dienstkonto für deine GKE-Integration erstellst. Es wird erläutert, wie Sie das Konto erstellen, ihm Rollen hinzufügen, seine Schlüssel abrufen und als base64-codierter verschlüsselter Repositoryschlüssel mit dem Namen `GKE_SA_KEY`speichern.\n\n1. Erstelle ein neues Dienstkonto:\n\n   ```shell copy\n   gcloud iam service-accounts create $SA_NAME\n   ```\n\n2. Rufe die E-Mail-Adresse des soeben erstellten Dienstkontos ab:\n\n   ```shell copy\n   gcloud iam service-accounts list\n   ```\n\n3. Füge dem Dienstkonto Rollen hinzu.\n\n   > \\[!NOTE]\n   > Du kannst restriktivere Rollen anwenden, um deine Anforderungen zu erfüllen.\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. Lade die JSON-Schlüsseldatei für das Dienstkonto herunter:\n\n   ```shell copy\n   gcloud iam service-accounts keys create key.json --iam-account=$SA_EMAIL\n   ```\n\n5. Speichere den Dienstkontoschlüssel als Geheimnis namens `GKE_SA_KEY`:\n\n   ```shell copy\n   export GKE_SA_KEY=$(cat key.json | base64)\n   ```\n\n   Weitere Informationen zum Speichern eines Geheimnisses findest du unter [Verwenden von Geheimnissen in GitHub-Aktionen](/de/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\n### Speichern des Projektnamens\n\nSpeichere den Namen deines Projekts als Geheimnis namens `GKE_PROJECT`. Weitere Informationen zum Speichern eines Geheimnisses findest du unter [Verwenden von Geheimnissen in GitHub-Aktionen](/de/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\n### (Optional) Konfigurieren von Kustomize\n\nKustomize ist ein optionales Tool zum Verwalten von YAML-Spezifikationen. Nach dem Erstellen einer `kustomization`-Datei kann der folgende Workflow verwendet werden, um dynamisch Felder des Images festzulegen und das Ergebnis an `kubectl` weiterzuleiten. Weitere Informationen findest du unter [Kustomize-Syntax](https://github.com/kubernetes-sigs/kustomize#usage).\n\n### (Optional) Konfigurieren einer Bereitstellungsumgebung\n\nUmgebungen werden verwendet, um ein allgemeines Bereitstellungsziel wie `production`, `staging` oder `development` zu beschreiben. Wenn ein GitHub Actions Workflow in einer Umgebung bereitgestellt wird, wird die Umgebung auf der Hauptseite des Repositorys angezeigt. Du kannst Umgebungen verwenden, um für die Fortsetzung von Aufträgen eine Genehmigung zu erzwingen, einzuschränken, welche Branches einen Workflow auslösen können, Bereitstellungen mit benutzerdefinierten Bereitstellungsschutzregeln zu schützen oder den Zugriff auf Geheimnisse zu beschränken. Weitere Informationen zum Erstellen von Umgebungen findest du unter [Verwalten von Umgebungen für die Bereitstellung](/de/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments).\n\n## Erstellen des Workflows\n\nNachdem die Voraussetzungen erfüllt sind, kannst du mit dem Erstellen des Workflows fortfahren.\n\nIm folgenden Beispielworkflow wird gezeigt, wie du ein Containerimage erstellst und in GCR pushst. Anschließend werden die Kubernetes-Tools (z. B `kubectl` und `kustomize`) verwendet, um das Image in die Clusterbereitstellung zu pullen.\n\nÄndere unter dem `env`-Schlüssel den Wert von `GKE_CLUSTER` in den Namen deines Clusters, `GKE_ZONE` in deine Clusterzone, `DEPLOYMENT_NAME` in den Namen deiner Bereitstellung und `IMAGE` in den Namen deines Images.\n\nWenn du eine Bereitstellungsumgebung konfiguriert hast, ändere den Wert `environment` in den Namen deiner Umgebung. Wenn du keine Umgebung konfiguriert hast oder wenn sich dein Workflow in einem privaten Repository befindet und du GitHub Enterprise Cloud nicht verwendest, lösche den `environment`-Schlüssel.\n\n```yaml copy\n# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind.\n# Sie werden von einem Drittanbieter bereitgestellt und unterliegen\n# separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support\n# Onlinedokumentation.\n\n# GitHub empfiehlt, Aktionen an einen Commit-SHA anzuheften.\n# Um eine neuere Version zu erhalten, musst du den SHA aktualisieren.\n# Du kannst auch auf ein Tag oder einen Branch verweisen, aber die Aktion kann sich ohne Vorwarnung ändern.\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## Weitere Informationen\n\nWeitere Informationen zu den in diesen Beispielen verwendeten Tools findest du in der folgenden Dokumentation:\n\n* Die vollständige Workflowvorlage finden Sie im [Workflow „Erstellen und Bereitstellen in GKE“](https://github.com/actions/starter-workflows/blob/main/deployments/google.yml).\n* Die Kubernetes YAML-Anpassungs-Engine: [Kustomize](https://kustomize.io/).\n* [Bereitstellen einer containerisierten Webanwendung](https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app) in der Google Kubernetes Engine-Dokumentation."}