GSP766
Ü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 Data 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 Google Cloud-Ressourcen für das Lab verfügbar sind.
In diesem praxisorientierten Lab können Sie die Lab-Aktivitäten in einer echten Cloud-Umgebung 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 (empfohlen), 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: Verwenden Sie für dieses Lab nur das Teilnehmerkonto. Wenn Sie ein anderes Google Cloud-Konto verwenden, fallen dafür möglicherweise Kosten an.
Lab starten und bei der Google Cloud Console anmelden
-
Klicken Sie auf Lab starten. Wenn Sie für das Lab bezahlen müssen, wird ein Dialogfeld 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
-
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.
-
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“.
-
Klicken Sie auf Weiter.
-
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“.
-
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.
-
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 auf Google Cloud-Produkte und ‑Dienste zugreifen möchten, klicken Sie auf das Navigationsmenü oder geben Sie den Namen des Produkts oder Dienstes in das Feld Suchen ein.
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.
-
Klicken Sie oben in der Google Cloud Console auf Cloud Shell aktivieren
.
-
Klicken Sie sich durch die folgenden Fenster:
- Fahren Sie mit dem Informationsfenster zu Cloud Shell fort.
- Autorisieren Sie Cloud Shell, Ihre Anmeldedaten für Google Cloud API-Aufrufe zu verwenden.
Wenn eine Verbindung besteht, sind Sie bereits authentifiziert und das Projekt ist auf 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.
- (Optional) Sie können den aktiven Kontonamen mit diesem Befehl auflisten:
gcloud auth list
- 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`
- (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
-
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 ~
-
Ä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.
-
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.
-
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.
-
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.
-
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.
-
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=quay.io/centos/centos:9 --namespace=team-a --
sleep infinity && \ kubectl run app-server
--image=quay.io/centos/centos:9 --namespace=team-b -- sleep infinity
-
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
-
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
-
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
-
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-Entwickler
|
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.
|
|
Administrator für Kubernetes Engine-Cluster
|
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-Betrachter
|
Bietet Lesezugriff auf GKE-Ressourcen. Ein Nutzer mit dieser Rolle hat
Lesezugriff auf Namespaces und ihre Ressourcen.
|
|
Kubernetes Engine Cluster-Betrachter
|
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-Betrachter 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-Betrachter“,
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.
-
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.
- 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"]
- Weisen Sie die obige Rolle zu:
kubectl create -f developer-role.yaml
-
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
-
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
-
Klicken Sie in Cloud Shell auf das Symbol +, um einen neuen
Tab im Terminal zu öffnen.
-
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
- 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}
-
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
- 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).
-
Kehren Sie zum ersten Cloud Shell-Tab zurück oder öffnen Sie einen neuen.
-
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.
-
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
- Erstellen Sie einen zweiten Pod im Namespace „team-a“:
kubectl run app-server-2 --image=quay.io/centos/centos:9 --namespace=team-a --
sleep infinity
- Versuchen Sie nun, einen dritten Pod zu erstellen:
kubectl run app-server-3 --image=quay.io/centos/centos:9 --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
-
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.
-
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.
-
Ä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"
-
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"
- 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.
-
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"
- Wenden Sie die Dateikonfiguration an:
kubectl create -f cpu-mem-demo-pod.yaml --namespace=team-a
-
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
-
Klicken Sie in der Cloud Console auf das
Navigationsmenü (
) > Alle Produkte ansehen. Klicken Sie im Bereich
Beobachtbarkeit auf Monitoring.
Das Erstellen des Arbeitsbereichs für Ihr Projekt dauert eine Minute.
-
Wählen Sie dann auf der Seite „Übersicht“ aus dem Menü auf der linken Seite
die Option Dashboards aus:
-
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:
Die Tabelle „Arbeitslasten“ enthält die Nutzungsdaten für die auf dem Cluster
ausgeführten Arbeitslasten.
-
Klicken Sie auf Alle ansehen.
-
Wählen Sie im Feld Filter hinzufügen die Option
Namespaces > team-a aus.
-
Klicken Sie dann auf Anwenden.
Dadurch werden die Arbeitslasten gefiltert und nur die angezeigt, die im
Namespace „team-a“ ausgeführt werden:
Metrics Explorer
-
Klicken Sie im linken Bereich auf Metrics Explorer.
-
Klicken Sie im Feld „Messwert auswählen“ auf das Drop-down-Menü
Messwert.
-
Geben Sie unter „Nach Ressourcen‑ oder Messwertnamen filtern“
Kubernetes-Container ein.
-
Klicken Sie auf Kubernetes-Container > Container.
-
Wählen Sie CPU-Nutzungszeit aus.
-
Klicken Sie auf Anwenden.
Hinweis: Wenn Sie in das Messwertfeld
cp eingeben, sollte Ihnen „CPU-Nutzungszeit“ als Option im
Drop-down-Menü angezeigt werden.
-
Klicken Sie im Filterbereich auf Filter hinzufügen, um
den Namespace „kube-system“ auszuschließen.
-
Wählen Sie namespace_name als Label aus.
-
Wählen Sie != (does not equal) als Vergleich und
kube-system als Wert aus.
-
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:
GKE-Nutzungsmessung
Im Rahmen der GKE-Nutzungsmessung können Sie die Nutzungs‑ und Verbrauchsdaten
Ihrer GKE-Clusterressourcen in ein BigQuery-Dataset exportieren und mit Data
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.
-
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
-
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
-
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"
-
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)"
-
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 Data Studio erstellen
-
Öffnen Sie die
Data Studio-Seite „Datenquellen“.
-
Klicken Sie oben links auf Erstellen >
Datenquelle, um eine neue Datenquelle hinzuzufügen.
Ihnen wird das Fenster
Kontoeinrichtung abschließen angezeigt.
-
Wählen Sie ein Land aus, geben Sie den Namen des Unternehmens ein, setzen
Sie ein Häkchen in das Kästchen zum Akzeptieren der Nutzungsbedingungen
und klicken Sie dann auf Weiter.
-
Wählen Sie bei
Bitte angeben, welche Benachrichtigungen Sie erhalten möchten
jeweils die Option Nein aus, da dies ein temporäres
Lab/Konto ist.
-
Klicken Sie auf Weiter.
Ihnen wird eine Liste der Google-Connectors angezeigt, die von Data Studio
unterstützt werden.
- Wählen Sie BigQuery aus.
-
Klicken Sie auf Autorisieren, um Data Studio Zugriff auf
Ihr BigQuery-Projekt zu gewähren.
-
Benennen Sie die Datenquelle oben links auf der Seite von
Unbenannte Datenquelle in GKE-Nutzung um.
-
Wählen Sie in der ersten Spalte
Benutzerdefinierte Abfrage aus.
-
Wählen Sie in der Projektspalte Ihre Projekt-ID aus.
-
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`
- Klicken Sie auf Verbinden.
Klicken Sie auf Fortschritt prüfen.
GKE-Monitoring und -Nutzungsmessung kennenlernen
- Klicken Sie nun rechts oben.
Nachdem Sie die Datenquelle hinzugefügt haben, können Sie jetzt einen Bericht
damit erstellen.
-
Klicken Sie oben auf der Seite „Datenquelle“ auf
Bericht erstellen.
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.
- Klicken Sie auf Zum Bericht hinzufügen.
Data 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:
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.
-
Klicken Sie auf „Freiform-Layout“ oder auf
Diagramm hinzufügen, wählen Sie „Tabelle“ aus und ändern
Sie im 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.
-
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:
-
Klicken Sie auf Speichern.
-
Klicken Sie noch einmal auf Filter hinzufügen und
Filter erstellen, um einen zweiten Filter zum Beschränken
der Daten auf Anfragen zu definieren:
-
Klicken Sie auf Speichern, um den Filter anzuwenden. Die
Tabelle sollte dann in etwa so aussehen:
Als Nächstes fügen Sie dem Bericht ein Kreisdiagramm hinzu, das die
Kostenaufschlüsselung nach Namespace zeigt.
-
Klicken Sie mit der rechten Maustaste auf die Tabelle, die Sie erstellt
haben, und wählen Sie Duplizieren aus.
-
Ziehen Sie das duplizierte Tabellenobjekt an eine beliebige Stelle in
Ihrem Bericht.
-
Klicken Sie nun auf die Überschrift Diagrammtypen des
Konfigurationsbereichs:
- Klicken Sie auf das Symbol Kreisdiagramm:
Das Kreisdiagramm sieht so aus:
Als Nächstes fügen Sie ein Ringdiagramm hinzu, das die Kostenaufschlüsselung
nach Ressourcentyp zeigt.
-
Klicken Sie oben in der Symbolleiste auf
Diagramm hinzufügen und wählen Sie
aus, um
ein Ringdiagramm zu erstellen.
-
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
-
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:
-
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.
-
Ziehen Sie sie neben das Ringdiagramm und konfigurieren Sie sie so:
-
Zeitraumdimension:
usage_start_time
-
Steuerfeld:
namespace
-
Messwert:
None
-
Klicken Sie auf Filter hinzufügen.
-
Wählen Sie Nicht zugewiesen (Namespace-Filter) aus der
Liste aus.
-
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.
-
Klicken Sie mit der rechten Maustaste und wählen Sie
Gruppieren aus, um sie zu einer Gruppe zusammenzufassen:
-
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:
-
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 18. März 2026 aktualisiert
Lab zuletzt am 18. März 2026 getestet
© 2026 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.