arrow_back

Mandantenfähigen GKE-Cluster mit Namespaces verwalten

Anmelden Teilnehmen
Testen und teilen Sie Ihr Wissen mit unserer Community.
done
Sie erhalten Zugriff auf über 700 praxisorientierte Labs, Skill-Logos und Kurse

Mandantenfähigen GKE-Cluster mit Namespaces verwalten

Lab 1 Stunde 15 Minuten universal_currency_alt 5 Guthabenpunkte show_chart Mittelstufe
info Dieses Lab kann KI-Tools enthalten, die den Lernprozess unterstützen.
Testen und teilen Sie Ihr Wissen mit unserer Community.
done
Sie erhalten Zugriff auf über 700 praxisorientierte Labs, Skill-Logos und Kurse

GSP766

Logo: Google Cloud-Labs zum selbstbestimmten Lernen

Übersicht

Bei der Überlegung, wie sich die Kosten einer Google Cloud-Infrastruktur optimieren lassen, deren Kern Google Kubernetes Engine-Cluster (GKE) bilden, sollte vor allem darauf geachtet werden, dass die abgerechneten Ressourcen effizient eingesetzt werden. Ein häufiger Fehler ist, Nutzer oder Teams Clustern im Verhältnis 1:1 zuzuweisen, was zu einer starken, kaum nachvollziehbaren Zunahme der Cluster führt.

Ein mandantenfähiger Cluster kann von mehreren Nutzern oder Teams gemeinsam für ihre Arbeitslasten verwendet werden, wobei die Isolierung und faire Aufteilung der Ressourcen sichergestellt bleiben. Dies wird durch das Erstellen von Namespaces ermöglicht. Dank Namespaces können mehrere virtuelle Cluster auf demselben physischen Cluster existieren.

In diesem Lab lernen Sie, wie Sie mit verschiedenen Namespaces einen mandantenfähigen Cluster einrichten, um die Ressourcennutzung und damit auch die Kosten zu optimieren.

Lernziele

Aufgaben in diesem Lab:

  • Mehrere Namespaces in einem GKE-Cluster erstellen
  • Rollenbasierte Zugriffssteuerung für den Namespace-Zugriff konfigurieren
  • Kubernetes-Ressourcenkontingente für das faire Aufteilen von Ressourcen auf mehrere Namespaces konfigurieren
  • Monitoring-Dashboards ansehen und konfigurieren, um die Ressourcennutzung nach Namespace zu prüfen
  • Bericht zur GKE-Nutzungsmessung in Looker Studio erstellen, der detaillierte Messwerte der Ressourcennutzung nach Namespace enthält

Einrichtung und Anforderungen

Vor dem Klick auf „Start Lab“ (Lab starten)

Lesen Sie diese Anleitung. Labs sind zeitlich begrenzt und können nicht pausiert werden. Der Timer beginnt zu laufen, wenn Sie auf Lab starten klicken, und zeigt Ihnen, wie lange die Ressourcen für das Lab verfügbar sind.

In diesem praxisorientierten Lab können Sie die Lab-Aktivitäten in einer echten Cloud-Umgebung selbst durchführen – nicht in einer Simulations- oder Demo-Umgebung. Dazu erhalten Sie neue, temporäre Anmeldedaten, mit denen Sie für die Dauer des Labs auf Google Cloud zugreifen können.

Für dieses Lab benötigen Sie Folgendes:

  • Einen Standardbrowser (empfohlen wird Chrome)
Hinweis: Nutzen Sie den privaten oder Inkognitomodus, um dieses Lab durchzuführen. So wird verhindert, dass es zu Konflikten zwischen Ihrem persönlichen Konto und dem Teilnehmerkonto kommt und zusätzliche Gebühren für Ihr persönliches Konto erhoben werden.
  • Zeit für die Durchführung des Labs – denken Sie daran, dass Sie ein begonnenes Lab nicht unterbrechen können.
Hinweis: Wenn Sie über ein persönliches Google Cloud-Konto oder -Projekt verfügen, verwenden Sie es nicht für dieses Lab. So werden zusätzliche Kosten für Ihr Konto vermieden.

Lab starten und bei der Google Cloud Console anmelden

  1. Klicken Sie auf Lab starten. Wenn Sie für das Lab bezahlen müssen, wird ein Pop-up-Fenster geöffnet, in dem Sie Ihre Zahlungsmethode auswählen können. Auf der linken Seite befindet sich der Bereich Details zum Lab mit diesen Informationen:

    • Schaltfläche Google Cloud Console öffnen
    • Restzeit
    • Temporäre Anmeldedaten für das Lab
    • Ggf. weitere Informationen für dieses Lab
  2. Klicken Sie auf Google Cloud Console öffnen (oder klicken Sie mit der rechten Maustaste und wählen Sie Link in Inkognitofenster öffnen aus, wenn Sie Chrome verwenden).

    Im Lab werden Ressourcen aktiviert. Anschließend wird ein weiterer Tab mit der Seite Anmelden geöffnet.

    Tipp: Ordnen Sie die Tabs nebeneinander in separaten Fenstern an.

    Hinweis: Wird das Dialogfeld Konto auswählen angezeigt, klicken Sie auf Anderes Konto verwenden.
  3. Kopieren Sie bei Bedarf den folgenden Nutzernamen und fügen Sie ihn in das Dialogfeld Anmelden ein.

    {{{user_0.username | "Username"}}}

    Sie finden den Nutzernamen auch im Bereich Details zum Lab.

  4. Klicken Sie auf Weiter.

  5. Kopieren Sie das folgende Passwort und fügen Sie es in das Dialogfeld Willkommen ein.

    {{{user_0.password | "Password"}}}

    Sie finden das Passwort auch im Bereich Details zum Lab.

  6. Klicken Sie auf Weiter.

    Wichtig: Sie müssen die für das Lab bereitgestellten Anmeldedaten verwenden. Nutzen Sie nicht die Anmeldedaten Ihres Google Cloud-Kontos. Hinweis: Wenn Sie Ihr eigenes Google Cloud-Konto für dieses Lab nutzen, können zusätzliche Kosten anfallen.
  7. Klicken Sie sich durch die nachfolgenden Seiten:

    • Akzeptieren Sie die Nutzungsbedingungen.
    • Fügen Sie keine Wiederherstellungsoptionen oder Zwei-Faktor-Authentifizierung hinzu (da dies nur ein temporäres Konto ist).
    • Melden Sie sich nicht für kostenlose Testversionen an.

Nach wenigen Augenblicken wird die Google Cloud Console in diesem Tab geöffnet.

Hinweis: Wenn Sie sich eine Liste der Google Cloud-Produkte und ‑Dienste ansehen möchten, klicken Sie oben links auf das Navigationsmenü. Symbol für Navigationsmenü

Vorbereitung

Nachdem Sie auf Lab starten geklickt haben, wird die Meldung Provisioning Lab Resources in Blau mit einem Hinweis zur geschätzten Restdauer angezeigt. In dieser Zeit wird die Umgebung erstellt und konfiguriert, die Sie verwenden werden, um das Verwalten eines mandantenfähigen Clusters zu testen. Innerhalb von etwa fünf Minuten wird ein Cluster erstellt, BigQuery-Datasets werden kopiert und Dienstkonten, die die Teams darstellen, werden angelegt.

Sobald dies erledigt ist, wird die Meldung nicht mehr angezeigt.

Warten Sie, bis die Vorbereitungen abgeschlossen sind und die Meldung ausgeblendet wird, bevor Sie mit dem Lab beginnen.

Cloud Shell aktivieren

Cloud Shell ist eine virtuelle Maschine, auf der Entwicklertools installiert sind. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud. Mit Cloud Shell erhalten Sie Befehlszeilenzugriff auf Ihre Google Cloud-Ressourcen.

  1. Klicken Sie oben in der Google Cloud Console auf Cloud Shell aktivieren Symbol für Cloud Shell-Aktivierung.

Wenn Sie verbunden sind, sind Sie bereits authentifiziert und das Projekt ist auf Ihre Project_ID, eingestellt. Die Ausgabe enthält eine Zeile, in der die Project_ID für diese Sitzung angegeben ist:

Ihr Cloud-Projekt in dieser Sitzung ist festgelegt als {{{project_0.project_id | "PROJECT_ID"}}}

gcloud ist das Befehlszeilentool für Google Cloud. Das Tool ist in Cloud Shell vorinstalliert und unterstützt die Tab-Vervollständigung.

  1. (Optional) Sie können den aktiven Kontonamen mit diesem Befehl auflisten:
gcloud auth list
  1. Klicken Sie auf Autorisieren.

Ausgabe:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} Um das aktive Konto festzulegen, führen Sie diesen Befehl aus: $ gcloud config set account `ACCOUNT`
  1. (Optional) Sie können die Projekt-ID mit diesem Befehl auflisten:
gcloud config list project

Ausgabe:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Hinweis: Die vollständige Dokumentation für gcloud finden Sie in Google Cloud in der Übersicht zur gcloud CLI.

Aufgabe 1: Benötigte Dateien herunterladen

  1. In diesem Lab benötigen Sie für einige Schritte yaml-Dateien zum Konfigurieren des Kubernetes-Clusters. Laden Sie diese Dateien in Cloud Shell aus dem entsprechenden Cloud Storage-Bucket herunter:
gsutil -m cp -r gs://spls/gsp766/gke-qwiklab ~
  1. Ändern Sie das aktuelle Arbeitsverzeichnis in gke-qwiklab:
cd ~/gke-qwiklab

Aufgabe 2: Namespaces ansehen und erstellen

  • Führen Sie den folgenden Befehl aus, um eine Standard-Computing-Zone einzurichten und den bereitgestellten Cluster multi-tenant-cluster zu authentifizieren:
export ZONE={{{project_0.default_zone|placeholder}}} gcloud config set compute/zone ${ZONE} && gcloud container clusters get-credentials multi-tenant-cluster

Standard-Namespaces

Kubernetes-Cluster haben standardmäßig vier System-Namespaces.

  1. Mit dem folgenden Befehl können Sie eine vollständige Liste der Namespaces des aktuellen Clusters abrufen:
kubectl get namespace

Die Ausgabe sollte in etwa so aussehen:

NAME STATUS AGE default Active 5m kube-node-lease Active 5m kube-public Active 5m kube-system Active 5m
  • default: Der Standard-Namespace, der verwendet wird, wenn kein anderer Namespace angegeben ist.
  • kube-node-lease: Dient der Verwaltung der Freigabeobjekte, die mit den Heartbeats der Knoten des Clusters verknüpft sind.
  • kube-public: Wird für Ressourcen verwendet, die für alle Nutzer im gesamten Cluster sicht‑ oder lesbar sein müssen.
  • kube-system: Wird für vom Kubernetes-System erstellte Komponenten verwendet.

Nicht alles gehört einem Namespace an. Knoten, nichtflüchtige Volumes und Namespaces selbst gehören beispielsweise zu keinem Namespace.

  1. Führen Sie den folgenden Befehl aus, um eine Liste aller Namespace-Ressourcen abzurufen:
kubectl api-resources --namespaced=true

Namespace-Ressourcen müssen bei der Erstellung mit einem Namespace verknüpft werden. Dazu verwenden Sie das Flag --namespace oder geben den Namespace im Metadatenfeld der yaml-Datei an.

  1. Sie können den Namespace aber auch über einen kubectl get-Unterbefehl zum Anzeigen der Ressourcen eines Namespace angeben. Beispiel:
kubectl get services --namespace=kube-system

Dadurch erhalten Sie eine Liste aller Dienste im Namespace kube-system.

Neue Namespaces erstellen

Hinweis: Verwenden Sie für zusätzliche Namespaces nicht das Präfix „kube“, da dieses für System-Namespaces reserviert ist.
  1. Erstellen Sie zwei Namespaces für team-a und team-b:
kubectl create namespace team-a && \ kubectl create namespace team-b

Die Ausgabe von kubectl get namespace sollte jetzt die beiden neuen Namespaces enthalten:

namespace/team-a created namespace/team-b created

Durch Angabe des Tags --namespace können Sie im vorhandenen Namespace Clusterressourcen erstellen. Namen von Ressourcen wie Deployments oder Pods müssen nur im jeweiligen Namespace einmalig sein.

  1. Führen Sie beispielsweise den folgenden Befehl aus, um einen Pod in den Namespaces „team-a“ und „team-b“ mit demselben Namen bereitzustellen:
kubectl run app-server --image=centos --namespace=team-a -- sleep infinity && \ kubectl run app-server --image=centos --namespace=team-b -- sleep infinity
  1. Der Befehl kubectl get pods -A zeigt Ihnen, dass es zwei Pods mit dem Namen app-server gibt (einen in jedem Team-Namespace):
kubectl get pods -A

Ausgabe:

NAMESPACE NAME READY STATUS RESTARTS AGE kube-system event-exporter-gke-8489df9489-k2blq 2/2 Running 0 3m41s kube-system fluentd-gke-fmt4v 2/2 Running 0 113s kube-system fluentd-gke-n9dvn 2/2 Running 0 79s kube-system fluentd-gke-scaler-cd4d654d7-xj78p 1/1 Running 0 3m37s kube-system gke-metrics-agent-4jvn8 1/1 Running 0 3m33s kube-system gke-metrics-agent-b4vvw 1/1 Running 0 3m27s kube-system kube-dns-7c976ddbdb-gtrct 4/4 Running 0 3m41s kube-system kube-dns-7c976ddbdb-k9bgk 4/4 Running 0 3m kube-system kube-dns-autoscaler-645f7d66cf-jwqh5 1/1 Running 0 3m36s kube-system kube-proxy-gke-new-cluster-default-pool-eb9986d5-tpql 1/1 Running 0 3m26s kube-system kube-proxy-gke-new-cluster-default-pool-eb9986d5-znm6 1/1 Running 0 3m33s kube-system l7-default-backend-678889f899-xvt5t 1/1 Running 0 3m41s kube-system metrics-server-v0.3.6-64655c969-jtl57 2/2 Running 0 3m kube-system prometheus-to-sd-d6dpf 1/1 Running 0 3m27s kube-system prometheus-to-sd-rfdlv 1/1 Running 0 3m33s kube-system stackdriver-metadata-agent-cluster-level-79f9ddf6d6-7ck2w 2/2 Running 0 2m56s team-a app-server 1/1 Running 0 33s team-b app-server 1/1 Running 0 33s

Klicken Sie auf Fortschritt prüfen. Namespaces erstellen

  1. Führen Sie kubectl describe aus, um zu jedem der neu erstellten Pods weitere Details zu sehen. Geben Sie den Namespace mit dem Tag „--namespace“ an:
kubectl describe pod app-server --namespace=team-a
  1. Wenn Sie nur mit den Ressourcen in einem Namespace arbeiten möchten, können Sie diesen einmal im kubectl-Kontext festlegen, anstatt bei jedem Befehl das Flag --namespace zu verwenden:
kubectl config set-context --current --namespace=team-a
  1. Danach werden alle weiteren Befehle auch ohne das Flag --namespace für den angegebenen Namespace ausgeführt:
kubectl describe pod app-server

Im nächsten Abschnitt konfigurieren Sie die rollenbasierte Zugriffssteuerung für die Namespaces, um den Cluster besser zu organisieren.

Aufgabe 3: Zugriffssteuerung in Namespaces verwalten

Der Zugriff auf Namespace-Ressourcen in einem Cluster wird durch das Gewähren von IAM-Rollen, kombiniert mit der in Kubernetes integrierten rollenbasierten Zugriffssteuerung (Role-Based Access Control, RBAC) geregelt. Eine IAM-Rolle gewährt einem Konto Zugriff auf das Projekt, während die RBAC-Berechtigungen detaillierten Zugriff auf die Namespace-Ressourcen (Pods, Deployments, Dienste usw.) eines Clusters gewähren.

IAM-Rollen

Hinweis: Damit Sie IAM-Rollen in einem Projekt zuweisen können, benötigen Sie die Rolle „Project IAM Admin“. Diese ist in Ihrem temporären Qwiklabs-Konto bereits eingerichtet.

Identity and Access Management (IAM) dient dazu, für Kubernetes die Zugriffssteuerung sowie Berechtigungen auf einer höheren Organisations‑ und Projektebene zu verwalten.

In IAM können Nutzern und Dienstkonten verschiedene Rollen zugewiesen werden, die ihre GKE-Zugriffsrechte steuern. Die detaillierten RBAC-Berechtigungen bauen auf dem über IAM gewährten Zugriff auf und können diesen nicht einschränken. Daher sollte die mandantenfähigen Namespace-Clustern zugewiesene IAM-Rolle nur minimalen Zugriff gewähren.

Die folgende Tabelle enthält gängige GKE-IAM-Rollen, die Sie zuweisen können:

Rolle Beschreibung

Kubernetes Engine Admin

Berechtigung zum vollständigen Verwalten von Clustern und deren Kubernetes API-Objekten. Ein Nutzer mit dieser Rolle kann alle Ressourcen in allen Clustern und zugehörigen Namespaces erstellen, bearbeiten und löschen.

Kubernetes Engine Developer

Bietet Zugriff auf Kubernetes API-Objekte in Clustern. Ein Nutzer mit dieser Rolle kann Ressourcen in allen Clustern und zugehörigen Namespaces erstellen, bearbeiten und löschen.

Kubernetes Engine Cluster Admin

Berechtigung zum Verwalten von Clustern. Ein Nutzer mit dieser Rolle kann keine Ressourcen in Clustern oder zugehörigen Namespaces direkt erstellen oder bearbeiten, aber er kann beliebige Cluster erstellen, bearbeiten und löschen.

Kubernetes Engine Viewer

Bietet Lesezugriff auf GKE-Ressourcen. Ein Nutzer mit dieser Rolle hat Lesezugriff auf Namespaces und ihre Ressourcen.

Kubernetes Engine Cluster Viewer

Informationen zum Zugriff auf GKE-Cluster abrufen und auflisten. Diese Rolle ist mindestens erforderlich, um auf Ressourcen in den Namespaces eines Clusters zuzugreifen.

Die meisten dieser Rollen gewähren einen zu umfangreichen Zugriff, der sich mit RBAC nicht einschränken lässt. Die IAM-Rolle Kubernetes Engine Cluster Viewer bietet jedoch gerade ausreichende Berechtigungen, um auf den Cluster und die Namespace-Ressourcen zuzugreifen.

Ihr Lab-Projekt umfasst ein Dienstkonto, das für einen Entwickler steht, der den Namespace team-a verwendet.

  • Gewähren Sie dem Konto die Rolle „Kubernetes Engine Cluster Viewer“, indem Sie den folgenden Befehl ausführen:
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member=serviceAccount:team-a-dev@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com \ --role=roles/container.clusterViewer

Kubernetes RBAC

In einem Cluster wird der Zugriff auf jeden Ressourcentyp (Pods, Dienste, Deployments usw.) entweder durch eine Rolle oder eine Clusterrolle festgelegt. Nur Rollen dürfen auf einen Namespace beschränkt werden. Eine Rolle legt die Ressourcen und die für jede Ressource zulässigen Aktionen fest, während eine Rollenbindung angibt, welchen Nutzerkonten oder Gruppen der Zugriff zugewiesen werden soll.

Legen Sie den Ressourcentyp sowie die Verben fest, die angeben, welche Art von Aktion zulässig ist, um eine Rolle im aktuellen Namespace zu erstellen.

  1. Rollen mit nur einer Regel können mit kubectl create erstellt werden:
kubectl create role pod-reader \ --resource=pods --verb=watch --verb=get --verb=list

Zum Erstellen von Rollen mit mehreren Regeln benötigen Sie eine yaml-Datei. Ein Beispiel finden Sie in den zu Beginn des Labs heruntergeladenen Dateien.

  1. Sehen Sie sich die yaml-Datei an:
cat developer-role.yaml

Beispielausgabe:

apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: team-a name: developer rules: - apiGroups: [""] resources: ["pods", "services", "serviceaccounts"] verbs: ["update", "create", "delete", "get", "watch", "list"] - apiGroups:["apps"] resources: ["deployments"] verbs: ["update", "create", "delete", "get", "watch", "list"]
  1. Weisen Sie die obige Rolle zu:
kubectl create -f developer-role.yaml
  1. Erstellen Sie eine Rollenbindung zwischen dem Dienstkonto „team-a-developers“ und der Rolle „developer“:
kubectl create rolebinding team-a-developers \ --role=developer --user=team-a-dev@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

Rollenbindung testen

  1. Laden Sie die Dienstkontoschlüssel herunter, die nötig sind, um die Identität des Dienstkontos zu übernehmen:
gcloud iam service-accounts keys create /tmp/key.json --iam-account team-a-dev@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

Klicken Sie auf Fortschritt prüfen. Zugriffssteuerung in Namespaces verwalten

  1. Klicken Sie in Cloud Shell auf das Symbol +, um einen neuen Tab im Terminal zu öffnen.

  2. Führen Sie den folgenden Befehl aus, um das Dienstkonto zu aktivieren. So können Sie die Befehle als dieses Konto ausführen:

gcloud auth activate-service-account --key-file=/tmp/key.json
  1. Rufen Sie die Anmeldedaten für den Cluster als dieses Dienstkonto ab:
export ZONE={{{project_0.default_zone|placeholder}}} gcloud container clusters get-credentials multi-tenant-cluster --zone ${ZONE} --project ${GOOGLE_CLOUD_PROJECT}
  1. Wie Sie sehen, können Sie als „team-a-dev“ Pods im Namespace „team-a“ auflisten:
kubectl get pods --namespace=team-a

Ausgabe:

NAME READY STATUS RESTARTS AGE app-server 1/1 Running 0 6d
  1. Pods im Namespace „team-b“ können Sie dagegen nicht auflisten:
kubectl get pods --namespace=team-b

Ausgabe:

Error from server (Forbidden): pods is forbidden: User "team-a-dev@a-gke-project.iam.gserviceaccount.com" cannot list resource "pods" in API group "" in the namespace "team-b": requires one of ["container.pods.list"] permission(s).
  1. Kehren Sie zum ersten Cloud Shell-Tab zurück oder öffnen Sie einen neuen.

  2. Aktualisieren Sie die Clusteranmeldedaten und setzen Sie den Kontext auf den Namespace „team-a“ zurück:

export ZONE={{{project_0.default_zone|placeholder}}} gcloud container clusters get-credentials multi-tenant-cluster --zone ${ZONE} --project ${GOOGLE_CLOUD_PROJECT}

Aufgabe 4: Ressourcenkontingente festlegen

Wenn ein Cluster in einer mandantenfähigen Umgebung freigegeben wird, ist es wichtig sicherzustellen, dass Nutzer nicht mehr als den ihnen zustehenden Anteil der Clusterressourcen verwenden können. Über ein Ressourcenkontingentobjekt (ResourceQuota) können Sie Einschränkungen definieren, um den Ressourcenverbrauch in einem Namespace zu beschränken. Mit einem Ressourcenkontingent können Sie ein Limit für die Objektanzahl (Pods, Dienste, zustandsorientierte Sets usw.), die Gesamtsumme der Speicherressourcen (Anforderungen nichtflüchtiger Volumes, sitzungsspezifischer Speicher, Speicherklassen) oder die Gesamtsumme der Computing-Ressourcen (CPU und Arbeitsspeicher) festlegen.

  1. Mit dem folgenden Befehl beschränken Sie beispielsweise die Anzahl der in Namespace team-a zulässigen Pods auf zwei und die Anzahl der Load Balancer auf einen:
kubectl create quota test-quota \ --hard=count/pods=2,count/services.loadbalancers=1 --namespace=team-a
  1. Erstellen Sie einen zweiten Pod im Namespace „team-a“:
kubectl run app-server-2 --image=centos --namespace=team-a -- sleep infinity
  1. Versuchen Sie nun, einen dritten Pod zu erstellen:
kubectl run app-server-3 --image=centos --namespace=team-a -- sleep infinity

Ihnen sollte der folgende Fehler angezeigt werden:

Error from server (Forbidden): pods "app-server-3" is forbidden: exceeded quota: test-quota, requested: count/pods=1, used: count/pods=2, limited: count/pods=2
  1. Mit kubectl describe können Sie die Details des Ressourcenkontingents abrufen:
kubectl describe quota test-quota --namespace=team-a

Ausgabe:

Name: test-quota Namespace: team-a Resource Used Hard -------- ---- ---- count/pods 2 2 count/services.loadbalancers 0 1

Hier sehen Sie eine Liste der durch das Ressourcenkontingent eingeschränkten Ressourcen sowie das konfigurierte feste Limit und die aktuell genutzte Menge.

  1. Führen Sie den folgenden Befehl aus, um test-quota auf ein Limit von sechs Pods zu ändern:
export KUBE_EDITOR="nano" kubectl edit quota test-quota --namespace=team-a

Sie können die yaml-Datei bearbeiten, die kubectl zum Ändern des Kontingents verwendet. Das feste Kontingent ist der Wert von count/pods unter spec.

  1. Ändern Sie den Wert von count/pods unter „spec“ in 6:
apiVersion: v1 kind: ResourceQuota metadata: creationTimestamp: "2020-10-21T14:12:07Z" name: test-quota namespace: team-a resourceVersion: "5325601" selfLink: /api/v1/namespaces/team-a/resourcequotas/test-quota uid: a4766300-29c4-4433-ba24-ad10ebda3e9c spec: hard: count/pods: "6" count/services.loadbalancers: "1" status: hard: count/pods: "5" count/services.loadbalancers: "1" used: count/pods: "2"
  1. Drücken Sie zum Speichern und Beenden Strg + X, Y und die Eingabetaste.

Die Ausgabe sollte nun das geänderte Kontingent enthalten:

kubectl describe quota test-quota --namespace=team-a

Ausgabe:

Name: test-quota Namespace: team-a Resource Used Hard -------- ---- ---- count/pods 2 6 count/services.loadbalancers 0 1

CPU‑ und Arbeitsspeicherkontingente

Bei CPU und Arbeitsspeicher können Sie ein Kontingent für die Summe der Anfragen (Wert, den ein Container garantiert erhält) oder die Summe der Limits (Wert, den der Container auf keinen Fall überschreiten darf) festlegen.

In diesem Lab hat der Cluster vier Maschinen vom Typ „e2-standard-2“ mit jeweils zwei Kernen und 8 GB Arbeitsspeicher. Ihnen wurde eine beispielhafte YAML-Datei für das Ressourcenkontingent des Clusters bereitgestellt:

cpu-mem-quota.yaml

apiVersion: v1 kind: ResourceQuota metadata: name: cpu-mem-quota namespace: team-a spec: hard: limits.cpu: "4" limits.memory: "12Gi" requests.cpu: "2" requests.memory: "8Gi"
  1. Wenden Sie die Dateikonfiguration an:
Hinweis: Achten Sie darauf, ob Sie sich immer noch im Verzeichnis gke-qwiklab befinden. kubectl create -f cpu-mem-quota.yaml

Durch dieses Kontingent wird die Summe der CPU‑ und Arbeitsspeicheranfragen aller Pods auf 2 CPUs und 8 GiB beschränkt und das Limit liegt bei 4 CPUs bzw. 12 GiB.

Hinweis: Wenn ein Ressourcenkontingent für CPUs oder Arbeitsspeicher in einem Namespace besteht, muss für jeden weiteren Container, der in diesem Namespace erstellt wird, ein eigenes CPU‑ und Arbeitsspeicherlimit definiert werden. Dies erfolgt bei der Erstellung oder durch einen Standardwert, der im Namespace als „LimitRange“ zugewiesen wird.
  1. Erstellen Sie mit cpu-mem-demo-pod.yaml einen neuen Pod, um das CPU‑ und Arbeitsspeicherkontingent zu veranschaulichen:

cpu-mem-demo-pod.yaml:

apiVersion: v1 kind: Pod metadata: name: cpu-mem-demo namespace: team-a spec: containers: - name: cpu-mem-demo-ctr image: nginx resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "400m" memory: "512Mi"
  1. Wenden Sie die Dateikonfiguration an:
kubectl create -f cpu-mem-demo-pod.yaml --namespace=team-a
  1. Nachdem dieser Pod erstellt wurde, führen Sie den folgenden Befehl aus, um zu sehen, wie sich die CPU‑ und Arbeitsspeicheranfragen und ‑limits im Kontingent widerspiegeln:
kubectl describe quota cpu-mem-quota --namespace=team-a

Ausgabe:

Name: cpu-mem-quota Namespace: team-a Resource Used Hard -------- ---- ---- limits.cpu 400m 4 limits.memory 512Mi 12Gi requests.cpu 100m 2 requests.memory 128Mi 8Gi

Klicken Sie auf Fortschritt prüfen. Ressourcenkontingente festlegen

Aufgabe 5: GKE-Monitoring und -Nutzungsmessung kennenlernen

Bei den meisten mandantenfähigen Clustern ist die Wahrscheinlichkeit hoch, dass sich die Arbeitslasten und Ressourcenanforderungen der einzelnen Mandanten mit der Zeit ändern und die Ressourcenkontingente angepasst werden müssen. Durch das Monitoring können Sie sich einen allgemeinen Überblick über die Ressourcen verschaffen, die die Namespaces verwenden.

Die GKE-Nutzungsmessung liefert Ihnen detailliertere Informationen über diese Ressourcennutzung sowie die Kosten jedes Mandanten.

Monitoring-Dashboard

  1. Maximieren Sie in der Cloud Console oben links auf der Seite das Navigationsmenü und klicken Sie darin auf Vorgänge > Monitoring.

Das Erstellen des Arbeitsbereichs für Ihr Projekt dauert eine Minute.

  1. Wählen Sie dann auf der Seite „Übersicht“ aus dem linken Menü die Option Dashboards aus:

Hervorgehobene Option „Dashboards“ auf der Seite „Übersicht“.

  1. Klicken Sie auf der Seite Dashboard-Übersicht auf GKE.

Das GKE-Dashboard enthält eine Reihe von Tabellen zu CPU, Arbeitsspeicher und Laufwerksauslastung, zusammengefasst nach mehreren Ressourcen.

In der Tabelle „Namespaces“ finden Sie beispielsweise die Auslastung für alle Namespaces Ihres Clusters:

Mehrere Namen in der Tabelle „Namespaces“, die Informationen wie Benachrichtigungen und Fehlerlogs enthält.

Die Tabelle „Arbeitslasten“ enthält die Nutzungsdaten für die auf dem Cluster ausgeführten Arbeitslasten.

  1. Klicken Sie auf Alle ansehen.

  2. Wählen Sie im Feld Filter hinzufügen die Option Namespaces > team-a aus.

  3. Klicken Sie dann auf Anwenden.

Dadurch werden die Arbeitslasten gefiltert und nur die angezeigt, die im Namespace „team-a“ ausgeführt werden:

Metrics Explorer

  1. Klicken Sie im linken Bereich auf Metrics Explorer.

  2. Klicken Sie im Feld „Messwert auswählen“ auf das Drop-down-Menü Messwert.

  3. Geben Sie unter „Nach Ressourcen‑ oder Messwertnamen filtern“ Kubernetes-Container ein.

  4. Klicken Sie auf Kubernetes-Container > Container.

  5. Wählen Sie CPU-Nutzungszeit aus.

  6. Klicken Sie auf Anwenden.

Hinweis: Wenn Sie in das Messwertfeld cp eingeben, sollte Ihnen „CPU-Nutzungszeit“ als Option im Drop-down-Menü angezeigt werden.
  1. Klicken Sie im Filterbereich auf Filter hinzufügen, um den Namespace „kube-system“ auszuschließen.

  2. Wählen Sie namespace_name als Label aus.

  3. Wählen Sie != (does not equal) als Vergleich und kube-system als Wert aus.

  4. Wählen Sie im Drop-down-Menü Aggregation die Option Summe und im Drop-down-Menü „von“ die Option namespace_name aus. Klicken Sie dann auf Ok.

    Das angezeigte Diagramm enthält die Container-CPU-Nutzungszeit nach Namespace:

Der Metrics Explorer mit einem Diagramm, in dem die Nutzungszeit nach Namespace-Name und Rate angezeigt wird.

GKE-Nutzungsmessung

Im Rahmen der GKE-Nutzungsmessung können Sie die Nutzungs‑ und Verbrauchsdaten Ihrer GKE-Clusterressourcen in ein BigQuery-Dataset exportieren und mit Looker Studio visualisieren. So können Sie sich die Ressourcennutzung detaillierter ansehen. Die Nutzungsmessung erlaubt es Ihnen, fundiertere Entscheidungen über Ressourcenkontingente und die effiziente Clusterkonfiguration zu treffen.

Hinweis: Da es mehrere Stunden dauern kann, bis die GKE-Messwertdaten in BigQuery geladen sind, beinhaltet das Lab-Projekt zu Demonstrationszwecken BigQuery-Datasets mit simulierten Ressourcennutzungs‑ und Abrechnungsdaten.

Die folgenden beiden Datasets wurden Ihrem Projekt hinzugefügt:

cluster_dataset: Dieses Dataset wird vor dem Aktivieren der GKE-Nutzungsmessung im Cluster manuell erstellt. Es enthält zwei von der GKE generierte Tabellen („gke_cluster_resource_consumption“ und „gke_cluster_resource_usage“) und wird kontinuierlich mit neuen Messwerten zur Clusternutzung aktualisiert.

billing_dataset: Dieses Dataset wird vor dem Aktivieren des BigQuery-Exports für die Abrechnung manuell erstellt. Es enthält die Tabelle „gcp_billing_export_v1_xxxx“ und wird jeden Tag mit den täglichen Kosten des Projekts aktualisiert.

  • Führen Sie den folgenden Befehl aus, um die GKE-Nutzungsmessung im Cluster zu aktivieren und das Dataset cluster_dataset anzugeben:
export ZONE={{{project_0.default_zone|placeholder}}} gcloud container clusters \ update multi-tenant-cluster --zone ${ZONE} \ --resource-usage-bigquery-dataset cluster_dataset

Tabelle mit GKE-Kostenaufschlüsselung erstellen

Die Tabelle „cost_breakdown“ kann aus den Abrechnungs‑ und Ressourcennutzungstabellen in Ihrem Projekt erstellt werden. Sie erstellen diese Tabelle im Cluster-Dataset mithilfe der Datei usage_metering_query_template.sql. Die Vorlage finden Sie unter Grundlagen der Nutzung von Clusterressourcen.

Zuerst definieren Sie in Cloud Shell einige Umgebungsvariablen.

  1. Legen Sie den Pfad der bereitgestellten Abrechnungstabelle, des bereitgestellten Datasets für die Nutzungsmessung sowie einen Namen für die Kostenaufschlüsselungstabelle fest:
export GCP_BILLING_EXPORT_TABLE_FULL_PATH=${GOOGLE_CLOUD_PROJECT}.billing_dataset.gcp_billing_export_v1_xxxx export USAGE_METERING_DATASET_ID=cluster_dataset export COST_BREAKDOWN_TABLE_ID=usage_metering_cost_breakdown
  1. Legen Sie als Nächstes den Pfad der Abfragevorlage für die Nutzungsmessung, die Sie zu Beginn des Labs heruntergeladen haben, eine Ausgabedatei für die Nutzungsmessungsabfrage, die erzeugt wird, sowie ein Startdatum für die Daten fest. Die Daten reichen bis zum 26.10.2020 zurück:
export USAGE_METERING_QUERY_TEMPLATE=~/gke-qwiklab/usage_metering_query_template.sql export USAGE_METERING_QUERY=cost_breakdown_query.sql export USAGE_METERING_START_DATE=2020-10-26
  1. Erstellen Sie nun mit diesen Umgebungsvariablen und der Abfragevorlage die Nutzungsmessungsabfrage:
sed \ -e "s/\${fullGCPBillingExportTableID}/$GCP_BILLING_EXPORT_TABLE_FULL_PATH/" \ -e "s/\${projectID}/$GOOGLE_CLOUD_PROJECT/" \ -e "s/\${datasetID}/$USAGE_METERING_DATASET_ID/" \ -e "s/\${startDate}/$USAGE_METERING_START_DATE/" \ "$USAGE_METERING_QUERY_TEMPLATE" \ > "$USAGE_METERING_QUERY"
  1. Führen Sie den folgenden Befehl aus, um anhand der Abfrage, die Sie im vorherigen Schritt erstellt haben, die Kostenaufschlüsselungstabelle einzurichten:
bq query \ --project_id=$GOOGLE_CLOUD_PROJECT \ --use_legacy_sql=false \ --destination_table=$USAGE_METERING_DATASET_ID.$COST_BREAKDOWN_TABLE_ID \ --schedule='every 24 hours' \ --display_name="GKE Usage Metering Cost Breakdown Scheduled Query" \ --replace=true \ "$(cat $USAGE_METERING_QUERY)"
  1. Die Datenübertragung sollte einen Autorisierungslink bereitstellen. Klicken Sie darauf, melden Sie sich mit Ihrem Teilnehmerkonto an, folgen Sie der Anleitung und fügen Sie version_info in Cloud Shell ein.

Danach sollte Ihnen die Meldung angezeigt werden, dass die Übertragungskonfiguration erfolgreich erstellt wurde.

Datenquelle in Looker Studio erstellen

  1. Öffnen Sie die Looker Studio-Seite „Datenquellen“.

  2. Klicken Sie oben links auf Erstellen > Datenquelle, um eine neue Datenquelle hinzuzufügen.

Ihnen wird das Fenster Kontoeinrichtung abschließen angezeigt.

  1. Klicken Sie auf das Kästchen zum Akzeptieren der Nutzungsbedingungen und anschließend auf Weiter.

  2. Wählen Sie in Schritt 2 Bitte angeben, welche Benachrichtigungen Sie erhalten möchten jeweils die Option Nein aus, da dies ein temporäres Lab/Konto ist.

  3. Klicken Sie auf Weiter.

Ihnen wird eine Liste der Google-Connectors angezeigt, die von Looker Studio unterstützt werden.

  1. Wählen Sie BigQuery aus.

Der BigQuery-Google-Connector und das Symbol „Dreipunkt-Menü“ werden angezeigt.

  1. Klicken Sie auf Autorisieren, um Looker Studio Zugriff auf Ihr BigQuery-Projekt zu gewähren.

  2. Benennen Sie die Datenquelle oben links auf der Seite von Unbenannte Datenquelle in GKE-Nutzung um.

  3. Wählen Sie in der ersten Spalte Benutzerdefinierte Abfrage aus.

  4. Wählen Sie in der Projektspalte Ihre Projekt-ID aus.

  5. Geben Sie die folgende Abfrage in das Feld „Benutzerdefinierte Abfrage“ ein und ersetzen Sie [PROJECT-ID] durch die Qwiklabs-Projekt-ID:

SELECT * FROM `[PROJECT-ID].cluster_dataset.usage_metering_cost_breakdown`
  1. Klicken Sie auf Verbinden.

Klicken Sie auf Fortschritt prüfen. GKE-Monitoring und -Nutzungsmessung kennenlernen

  1. Klicken Sie nun rechts oben.

Nachdem Sie die Datenquelle hinzugefügt haben, können Sie jetzt einen Bericht damit erstellen.

  1. Klicken Sie oben auf der Seite „Datenquelle“ auf Bericht erstellen.

Hervorgehobene Schaltfläche „Bericht erstellen“ auf der Seite „Datenquelle“ zur GKE-Nutzungsmessung.

Hinweis: Falls Ihnen hier ein Fehler angezeigt wird, ist der Datenübertragungsjob möglicherweise noch nicht abgeschlossen. Warten Sie eine Minute und versuchen Sie es dann noch einmal.

Wenn Sie aus einer Datenquelle einen neuen Bericht erstellen, werden Sie aufgefordert, Daten zum Bericht hinzuzufügen.

  1. Klicken Sie auf ZUM BERICHT HINZUFÜGEN.

Looker Studio-Bericht erstellen

In diesem Bericht können Sie die Nutzungsmesswerte aus der Datenquelle basierend auf der BigQuery-Tabelle visualisieren.

Sie beginnen mit einer einfachen Tabelle:

Zweispaltige Tabelle mit zwei Datenzeilen unter den Spaltenüberschriften „cluster_location“ und „Record Count“.

Sie konfigurieren die Tabelle so, dass sie eine Kostenaufschlüsselung nach Namespace zeigt. Wenn die Tabelle markiert ist, sehen Sie im Bereich rechts daneben die zugehörigen Daten.

  1. Ändern Sie in diesem Bereich Folgendes:
  • Zeitraumdimension: usage_start_time
  • Dimension: namespace
  • Messwert: cost

Behalten Sie in allen anderen Feldern die Standardwerte bei.

Mithilfe eines Filters können Sie die Tabelle auf Namespace-Ressourcen beschränken.

  1. Klicken Sie im Datenbereich im Abschnitt „Filter“ auf Filter hinzufügen. Erstellen Sie einen Filter, durch den Ressourcen, die nicht einem Namespace zugewiesen sind, ausgeschlossen werden:

Auf „Ausschließen“ gesetzte Filteroption, wobei „Namespace“ ausgewählt wurde.

  1. Klicken Sie auf Speichern.

  2. Klicken Sie noch einmal auf Filter hinzufügen und Filter erstellen, um einen zweiten Filter zum Beschränken der Daten auf Anfragen zu definieren:

Auf „Einschließen“ gesetzte Filteroption, wobei „Typ“ ausgewählt wurde.

  1. Klicken Sie auf Speichern, um den Filter anzuwenden. Die Tabelle sollte dann in etwa so aussehen:

Zweispaltige Tabelle mit vier Datenzeilen unter den Spaltenüberschriften „namespace“ und „cost“.

Als Nächstes fügen Sie dem Bericht ein Kreisdiagramm hinzu, das die Kostenaufschlüsselung nach Namespace zeigt.

  1. Klicken Sie mit der rechten Maustaste auf die Tabelle, die Sie erstellt haben, und wählen Sie Duplizieren aus.

  2. Ziehen Sie das duplizierte Tabellenobjekt an eine beliebige Stelle in Ihrem Bericht.

  3. Klicken Sie nun auf die Überschrift des Konfigurationsbereichs:

Kategorie „Tabelle“ im Abschnitt „Diagramm“ des Konfigurationsbereichs hervorgehoben.

  1. Klicken Sie auf das Symbol Kreisdiagramm:

Mehrere Kacheln mit unterschiedlichen Diagrammtypen, Kreisdiagramm hervorgehoben.

Das Kreisdiagramm sieht so aus:

Vier Zeilen mit Tabellendaten als Kreisdiagramm dargestellt.

Als Nächstes fügen Sie ein Ringdiagramm hinzu, das die Kostenaufschlüsselung nach Ressourcentyp zeigt.

  1. Klicken Sie oben in der Symbolleiste auf Diagramm hinzufügen und wählen Sie 23497d0573f8232a.png aus, um ein Ringdiagramm zu erstellen.

  2. Ziehen Sie das Diagramm an eine beliebige Stelle in Ihrem Bericht und konfigurieren Sie es so:

  • Zeitraumdimension: usage_start_time
  • Dimension: resource_name
  • Messwert: cost
  1. Klicken Sie auf Filter hinzufügen und wählen Sie die beiden Filter aus, die Sie auf das vorherige Diagramm angewendet haben. Das Ringdiagramm sieht so aus:

Ringdiagramm, das die beiden verbleibenden Datenzeilen nach Anwendung der Filter zeigt.

  1. Klicken Sie oben in der Symbolleiste auf Steuerelement hinzufügen und wählen Sie Drop-down-Liste aus, um eine Aufschlüsselung nach Namespace hinzuzufügen.

  2. Ziehen Sie sie neben das Ringdiagramm und konfigurieren Sie sie so:

  • Zeitraumdimension: usage_start_time
  • Steuerfeld: namespace
  • Messwert: None
  1. Klicken Sie auf Filter hinzufügen.

  2. Wählen Sie Nicht zugewiesen (Namespace-Filter) aus der Liste aus.

  3. Konfigurieren Sie das Steuerelement so, dass es nur für das Ringdiagramm gilt. Markieren Sie dazu das Steuerungsobjekt und das Ringdiagramm mit dem Auswahlcursor, um ein Rechteck um die beiden Objekte zu ziehen.

  4. Klicken Sie mit der rechten Maustaste und wählen Sie Gruppieren aus, um sie zu einer Gruppe zusammenzufassen:

Rechteck um die Objekte und hervorgehobene Option „Gruppieren“ im Kontextmenü

  1. Klicken Sie oben in der Symbolleiste auf Ansehen, um sich eine Vorschau des Berichts anzusehen.

Im Ansichtsmodus können Sie die Darstellung des Ringdiagramms auf einen bestimmten Namespace festlegen:

Dreispaltige Tabelle neben zwei Diagrammen, die unterschiedliche Daten enthalten.

  1. Klicken Sie oben auf der Seite im Menü Teilen auf Bericht herunterladen, um eine Kopie des vollständigen Berichts als PDF-Datei herunterzuladen.

Das wars! Sie haben das Lab erfolgreich abgeschlossen.

Mithilfe von Namespaces können Sie Cluster mandantenfähig konfigurieren. So minimieren Sie das Risiko einer Unterauslastung von Ressourcen sowie eine übermäßige Zunahme der Cluster und vermeiden gleichzeitig zusätzliche Kosten. Durch das Monitoring und die GKE-Nutzungsmessung können Sie außerdem die Ressourcenauslastung nach Namespace visualisieren, um fundiertere Entscheidungen über Ressourcenkontingente und die Clusterkonfiguration zu treffen.

Weitere Informationen

Google Cloud-Schulungen und -Zertifizierungen

In unseren Schulungen erfahren Sie alles zum optimalen Einsatz unserer Google Cloud-Technologien und können sich entsprechend zertifizieren lassen. Unsere Kurse vermitteln technische Fähigkeiten und Best Practices, damit Sie möglichst schnell mit Google Cloud loslegen und Ihr Wissen fortlaufend erweitern können. Wir bieten On-Demand-, Präsenz- und virtuelle Schulungen für Anfänger wie Fortgeschrittene an, die Sie individuell in Ihrem eigenen Zeitplan absolvieren können. Mit unseren Zertifizierungen weisen Sie nach, dass Sie Experte im Bereich Google Cloud-Technologien sind.

Anleitung zuletzt am 02. Februar 2024 aktualisiert

Lab zuletzt am 02. Februar 2024 getestet

© 2024 Google LLC. Alle Rechte vorbehalten. Google und das Google-Logo sind Marken von Google LLC. Alle anderen Unternehmens- und Produktnamen können Marken der jeweils mit ihnen verbundenen Unternehmen sein.

Diese Inhalte sind derzeit nicht verfügbar

Bei Verfügbarkeit des Labs benachrichtigen wir Sie per E-Mail

Sehr gut!

Bei Verfügbarkeit kontaktieren wir Sie per E-Mail