Utilisation du composant d'ajustement automatique de grappe en tant que programme autonome
Découvrez comment installer, configurer et utiliser le composant d'ajustement automatique de grappe de Kubernetes en tant que programme autonome pour redimensionner automatiquement les groupes de noeuds gérés dans une grappe que vous avez créée à l'aide de Kubernetes Engine (OKE).
L'utilisation du composant d'ajustement automatique de grappe de Kubernetes en tant que programme autonome plutôt qu'en tant que module complémentaire de grappe vous donne un contrôle et une responsabilité complets pour la configuration et la maintenance continue, notamment :
- Installation d'une version du composant d'ajustement automatique de grappe de Kubernetes compatible avec la version de Kubernetes exécutée sur la grappe.
- Spécification correcte des arguments de configuration.
- Mise à niveau manuelle du composant d'ajustement automatique de grappe de Kubernetes lorsque vous mettez à niveau une grappe vers une nouvelle version de Kubernetes, pour vous assurer que le composant d'ajustement automatique de grappe de Kubernetes est compatible avec la nouvelle version de Kubernetes.
Les instructions ci-dessous décrivent comment exécuter le composant d'ajustement automatique de grappe de Kubernetes en tant que programme autonome pour gérer les groupes de noeuds :
- Étape 1 : Configuration d'un principal d'instance ou d'identité de charge de travail pour activer l'accès du composant d'ajustement automatique de grappe aux groupes de noeuds
- Étape 2 : Copier et personnaliser le fichier de configuration du composant d'ajustement automatique de grappe
- Étape 3 : Déployer le composant d'ajustement automatique de grappe de Kubernetes dans la grappe et vérifier que le déploiement a réussi
- Étape 4 : Consulter l'opération d'ajustement
- Étape 5 : Nettoyer
Étape 1 : Configuration d'un principal d'instance ou d'identité de charge de travail pour activer l'accès du composant d'ajustement automatique de grappe aux groupes de noeuds
Pour gérer les groupes de noeuds, le composant d'ajustement automatique de grappe de Kubernetes effectue des actions sur d'autres ressources de service Oracle Cloud Infrastructure. Pour effectuer ces actions sur les ressources de service OCI, le composant d'ajustement automatique de grappe de Kubernetes utilise les données d'identification d'un acteur (ou principal) autorisé. Vous pouvez actuellement configurer les types de principal suivants pour permettre au composant d'ajustement automatique de grappe de Kubernetes d'effectuer des actions sur les ressources de service OCI :
- Principal d'instance : Le composant d'ajustement automatique de grappe de Kubernetes utilise l'identité de l'instance sur laquelle il s'exécute.
- Principal d'identité de charge de travail : Le composant d'ajustement automatique de grappe de Kubernetes utilise l'identité d'une ressource de charge de travail exécutée sur une grappe de Kubernetes.
Notez l'utilisation de principaux d'identité de charge de travail pour permettre au composant d'ajustement automatique de grappe de Kubernetes d'accéder aux services et ressources OCI :
- est pris en charge avec les grappes améliorées, mais pas avec les grappes de base.
- n'est pris en charge qu'avec le composant d'ajustement automatique de grappe version 1.26 (ou ultérieure)
Utilisation des principaux d'instance pour permettre l'accès aux groupes de noeuds
Vous pouvez configurer un principal d'instance pour permettre au composant d'ajustement automatique de grappe de Kubernetes d'effectuer des actions sur les ressources de service OCI.
Pour configurer un principal d'instance :
- Connectez-vous à la console.
-
Créez un nouveau groupe dynamique au niveau du compartiment contenant les noeuds de travail (instances de calcul) dans la grappe :
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous Identité, sélectionnez Domaines. Sous Domaine d'identité, sélectionnez Groupes dynamiques.
- Sélectionnez le compartiment contenant la grappe.
- Suivez les instructions de la rubrique Pour créer un groupe dynamique et attribuez un nom au groupe dynamique (par exemple,
acme-oke-cluster-autoscaler-dyn-grp
). -
Entrez une règle incluant les noeuds de travail du compartiment, au format :
ALL {instance.compartment.id = '<compartment-ocid>'}
où
<compartment-ocid>
est l'OCID du compartiment auquel la grappe appartient.Par exemple :
ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
- Sélectionnez Créer un groupe dynamique.
-
Créez une politique pour permettre aux noeuds de travail de gérer des groupes de noeuds :
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous identité, sélectionnez Politiques.
- Suivez les instructions de la rubrique Pour créer une politique et attribuez un nom à la politique (par exemple,
acme-oke-cluster-autoscaler-dyn-grp-policy
). -
Entrez un énoncé de politique pour permettre aux noeuds de travail de gérer les groupes de noeuds (ainsi que d'autres énoncés de politique liés à l'initialisation des noeuds de travail), au format :
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>
où :
<dynamic-group-name>
est le nom du groupe dynamique que vous avez créé précédemment. Par exemple,acme-oke-cluster-autoscaler-dyn-grp
. Notez que si un groupe dynamique ne se trouve pas dans le domaine d'identité par défaut, ajoutez le préfixedynamic-group '<identity-domain-name>'/'<dynamic-group-name>'
au nom du groupe dynamique avec le nom du domaine d'identité. Vous pouvez également spécifier le groupe dynamique à l'aide de son OCID, dans le formatdynamic-group id <dynamic-group-ocid>
.<compartiment-name>
est le nom du compartiment auquel la grappe appartient. Par exemple,acme-oke-cluster-autoscaler-compartment
Par exemple :
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
- Sélectionnez Créer pour créer la politique.
Note
Si un groupe de noeuds appartient à un compartiment et que les ressources de réseau utilisées par le groupe de noeuds appartiennent à un autre compartiment, vous devez créer des politiques dans les deux compartiments comme suit :
-
Dans le compartiment du groupe de noeuds, créez une politique avec des énoncés de politique dans le format suivant :
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>
-
Dans le compartiment des ressources de réseau, créez une politique avec des énoncés de politique dans le format suivant :
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>
Utilisation des principaux d'identité de charge de travail pour permettre l'accès aux groupes de noeuds
Vous pouvez configurer un principal d'identité de charge de travail pour permettre au composant d'ajustement automatique de grappe de Kubernetes d'effectuer des actions sur les ressources de service OCI. Notez que vous ne pouvez utiliser des principaux d'identité de charge de travail qu'avec des grappes améliorées.
Pour configurer un principal d'identité de charge de travail :
- Obtenez l'OCID de la grappe (par exemple, à l'aide de l'onglet Détails de la grappe dans la console).
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous identité, sélectionnez Politiques.
- Suivez les instructions de la rubrique Création d'une politique et attribuez un nom à la politique (par exemple,
acme-oke-cluster-autoscaler-policy
). -
Entrez des énoncés de politique pour autoriser la gestion du groupe de noeuds, dans le format suivant :
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>'}
où :
<compartiment-name>
est le nom du compartiment auquel la grappe appartient. Par exemple,acme-oke-cluster-autoscaler-compartment
<cluster-ocid>
est l'OCID de la grappe que vous avez obtenu précédemment.
Par exemple :
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'}
- Sélectionnez Créer pour créer la politique.
Si un groupe de noeuds appartient à un compartiment et que les ressources de réseau utilisées par le groupe de noeuds appartiennent à un autre compartiment, vous devez créer des politiques dans les deux compartiments comme suit :
-
Dans le compartiment du groupe de noeuds, créez une politique avec des énoncés de politique dans le format suivant :
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>'}
-
Dans le compartiment des ressources de réseau, créez une politique avec des énoncés de politique dans le format suivant :
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>'}
Étape 2 : Copier et personnaliser le fichier de configuration du composant d'ajustement automatique de grappe
Étape 2a : Copiez le fichier de configuration
-
Dans un éditeur de texte, créez un fichier nommé
cluster-autoscaler.yaml
avec le contenu suivant :--- 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"
- Enregistrez le fichier
cluster-autoscaler.yaml
que vous avez créé.
Étape 2b : Spécifiez les groupes de noeuds à gérer
Dans le fichier cluster-autoscaler.yaml
que vous avez créé, spécifiez les groupes de noeuds de la grappe que vous souhaitez que le programme d'ajustement automatique de grappe de Kubernetes gère.
Vous pouvez spécifier que le composant d'ajustement automatique de grappe de Kubernetes doit gérer un seul groupe de noeuds ou plusieurs groupes de noeuds. Il est recommandé de toujours avoir au moins un groupe de noeuds qui n'est pas géré par le composant d'ajustement automatique de grappe de Kubernetes pour exécuter des modules complémentaires de grappe critiques, et de s'assurer que le composant d'ajustement automatique de grappe de Kubernetes ne réduit pas les noeuds sur lesquels il s'exécute. Notez également qu'il vous incombe d'ajuster manuellement tous les groupes de noeuds que vous ne spécifiez pas dans le fichier de configuration.
Vous spécifiez les groupes de noeuds que le composant d'ajustement automatique de grappe de Kubernetes doit gérer de l'une des deux façons suivantes :
- Vous pouvez spécifier explicitement chaque groupe de noeuds à gérer, à l'aide du paramètre
--nodes
pour spécifier l'OCID de chaque groupe de noeuds. - Vous pouvez spécifier que le composant d'ajustement automatique de grappe de Kubernetes détecte le groupe de noeuds (ou groupes de noeuds) à gérer, à l'aide du paramètre
--node-group-auto-discovery
pour spécifier les marqueurs à mettre en correspondance. Vous pouvez spécifier à la fois des marqueurs définis et des marqueurs à structure libre. Pour plus d'informations sur l'ajout de marqueurs aux groupes de noeuds, voir Application de marqueurs aux groupes de noeuds. Le composant d'ajustement automatique de grappe de Kubernetes gère les groupes de noeuds avec des marqueurs correspondant aux marqueurs que vous spécifiez. Notez que le paramètrenode-group-auto-discovery
est pris en charge avec Cluster Autoscaler version 1.30.3, version 1.31.1 et version 1.32.0, et versions ultérieures.
Notez que vous ne pouvez pas spécifier à la fois le paramètre --nodes
et le paramètre --node-group-auto-discovery
dans le même fichier cluster-autoscaler.yaml
. Les deux paramètres sont des alternatives mutuellement exclusives.
Pour utiliser le paramètre --nodes
pour spécifier explicitement les groupes de noeuds à gérer :
-
Dans le fichier
cluster-autoscaler.yaml
que vous avez créé, localisez la ligne de modèle suivante :- --nodes=1:5:{{ node pool ocid 1 }}
Le paramètre
--nodes
a le format suivant :--nodes=<min-nodes>:<max-nodes>:<nodepool-ocid>
où :
<min-nodes>
est le nombre minimal de noeuds autorisés dans le groupe de noeuds. Le composant d'ajustement automatique de grappe de Kubernetes ne réduit pas le nombre de noeuds en deçà de cette valeur.<max-nodes>
est le nombre maximal de noeuds autorisés dans le groupe de noeuds. Le composant d'ajustement automatique de grappe de Kubernetes n'augmente pas le nombre de noeuds au-dessus de cette valeur. Assurez-vous que le nombre maximal de noeuds que vous spécifiez ne dépasse pas les limites de la location pour la forme de noeud de travail définie pour le groupe de noeuds.<nodepool-ocid>
est l'OCID du groupe de noeuds à gérer.
-
Modifiez la valeur du paramètre
--nodes
pour spécifier :- Le nombre minimal de noeuds autorisés dans le groupe de noeuds. Par exemple, 1.
- Le nombre maximal de noeuds autorisés dans le groupe de noeuds. Par exemple : 5.
- L'OCID du groupe de noeuds que vous souhaitez que le composant d'ajustement automatique de grappe de Kubernetes gère.
Par exemple :
--nodes=1:5:ocid1.nodepool.oc1.iad.aaaaaaaaaeydq...
- Si vous souhaitez que le composant d'ajustement automatique de grappe de Kubernetes gère un seul groupe de noeuds de la grappe, localisez la ligne suivante dans le fichier
cluster-autoscaler.yaml
et supprimez-la :- --nodes=1:5:{{ node pool ocid 2 }}
- Si vous souhaitez que le composant d'ajustement automatique de grappe de Kubernetes gère un deuxième groupe de noeuds de la grappe, localisez la ligne suivante dans le fichier
cluster-autoscaler.yaml
et définissez les valeurs appropriées pour le paramètre--nodes
:- --nodes=1:5:{{ node pool ocid 2 }}
- Si vous souhaitez que le composant d'ajustement automatique de grappe de Kubernetes gère plus de groupes de noeuds, insérez des paramètres
--nodes
supplémentaires dans le fichiercluster-autoscaler.yaml
et attribuez-leur les valeurs appropriées. - Enregistrez le fichier
cluster-autoscaler.yaml
.
Pour utiliser le paramètre --node-group-auto-discovery
pour spécifier que le composant d'ajustement automatique de grappe de Kubernetes détecte les groupes de noeuds à gérer :
-
Dans le fichier
cluster-autoscaler.yaml
que vous avez créé, localisez la ligne de modèle suivante :- --nodes=1:5:{{ node pool ocid 1 }}
- Supprimez la ligne entière en spécifiant le paramètre
--nodes
et remplacez-la par la ligne suivante :- --node-group-auto-discovery=clusterId:{{ cluster ocid }},compartmentId:{{ compartment ocid }},nodepoolTags:{{ tagKey1 }}={{ tagValue1 }}&{{ tagKey2 }}={{ tagValue2 }},min:{{ min }},max:{{ max }}
Le format du paramètre
--node-group-auto-discovery
est le suivant :--node-group-auto-discovery=clusterId:{{<cluster-ocid>}},compartmentId:{{<compartment-ocid>}},nodepoolTags:{{<tagKey1>}}={{<tagValue1>}}&{{<tagKey2>}}={{<tagValue2>}},min:{{<min-nodes>}},max:{{<max-nodes>}}
où :
<cluster-ocid>
est la grappe dans laquelle exécuter le composant d'ajustement automatique de grappe de Kubernetes.<compartment-ocid>
est l'OCID du compartiment dans lequel se trouve le groupe de noeuds.{{<tagKey1>}}={{<tagValue1>}}
indique le nom de la première balise à mettre en correspondance et la valeur de cette balise à mettre en correspondance.{{<tagKey2>}}={{<tagValue2>}}
spécifie facultativement le nom d'une deuxième balise à mettre en correspondance et la valeur de cette balise à mettre en correspondance. Vous pouvez spécifier autant de marqueurs que nécessaire (vous n'êtes pas limité à deux). Si vous spécifiez plusieurs marqueurs, tous les marqueurs doivent correspondre.<min-nodes>
est le nombre minimal de noeuds autorisés dans le groupe de noeuds. Le composant d'ajustement automatique de grappe de Kubernetes ne réduit pas le nombre de noeuds en deçà de cette valeur.<max-nodes>
est le nombre maximal de noeuds autorisés dans le groupe de noeuds. Le composant d'ajustement automatique de grappe de Kubernetes n'augmente pas le nombre de noeuds au-dessus de cette valeur. Assurez-vous que le nombre maximal de noeuds que vous spécifiez ne dépasse pas les limites de la location pour la forme de noeud de travail définie pour le groupe de noeuds.
-
Modifiez la valeur du paramètre
--node-group-auto-discovery
pour spécifier :- Grappe dans laquelle exécuter le composant d'ajustement automatique de grappe de Kubernetes.
- OCID du compartiment dans lequel se trouve le groupe de noeuds.
- Un ou plusieurs noms de marqueur et valeurs de marqueur à mettre en correspondance.
- Le nombre minimal de noeuds autorisés dans le groupe de noeuds. Par exemple, 1.
- Le nombre maximal de noeuds autorisés dans le groupe de noeuds. Par exemple : 5.
Par exemple :
--node-group-auto-discovery=clusterId:ocid1.cluster.oc1.iad.aaaaaaaa______ixq,compartmentId:ocid1.compartment.oc1..aaaaaaaa______t7a,nodepoolTags:managedby=ca,min:1,max:5
- Localisez la ligne suivante dans le fichier
cluster-autoscaler.yaml
et supprimez-la :- --nodes=1:5:{{ node pool ocid 2 }}
- Si vous voulez que le composant d'ajustement automatique de grappe de Kubernetes gère d'autres groupes de noeuds, dans des compartiments différents, ou avec des noms de marqueur et des valeurs de marqueur différents, ou avec des nombres minimum et maximum différents de noeuds autorisés, insérez des paramètres
--node-group-auto-discovery
supplémentaires dans le fichiercluster-autoscaler.yaml
et définissez des valeurs appropriées pour ceux-ci.Par exemple :
--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
- Enregistrez le fichier
cluster-autoscaler.yaml
.
Étape 2c : Inclure des paramètres de configuration supplémentaires
- Dans le fichier
cluster-autoscaler.yaml
que vous avez créé, ajoutez des variables d'environnement pour spécifier comment vous avez configuré le composant d'ajustement automatique de grappe de Kubernetes pour accéder aux services et ressources OCI :- Si vous avez configuré un principal d'instance pour permettre au composant d'ajustement automatique de grappe de Kubernetes d'accéder aux services et ressources OCI, après la ligne
imagePullPolicy: "Always"
à la fin du fichier, ajoutez ce qui suit :env: - name: OKE_USE_INSTANCE_PRINCIPAL value: "true" - name: OCI_SDK_APPEND_USER_AGENT value: "oci-oke-cluster-autoscaler"
Par exemple :
... imagePullPolicy: "Always" env: - name: OKE_USE_INSTANCE_PRINCIPAL value: "true" - name: OCI_SDK_APPEND_USER_AGENT value: "oci-oke-cluster-autoscaler"
- Si vous avez configuré un principal d'identité de charge de travail pour permettre au composant d'ajustement automatique de grappe de Kubernetes d'accéder aux services et ressources OCI, après la ligne
imagePullPolicy: "Always"
à la fin du fichier, ajoutez ce qui suit :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"
où
<cluster-region>
est la région dans laquelle se trouve la grappe.Par exemple :
... 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"
- Si vous avez configuré un principal d'instance pour permettre au composant d'ajustement automatique de grappe de Kubernetes d'accéder aux services et ressources OCI, après la ligne
- Dans le fichier
cluster-autoscaler.yaml
que vous avez créé, vérifiez que le paramètre--cloud-provider
est défini correctement pour la version de Kubernetes exécutée sur la grappe. Par défaut, le paramètre suppose que la grappe exécute Kubernetes version 1.27 ou ultérieure (ou 1.23 ou antérieure) et est réglé àoci
. Si la grappe exécute Kubernetes version 1.26, 1.25 ou 1.24, remplacez la valeur du paramètre--cloud-provider
paroci-oke
:-
Dans le fichier
cluster-autoscaler.yaml
, repérez la ligne suivante :- --cloud-provider=oci
-
Si la grappe exécute Kubernetes version 1.26, 1.25 ou 1.24, remplacez la valeur du paramètre
--cloud-provider
paroci-oke
:- --cloud-provider=oci-oke
- Enregistrez le fichier
cluster-autoscaler.yaml
.
-
- Dans le fichier
cluster-autoscaler.yaml
que vous avez créé, modifiez le chemin de l'image du composant d'ajustement automatique de grappe de Kubernetes pour que le téléchargement s'effectue depuis Oracle Cloud Infrastructure Registry. Des images sont disponibles dans de nombreuses régions. Pour des performances optimales, sélectionnez la région la plus proche de celle où la grappe est déployée :-
Dans le fichier
cluster-autoscaler.yaml
, localisez la ligne de modèle suivante :- image: iad.ocir.io/oracle/oci-cluster-autoscaler:{{ image tag }}
-
Modifiez le chemin de l'image sur l'un des suivants, en fonction de l'emplacement et de la version de Kubernetes de la grappe dans laquelle exécuter le composant d'ajustement automatique de grappe de Kubernetes :
Emplacement de l'image Version de Kubernetes Chemin de l'image Allemagne - Centre (Francfort) Kubernetes 1.30 fra.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 Allemagne - Centre (Francfort) Kubernetes 1.31 fra.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 Allemagne - Centre (Francfort) Kubernetes 1.32 fra.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Allemagne - Centre (Francfort) Kubernetes 1.33 fra.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Royaume-Uni - Sud (Londres) Kubernetes 1.30 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 Royaume-Uni - Sud (Londres) Kubernetes 1.31 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 Royaume-Uni - Sud (Londres) Kubernetes 1.32 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Royaume-Uni - Sud (Londres) Kubernetes 1.33 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Est des États-Unis (Ashburn) Kubernetes 1.30 iad.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 Est des États-Unis (Ashburn) Kubernetes 1.31 iad.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 Est des États-Unis (Ashburn) Kubernetes 1.32 iad.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Est des États-Unis (Ashburn) Kubernetes 1.33 iad.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Ouest des États-Unis (Phoenix) Kubernetes 1.30 phx.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 Ouest des États-Unis (Phoenix) Kubernetes 1.31 phx.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 Ouest des États-Unis (Phoenix) Kubernetes 1.32 phx.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Ouest des États-Unis (Phoenix) Kubernetes 1.33 phx.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Par exemple, si vous souhaitez exécuter le composant d'ajustement automatique de grappe de Kubernetes dans une grappe Kubernetes 1.32 située dans la région Royaume-Uni - Sud, spécifiez l'image suivante :
- image: lhr.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1
Conseil
Si vous voulez déployer le composant d'ajustement automatique de grappe de Kubernetes sur une grappe de Kubernetes qui ne se trouve pas dans la même région que les référentiels Oracle contenant des images de composant d'ajustement automatique de grappe, nous vous recommandons de pousser l'image vers un référentiel qui se trouve dans la même région que la grappe, comme suit :
i. Extrayez l'image d'un référentiel Oracle à l'aide de la commande
docker pull
. Voir Extraction d'images à l'aide de l'interface de ligne de commande Docker.ii. Marquez l'image (à l'aide de la commande
docker tag
), puis transmettez-la à un référentiel d'Oracle Cloud Infrastructure Registry qui se trouve dans la même région que la grappe dans laquelle vous voulez exécuter le composant d'ajustement automatique de grappe de Kubernetes (à l'aide de la commandedocker push
). Voir Transmission d'images à l'aide de l'interface de ligne de commande Docker.iii. Indiquez l'emplacement de l'image dans le fichier
cluster-autoscaler.yaml
.Note
Pour déployer le composant d'ajustement automatique de grappe de Kubernetes sur une grappe Kubernetes dans laquelle vous avez activé la vérification d'image, ne spécifiez pas simplement un chemin d'accès d'image à partir de l'un des référentiels Oracle du fichier
cluster-autoscaler.yaml
. Au lieu de cela, procédez comme suit :i. Extrayez l'image d'un référentiel Oracle à l'aide de la commande
docker pull
. Voir Extraction d'images à l'aide de l'interface de ligne de commande Docker.ii. Marquez l'image (à l'aide de la commande
docker tag
), puis transmettez-la à un référentiel d'Oracle Cloud Infrastructure Registry qui se trouve dans la même région que la grappe dans laquelle vous voulez exécuter le composant d'ajustement automatique de grappe de Kubernetes (à l'aide de la commandedocker push
). Voir Transmission d'images à l'aide de l'interface de ligne de commande Docker.iii. Signez l'image à l'aide d'une clé principale et d'une version de clé dans le service Chambre forte pour créer une signature d'image. Voir Signature d'images à des fins de sécurité.
iv. Indiquez l'emplacement de l'image signée dans le fichier
cluster-autoscaler.yaml
. Référencez l'image à l'aide du condensé d'image plutôt que du marqueur d'image (voir Application de l'utilisation d'images signées à partir du registre). - Enregistrez le fichier
cluster-autoscaler.yaml
.
-
-
Dans le fichier
cluster-autoscaler.yaml
que vous avez créé, vérifiez que les valeurs par défaut des paramètres de limite d'UC et de mémoire sont suffisantes pour le nombre de groupes de noeuds que vous voulez que le composant d'ajustement automatique de grappe de Kubernetes gère. Les limites par défaut sont relativement faibles. Pensez donc à les augmenter si vous souhaitez que le composant d'ajustement automatique de grappe de Kubernetes gère un grand nombre de groupes de noeuds. Notez qu'il est de votre responsabilité de fixer les limites à des valeurs appropriées.-
Dans le fichier
cluster-autoscaler.yaml
, localisez les lignes suivantes :resources: limits: cpu: 100m memory: 300Mi
-
Réglez les limites d'UC et de mémoire à des valeurs appropriées pour le nombre de groupes de noeuds que le composant d'ajustement automatique de grappe de Kubernetes doit gérer. Par exemple :
resources: limits: cpu: 200m memory: 600Mi
- Enregistrez le fichier
cluster-autoscaler.yaml
.
-
-
Dans le fichier
cluster-autoscaler.yaml
que vous avez créé, spécifiez d'autres paramètres pour le composant d'ajustement automatique de grappe de Kubernetes. Pour plus d'informations sur les paramètres que vous pouvez définir, voir Paramètres du composant d'ajustement automatique de grappe de Kubernetes pris en charge. - Enregistrez et fermez le fichier
cluster-autoscaler.yaml
.
Étape 3 : Déployer le composant d'ajustement automatique de grappe de Kubernetes dans la grappe et vérifier que le déploiement a réussi
-
Si vous ne l'avez pas encore fait, suivez les étapes pour configurer le fichier de configuration kubeconfig de la grappe et (s'il y a lieu) définissez la variable d'environnement KUBECONFIG pour qu'elle pointe vers le fichier. Notez que vous devez configurer votre propre fichier kubeconfig. Vous ne pouvez pas accéder à une grappe à l'aide d'un fichier kubeconfig configuré par un autre utilisateur. Voir Configuration de l'accès aux grappes.
- Déployez le composant d'ajustement automatique de grappe de Kubernetes en entrant :
kubectl apply -f cluster-autoscaler.yaml
- Consultez les journaux du composant d'ajustement automatique de grappe de Kubernetes pour vérifier qu'il a été déployé avec succès et qu'il surveille la charge de travail des groupes de noeuds de la grappe, en entrant :
kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler
- Parmi les trois pods du composant d'ajustement automatique de grappe de Kubernetes définis dans le fichier
cluster-autoscaler.yaml
, identifiez celui qui exécute actuellement des actions, en entrant :kubectl -n kube-system get lease
- Obtenez une vue générale de l'état du composant d'ajustement automatique de grappe de Kubernetes à partir du ConfigMap de l'espace de noms kube-system, en entrant :
kubectl -n kube-system get cm cluster-autoscaler-status -oyaml
Étape 4 : Consulter l'opération d'ajustement
Vous pouvez regarder le composant d'ajustement automatique de grappe de Kubernetes que vous avez déployé à mesure qu'il ajuste automatiquement les noeuds de travail d'un groupe de noeuds. Pour rendre l'opération de mise à l'échelle plus compréhensible, tenez compte des suggestions suivantes (notez qu'elles ne sont fournies qu'à des fins d'observation et qu'elles peuvent être contraires aux recommandations présentées dans Recommandations liées à l'utilisation du composant d'ajustement automatique de grappe de Kubernetes dans les environnements de production) :
- Observez une grappe comportant un seul groupe de noeuds (le groupe de noeuds géré par le composant d'ajustement automatique de grappe de Kubernetes).
- Si la grappe que vous souhaitez observer comporte plusieurs groupes de noeuds, faites en sorte que les pods s'exécutent uniquement sur les noeuds du groupe de noeuds géré par le composant d'ajustement automatique de grappe de Kubernetes. Voir Affectation de pods à des noeuds dans la documentation sur Kubernetes.
- Commencez par un noeud du groupe de noeuds géré par le composant d'ajustement automatique de grappe de Kubernetes.
- Dans le fichier de configuration du composant d'ajustement automatique de grappe de Kubernetes, spécifiez le nombre maximal de noeuds autorisés dans le groupe de noeuds. Assurez-vous que le nombre maximal de noeuds que vous spécifiez ne dépasse pas les limites de la location pour la forme de noeud de travail définie pour le groupe de noeuds.
Pour regarder le composant d'ajustement automatique de grappe de Kubernetes ajuster automatiquement les noeuds de travail :
- Vérifiez le nombre total courant de noeuds de travail dans la grappe en entrant :
kubectl get nodes
-
Définissez un exemple d'application Nginx en créant un fichier appelé
nginx.yaml
dans un éditeur de texte, avec le contenu suivant :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"
Notez qu'une limite de demandes de ressources a été définie.
- Déployez l'exemple d'application en entrant :
kubectl create -f nginx.yaml
- Augmentez le nombre de pods du déploiement de 2 à 100 en entrant :
kubectl scale deployment nginx-deployment --replicas=100
Le composant d'ajustement automatique de grappe de Kubernetes ajoute alors des noeuds de travail au groupe de noeuds pour faire face à la charge de travail accrue.
- Observez le statut du déploiement en entrant :
kubectl get deployment nginx-deployment --watch
- Après quelques minutes, affichez le nombre total de noeuds de travail dans la grappe en entrant :
kubectl get nodes
Notez que le nombre de noeuds de travail que vous voyez dépend de la forme et du nombre maximal de noeuds spécifiés dans le fichier de configuration du composant d'ajustement automatique de grappe de Kubernetes.
Étape 5 : Nettoyer
- Supprimez l'exemple d'application Nginx en entrant :
kubectl delete deployment nginx-deployment
- Après dix minutes, vérifiez que le nombre initial de noeuds de travail a été rétabli, en entrant :
kubectl get nodes
Notez qu'après avoir supprimé l'exemple d'application Nginx et attendu, vous pouvez voir moins de noeuds de travail, mais que ce nombre peut encore être supérieur au nombre initial. Cela est probablement parce que les pods de kube-système ont été programmés pour s'exécuter sur ces noeuds. Les pods de kube-système peuvent empêcher le vérificateur automatique de grappe de Kubernetes de supprimer des noeuds, car le paramètre skip-nodes-with-system-pods
du vérificateur est réglé à true
par défaut.