Kf in Google Cloud installieren

In diesem Dokument wird beschrieben, wie Sie einen GKE-Cluster einrichten und dann Kf sowie dessen Abhängigkeiten installieren.

Hinweise

GKE-Clusteranforderungen

Kf-Anforderungen

Zugriffsberechtigungen von Komponenten in Kf auf der Seite Abhängigkeiten und Architektur von Kf ansehen und verstehen.

In der Abhängigkeitsmatrix werden die einzelnen Versionen aufgelistet.

Unterstützung für Compute Engine aktivieren

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Aktivieren Sie die Compute Engine API.

    API aktivieren

Unterstützung für Artifact Registry aktivieren

  1. Aktivieren Sie die Artifact Registry API.

    Aktivieren Sie die Artifact Registry API.

GKE aktivieren und konfigurieren

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit gcloud components update ab.

Umgebungsvariablen einrichten

Linux und Mac

export PROJECT_ID=YOUR_PROJECT_ID
export CLUSTER_PROJECT_ID=YOUR_PROJECT_ID
export CLUSTER_NAME=kf-cluster
export COMPUTE_ZONE=us-central1-a
export COMPUTE_REGION=us-central1
export CLUSTER_LOCATION=${COMPUTE_ZONE} # Replace ZONE with REGION to switch
export NODE_COUNT=4
export MACHINE_TYPE=e2-standard-4
export NETWORK=default

Windows PowerShell

Set-Variable -Name PROJECT_ID -Value YOUR_PROJECT_ID
Set-Variable -Name CLUSTER_PROJECT_ID -Value YOUR_PROJECT_ID
Set-Variable -Name CLUSTER_NAME -Value kf-cluster
Set-Variable -Name COMPUTE_ZONE -Value us-central1-a
Set-Variable -Name COMPUTE_REGION -Value us-central1
Set-Variable -Name CLUSTER_LOCATION -Value $COMPUTE_ZONE # Replace ZONE with REGION to switch
Set-Variable -Name NODE_COUNT -Value 4
Set-Variable -Name MACHINE_TYPE -Value e2-standard-4
Set-Variable -Name NETWORK -Value default

Dienstkonto einrichten

Erstellen Sie ein Google Cloud-Dienstkonto, das über Workload Identity mit einem Kubernetes-Dienstkonto verknüpft wird. Dadurch müssen Sie keinen Dienstkontoschlüssel erstellen und einfügen.

  1. Erstellen Sie das von Kf verwendete Dienstkonto.

    gcloud iam service-accounts create ${CLUSTER_NAME}-sa \
    --project=${CLUSTER_PROJECT_ID} \
    --description="GSA for Kf ${CLUSTER_NAME}" \
    --display-name="${CLUSTER_NAME}"
  2. Erstellen Sie eine neue benutzerdefinierte IAM-Rolle.

    gcloud iam roles create serviceAccountUpdater \
    --project=${CLUSTER_PROJECT_ID} \
    --title "Service Account Updater" \
    --description "This role only updates members on a GSA" \
    --permissions iam.serviceAccounts.get,iam.serviceAccounts.getIamPolicy,iam.serviceAccounts.list,iam.serviceAccounts.setIamPolicy
  3. Legen Sie fest, dass das Dienstkonto seine eigene Richtlinie ändern darf. Der Kf-Controller verwendet diese Option, um der Richtlinie neue (Name)spaces hinzuzufügen und die Wiederverwendung von Workload Identity zuzulassen.

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="projects/${CLUSTER_PROJECT_ID}/roles/serviceAccountUpdater"
  4. Weisen Sie den Monitoring-Messwerten eine Rolle für den Schreibzugriff auf Cloud Monitoring zu.

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/monitoring.metricWriter"
  5. Weisen Sie Logging eine Rolle für den Schreibzugriff auf Cloud Logging zu.

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"

GKE-Cluster erstellen

gcloud container clusters create ${CLUSTER_NAME} \
  --project=${CLUSTER_PROJECT_ID} \
  --zone=${CLUSTER_LOCATION} \
  --num-nodes=${NODE_COUNT} \
  --machine-type=${MACHINE_TYPE} \
  --disk-size "122" \
  --network=${NETWORK} \
  --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver \
  --enable-dataplane-v2 \
  --enable-stackdriver-kubernetes \
  --enable-ip-alias \
  --enable-autorepair \
  --enable-autoupgrade \
  --scopes cloud-platform \
  --release-channel=regular \
  --workload-pool="${CLUSTER_PROJECT_ID}.svc.id.goog" \
  --service-account="${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"

Firewallregeln festlegen

Für die Kf-Datei sind einige Firewallports erforderlich Der Masterknoten muss mit Pods über die Ports 80, 443, 8080, 8443 und 6443 kommunizieren können.

Workload Identity aktivieren

Nachdem Sie nun ein Dienstkonto und einen GKE-Cluster haben, verknüpfen Sie den Identitäts-Namespace des Clusters mit dem Cluster.

gcloud iam service-accounts add-iam-policy-binding \
  --project=${CLUSTER_PROJECT_ID} \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[kf/controller]" \
  "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"

gcloud iam service-accounts add-iam-policy-binding \
  --project=${CLUSTER_PROJECT_ID} \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[cnrm-system/cnrm-controller-manager]" \
  "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"

GKE-Zielcluster

Konfigurieren Sie den Zugriff auf die kubectl-Befehlszeile mit dem folgenden Befehl:

gcloud container clusters get-credentials ${CLUSTER_NAME} \
    --project=${CLUSTER_PROJECT_ID} \
    --zone=${CLUSTER_LOCATION}

Artifact Registry-Repository erstellen

  1. Erstellen Sie eine Artifact Registry für Container-Images, die gespeichert werden sollen.

    gcloud artifacts repositories create ${CLUSTER_NAME} \
      --project=${CLUSTER_PROJECT_ID} \
      --repository-format=docker \
      --location=${COMPUTE_REGION}
  2. Gewähren Sie dem Dienstkonto die Berechtigung für das Artifact Registry-Repository.

    gcloud artifacts repositories add-iam-policy-binding ${CLUSTER_NAME} \
      --project=${CLUSTER_PROJECT_ID} \
      --location=${COMPUTE_REGION} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role='roles/artifactregistry.writer'

Softwareabhängigkeiten auf einem Cluster installieren

  1. Installieren Sie Cloud Service Mesh Version 1.12.

    1. Folgen Sie der Installationsanleitung für Cloud Service Mesh, einschließlich der Schritte zum Erstellen eines Gateway für eingehenden Traffic.
  2. Installieren Sie Config Connector.

    1. Laden Sie die erforderliche TAR-Datei für Config Connector-Operator herunter:

    2. Extrahieren Sie die TAR-Datei:

      tar zxvf release-bundle.tar.gz
    3. Installieren Sie den Config Connector-Operator in Ihrem Cluster:

      kubectl apply -f operator-system/configconnector-operator.yaml
    4. Konfigurieren Sie den Config Connector-Operator.

      1. Kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen configconnector.yaml:

        # configconnector.yaml
        apiVersion: core.cnrm.cloud.google.com/v1beta1
        kind: ConfigConnector
        metadata:
          # the name is restricted to ensure that there is only one
          # ConfigConnector resource installed in your cluster
          name: configconnector.core.cnrm.cloud.google.com
        spec:
          mode: cluster
          googleServiceAccount: "KF_SERVICE_ACCOUNT_NAME" # Replace with the full service account resolved from ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
      2. Wenden Sie die Konfiguration auf Ihren Cluster an.

        kubectl apply -f configconnector.yaml
    5. Prüfen Sie, ob Config Connector vollständig installiert ist, bevor Sie fortfahren.

      • Config Connector führt alle seine Komponenten in einem Namespace mit dem Namen cnrm-system aus. Prüfen Sie mit dem folgenden Befehl, ob die Pods bereit sind:

        kubectl wait -n cnrm-system --for=condition=Ready pod --all
      • Wenn Config Connector richtig installiert ist, sieht die Ausgabe in etwa so aus:

        pod/cnrm-controller-manager-0 condition met
        pod/cnrm-deletiondefender-0 condition met
        pod/cnrm-resource-stats-recorder-86858dcdc5-6lqzb condition met
        pod/cnrm-webhook-manager-58c799b8fb-kcznq condition met
        pod/cnrm-webhook-manager-58c799b8fb-n2zpx condition met
    6. Workload Identity einrichten

      kubectl annotate serviceaccount \
      --namespace cnrm-system \
      --overwrite \
      cnrm-controller-manager \
      iam.gke.io/gcp-service-account=${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
  3. Installieren Sie Tekton:

    kubectl apply -f "https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.32.1/release.yaml"

Kf installieren

  1. Installieren Sie die Kf-Befehlszeile:

    Linux

    Mit diesem Befehl wird die Kf-Befehlszeile für alle Nutzer im System installiert. Folgen Sie der Anleitung auf dem Cloud Shell-Tab, um Kf nur für die eigene Nutzung zu installieren.

    gcloud storage cp gs://kf-releases/v2.9.0/kf-linux /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Mac

    Mit diesem Befehl wird kf für alle Nutzer im System installiert.

    gcloud storage cp gs://kf-releases/v2.9.0/kf-darwin /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Cloud Shell

    Durch diesen Befehl wird kf auf Ihrer Cloud Shell-Instanz installiert, wenn Sie bash verwenden. Für andere Shells muss die Anleitung möglicherweise geändert werden.

    mkdir -p ~/bin
    gcloud storage cp gs://kf-releases/v2.9.0/kf-linux ~/bin/kf
    chmod a+x ~/bin/kf
    echo "export PATH=$HOME/bin:$PATH" >> ~/.bashrc
    source ~/.bashrc

    Windows

    Mit diesem Befehl wird kf in das aktuelle Verzeichnis heruntergeladen. Fügen Sie es dem Pfad hinzu, wenn Sie es von außerhalb des aktuellen Verzeichnisses aufrufen möchten.

    gcloud storage cp gs://kf-releases/v2.9.0/kf-windows.exe kf.exe
  2. Installieren Sie den Operator:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.9.0/operator.yaml"
  3. Konfigurieren Sie den Operator für Kf:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.9.0/kfsystem.yaml"
  4. Richten Sie Secrets und Standardeinstellungen ein:

    export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
    
    kubectl patch \
    kfsystem kfsystem \
    --type='json' \
    -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': true, 'config': {'spaceContainerRegistry': '${CONTAINER_REGISTRY}', 'secrets':{'workloadidentity':{'googleserviceaccount':'${CLUSTER_NAME}-sa', 'googleprojectid':'${CLUSTER_PROJECT_ID}'}}}}}]"
    

Installation prüfen

  kf doctor --retries=20

Bereinigen

Bei diesen Schritten werden alle Komponenten entfernt, die im Abschnitt Neuen GKE-Cluster erstellen und vorbereiten erstellt wurden.

  1. Löschen Sie das Google-Dienstkonto:

    gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
  2. Löschen Sie IAM-Richtlinienbindungen:

    gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountAdmin"
    gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
  3. Löschen Sie das Container-Image-Repository:

    gcloud artifacts repositories delete ${CLUSTER_NAME} \
      --location=${COMPUTE_REGION}
  4. Deinstallieren Sie Kf:

    kubectl patch kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': false, }}]"
  5. (Optional) Löschen Sie den GKE-Cluster:

    gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}