Cluster Autoscaler als Standalone-Programm verwenden
Erfahren Sie, wie Sie Kubernetes Cluster Autoscaler als eigenständiges Programm installieren, konfigurieren und verwenden, um die Größe der verwalteten Knotenpools in einem Cluster, das Sie mit Kubernetes Engine (OKE) erstellt haben, automatisch zu ändern.
Wenn Sie Kubernetes Cluster Autoscaler als Standalone-Programm und nicht als Cluster-Add-on verwenden, erhalten Sie vollständige Kontrolle und Verantwortung für die Konfiguration und laufende Wartung, einschließlich:
- Installieren Sie eine Version von Kubernetes Cluster Autoscaler, die mit der auf dem Cluster ausgeführten Kubernetes-Version kompatibel ist.
- Konfigurationsargumente werden korrekt angegeben.
- Führen Sie beim Upgrade eines Clusters auf eine neue Kubernetes-Version ein manuelles Upgrade von Kubernetes Cluster Autoscaler aus, um sicherzustellen, dass Kubernetes Cluster Autoscaler mit der neuen Kubernetes-Version des Clusters kompatibel ist.
In den nachfolgenden Anweisungen wird beschrieben, wie Sie Kubernetes Cluster Autoscaler zum Verwalten von Knotenpools als Standalone-Programm ausführen:
- Schritt 1: Instanz-Principal oder Workload Identity Principal einrichten, um Cluster Autoscaler-Zugriff auf Knotenpools zu aktivieren
- Schritt 2: Cluster Autoscaler-Konfigurationsdatei kopieren und anpassen
- Schritt 3: Kubernetes Cluster Autoscaler im Cluster bereitstellen und erfolgreiches Deployment bestätigen
- Schritt 4: Skalierungsvorgang anzeigen
- Schritt 5: Bereinigung durchführen
Schritt 1: Instanz-Principal oder Workload Identity Principal einrichten, um Cluster Autoscaler-Zugriff auf Knotenpools zu aktivieren
Zur Verwaltung von Knotenpools führt Kubernetes Cluster Autoscaler Aktionen für andere Oracle Cloud Infrastructure-Serviceressourcen aus. Um diese Aktionen für OCI-Serviceressourcen auszuführen, verwendet Kubernetes Cluster Autoscaler die Zugangsdaten eines autorisierten Akteurs (oder Principals). Sie können derzeit die folgenden Principal-Typen einrichten, damit Kubernetes Cluster Autoscaler Aktionen für OCI-Serviceressourcen ausführen kann:
- Instanz-Principal: Kubernetes Cluster Autoscaler verwendet die Identität der Instanz, auf der sie ausgeführt wird.
- Workload-Identity Principal: Kubernetes Cluster Autoscaler verwendet die Identität einer Workload-Ressource, die auf einem Kubernetes-Cluster ausgeführt wird.
Beachten Sie die Verwendung von Workload Identity Principals, damit Kubernetes Cluster Autoscaler auf OCI-Services und -Ressourcen zugreifen kann:
- wird durch erweiterte Cluster unterstützt, jedoch nicht durch einfache Cluster.
- wird nur mit Cluster Autoscaler Version 1.26 (oder höher) unterstützt
Mit Instanz-Principals den Zugriff auf Knotenpools aktivieren
Sie können einen Instanz-Principal einrichten, damit Kubernetes Cluster Autoscaler Aktionen für OCI-Serviceressourcen ausführen kann.
So richten Sie einen Instanz-Principal ein:
- Melden Sie sich in der Konsole an.
-
Erstellen Sie eine neue dynamische Gruppe auf Compartment-Ebene, die die Worker-Knoten (Compute-Instanzen) im Cluster enthält:
- Öffnen Sie das Navigationsmenü , und wählen Sie Identität und Sicherheit aus. Wählen Sie unter Identität die Option Domains aus. Wählen Sie unter Identitätsdomain die Option Dynamische Gruppen aus.
- Wählen Sie das Compartment aus, das das Cluster enthält.
- Befolgen Sie die Anweisungen unter So erstellen Sie eine dynamische Gruppe, und geben Sie der dynamischen Gruppe einen Namen (Beispiel:
acme-oke-cluster-autoscaler-dyn-grp
). -
Geben Sie eine Regel, die die Worker-Knoten im Compartment enthält, in folgendem Format ein:
ALL {instance.compartment.id = '<compartment-ocid>'}
Hierbei ist
<compartment-ocid>
die OCID des Compartments, zu dem das Cluster gehört.Beispiel:
ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
- Klicken Sie auf Dynamische Gruppe erstellen.
-
Erstellen Sie eine Policy, mit der Worker-Knoten die Verwaltung von Knotenpools zulassen können:
- Öffnen Sie das Navigationsmenü , und wählen Sie Identität und Sicherheit aus. Wählen Sie unter Identität die Option Policys aus.
- Befolgen Sie die Anweisungen unter So erstellen Sie eine Policy, und geben Sie der Policy einen Namen (Beispiel:
acme-oke-cluster-autoscaler-dyn-grp-policy
). -
Geben Sie eine Policy-Anweisung, die Worker-Knoten zum Verwalten von Knotenpools berechtigt (sowie andere Policy-Anweisungen im Zusammenhang mit der Initialisierung von Worker-Knoten), in folgendem Format ein:
Allow dynamic-group <dynamic-group-name> to manage cluster-node-pools in compartment <compartment-name> Allow dynamic-group <dynamic-group-name> to manage instance-family in compartment <compartment-name> Allow dynamic-group <dynamic-group-name> to use subnets in compartment <compartment-name> Allow dynamic-group <dynamic-group-name> to read virtual-network-family in compartment <compartment-name> Allow dynamic-group <dynamic-group-name> to use vnics in compartment <compartment-name> Allow dynamic-group <dynamic-group-name> to inspect compartments in compartment <compartment-name>
Hierbei gilt:
<dynamic-group-name>
ist der Name der zuvor erstellten dynamischen Gruppe. Beispiel:acme-oke-cluster-autoscaler-dyn-grp
. Wenn eine dynamische Gruppe nicht in der Standardidentitätsdomain enthalten ist, stellen Sie dem Namen der dynamischen Gruppe den Namen der Identitätsdomain im Formatdynamic-group '<identity-domain-name>'/'<dynamic-group-name>'
voran. Sie können die dynamische Gruppe auch mit ihrer OCID im Formatdynamic-group id <dynamic-group-ocid>
angeben.<compartment-name>
ist der Name des Compartments, zu dem das Cluster gehört. Beispiel:acme-oke-cluster-autoscaler-compartment
Beispiel:
Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to manage cluster-node-pools in compartment acme-oke-cluster-autoscaler-compartment Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to manage instance-family in compartment acme-oke-cluster-autoscaler-compartment Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use subnets in compartment acme-oke-cluster-autoscaler-compartment Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to read virtual-network-family in compartment acme-oke-cluster-autoscaler-compartment Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use vnics in compartment acme-oke-cluster-autoscaler-compartment Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to inspect compartments in compartment acme-oke-cluster-autoscaler-compartment
- Klicken Sie auf Erstellen, um die neue Policy zu erstellen.
Hinweis
Wenn ein Knotenpool zu einem Compartment gehört und die vom Knotenpool verwendeten Netzwerkressourcen zu einem anderen Compartment gehören, müssen Sie Policys wie folgt in beiden Compartments erstellen:
-
Erstellen Sie im Compartment des Knotenpools eine Policy mit Policy-Anweisungen im folgenden Format:
Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to manage cluster-node-pools in compartment <nodepool-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to manage instance-family in compartment <nodepool-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use subnets in compartment <nodepool-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use vnics in compartment <nodepool-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to inspect compartments in compartment <nodepool-compartment-name>
-
Erstellen Sie im Compartment der Netzwerkressourcen eine Policy mit Policy-Anweisungen im folgenden Format:
Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use subnets in compartment <network-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to read virtual-network-family in compartment <network-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to use vnics in compartment <network-compartment-name> Allow dynamic-group acme-oke-cluster-autoscaler-dyn-grp to inspect compartments in compartment <network-compartment-name>
Mit Workload Identity Principals den Zugriff auf Knotenpools aktivieren
Sie können einen Workload Identity Principal einrichten, damit Kubernetes Cluster Autoscaler Aktionen für OCI-Serviceressourcen ausführen kann. Beachten Sie, dass Sie nur Workload-Identity Principals mit erweiterten Clustern verwenden können.
So richten Sie einen Workload Identity Principal ein:
- Rufen Sie die OCID des Clusters ab (z.B. mit der Registerkarte Clusterdetails in der Konsole).
- Öffnen Sie das Navigationsmenü , und wählen Sie Identität und Sicherheit aus. Wählen Sie unter Identität die Option Policys aus.
- Folgen Sie den Anweisungen unter Policy erstellen, und geben Sie der Policy einen Namen (z.B.
acme-oke-cluster-autoscaler-policy
). -
Geben Sie Policy-Anweisungen in folgendem Format ein, um die Knotenpoolverwaltung zuzulassen:
Allow any-user to manage cluster-node-pools in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage instance-family in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use subnets in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to read virtual-network-family in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use vnics in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to inspect compartments in compartment <compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'}
Hierbei gilt:
<compartment-name>
ist der Name des Compartments, zu dem das Cluster gehört. Beispiel:acme-oke-cluster-autoscaler-compartment
<cluster-ocid>
ist die OCID des Clusters, die Sie zuvor abgerufen haben.
Beispiel:
Allow any-user to manage cluster-node-pools in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'} Allow any-user to manage instance-family in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'} Allow any-user to use subnets in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'} Allow any-user to read virtual-network-family in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'} Allow any-user to use vnics in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'} Allow any-user to inspect compartments in compartment acme-oke-cluster-autoscaler-compartment where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'}
- Klicken Sie auf Erstellen, um die neue Policy zu erstellen.
Wenn ein Knotenpool zu einem Compartment gehört und die vom Knotenpool verwendeten Netzwerkressourcen zu einem anderen Compartment gehören, müssen Sie Policys wie folgt in beiden Compartments erstellen:
-
Erstellen Sie im Compartment des Knotenpools eine Policy mit Policy-Anweisungen im folgenden Format:
Allow any-user to manage cluster-node-pools in compartment <nodepool-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage instance-family in compartment <nodepool-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use subnets in compartment <nodepool-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use vnics in compartment <nodepool-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to inspect compartments in compartment <nodepool-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'}
-
Erstellen Sie im Compartment der Netzwerkressourcen eine Policy mit Policy-Anweisungen im folgenden Format:
Allow any-user to use subnets in compartment <network-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to read virtual-network-family in compartment <network-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use vnics in compartment <network-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to inspect compartments in compartment <network-compartment-name> where ALL {request.principal.type='workload', request.principal.namespace ='kube-system', request.principal.service_account = 'cluster-autoscaler', request.principal.cluster_id = '<cluster-ocid>'}
Schritt 2: Cluster Autoscaler-Konfigurationsdatei kopieren und anpassen
Schritt 2a: Konfigurationsdatei kopieren
-
Erstellen Sie in einem Texteditor eine Datei namens
cluster-autoscaler.yaml
mit dem folgenden Inhalt:--- apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-addon: cluster-autoscaler.addons.k8s.io k8s-app: cluster-autoscaler name: cluster-autoscaler namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: cluster-autoscaler labels: k8s-addon: cluster-autoscaler.addons.k8s.io k8s-app: cluster-autoscaler rules: - apiGroups: [""] resources: ["events", "endpoints"] verbs: ["create", "patch"] - apiGroups: [""] resources: ["pods/eviction"] verbs: ["create"] - apiGroups: [""] resources: ["pods/status"] verbs: ["update"] - apiGroups: [""] resources: ["endpoints"] resourceNames: ["cluster-autoscaler"] verbs: ["get", "update"] - apiGroups: [""] resources: ["nodes"] verbs: ["watch", "list", "get", "patch", "update"] - apiGroups: [""] resources: - "pods" - "services" - "replicationcontrollers" - "persistentvolumeclaims" - "persistentvolumes" verbs: ["watch", "list", "get"] - apiGroups: ["extensions"] resources: ["replicasets", "daemonsets"] verbs: ["watch", "list", "get"] - apiGroups: ["policy"] resources: ["poddisruptionbudgets"] verbs: ["watch", "list"] - apiGroups: ["apps"] resources: ["statefulsets", "replicasets", "daemonsets"] verbs: ["watch", "list", "get"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses", "csinodes", "volumeattachments"] verbs: ["watch", "list", "get"] - apiGroups: ["batch", "extensions"] resources: ["jobs"] verbs: ["get", "list", "watch", "patch"] - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["create"] - apiGroups: ["coordination.k8s.io"] resourceNames: ["cluster-autoscaler"] resources: ["leases"] verbs: ["get", "update"] - apiGroups: [""] resources: ["namespaces"] verbs: ["watch", "list"] - apiGroups: ["storage.k8s.io"] resources: ["csidrivers", "csistoragecapacities"] verbs: ["watch", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: cluster-autoscaler namespace: kube-system labels: k8s-addon: cluster-autoscaler.addons.k8s.io k8s-app: cluster-autoscaler rules: - apiGroups: [""] resources: ["configmaps"] verbs: ["create","list","watch"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cluster-autoscaler-status", "cluster-autoscaler-priority-expander"] verbs: ["delete", "get", "update", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: cluster-autoscaler labels: k8s-addon: cluster-autoscaler.addons.k8s.io k8s-app: cluster-autoscaler roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-autoscaler subjects: - kind: ServiceAccount name: cluster-autoscaler namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: cluster-autoscaler namespace: kube-system labels: k8s-addon: cluster-autoscaler.addons.k8s.io k8s-app: cluster-autoscaler roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: cluster-autoscaler subjects: - kind: ServiceAccount name: cluster-autoscaler namespace: kube-system --- apiVersion: apps/v1 kind: Deployment metadata: name: cluster-autoscaler namespace: kube-system labels: app: cluster-autoscaler spec: replicas: 3 selector: matchLabels: app: cluster-autoscaler template: metadata: labels: app: cluster-autoscaler annotations: prometheus.io/scrape: 'true' prometheus.io/port: '8085' spec: serviceAccountName: cluster-autoscaler containers: - image: iad.ocir.io/oracle/oci-cluster-autoscaler:{{ image tag }} name: cluster-autoscaler resources: limits: cpu: 100m memory: 300Mi requests: cpu: 100m memory: 300Mi command: - ./cluster-autoscaler - --v=4 - --stderrthreshold=info - --cloud-provider=oci - --max-node-provision-time=25m - --nodes=1:5:{{ node pool ocid 1 }} - --nodes=1:5:{{ node pool ocid 2 }} - --scale-down-delay-after-add=10m - --scale-down-unneeded-time=10m - --unremovable-node-recheck-timeout=5m - --balance-similar-node-groups - --balancing-ignore-label=displayName - --balancing-ignore-label=hostname - --balancing-ignore-label=internal_addr - --balancing-ignore-label=oci.oraclecloud.com/fault-domain imagePullPolicy: "Always"
- Speichern Sie die erstellte Datei
cluster-autoscaler.yaml
.
Schritt 2b: Geben Sie die zu verwaltenden Knotenpools an
Geben Sie in der von Sie erstellten Datei cluster-autoscaler.yaml
die Knotenpools des Clusters an, die von Kubernetes Cluster Autoscaler verwaltet werden sollen.
Sie können angeben, dass Kubernetes Cluster Autoscaler einen einzelnen oder mehrere Knotenpools verwalten soll. Es wird empfohlen, immer mindestens einen Knotenpool zu verwenden, der nicht von Kubernetes Cluster Autoscaler verwaltet wird, um kritische Cluster-Add-ons auszuführen, und sicherzustellen, dass Kubernetes Cluster Autoscaler die Knoten, auf denen er ausgeführt wird, nicht herunterskaliert. Beachten Sie, dass Sie für die manuelle Skalierung der Knotenpools verantwortlich sind, die Sie in der Konfigurationsdatei nicht angegeben haben.
Sie geben die Knotenpools an, die Kubernetes Cluster Autoscaler auf zwei Arten verwalten soll:
- Sie können jeden zu verwaltenden Knotenpool explizit mit dem Parameter
--nodes
angeben, um die OCID jedes Knotenpools anzugeben. - Sie können angeben, dass Kubernetes Cluster Autoscaler ermitteln soll, welcher Knotenpool (oder Knotenpools) verwaltet werden soll. Verwenden Sie dazu den Parameter
--node-group-auto-discovery
, um die abzugleichenden Tags anzugeben. Sie können sowohl definierte Tags als auch Freiformtags angeben. Weitere Informationen zum Hinzufügen von Tags zu Knotenpools finden Sie unter Anwenden von Tags auf Knotenpools. Kubernetes Cluster Autoscaler verwaltet Knotenpools mit Tags, die den von Ihnen angegebenen Tags entsprechen. Beachten Sie, dass der Parameternode-group-auto-discovery
mit Cluster Autoscaler Version 1.30.3, Version 1.31.1 und Version 1.32.0 und höher unterstützt wird.
Beachten Sie, dass Sie nicht sowohl den Parameter --nodes
als auch den Parameter --node-group-auto-discovery
in derselben cluster-autoscaler.yaml
-Datei angeben können. Die beiden Parameter schließen sich gegenseitig aus.
So geben Sie mit dem Parameter --nodes
explizit an, welche Knotenpools verwaltet werden sollen:
-
Suchen Sie in der erstellten Datei
cluster-autoscaler.yaml
die folgende Vorlagenzeile:- --nodes=1:5:{{ node pool ocid 1 }}
Der Parameter
--nodes
hat das folgende Format:--nodes=<min-nodes>:<max-nodes>:<nodepool-ocid>
Hierbei gilt:
<min-nodes>
ist die minimale Anzahl von Knoten, die im Knotenpool zulässig sind. Kubernetes Cluster Autoscaler reduziert die Anzahl der Knoten nicht unter diese Zahl.<max-nodes>
ist die maximale Anzahl von Knoten, die im Knotenpool zulässig sind. Kubernetes Cluster Autoscaler erhöht die Anzahl der Knoten nicht über diese Zahl. Stellen Sie sicher, dass die angegebene maximale Anzahl von Knoten die Mandantengrenzwerte für die für den Knotenpool definierte Worker-Knotenausprägung nicht überschreitet.<nodepool-ocid>
ist die OCID des zu verwaltenden Knotenpools.
-
Ändern Sie den Wert des Parameters
--nodes
, um Folgendes anzugeben:- Die minimale Anzahl von Knoten, die im Knotenpool zulässig sind. Beispiel: 1.
- Die maximale Anzahl von Knoten, die im Knotenpool zulässig sind. Beispiel: 5.
- Die OCID des Knotenpools, der von Kubernetes Cluster Autoscaler verwaltet werden soll.
Beispiel:
--nodes=1:5:ocid1.nodepool.oc1.iad.aaaaaaaaaeydq...
- Wenn Kubernetes Cluster Autoscaler nur einen Knotenpool im Cluster verwalten soll, suchen Sie die folgende Zeile in der Datei
cluster-autoscaler.yaml
, und entfernen Sie sie:- --nodes=1:5:{{ node pool ocid 2 }}
- Wenn Kubernetes Cluster Autoscaler einen zweiten Knotenpool im Cluster verwalten soll, suchen Sie die folgende Zeile in der Datei
cluster-autoscaler.yaml
, und legen Sie entsprechende Werte für den Parameter--nodes
fest:- --nodes=1:5:{{ node pool ocid 2 }}
- Wenn Kubernetes Cluster Autoscaler weitere Knotenpools verwalten soll, fügen Sie zusätzliche
--nodes
-Parameter in der Dateicluster-autoscaler.yaml
ein, und legen Sie entsprechende Werte fest. - Speichern Sie die Datei
cluster-autoscaler.yaml
.
So geben Sie mit dem Parameter --node-group-auto-discovery
an, dass Kubernetes Cluster Autoscaler ermittelt, welche Knotenpools verwaltet werden sollen:
-
Suchen Sie in der erstellten Datei
cluster-autoscaler.yaml
die folgende Vorlagenzeile:- --nodes=1:5:{{ node pool ocid 1 }}
- Löschen Sie die gesamte Zeile mit dem Parameter
--nodes
, und ersetzen Sie sie durch die folgende Zeile:- --node-group-auto-discovery=clusterId:{{ cluster ocid }},compartmentId:{{ compartment ocid }},nodepoolTags:{{ tagKey1 }}={{ tagValue1 }}&{{ tagKey2 }}={{ tagValue2 }},min:{{ min }},max:{{ max }}
Der Parameter
--node-group-auto-discovery
hat das folgende Format:--node-group-auto-discovery=clusterId:{{<cluster-ocid>}},compartmentId:{{<compartment-ocid>}},nodepoolTags:{{<tagKey1>}}={{<tagValue1>}}&{{<tagKey2>}}={{<tagValue2>}},min:{{<min-nodes>}},max:{{<max-nodes>}}
Hierbei gilt:
<cluster-ocid>
ist das Cluster, in dem Kubernetes Cluster Autoscaler ausgeführt werden soll.<compartment-ocid>
ist die OCID des Compartments, in dem sich der Knotenpool befindet.{{<tagKey1>}}={{<tagValue1>}}
gibt den Namen des ersten übereinstimmenden Tags und den Wert dieses Tags an.{{<tagKey2>}}={{<tagValue2>}}
gibt optional den Namen eines zweiten Tags für den Abgleich und den Wert dieses Tags für den Abgleich an. Sie können beliebig viele Tags angeben (Sie sind nicht auf zwei beschränkt). Wenn Sie mehrere Tags angeben, müssen alle Tags übereinstimmen.<min-nodes>
ist die minimale Anzahl von Knoten, die im Knotenpool zulässig sind. Kubernetes Cluster Autoscaler reduziert die Anzahl der Knoten nicht unter diese Zahl.<max-nodes>
ist die maximale Anzahl von Knoten, die im Knotenpool zulässig sind. Kubernetes Cluster Autoscaler erhöht die Anzahl der Knoten nicht über diese Zahl. Stellen Sie sicher, dass die angegebene maximale Anzahl von Knoten die Mandantengrenzwerte für die für den Knotenpool definierte Worker-Knotenausprägung nicht überschreitet.
-
Ändern Sie den Wert des Parameters
--node-group-auto-discovery
, um Folgendes anzugeben:- Das Cluster, in dem Kubernetes Cluster Autoscaler ausgeführt wird.
- Die OCID des Compartments, in dem sich der Knotenpool befindet.
- Mindestens ein übereinstimmender Tagname und Tagwert.
- Die minimale Anzahl von Knoten, die im Knotenpool zulässig sind. Beispiel: 1.
- Die maximale Anzahl von Knoten, die im Knotenpool zulässig sind. Beispiel: 5.
Beispiel:
--node-group-auto-discovery=clusterId:ocid1.cluster.oc1.iad.aaaaaaaa______ixq,compartmentId:ocid1.compartment.oc1..aaaaaaaa______t7a,nodepoolTags:managedby=ca,min:1,max:5
- Suchen Sie die folgende Zeile in der Datei
cluster-autoscaler.yaml
, und entfernen Sie sie:- --nodes=1:5:{{ node pool ocid 2 }}
- Wenn Kubernetes Cluster Autoscaler mehr Knotenpools, in verschiedenen Compartments oder mit unterschiedlichen Tagnamen und Tagwerten oder mit unterschiedlicher Mindest- und Höchstanzahl zulässiger Knoten verwalten soll, fügen Sie zusätzliche
--node-group-auto-discovery
-Parameter in die Dateicluster-autoscaler.yaml
ein, und legen Sie entsprechende Werte für diese fest.Beispiel:
--node-group-auto-discovery=clusterId:ocid1.cluster.oc1.iad.aaaaaaaa______ixq,compartmentId:ocid1.compartment.oc1..aaaaaaaa______t7a,nodepoolTags:managedby=ca,min:1,max:5 --node-group-auto-discovery=clusterId:ocid1.cluster.oc1.iad.aaaaaaaa______ixq,compartmentId:ocid1.compartment.oc1..aaaaaaaa______jyv,nodepoolTags:managedby=ca,min:2,max:6
- Speichern Sie die Datei
cluster-autoscaler.yaml
.
Schritt 2c: Zusätzliche Konfigurationseinstellungen einschließen
- Fügen Sie in der erstellten Datei
cluster-autoscaler.yaml
Umgebungsvariablen hinzu, um anzugeben, wie Sie Kubernetes Cluster Autoscaler für den Zugriff auf OCI-Services und -Ressourcen eingerichtet haben:- Wenn Sie einen Instanz-Principal eingerichtet haben, damit Kubernetes Cluster Autoscaler auf OCI-Services und -Ressourcen zugreifen kann, fügen Sie nach der Zeile
imagePullPolicy: "Always"
am Ende der Datei Folgendes hinzu:env: - name: OKE_USE_INSTANCE_PRINCIPAL value: "true" - name: OCI_SDK_APPEND_USER_AGENT value: "oci-oke-cluster-autoscaler"
Beispiel:
... imagePullPolicy: "Always" env: - name: OKE_USE_INSTANCE_PRINCIPAL value: "true" - name: OCI_SDK_APPEND_USER_AGENT value: "oci-oke-cluster-autoscaler"
- Wenn Sie einen Workload-Identity Principal eingerichtet haben, damit Kubernetes Cluster Autoscaler auf OCI-Services und -Ressourcen zugreifen kann, fügen Sie nach der Zeile
imagePullPolicy: "Always"
am Ende der Datei Folgendes hinzu:env: - name: OKE_USE_INSTANCE_PRINCIPAL value: "false" - name: OCI_USE_WORKLOAD_IDENTITY value: "true" - name: OCI_RESOURCE_PRINCIPAL_VERSION value: "2.2" - name: OCI_RESOURCE_PRINCIPAL_REGION value: "<cluster-region>" - name: OCI_SDK_APPEND_USER_AGENT value: "oci-oke-cluster-autoscaler"
Dabei ist
<cluster-region>
die Region, in der sich das Cluster befindet.Beispiel:
... imagePullPolicy: "Always" env: - name: OKE_USE_INSTANCE_PRINCIPAL value: "false" - name: OCI_USE_WORKLOAD_IDENTITY value: "true" - name: OCI_RESOURCE_PRINCIPAL_VERSION value: "2.2" - name: OCI_RESOURCE_PRINCIPAL_REGION value: "us-phoenix-1" - name: OCI_SDK_APPEND_USER_AGENT value: "oci-oke-cluster-autoscaler"
- Wenn Sie einen Instanz-Principal eingerichtet haben, damit Kubernetes Cluster Autoscaler auf OCI-Services und -Ressourcen zugreifen kann, fügen Sie nach der Zeile
- Stellen Sie in der von Ihnen erstellten Datei
cluster-autoscaler.yaml
sicher, dass der Parameter--cloud-provider
für die auf dem Cluster ausgeführte Kubernetes-Version korrekt festgelegt ist. Standardmäßig geht der Parameter davon aus, dass das Cluster die Kubernetes-Version 1.27 oder höher (oder 1.23 oder früher) ausführt und aufoci
gesetzt ist. Wenn das Cluster die Kubernetes-Version 1.26, 1.25 oder 1.24 ausführt, ändern Sie den Wert des Parameters--cloud-provider
inoci-oke
:-
Suchen Sie in der Datei
cluster-autoscaler.yaml
die folgende Zeile:- --cloud-provider=oci
-
Wenn das Cluster die Kubernetes-Version 1.26, 1.25 oder 1.24 ausführt, ändern Sie den Wert des Parameters
--cloud-provider
inoci-oke
:- --cloud-provider=oci-oke
- Speichern Sie die Datei
cluster-autoscaler.yaml
.
-
- Ändern Sie in der von Ihnen erstellten Datei
cluster-autoscaler.yaml
den Imagepfad des Kubernetes Cluster Autoscaler-Images für den Download aus Oracle Cloud Infrastructure Registry. Images sind in mehreren Regionen verfügbar. Für eine optimale Performance wählen Sie die Region aus, die der Region am nächsten liegt, in der das Cluster bereitgestellt ist:-
Suchen Sie in der Datei
cluster-autoscaler.yaml
die folgende Vorlagenzeile:- image: iad.ocir.io/oracle/oci-cluster-autoscaler:{{ image tag }}
-
Ändern Sie den Imagepfad entsprechend dem Speicherort und der Kubernetes-Version des Clusters, in dem Kubernetes Cluster Autoscaler ausgeführt werden soll:
Bildverzeichnis Kubernetes-Version Bildpfad Deutschland Mitte (Frankfurt) Kubernetes 1.3 fra.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 Deutschland Mitte (Frankfurt) Kubernetes 1.31 fra.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 Deutschland Mitte (Frankfurt) Kubernetes 1.32 fra.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Deutschland Mitte (Frankfurt) Kubernetes 1.33 fra.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 UK South (London) Kubernetes 1.3 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 UK South (London) Kubernetes 1.31 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 UK South (London) Kubernetes 1.32 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 UK South (London) Kubernetes 1.33 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 US East Kubernetes 1.3 iad.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 US East Kubernetes 1.31 iad.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 US East Kubernetes 1.32 iad.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 US East Kubernetes 1.33 iad.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 US West Kubernetes 1.3 phx.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 US West Kubernetes 1.31 phx.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 US West Kubernetes 1.32 phx.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 US West Kubernetes 1.33 phx.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Beispiel: Wenn Sie Kubernetes Cluster Autoscaler in einem Cluster mit der Kubernetes-Version 1.32 in der Region "UK South" ausführen möchten, geben Sie das folgende Image an:
- image: lhr.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1
Tipp
Wenn Sie Kubernetes Cluster Autoscaler auf einem Kubernetes-Cluster bereitstellen möchten, das sich nicht in derselben Region wie eines der Oracle-Repositorys befindet, die Cluster Autoscaler-Images enthalten, wird empfohlen, das Image wie folgt in ein Repository zu übertragen, das sich in derselben Region wie das Cluster befindet:
i. Rufen Sie das Image mit dem Befehl
docker pull
aus einem Oracle-Repository ab. Siehe Images mit der Docker-CLI per Pull abrufen.ii. Taggen Sie das Image (mit dem Befehl
docker tag
), und übertragen Sie das Image dann an ein Repository in Oracle Cloud Infrastructure Registry, das sich in derselben Region wie das Cluster befindet, in dem Sie Kubernetes Cluster Autoscaler ausführen möchten (mit dem Befehldocker push
). Siehe Images mit der Docker-CLI per Push übergeben.iii. Geben Sie den Speicherort des Images in der Datei
cluster-autoscaler.yaml
an.Hinweis
Wenn Sie Kubernetes Cluster Autoscaler in einem Kubernetes-Cluster mit aktivierter Imageverifizierung bereitstellen möchten, können Sie nicht einfach einen Imagepfad aus einem der Oracle-Repositorys in der Datei
cluster-autoscaler.yaml
angeben. Führen Sie stattdessen folgende Schritte aus:i. Rufen Sie das Image mit dem Befehl
docker pull
aus einem Oracle-Repository ab. Siehe Images mit der Docker-CLI per Pull abrufen.ii. Taggen Sie das Image (mit dem Befehl
docker tag
), und übertragen Sie das Image dann an ein Repository in Oracle Cloud Infrastructure Registry, das sich in derselben Region wie das Cluster befindet, in dem Sie Kubernetes Cluster Autoscaler ausführen möchten (mit dem Befehldocker push
). Siehe Images mit der Docker-CLI per Push übergeben.iii. Signieren Sie das Image mit einem Masterschlüssel und einer Schlüsselversion im Vault-Service, und erstellen Sie so eine Imagesignatur. Siehe Images für mehr Sicherheit signieren.
iV. Geben Sie den Speicherort des signierten Images in der Datei
cluster-autoscaler.yaml
an. Referenzieren Sie das Image mit dem Imagedigest und nicht mit dem Imagetag (siehe Verwendung signierter Images aus Registry erzwingen). - Speichern Sie die Datei
cluster-autoscaler.yaml
.
-
-
Bestätigen Sie in der von Ihnen erstellten Datei
cluster-autoscaler.yaml
, dass die Standardwerte der Parameter für die CPU- und Speicherbegrenzung für die Anzahl der Knotenpools ausreichen, die von Kubernetes Cluster Autoscaler verwaltet werden sollen. Die Standardlimits sind relativ niedrig. Sie sollten daher die Limits erhöhen, wenn Kubernetes Cluster Autoscaler eine große Anzahl von Knotenpools verwalten soll. Beachten Sie, dass Sie dafür verantwortlich sind, die Grenzwerte auf geeignete Werte festzulegen.-
Suchen Sie in der Datei
cluster-autoscaler.yaml
die folgenden Zeilen:resources: limits: cpu: 100m memory: 300Mi
-
Legen Sie die CPU- und Arbeitsspeicherlimits auf Werte fest, die für die Anzahl der Knotenpools geeignet sind, die von Kubernetes Cluster Autoscaler verwaltet werden sollen. Beispiel:
resources: limits: cpu: 200m memory: 600Mi
- Speichern Sie die Datei
cluster-autoscaler.yaml
.
-
-
Geben Sie in der von Ihnen erstellten Datei
cluster-autoscaler.yaml
weitere Parameter für Kubernetes Cluster Autoscaler an. Informationen zu den Parametern, die Sie festlegen können, finden Sie unter Unterstützte Kubernetes Cluster Autoscaler-Parameter. - Speichern und schließen Sie die Datei
cluster-autoscaler.yaml
.
Schritt 3: Kubernetes Cluster Autoscaler im Cluster bereitstellen und erfolgreiches Deployment bestätigen
-
Falls noch nicht geschehen, führen Sie die Schritte zum Einrichten der kubeconfig-Konfigurationsdatei des Clusters aus, und legen Sie (gegebenenfalls) die Umgebungsvariable KUBECONFIG so fest, dass sie auf die Datei verweist. Beachten Sie, dass Sie Ihre eigene kubeconfig-Datei einrichten müssen. Sie können nicht mit einer kubeconfig-Datei, die von einem anderen Benutzer eingerichtet wurde, auf ein Cluster zugreifen. Siehe Clusterzugriff einrichten.
- Stellen Sie Kubernetes Cluster Autoscaler im Cluster bereit, indem Sie Folgendes eingeben:
kubectl apply -f cluster-autoscaler.yaml
- Zeigen Sie die Kubernetes Cluster Autoscaler-Logs an, um sicherzustellen, dass das Programm erfolgreich bereitgestellt wurde und derzeit die Workload von Knotenpools im Cluster überwacht, indem Sie Folgendes eingeben:
kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler
- Geben Sie an, welche der drei in der Datei
cluster-autoscaler.yaml
definierten Kubernetes Cluster Autoscaler-Pods aktuell Aktionen ausführen, indem Sie Folgendes eingeben:kubectl -n kube-system get lease
- Rufen Sie eine allgemeine Ansicht des Kubernetes Cluster Autoscaler-Status aus dem ConfigMap-Objekt im kube-system-Namespace ab, indem Sie Folgendes eingeben:
kubectl -n kube-system get cm cluster-autoscaler-status -oyaml
Schritt 4: Skalierungsvorgang anzeigen
Sie können den bereitgestellten Kubernetes Cluster Autoscaler beobachten, wenn er Worker-Knoten automatisch in einem Knotenpool skaliert. Um den Skalierungsvorgang transparenter zu gestalten, können Sie die folgenden Vorschläge berücksichtigen. (Beachten Sie, dass diese nur zu Beobachtungszwecken dienen und möglicherweise im Widerspruch zu den Empfehlungen unter Empfehlungen für die Verwendung von Kubernetes Cluster Autoscaler in Produktionsumgebungen stehen):
- Beobachten Sie ein Cluster mit einem einzelnen Knotenpool (dem Knotenpool, der von Kubernetes Cluster Autoscaler verwaltet wird).
- Wenn das zu beobachtende Cluster mehr als einen Knotenpool aufweist, beschränken Sie die Ausführung der Pods auf Knoten in dem einzelnen Knotenpool, der von Kubernetes Cluster Autoscaler verwaltet wird. Siehe Pods zu Knoten zuweisen in der Kubernetes-Dokumentation.
- Beginnen Sie mit einem Knoten im Knotenpool, der von Kubernetes Cluster Autoscaler verwaltet wird.
- In der Kubernetes Cluster Autoscaler-Konfigurationsdatei geben Sie die maximale Anzahl von Knoten an, die im Knotenpool zulässig sind. Stellen Sie sicher, dass die angegebene maximale Anzahl von Knoten den Mandantengrenzwert für die für den Knotenpool definierte Worker-Knotenausprägung nicht überschreitet.
So zeigen Sie Kubernetes Cluster Autoscaler bei der automatischen Skalierung der Worker-Knoten an:
- Stellen Sie die aktuelle Gesamtanzahl der Worker-Knoten im Cluster fest, indem Sie Folgendes eingeben:
kubectl get nodes
-
Definieren Sie eine Nginx-Beispielanwendung, indem Sie in einem Texteditor eine Datei namens
nginx.yaml
mit dem folgenden Inhalt erstellen:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 resources: requests: memory: "500Mi"
Beachten Sie, dass ein Ressourcenanforderungsgrenzwert festgelegt wurde.
- Stellen Sie die Beispielanwendung bereit, indem Sie Folgendes eingeben:
kubectl create -f nginx.yaml
- Erhöhen Sie die Anzahl der Pods im Deployment auf 100 (von 2), indem Sie Folgendes eingeben:
kubectl scale deployment nginx-deployment --replicas=100
Kubernetes Cluster Autoscaler fügt dem Knotenpool jetzt Worker-Knoten hinzu, um die erhöhten Workload-Anforderungen zu erfüllen.
- Beobachten Sie den Status des Deployments, indem Sie Folgendes eingeben:
kubectl get deployment nginx-deployment --watch
- Nach ein paar Minuten können Sie die erhöhte Gesamtanzahl der Worker-Knoten im Cluster anzeigen, indem Sie Folgendes eingeben:
kubectl get nodes
Hinweis: Die Anzahl der angezeigten Worker-Knoten hängt von der Worker-Knotenausprägung und von der maximalen Anzahl der Knoten ab, die in der Kubernetes Cluster Autoscaler-Konfigurationsdatei angegeben ist.
Schritt 5: Bereinigung durchführen
- Löschen Sie die Nginx-Beispielanwendung, indem Sie Folgendes eingeben:
kubectl delete deployment nginx-deployment
- Nach zehn Minuten können Sie prüfen, ob die Worker-Knoten auf die ursprüngliche Anzahl reduziert wurden, indem Sie Folgendes eingeben:
kubectl get nodes
Hinweis: Nachdem Sie die Nginx-Beispielanwendung gelöscht und gewartet haben, werden möglicherweise weniger Worker-Knoten angezeigt, wobei die Anzahl immer noch über der ursprünglichen Anzahl liegt. Dies liegt wahrscheinlich daran, dass die Ausführung der kube-system-Pods auf diesen Knoten geplant war. Kube-system-Pods können verhindern, dass Kubernetes Cluster Autoscaler Knoten entfernt, weil der Parameter skip-nodes-with-system-pods
des Autoscalers standardmäßig auf true
gesetzt ist.