Auf dieser Seite wird erläutert, wie Sie eine Arbeitslast vorbereiten, die auf Arm-Knoten in einem GKE-Standardcluster geplant werden soll. Weitere Informationen zum Planen von Arm-Arbeitslasten mit Autopilot finden Sie unter Autopilot-Arbeitslasten in der Arm-Architektur bereitstellen.
Um eine Arbeitslast erfolgreich auf einem Arm-Knoten zu planen, benötigen Sie Folgendes:
- Ein Arm-kompatibles Container-Image. Eine Anleitung dazu finden Sie unter Ist meine Arbeitslast bereit für Arm?.
- Armor-Knoten, auf denen Ihre Arm-kompatiblen Arbeitslasten geplant werden können. Informationen zum Erstellen der erforderlichen Ressourcen finden Sie unter Cluster und Knotenpools mit Arm-Knoten erstellen.
- Ein Cluster in einer Google Cloud Region oder -Zone mit verfügbaren virtuellen Arm -Maschinen (VMs). Eine filterbare Tabelle mit Maschinentypen und Plattformen finden Sie unter Verfügbare Regionen und Zonen.
Übersicht
Standardmäßig plant GKE Arbeitslasten nur für x86-basierte
Knoten (Compute Engine-Maschinenreihen mit
Intel oder
AMD-Prozessoren) durch Einfügen einer
Markierung
(kubernetes.io/arch=arm64:NoSchedule) auf allen Arm-Knoten. Diese Markierung verhindert, dass x86-kompatible Arbeitslasten versehentlich auf Ihren Arm-Knoten geplant werden.
Sie können diese Standardmarkierung optional entfernen, wenn x86-kompatible Arbeitslasten auf Arm-Knoten geplant werden sollen, ohne dass die entsprechende Toleranz erforderlich ist. Weitere Informationen finden Sie unter Standardmarkierung für die Arm-Architektur
konfigurieren.
Wenn Sie eine Arbeitslast auf einem Arm-Knoten mit der Standardmarkierung bereitstellen möchten, verwenden Sie die in diesem Dokument beschriebenen Felder, um den Planer anzuweisen, die Arbeitslast an den angeforderten Knotentyp zu senden.
Verwenden Sie eines der folgenden Felder:
- Eine Knotenauswahl
- Eine Knotenaffinitätsregel
Wenn Sie eine Knotenauswahl oder eine Knotenaffinitätsregel verwenden, plant GKE Ihre Armor-kompatiblen Arbeitslasten nur, wenn Sie angegeben haben, dass das Container-Image der Arbeitslast in der Knotenarchitektur ausgeführt werden kann.
Wenn Sie eine Arm-kompatible Arbeitslast mit einer Knotenauswahl oder mit einer Knotenaffinitätsregel planen, wie in den folgenden Abschnitten beschrieben, fügt GKE automatisch eine Toleranz zur Arbeitslastkonfiguration hinzu, sodass die Pods auf den Armknoten ausgeführt werden können.
Diese Toleranz, die der Arbeitslast hinzugefügt wird, entspricht der Markierung (kubernetes.io/arch=arm64:NoSchedule), die standardmäßig allen Arm-Knoten hinzugefügt wird, damit Ihre Arbeitslast auf Arm-Knoten geplant werden kann.
In einigen Situationen, z. B. wenn Sie Images mit mehreren Architekturen haben, die auf jedem Knoten ausgeführt werden können, möchten Sie diese Toleranz möglicherweise manuell der Arbeitslastkonfiguration hinzufügen. Eine Anleitung finden Sie unter Toleranz zum Planen von Arbeitslasten mit mehreren Architekturen für mehrere Architekturen verwenden.
Knotenauswahl mit der Knotenauswahl planen
Fügen Sie der Spezifikation die folgende Knotenauswahl hinzu:
nodeSelector:
kubernetes.io/arch: arm64
Die Knotenauswahl gibt an, dass diese Arbeitslast nur für Knoten mit dem Label arm64 geplant werden soll, die alle Arm-Knoten in GKE-Clustern haben.
Wenn diese Knotenauswahl in der Arbeitslastkonfiguration enthalten ist, fügt GKE eine Toleranz hinzu, die mit der Markierung übereinstimmt. Auf diese Weise wird die Arbeitslast, die auf Armor-Knoten geplant werden soll, zugelassen.
Mit einer Knotenaffinitätsregel eine Arm-Arbeitslast planen
Sie können die Arbeitslast auch mit der Knotenaffinität planen.
Arbeitslast für eine einzelne Architektur planen
Fügen Sie der Spezifikation die folgende Knotenaffinität hinzu:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
Die Knotenaffinitätsregel gibt an, dass die Arbeitslast nur für Knoten mit dem Label arm64 geplant werden soll, die alle Arm-knoten in GKE-Clustern haben.
Wenn diese Knotenaffinitätsregel in der Arbeitslastkonfiguration enthalten ist, fügt GKE eine Toleranz hinzu, die mit der Markierung übereinstimmt. Auf diese Weise wird die Arbeitslast, die auf Armor-Knoten geplant werden soll, zugelassen.
Arbeitslast auf x86- und ARM-Architekturen planen
Wenn Sie eine Arbeitslast sowohl für x86- (Intel- und AMD-Prozessoren) als auch für Arm-Architekturen planen möchten und Ihre Arm-Knotenpools das Standardverhalten für Markierungen verwenden, können Sie dies auf verschiedene Arten angeben. Bei den folgenden Anweisungen wird davon ausgegangen, dass Ihre Arm-Knotenpools die Standardmarkierung verwenden.
Toleranz für die Planung von Arbeitslasten für mehrere Architekturen für alle Architekturen verwenden
Wenn Sie ein Image für mehrere Architekturen haben, das für jeden verfügbaren Architekturtyp in einem Standardcluster geplant werden soll, müssen Sie nur die Toleranz zur Arbeitslastspezifikation hinzufügen. Sie benötigen die auf dieser Seite beschriebenen Knotenauswahl- oder Knotenaffinitätsregeln nicht, wenn die Arbeitslast für alle Architekturtypen geplant werden kann.
Fügen Sie die Toleranz hinzu:
tolerations:
- key: kubernetes.io/arch
operator: Equal
value: arm64
effect: NoSchedule
Mit dieser Toleranz kann GKE eine Arbeitslast für Knoten mit einem beliebigen Architekturtyp planen.
Beispiel: Sie haben einen Cluster mit den folgenden Knotenpools:
- my-c4a-node-pool mit c4a-standard-16-VMs (
arm64). - my-c2-node-pool mit c2-standard-8-VMs (
amd64). - my-t2d-node-pool mit t2-standard-48-VMs (
amd64).
Wenn Sie in diesem Cluster eine Arbeitslast bereitstellen, die ein Image für mehrere Architekturen und die Toleranz arm64 in der Arbeitslastkonfiguration verwendet, kann GKE die Arbeitslast für alle Knotenpools planen.
Knotenaffinitätsregel zur Planung von Arbeitslasten mit mehreren Architekturen für jede Architektur verwenden
Wenn eine Arbeitslast auf Knoten für verschiedene Architekturtypen wie x86 und Arm geplant werden soll, können Sie auch eine Knotenaffinitätsregel verwenden. Mit Knotenaffinitätsregeln können Sie genau angeben, für welche Architekturtypen die Arbeitslast geplant werden soll. Dieser Ansatz wird für die Planung von Arbeitslasten in Autopilot-Clustern empfohlen. Weitere Informationen finden Sie unter Autopilot-Arbeitslasten in der Arm-Architektur bereitstellen.
Bei x86-basierten Arbeitslasten benötigen Sie keine Knotenauswahlen, Knotenaffinitätsregeln oder Toleranzen für die Planung der Arbeitslast. Wenn Sie ein Image haben, das nur auf x86-basierten Knoten geplant werden soll, müssen Sie diese Felder nicht verwenden.
Wenn Sie Arbeitslasten für jeden Architekturtyp planen möchten, listen Sie arm64 und amd64 im Abschnitt values des Knotenaffinitätsfelds auf. Der Wert amd64 enthält alle Knoten, die x86-Prozessoren nutzen.
Das folgende Beispiel zeigt, wie diese Arbeitslast auf Knoten mit Arm-Prozessoren oder x86-Prozessoren geplant werden kann:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
- amd64
Die Labels für jeden Architekturtyp lauten:
arm64für Knoten mit Arm-Prozessoren (z. B. C4A).amd64für Knoten mit AMD-Prozessoren (z. B. Tau T2D) oder Knoten mit Intel-Prozessoren (z. B. C2).
Beispiel: Sie haben einen Cluster mit den folgenden Knotenpools und der angegebenen Knotenaffinitätsregel:
- my-c4a-node-pool mit c4a-standard-16-VMs (
arm64). - my-c2-node-pool mit c2-standard-8-VMs (
amd64). - my-t2d-node-pool mit t2-standard-48-VMs (
amd64).
Wenn Sie in diesem Cluster eine Arbeitslast bereitstellen, die ein Image für mehrere Architekturen verwendet und die
Knotenaffinität mit arm64 in der Liste values enthält, fügt GKE
die Toleranz in der Arbeitslastkonfiguration hinzu und die Arbeitslast ist für alle Knotenpools planbar.
Standardmarkierung für die Arm-Architektur konfigurieren
Standardmäßig markiert GKE alle Arm-Knoten mit der Markierung kubernetes.io/arch=arm64:NoSchedule. Diese Markierung verhindert, dass Arbeitslasten, die nur mit der x86-Architektur, nicht aber mit der Arm-Architektur kompatibel sind, auf Arm-Knoten geplant werden. Wenn Sie Arbeitslasten haben, die sowohl mit x86 als auch mit Arm kompatibel sind, können Sie diese Markierung deaktivieren, damit GKE diese Arbeitslasten auf Arm-Knoten planen kann, ohne dass eine Toleranz erforderlich ist, die der Markierung entspricht.
Sie können das Standardverhalten nur in Standardknotenpools in GKE-Clustern aktualisieren, in denen auf der Steuerungsebene Version 1.35.0-gke.2141000 oder höher ausgeführt wird, oder mit Knoten, die für benutzerdefinierte ComputeClasses erstellt wurden. Weitere Informationen finden Sie unter Standardmarkierung für die Arm-Architektur konfigurieren. Die Aktualisierung des Markierungsverhaltens gilt nicht für die Bereitstellung von Arm-Arbeitslasten mit Autopilot. Weitere Informationen finden Sie unter Autopilot Arbeitslasten in der Arm Architektur bereitstellen.
Sie können dieses Verhalten in den folgenden Situationen mit Standardknotenpools konfigurieren:
- Bei der Clustererstellung für den Standardknotenpool
- Wenn Sie einen Standardknotenpool erstellen oder aktualisieren
Wenn im Cluster Arbeitslasten ausgeführt werden, die nicht mit Arm kompatibel sind, entfernen Sie die Standardmarkierung nicht, da inkompatible Arbeitslasten auf den nicht markierten Arm-Knoten geplant werden könnten.
Wählen Sie eine der folgenden Optionen aus, um die Standardmarkierung für Arm-Knoten zu konfigurieren:
gcloud CLI
Verwenden Sie das Flag --node-architecture-taint-behavior, um das Markierungsverhalten mit der gcloud CLI festzulegen, wenn Sie eine der folgenden Aktionen ausführen:
Erstellen Sie einen Standardcluster mit einem bestimmten Markierungsverhalten für den Standardknotenpool mit dem
gcloud container cluster createBefehl:gcloud container cluster create CLUSTER_NAME --location=CONTROL_PLANE_LOCATION \ --node-architecture-taint-behavior=BEHAVIORErstellen Sie einen Standardknotenpool mit dem
gcloud container node-pools createBefehl:gcloud container node-pools create POOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-architecture-taint-behavior=BEHAVIORAktualisieren Sie einen Standardknotenpool mit dem
gcloud container node-pools updateBefehl:gcloud container node-pools update POOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-architecture-taint-behavior=BEHAVIOR
Ersetzen Sie in diesen Befehlen Folgendes:
CLUSTER_NAME: Der Name Ihres Clusters.CONTROL_PLANE_LOCATION: Der Compute Engine Standort der Steuerungsebene Ihres Clusters. Geben Sie für regionale Cluster eine Region oder für zonale Cluster eine Zone an.POOL_NAME: Der Name des Knotenpools.BEHAVIOR: Eine der folgenden Einstellungen:none: GKE lässt die Standardmarkierungkubernetes.io/arch=arm64:NoScheduleweg.arm: Legt das Standardverhalten explizit fest, wodurch die Markierungenkubernetes.io/arch=arm64:NoSchedulefür alle Knoten im Arm-Knotenpool hinzugefügt werden.
Wenn Sie das Markierungsverhalten für die Knotenarchitektur für einen Standardknotenpool ändern, aktualisiert GKE die Markierungen sofort, ohne dass die Knoten neu erstellt werden müssen.
Terraform
Fügen Sie den folgenden Block taint_config in node_config hinzu, um das Markierungsverhalten für die Architektur zu konfigurieren:
taint_config {
architecture_taint_behavior = "BEHAVIOR"
}
Ersetzen Sie BEHAVIOR durch eine der folgenden Einstellungen:
NONE: GKE lässt die Standardmarkierungkubernetes.io/arch=arm64:NoScheduleweg.ARM: Legt das Standardverhalten explizit fest, wodurch die Markierungenkubernetes.io/arch=arm64:NoSchedulefür alle Knoten im Arm-Knotenpool hinzugefügt werden.
Eine vollständige node_config für einen Standardknotenpool, der diesen Block enthält, sieht so aus:
resource "google_container_node_pool" "primary_preemptible_nodes" {
name = "NODE_POOL_NAME"
location = "NODE_POOL_LOCATION"
cluster = google_container_cluster.primary.name
node_count = 1
node_config {
preemptible = true
machine_type = "ARM_MACHINE_TYPE"
# Google recommends custom service accounts that have cloud-platform scope and permissions granted via IAM Roles.
service_account = google_service_account.default.email
oauth_scopes = [
"https://www.googleapis.com/auth/cloud-platform"
]
taint_config {
architecture_taint_behavior = "BEHAVIOR"
}
}
}
In diesem Beispiel steht NODE_POOL_NAME für den Namen des Knotenpools und NODE_POOL_LOCATION für den Standort der Steuerungsebene des Clusters.
Arbeitslast bereitstellen
Nachdem Sie nun festgelegt haben, wo Ihre Arm-kompatiblen Arbeitslasten geplant werden sollen, können Sie Ihre Arbeitslast bereitstellen.
Wenn Sie eine Arbeitslast in einem GKE-Cluster bereitstellen, sind die Anweisungen für alle Architekturtypen identisch. Sie können eine Arm-kompatible Arbeitslast wie jede andere Arbeitslast bereitstellen, solange Sie die erforderlichen Schritte ausgeführt haben. Beispiele für die Bereitstellung von Arbeitslasten finden Sie auf den folgenden Seiten:
- Zustandslose Linux-Anwendung bereitstellen.
- Zustandsorientierte Anwendung bereitstellen.
- Jobs ausführen.
Fehlerbehebung
Allgemeine Fehler und Informationen zur Fehlerbehebung finden Sie unter Fehlerbehebung bei Arm-Arbeitslasten.