Auf dieser Seite werden die Schritte zum Bereitstellen von Arbeitslasten auf Ihrer mit Google Distributed Cloud verbundenen Hardware und die Einschränkungen beschrieben, die Sie bei der Konfiguration Ihrer Arbeitslasten beachten müssen.
Bevor Sie diese Schritte ausführen, müssen Sie die Anforderungen für die Installation von Distributed Cloud Connected erfüllen und die Distributed Cloud-Hardware bestellen.
Wenn die Google Distributed Cloud Connected-Hardware am ausgewählten Zielort eintrifft, ist sie mit Hardware, Google Cloudund einigen Netzwerkeinstellungen vorkonfiguriert, die Sie bei der Bestellung von Distributed Cloud Connected angegeben haben.
Google-Installateure führen die physische Installation durch und Ihr Systemadministrator verbindet Distributed Cloud Connected mit Ihrem lokalen Netzwerk.
Nachdem die Hardware mit Ihrem lokalen Netzwerk verbunden ist, kommuniziert sie mit Google Cloud , um Softwareupdates herunterzuladen und eine Verbindung zu IhremGoogle Cloud -Projekt herzustellen. Anschließend können Sie Knotenpools bereitstellen und Arbeitslasten in Distributed Cloud Connect bereitstellen.
Bereitstellungsübersicht
So stellen Sie eine Arbeitslast auf Ihrer mit Distributed Cloud verbundenen Hardware bereit:
Optional: Netzwerkkonfiguration Ihrer mit Distributed Cloud verbundenen Zone initialisieren
Optional: Distributed Cloud-Netzwerk konfigurieren.
Optional: Unterstützung für vom Kunden verwaltete Verschlüsselungsschlüssel (CMEK) für den lokalen Speicher aktivieren: Wenn Sie Cloud Key Management Service einbinden möchten, um die Unterstützung für CMEK für Ihre Arbeitslastdaten zu aktivieren, wählen Sie diese Option aus. Informationen dazu, wie Distributed Cloud Connected Arbeitslastdaten verschlüsselt, finden Sie unter Sicherheit des lokalen Speichers.
Erstellen Sie einen Knotenpool. In diesem Schritt weisen Sie einem Knotenpool Knoten zu und konfigurieren den Knotenpool optional so, dass Cloud KMS zum Ein- und Auspacken der LUKS-Passphrase (Linux Unified Key Setup) zum Verschlüsseln von Arbeitslastdaten verwendet wird.
Rufen Sie Anmeldedaten für einen Cluster ab, um den Cluster zu testen.
Gewähren Sie Nutzern Zugriff auf den Cluster, indem Sie ihnen die Rolle Edge Container Viewer (
roles/edgecontainer.viewer) oder Edge Container Admin (roles/edgecontainer.admin) für das Projekt zuweisen.
NGINX-Load Balancer als Dienst bereitstellen
Das folgende Beispiel zeigt, wie Sie den NGINX-Server bereitstellen und als Dienst in einem mit Distributed Cloud verbundenen Cluster verfügbar machen:
Erstellen Sie eine YAML-Datei mit dem Namen
nginx-deployment.yamlund folgendem Inhalt:apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
Wenden Sie die YAML-Datei mit dem folgenden Befehl auf den Cluster an:
kubectl apply -f nginx-deployment.yaml
Erstellen Sie eine YAML-Datei mit dem Namen
nginx-service.yamlund folgendem Inhalt:apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: LoadBalancer selector: app: nginx ports: - protocol: TCP port: 8080 targetPort: 80
Wenden Sie die YAML-Datei mit dem folgenden Befehl auf den Cluster an:
kubectl apply -f nginx-deployment.yaml
Rufen Sie die externe IP-Adresse ab, die dem Dienst vom MetalLB-Load-Balancer zugewiesen wurde. Verwenden Sie dazu den folgenden Befehl:
kubectl get services
Die Ausgabe des Befehls sieht in etwa so aus:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service LoadBalancer 10.51.195.25 10.100.68.104 8080:31966/TCP 11d
NodeSystemConfigUpdate-Ressourcen konfigurieren
Konfigurieren Sie für jeden Knoten im Cluster eine NodeSystemConfigUpdate-Netzwerkfunktionsoperatorressource wie folgt.
Mit dem folgenden Befehl können Sie die Knoten auflisten, die im Knotenpool des Zielclusters ausgeführt werden:
kubectl get nodes | grep -v master
Die Ausgabe des Befehls sieht in etwa so aus:
NAME STATUS ROLES AGE VERSION pool-example-node-1-01-b2d82cc7 Ready <none> 2d v1.22.8-gke.200 pool-example-node-1-02-52ddvfc9 Ready <none> 2d v1.22.8-gke.200Notieren Sie sich die zurückgegebenen Knotennamen und leiten Sie die Kurznamen ab. Der Kurzname des Knotens
pool-example-node-1-01-b2d82cc7ist beispielsweisenode101.Erstellen Sie für jeden Knoten, den Sie im vorherigen Schritt aufgezeichnet haben, eine eigene
NodeSystemConfigUpdate-Ressourcendatei mit folgendem Inhalt:apiVersion: networking.gke.io/v1 kind: NodeSystemConfigUpdate metadata: name: nodesystemconfigupdate-NODE_SHORT_NAME namespace: nf-operator spec: kubeletConfig: cpuManagerPolicy: Static topologyManagerPolicy: SingleNumaNode nodeName: NODE_NAME osConfig: hugePagesConfig: ONE_GB: 2 TWO_MB: 0 isolatedCpusPerSocket: "0": 40 "1": 40 sysctls: nodeLevel: net.core.rmem_max: "8388608" net.core.wmem_max: "8388608"
Ersetzen Sie Folgendes:
NODE_NAME: Der vollständige Name des Zielknotens. Beispiel:pool-example-node-1-01-b2d82cc7NODE_SHORT_NAME: Der Kurzname des Zielknotens, der aus seinem vollständigen Namen abgeleitet wird. Beispiel:node101.
Benennen Sie jede Datei mit
node-system-config-update-NODE_SHORT_NAME.yaml.Wenden Sie jede der
NodeSystemConfigUpdate-Ressourcendateien mit dem folgenden Befehl auf den Cluster an:kubectl apply -f node-system-config-update-NODE_SHORT_NAME.yaml
Ersetzen Sie
NODE_SHORT_NAMEdurch den Kurznamen des entsprechenden Zielknotens.Wenn Sie die Ressourcen auf den Cluster anwenden, wird jeder betroffene Knoten neu gestartet. Das kann bis zu 30 Minuten dauern.
- Behalten Sie den Status der betroffenen Knoten im Blick, bis alle erfolgreich neu gestartet wurden:
kubectl get nodes | grep -v master
Der Status der einzelnen Knoten ändert sich von
not-readyinready, sobald sie neu gestartet wurden.
Pod für das Zwischenspeichern von Bildern konfigurieren
Sie können einen Pod, der in einem mit Distributed Cloud verbundenen Cluster ausgeführt wird, so konfigurieren, dass sein Image im Cache gespeichert wird. Der Pod beginnt mit der Verwendung des im Cache gespeicherten Images, nachdem es zum ersten Mal aus dem Repository abgerufen wurde. Wenn auf dem Knoten, auf dem der Pod gehostet wird, der Speicherplatz ausgeht, werden keine neuen Bilder im Cache gespeichert und der vorhandene Image-Cache wird geleert, damit Ihre Arbeitslasten weiterhin ohne Unterbrechung ausgeführt werden.
Ihre Pod-Konfiguration muss die folgenden Voraussetzungen erfüllen:
- Sie müssen das Label
gdce.baremetal.cluster.gke.io/cache-image: truefür den Pod festlegen. - Wenn Sie ein privates Image-Repository verwenden, muss Ihre
ImagePullSecret-Ressource vom Typkubernetes.io/dockerconfigjsonsein. - Sie müssen die Pull-Richtlinie des Pod auf
IfNotPresentfestlegen, damit immer die im Cache gespeicherte Kopie des Ziel-Images verwendet wird. Wenn keine Kopie im Cache lokal verfügbar ist, wird das Image aus dem Repository abgerufen.
Das folgende Beispiel zeigt eine Pod-Konfiguration mit aktiviertem Caching:
apiVersion: v1
kind: Pod
metadata:
name: cached-image-pod
labels:
gdce.baremetal.cluster.gke.io/cache-image: "true"
spec:
containers:
- name: my-container
image: your-private-image-repo/your-image:tag
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: my-image-secret # If using a private registry
Das nächste Beispiel zeigt eine Bereitstellungskonfiguration mit aktiviertem Caching:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cached-image-deployment
spec:
template:
metadata:
labels:
gdce.baremetal.cluster.gke.io/cache-image: "true"
spec:
containers:
- name: my-container
image: your-private-image-repo/your-image:tag
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: my-image-secret # If using a private registry
Einschränkungen für Distributed Cloud-Arbeitslasten
Wenn Sie Ihre mit Distributed Cloud verbundenen Arbeitslasten konfigurieren, müssen Sie die in diesem Abschnitt beschriebenen Einschränkungen beachten. Diese Einschränkungen werden von Distributed Cloud Connected für alle Arbeitslasten erzwungen, die Sie auf Ihrer Distributed Cloud Connected-Hardware bereitstellen.
Limits für Linux-Arbeitslasten
Distributed Cloud Connected unterstützt nur die folgenden Linux-Berechtigungen für Arbeitslasten:
AUDIT_READAUDIT_WRITECHOWNDAC_OVERRIDEFOWNERFSETIDIPC_LOCKIPC_OWNERKILLMKNODNET_ADMINNET_BIND_SERVICENET_RAWSETFCAPSETGIDSETPCAPSETUIDSYS_CHROOTSYS_NICESYS_PACCTSYS_PTRACESYS_RESOURCESYS_TIME
Namespace-Einschränkungen
Distributed Cloud Connected unterstützt die folgenden Namespaces nicht:
hostPIDhostIPChostNetwork
Einschränkungen für Ressourcentypen
Distributed Cloud Connected unterstützt den Ressourcentyp CertificateSigningRequest nicht. Damit kann ein Client auf Grundlage einer Signieranfrage die Ausstellung eines X.509-Zertifikats anfordern.
Einschränkungen des Sicherheitskontexts
Distributed Cloud Connected unterstützt den Sicherheitskontext im privilegierten Modus nicht.
Einschränkungen bei der Pod-Bindung
Distributed Cloud Connected unterstützt das Binden von Pods an Hostports im HostNetwork-Namespace nicht. Außerdem ist der Namespace HostNetwork nicht verfügbar.
hostPath Volumenbeschränkungen
Distributed Cloud Connected erlaubt nur die folgenden hostPath-Volumes mit Lese-/Schreibzugriff:
/dev/hugepages/dev/infiniband/dev/vfio/dev/char/sys/devices
PersistentVolumeClaim Einschränkungen für Ressourcentypen
Distributed Cloud Connected unterstützt nur die folgenden PersistentVolumeClaim-Ressourcentypen:
csinfslocal
Einschränkungen für Volumetypen
Distributed Cloud Connected unterstützt nur die folgenden Volumetypen:
configMapcsidownwardAPIemptyDirhostPathnfspersistentVolumeClaimprojectedsecret
Einschränkungen bei der Pod-Toleranz
Mit Distributed Cloud Connected können keine von Nutzern erstellten Pods auf Steuerungsebenenknoten ausgeführt werden. Insbesondere lässt Distributed Cloud Connected keine Planung von Pods mit den folgenden Toleranzschlüsseln zu:
""node-role.kubernetes.io/masternode-role.kubernetes.io/control-plane
Einschränkungen bei der Identitätsübernahme
Distributed Cloud Connected unterstützt keine Identitätsübernahme von Nutzern oder Gruppen.
Einschränkungen für Verwaltungs-Namespaces
Distributed Cloud Connected erlaubt keinen Zugriff auf die folgenden Namespaces:
ai-systemai-speech-systemai-ocr-systemai-translation-systemanthos-identity-servicecert-managerdataproc-systemdataproc-PROJECT_IDdns-systemg-istio-systemgke-connectgke-managed-metrics-servergke-operatorsg-ospf-servicecontrol-systemg-ospf-systemg-pspf-systemgke-systemgpc-backup-systemiam-systemkube-node-leasekube-publickube-system, mit Ausnahme des Löschens vonippools.whereabouts.cni.cncf.iometallb-system, mit Ausnahme der Bearbeitung vonconfigMap-Ressourcen zum Festlegen von Load-Balancing-IP-Adressbereichennf-operatoroclcm-systempredictionrm-systemrobiniosaas-systemvm-system
PROJECT_ID steht für die ID des Zielprojekts Google Cloud .
Vermeiden Sie die Verwendung von Namespaces, deren Namen das Präfix g- enthalten. Solche Namespaces sind in der Regel reservierte Namespaces, die von Distributed Cloud Connected verwendet werden.
Webhook-Einschränkungen
Bei Distributed Cloud Connected gelten für Webhooks die folgenden Einschränkungen:
- Bei jedem mutierenden Webhook, den Sie erstellen, wird der Namespace
kube-systemautomatisch ausgeschlossen. - Mutating Webhooks sind für die folgenden Ressourcentypen deaktiviert:
nodespersistentvolumescertificatesigningrequeststokenreviews
Einschränkungen für die Pod-Priorität
Für Distributed Cloud Connected müssen Sie die Priorität Ihrer Arbeitslast-Pods auf einen Wert unter 500000000 festlegen.
Laufzeitklasse für einen Pod konfigurieren
Mit Distributed Cloud Connected können Sie die Laufzeitklasse für einen Pod in seiner Konfiguration mit dem Feld runtimeClassName angeben. Dadurch wird die auf Clusterebene angegebene Standardlaufzeitklasse überschrieben. Die verfügbaren Laufzeitklassen sind runc und gvisor.
Beispiel:
apiVersion: v1
kind: Pod
metadata:
name: myPod
spec:
runtimeClassName: gvisor
containers:
- name: myPod
image: myPodImage
restartPolicy: OnFailure
Wenn Sie dies in Ihrer Pod-Konfiguration weglassen, verwendet der Pod die auf Clusterebene angegebene Klasse.
Die Standardlaufzeitklasse auf Clusterebene ist runc, sofern Sie keine Standardlaufzeitklasse mit dem Parameter --default-container-runtime konfigurieren, wie unter Cluster erstellen und verwalten beschrieben.
Wenn Sie die Laufzeitklasse entweder auf Pod- oder Clusterebene ändern, müssen Sie die betroffenen Pods neu starten, damit die Änderung wirksam wird.
gvisor-Laufzeitklasse
Wenn Sie die Laufzeitklasse gvisor angeben, wird der Pod auf die sichere Laufzeit der Open Container Initiative (OCI) umgestellt, die auf gVisor basiert. gVisor ist eine Sandboxing-Lösung, die eine starke Isolation zwischen der Arbeitslast und dem Host bietet.