Größe von GKE-Arbeitslasten in großem Maßstab anpassen


In dieser Anleitung erfahren Sie, wie Sie die Größe Ihrer Google Kubernetes Engine-Arbeitslasten (VPA) und Nutzungsmesswerte anpassen.

Warum die Größenanpassung von Ressourcen wichtig ist

Eine Unterdimensionierung kann den Containern die erforderlichen Ressourcen für die Ausführung der Anwendungen vorenthalten, sodass sie langsam und unzuverlässig sind. Eine Überdimensionierung hat keine Auswirkungen auf die Leistung Ihrer Anwendungen, kann jedoch Ihre monatliche Rechnung erhöhen.

In der folgenden Tabelle werden die Auswirkungen einer Unter- und Überdimensionierung von CPU und Arbeitsspeicher beschrieben:

Ressource Status der Nutzerverwaltung Risiko Erklärung
CPU Über Kosten Erhöht die Kosten Ihrer Arbeitslasten, da unnötige Ressourcen reserviert werden.
Unterdimensionierung Leistung Kann Arbeitslasten verlangsamen oder dazu führen, dass sie nicht mehr reagieren.
Nicht festgelegt Zuverlässigkeit Die CPU kann auf 0 gedrosselt werden, wodurch Ihre Arbeitslasten nicht mehr reagieren.
Speicher Über Kosten Erhöht die Kosten Ihrer Arbeitslasten, da unnötige Ressourcen reserviert werden.
Unterdimensionierung Zuverlässigkeit Kann dazu führen, dass Anwendungen mit einem Fehler aufgrund fehlenden Arbeitsspeichers beendet werden.
Nicht festgelegt Zuverlässigkeit kubelet kann Ihre Pods jederzeit anhalten und als fehlgeschlagen markieren.

Ziele

In dieser Anleitung erhalten Sie Informationen zu folgenden Themen:

  • Beispielanwendung bereitstellen
  • GKE-Empfehlungsmesswerte aus Monitoring nach BigQuery exportieren
  • GKE-Containerempfehlungen mit BigQuery und Looker Studio projektübergreifend aufrufen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Vorbereitung

Projekt einrichten

Die Software, die Sie für diese Anleitung benötigen, ist in Cloud Shell vorinstalliert. Dazu gehören: Docker, kubectl, gcloud CLI und Terraform. Wenn Sie Cloud Shell nicht verwenden, müssen Sie die gcloud CLI installieren.

  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. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  6. Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  11. Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  12. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/serviceusage.serviceUsageAdmin, roles/container.clusterAdmin, roles/iam.serviceAccountAdmin, roles/iam.securityAdmin, roles/container.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.

Umgebung einrichten

So richten Sie Ihre Umgebung ein:

  1. Legen Sie Umgebungsvariablen fest:

    export PROJECT_ID=PROJECT_ID
    export REGION=us-central1
    export ZONE=us-central1-f
    export IMAGE=$REGION-docker.pkg.dev/$PROJECT_ID/main/vpa-recs-image:latest
    

    Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

  2. Legen Sie die Standardumgebungsvariablen fest:

    gcloud config set project $PROJECT_ID
    gcloud config set compute/region $REGION
    gcloud config set compute/zone $ZONE
    
  3. Klonen Sie das Code-Repository.

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
    
  4. Wechseln Sie in das Arbeitsverzeichnis.

    cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations
    

(Optional) Beispielanwendung einrichten

Dies ist ein optionaler Abschnitt zum Bereitstellen einer Beispielanwendung. Achten Sie bei der Verwendung eines vorhandenen Clusters darauf, dass Cloud Monitoring auf Ihrem Cluster konfiguriert ist.

Zum Simulieren einer realistischen Umgebung verwenden Sie ein Setupscript, um Online Boutique bereitzustellen.

Mit den folgenden Schritten installieren Sie die Beispielanwendung und ändern die Standardkonfiguration. Beispielsweise wird in der Anleitung für einige Arbeitslasten das horizontale Pod-Autoscaling (HPA) konfiguriert und es werden Ressourcenanforderungen und -limits geändert.

  1. Führen Sie das Setupscript aus:

    ./scripts/setup.sh
    

    Das Setupscript tut Folgendes:

    • Es erstellt einen GKE-Cluster.
    • Es stellt die Beispielanwendung „Online Boutique“ bereit.
    • Es aktualisiert Pod-CPU- und Arbeitsspeicher-Ressourcenanfragen.
    • Es konfiguriert eine HorizontalPodAutoscaler-Ressource für die Arbeitslasten adservice und , um eine realistische Umgebung zu simulieren.

    Das Setupscript kann bis zu zehn Minuten erfordern.

  2. Prüfen Sie, ob die Beispielanwendung bereit ist:

    kubectl get deployment
    

    Die Ausgabe sieht in etwa so aus:

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    adservice               2/2     2            2           4m54s
    cartservice             1/1     1            1           4m55s
    checkoutservice         1/1     1            1           4m56s
    currencyservice         1/1     1            1           4m55s
    emailservice            1/1     1            1           4m56s
    frontend                1/1     1            1           4m55s
    loadgenerator           1/1     1            1           4m55s
    paymentservice          1/1     1            1           4m55s
    productcatalogservice   1/1     1            1           4m55s
    recommendationservice   1/1     1            1           4m56s
    redis-cart              1/1     1            1           4m54s
    shippingservice         1/1     1            1           4m54s
    

Repository erstellen

Erstellen Sie das Repository zum Speichern des Messwert-Exporters-Images.

  1. Erstellen Sie ein neues Docker-Repository:

    gcloud artifacts repositories create main --repository-format=docker \
        --location=$REGION \
        --description="docker repository"
    
  2. Richten Sie die Authentifizierung für Docker-Repositories ein:

    gcloud auth configure-docker $REGION-docker.pkg.dev
    
  3. Führen Sie folgenden Befehl aus, um das Image bereitzustellen:

    gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE
    

Anwendung bereitstellen

Im folgenden Abschnitt verwenden Sie Terraform, um die folgenden Aufgaben auszuführen:

  • Erstellen Sie ein Dienstkonto und weisen Sie die Berechtigungen zu, die zum Verwalten und Interagieren mit Google Cloud-Ressourcen erforderlich sind.
  • Gewähren Sie dem Dienstkonto die Monitoring-Betrachter, BigQuery-Datenbearbeiter, BigQuery-Dateninhaber, BigQuery-Jobnutzer und Cloud Run-Aufrufer-Rollen.
  • Stellen Sie einen Cloud Run-Job bereit, der ein Docker-Image aus der Artifact Registry abruft und mit der angegebenen Konfiguration ausführt.
  • Einen Cloud Scheduler-Job erstellen, der täglich den Cloud Run-Dienst auslöst.
  • Erstellen Sie ein BigQuery-Dataset, eine Tabelle und eine Ansicht, um Messwertdaten und Empfehlungen zu speichern.

Terraform konfigurieren

  1. Legen Sie Konfigurationsumgebungsvariablen fest:

    export TF_VAR_BIGQUERY_DATASET=gke_metrics_dataset
    export TF_VAR_BIGQUERY_TABLE=gke_metrics
    export TF_VAR_RECOMMENDATION_WINDOW_SECONDS=1209600
    export TF_VAR_RECOMMENDATION_DISTANCE=86400
    export TF_VAR_LATEST_WINDOW_SECONDS=600
    export TF_VAR_METRIC_WINDOW=259200
    export TF_VAR_METRIC_DISTANCE=600
    

    Dieser Befehl umfasst Folgendes:

    • TF_VAR_BIGQUERY_DATASET und TF_VAR_BIGQUERY_TABLE: enthalten die GKE-Messwertdaten.
    • TF_VAR_RECOMMENDATION_WINDOW_SECONDS: Zeitraum für VPA-Empfehlungen. Der Standardwert ist 259.200 Sekunden oder 14 Tage.
    • TF_VAR_RECOMMENDATION_DISTANCE: Das Intervall, in dem VPA-Empfehlungsdaten zurückgegeben werden. Die Standardeinstellung ist 86.400 Sekunden oder jeder Tag.
    • TF_VAR_LATEST_WINDOW_SECONDS: der Zeitraum zum Abrufen der zuletzt angeforderten und zu begrenzenden Ressourcenwerte. Der Standardwert ist 600 Sekunden oder 10 Minuten.
    • METRIC_WINDOW: legt den Zeitraum für GKE-Nutzungs- und -Auslastungsmesswerte fest. Der Standardwert ist 259.200 Sekunden oder 3 Tage.
    • METRIC_DISTANCE: Das Intervall, in dem Datenpunkte zurückgegeben werden. Der Standardwert ist 600 Sekunden oder jede 10 Minuten.

    Passen Sie diese Werte an die Anforderungen Ihrer Arbeitslasten an. Aktualisieren Sie beispielsweise für Batcharbeitslasten, die einmal im Monat ausgeführt werden, TF_VAR_RECOMMENDATION_WINDOW_SECONDS und METRIC_WINDOW auf 2592000 Sekunden (30 Tage).

Terraform-Konfiguration bereitstellen

  1. Initialisieren, validieren und wenden Sie Ihre Konfiguration an:

    terraform -chdir=terraform init
    terraform -chdir=terraform validate
    terraform -chdir=terraform apply -var project_id=$PROJECT_ID -var region=$REGION -var image=$IMAGE
    

    Dieser Befehl erstellt einen Ausführungsplan und bittet um Ihre Genehmigung, bevor Änderungen vorgenommen werden. Prüfen Sie den Plan. Geben Sie yes ein, wenn Sie fortfahren möchten.

    Nach erfolgreicher Anwendung des Befehls werden Ihre Ressourcen von Terraform erstellt und verwaltet.

  2. Führen Sie den Cloud Scheduler-Job manuell aus:

    gcloud scheduler jobs run recommendation-schedule --location ${REGION}
    

Deployment prüfen

  1. Wählen Sie auf der Detailseite workload-recommendations den Tab Logs aus.

  2. Prüfen Sie, ob die Messwertlogs in der Cloud Run-Konsole verarbeitet werden:

    Öffnen Sie Cloud Run.

    Die Logs zeigen Messwerte an, die in BigQuery geschrieben werden. Die Ausgabe sollte in etwa so aussehen:

    INFO - Building Row
    INFO - Successfully wrote 12 rows to BigQuery table [PROJECT_ID].gke_metric_dataset.gke_metrics.
    INFO - Run Completed
    

    Wenn die Ausgabe nicht übereinstimmt, warten Sie fünf Minuten und führen Sie dann den Befehl gcloud scheduler jobs run recommendation-schedule --location $REGION aus.

Containerempfehlung in BigQuery ansehen

  1. Rufen Sie in der Google Cloud Console die Seite "BigQuery" auf:

    BigQuery aufrufen

  2. Prüfen Sie, ob die Daten in der Tabelle gke_metrics und in der Ansicht container_recommendations sichtbar sind. Je nach Anzahl der Arbeitslasten kann es einige Minuten dauern, bis alle Messwerte in BigQuery geschrieben sind.

  3. Wählen Sie im Abfrageeditor alle Zeilen in der Ansicht container_recommendations aus:

    SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`
    

    Dieses Programm extrahiert die folgenden Messwerte aus Cloud Monitoring:

    • Arbeitslastdetails: die Projekt-ID, der Clustername, der Controller und der Containername.

    • CPU-/Speicherauslastung und -auslastung: die von der Arbeitslast verwendete CPU- und Arbeitsspeichermenge sowie der Prozentsatz der verwendeten CPU- und Arbeitsspeicherressourcen.

    • Angefordert und begrenzt: die CPU- und Speicherkapazität, die für die Arbeitslast angefordert wurde, sowie die maximal zulässige CPU- und Arbeitsspeicherkapazität für die Arbeitslast.

    • Empfehlungen für CPU- und Arbeitsspeicherarbeitslasten: Empfehlungen dazu, wie viel CPU und Arbeitsspeicher der Arbeitslast zugewiesen werden sollten, um einen reibungslosen Betrieb zu gewährleisten, basierend auf den VPA-Empfehlungen für Bereitstellungen sowie auf der tatsächlichen Nutzung und den Zielauslastungen für Nicht-Deploymentobjekte.

Empfehlungen in Looker Studio visualisieren

Looker Studio ist eine kostenlose Selfservice-Business-Intelligence-Plattform, mit der Sie Datenvisualisierungen, Dashboards und Berichte erstellen und nutzen können. Mit Looker Studio können Sie eine Verbindung zu Ihren Daten herstellen, Visualisierungen erstellen und Ihre Informationen mit anderen teilen.

Verwenden Sie Looker Studio, um Daten in der BigQuery-Ansicht container_recommendations zu visualisieren:

  1. Öffnen Sie die Dashboard-Vorlage zur Arbeitslastanpassung.
  2. Klicken Sie auf Eigene Daten verwenden.
  3. Wählen Sie Ihr Projekt aus.
  4. Wählen Sie als Dataset gke_metric_dataset aus.
  5. Wählen Sie als Tabelle container_recommendations aus.
  6. Klicken Sie auf Hinzufügen.
  7. Klicken Sie auf Zum Bericht hinzufügen.

Details zur Looker Studio-Vorlage

Die Detailseite der Looker Studio-Vorlage enthält folgende Informationen:

  • Übersicht über die GKE-Arbeitslastgröße: Bietet einen Überblick über Ihre Cluster, einschließlich:
    • Die Anzahl der Best-Effort- und Bursting-Arbeitslasten, die Zuverlässigkeits- und Leistungsproblemen ausgesetzt sind.
    • Mögliche Einsparungen bei den CPU- und Arbeitsspeicherressourcen. Positive Werte weisen auf eine Überdimensionierung hin, negative Werte auf eine unzureichende Bereitstellung.
  • Workload Recommendations: Empfehlungen für CPU- und Speicheranforderungen und Limits für Arbeitslasten.
  • GKE-Workloads bei Risiko: Zeigt Arbeitslasten an, bei denen das Risiko der größten Zuverlässigkeit und Leistungsprobleme am höchsten ist.
  • Verlauf – Größenanpassung bei Arbeitslasten: Wie geht es uns? Bietet eine historische Ansicht darüber, wie gut die Größenanpassung von Arbeitslasten und die Reduzierung der Anzahl der Best-Effort-Arbeitslasten implementiert wurden.

Containerempfehlung für angeforderte CPU und CPU-Limit

Wenn die Werte für die angeforderten CPU und das CPU-Limit der Arbeitslasten gleich sind, gilt die Dienstqualität als garantiert und die CPU-Empfehlung wird innerhalb des Zeitraums von 14 Tagen auf das Maximum gesetzt. Andernfalls wird das 95. Perzentil der angeforderten CPU-Empfehlung innerhalb von 14 Tagen verwendet.

Wenn die CPU-Anfrage- und die CPU-Limitwerte gleich sind, wird die Empfehlung für das CPU-Limit auf die maximale VPA-Empfehlung für Deployment-Objekte festgelegt und die CPU-Nutzung mit einer Zielauslastung von 70 %. Wenn die Anfrage und das Limit der Arbeitslast nicht identisch sind, wird das vorhandene Limitverhältnis verwendet.

Containerempfehlung für angeforderten Arbeitsspeicher und Arbeitsspeicherlimit

In den Arbeitsspeicherempfehlungen wird die maximale VPA-Empfehlung nur für Deployment-Objekte und die maximale Arbeitsspeichernutzung mit einer Zielauslastung von 80 % verwendet, um die Zuverlässigkeit der Arbeitslasten zu gewährleisten. Sie können die Zielauslastungswerte in der Abfrage der container_recommendation-Ansicht aktualisieren.

Es empfiehlt sich, für Anfragen und Limits die gleiche Arbeitsspeichermenge zu verwenden, da Arbeitsspeicher eine nicht komprimierbare Ressource ist. Wenn der Arbeitsspeicher aufgebraucht ist, muss der Pod heruntergefahren werden. Damit das Herunterfahren von Pods und eine Destabilisierung Ihrer Umgebung vermieden wird, müssen Sie den angeforderten Arbeitsspeicher auf das Arbeitsspeicherlimit festlegen.

Empfehlungen priorisieren

Jeder Zeile wird ein Prioritätswert zugewiesen, um Arbeitslasten anzuzeigen, die auf Grundlage der Empfehlungen sofort geprüft werden müssen. Die Einheiten von CPU und Arbeitsspeicher sind unterschiedlich. Zur Normalisierung der Einheiten wird das On-Demand-Preisverhältnis von E2-Maschinentypen für CPU und Arbeitsspeicher als Näherung für die Konvertierung von Arbeitsspeichereinheiten in CPU-Einheiten verwendet.

Die Priorität wird mithilfe der folgenden Formel berechnet:

priority = (CPU requested - CPU recommendation) + ((memory requested -
memory recommendation) / (vCPUs on-demand pricing /memory on-demand pricing ))

Für Autopilot sollten die von Ihrer Bereitstellungskonfiguration angeforderten Gesamtressourcen innerhalb der unterstützten Mindest- und Höchstwerte liegen.

VPA-Empfehlungen für mehrere Projekte aufrufen

Verwenden Sie ein neues Projekt als den Umfang festlegendes Projekt, um VPA-Containerempfehlungen für mehrere Projekte aufzurufen.

Wenn Sie dieses Projekt in Ihrer Produktionsumgebung bereitstellen, fügen Sie alle zu analysierenden Projekte dem Messwertbereich des neuen Projekts hinzu.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

Sie vermeiden weitere Kosten am einfachsten, wenn Sie das für die Anleitung erstellte Projekt löschen.

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

Nächste Schritte