Utilisation de l'outil de redimensionnement automatique de cluster en tant que programme autonome
Découvrez comment installer, configurer et utiliser l'outil de redimensionnement automatique de cluster Kubernetes en tant que programme autonome pour redimensionner automatiquement les pools de noeuds gérés dans un cluster que vous avez créé à l'aide de Kubernetes Engine (OKE).
L'utilisation de l'outil de redimensionnement automatique de cluster Kubernetes en tant que programme autonome plutôt qu'en tant qu'extension de cluster vous donne le contrôle total et la responsabilité de la configuration et de la maintenance continue, notamment :
- Installation d'une version de l'outil de redimensionnement automatique de cluster Kubernetes compatible avec la version de Kubernetes exécutée sur le cluster.
- Spécification correcte des arguments de configuration.
- Mise à niveau manuelle de l'outil de redimensionnement automatique de cluster Kubernetes lorsque vous mettez à niveau un cluster vers une nouvelle version de Kubernetes pour garantir la compatibilité de l'outil de redimensionnement automatique de cluster Kubernetes avec la nouvelle version de Kubernetes du cluster.
Les instructions ci-dessous expliquent comment exécuter l'outil de redimensionnement automatique de cluster Kubernetes en tant que programme autonome pour gérer les pools de noeuds :
- Etape 1 : configuration d'un principal d'instance ou d'un principal d'identité de charge globale pour autoriser l'accès de l'outil de redimensionnement automatique de cluster aux pools de noeuds
- Etape 2 : copie et personnalisation du fichier de configuration de l'outil de redimensionnement automatique de cluster
- Etape 3 : déploiement de l'outil de redimensionnement automatique de cluster Kubernetes dans le cluster et vérification du déploiement
- Etape 4 : observation de l'opération de redimensionnement
- Etape 5 : nettoyage
Etape 1 : configuration d'un principal d'instance ou d'un principal d'identité de charge globale pour autoriser l'accès de l'outil de redimensionnement automatique de cluster aux pools de noeuds
Pour gérer les pools de noeuds, l'outil de redimensionnement automatique de cluster Kubernetes effectue des actions sur les autres ressources de service Oracle Cloud Infrastructure. Pour effectuer ces actions sur les ressources de service OCI, l'outil de redimensionnement automatique de cluster Kubernetes utilise les informations d'identification d'un acteur (ou principal) autorisé. Vous pouvez actuellement configurer les types de principal suivants pour permettre à l'outil de redimensionnement automatique de cluster Kubernetes d'effectuer des actions sur les ressources de service OCI :
- Principal d'instance : l'outil de redimensionnement automatique de cluster Kubernetes utilise l'identité de l'instance sur laquelle il est exécuté.
- Principal d'identité de charge globale : l'outil de redimensionnement automatique de cluster Kubernetes utilise l'identité d'une ressource de charge globale exécutée sur un cluster Kubernetes.
Notez l'utilisation de principaux d'identité de charge globale pour permettre à l'outil de redimensionnement automatique de cluster Kubernetes d'accéder aux services et aux ressources OCI :
- est pris en charge avec les clusters améliorés, mais pas avec les clusters de base.
- est uniquement pris en charge avec Cluster Autoscaler version 1.26 (ou ultérieure)
Utiliser des principaux d'instance pour activer l'accès aux pools de noeuds
Vous pouvez configurer un principal d'instance pour permettre à l'outil de redimensionnement automatique de cluster Kubernetes d'effectuer des actions sur les ressources de service OCI.
Pour configurer un principal d'instance, procédez comme suit :
- Connectez-vous à la console.
-
Créez un groupe dynamique de niveau compartiment contenant les noeuds de processus actif (instances de calcul) dans le cluster :
- 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 le cluster.
- Suivez les instructions fournies dans Procédure de création d'un groupe dynamique et donnez un nom au groupe dynamique (par exemple,
acme-oke-cluster-autoscaler-dyn-grp
). -
Entrez une règle qui inclut les noeuds de processus actif du compartiment au format suivant :
ALL {instance.compartment.id = '<compartment-ocid>'}
où
<compartment-ocid>
est l'OCID du compartiment auquel appartient le cluster.Par exemple :
ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
- Sélectionnez Créer un groupe dynamiques.
-
Créez une stratégie pour permettre aux noeuds de processus actif de gérer les pools de noeuds :
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous Identité, sélectionnez Stratégies.
- Suivez les instructions fournies dans Procédure de création d'une stratégie et donnez un nom à la stratégie (par exemple,
acme-oke-cluster-autoscaler-dyn-grp-policy
). -
Saisissez une instruction de stratégie pour permettre aux noeuds de processus actif de gérer les pools de noeuds (ainsi que d'autres instructions de stratégie liées à l'initialisation des noeuds de processus actif), au format suivant :
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 créé précédemment. Par exemple,acme-oke-cluster-autoscaler-dyn-grp
. Si un groupe dynamique ne se trouve pas dans le domaine d'identité par défaut, faites précéder le nom de groupe dynamique du nom de domaine d'identité au formatdynamic-group '<identity-domain-name>'/'<dynamic-group-name>'
. Vous pouvez également indiquer le groupe dynamique à l'aide de son OCID, au formatdynamic-group id <dynamic-group-ocid>
.<compartment-name>
est le nom du compartiment auquel appartient le cluster. 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 stratégie.
Remarque
Si un pool de noeuds appartient à un compartiment et que les ressources réseau utilisées par le pool de noeuds appartiennent à un autre compartiment, vous devez créer des stratégies dans les deux compartiments comme suit :
-
Dans le compartiment du pool de noeuds, créez une stratégie avec des instructions de stratégie au 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 réseau, créez une stratégie avec des instructions de stratégie au 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>
Utiliser des principaux d'identité de charge globale pour autoriser l'accès aux pools de noeuds
Vous pouvez configurer un principal d'identité de charge globale pour permettre à l'outil de redimensionnement automatique de cluster Kubernetes d'effectuer des actions sur les ressources de service OCI. Notez que vous pouvez uniquement utiliser des principaux d'identité de charge globale avec des clusters améliorés.
Pour configurer un principal d'identité de charge globale, procédez comme suit :
- Obtenez l'OCID du cluster (par exemple, à l'aide de l'onglet Détails du cluster de la console).
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous Identité, sélectionnez Stratégies.
- Suivez les instructions de Création d'une stratégie et donnez un nom à cette stratégie (par exemple,
acme-oke-cluster-autoscaler-policy
). -
Entrez des instructions de stratégie pour autoriser la gestion des pools de noeuds, au 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ù :
<compartment-name>
est le nom du compartiment auquel appartient le cluster. Par exemple,acme-oke-cluster-autoscaler-compartment
.<cluster-ocid>
est l'OCID du cluster 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 stratégie.
Si un pool de noeuds appartient à un compartiment et que les ressources réseau utilisées par le pool de noeuds appartiennent à un autre compartiment, vous devez créer des stratégies dans les deux compartiments comme suit :
-
Dans le compartiment du pool de noeuds, créez une stratégie avec des instructions de stratégie au 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 réseau, créez une stratégie avec des instructions de stratégie au 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>'}
Etape 2 : copie et personnalisation du fichier de configuration de l'outil de redimensionnement automatique de cluster
Etape 2a : copier 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éé.
Etape 2b : indiquez les pools de noeuds à gérer
Dans le fichier cluster-autoscaler.yaml
que vous avez créé, indiquez les pools de noeuds du cluster que l'outil de redimensionnement automatique de cluster Kubernetes doit gérer.
Vous pouvez indiquer que l'outil de redimensionnement automatique de cluster Kubernetes doit gérer un seul pool de noeuds ou plusieurs pools de noeuds. Il est recommandé de toujours disposer d'au moins un pool de noeuds qui n'est pas géré par l'outil de redimensionnement automatique de cluster Kubernetes pour exécuter des extensions de cluster critiques et de s'assurer que l'outil de redimensionnement automatique de cluster Kubernetes ne réduit pas les noeuds sur lesquels il est exécuté. Notez également qu'il est de votre responsabilité de redimensionner manuellement les pools de noeuds que vous ne spécifiez pas dans le fichier de configuration.
Vous pouvez indiquer les pools de noeuds que l'outil de redimensionnement automatique de cluster Kubernetes doit gérer de l'une des deux manières suivantes :
- Vous pouvez indiquer explicitement chaque pool de noeuds à gérer, en utilisant le paramètre
--nodes
pour indiquer l'OCID de chaque pool de noeuds. - Vous pouvez indiquer que l'outil de redimensionnement automatique de cluster Kubernetes doit repérer le pool de noeuds (ou les pools de noeuds) à gérer, à l'aide du paramètre
--node-group-auto-discovery
pour indiquer les balises à mettre en correspondance. Vous pouvez indiquer à la fois des balises définies et des balises à format libre. Pour plus d'informations sur l'ajout de balises aux pools de noeuds, reportez-vous à Application de balises aux pools de noeuds. L'outil de redimensionnement automatique de cluster Kubernetes gère les pools de noeuds avec des balises qui correspondent aux balises que vous indiquez. Notez que le paramètrenode-group-auto-discovery
est pris en charge avec l'outil de redimensionnement automatique de cluster version 1.30.3, version 1.31.1 et version 1.32.0, et versions ultérieures.
Vous ne pouvez pas indiquer à 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
afin d'indiquer explicitement les pools 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 pool de noeuds. L'outil de redimensionnement automatique de cluster Kubernetes ne réduira pas le nombre de noeuds en deçà de ce nombre.<max-nodes>
est le nombre maximal de noeuds autorisés dans le pool de noeuds. L'outil de redimensionnement automatique de cluster Kubernetes n'augmentera pas le nombre de noeuds au-delà de ce nombre. Assurez-vous que le nombre maximal de noeuds que vous spécifiez ne dépasse pas les limites de location de la forme de noeud de processus actif définie pour le pool de noeuds.<nodepool-ocid>
est l'OCID du pool de noeuds à gérer.
-
Modifiez la valeur du paramètre
--nodes
pour indiquer les éléments suivants :- Nombre minimal de noeuds autorisés dans le pool de noeuds. Exemple : 1.
- Nombre maximal de noeuds autorisés dans le pool de noeuds. Par exemple : 5.
- OCID du pool de noeuds que l'outil de redimensionnement automatique de cluster Kubernetes doit gérer.
Par exemple :
--nodes=1:5:ocid1.nodepool.oc1.iad.aaaaaaaaaeydq...
- Si vous voulez que l'outil de redimensionnement automatique de cluster Kubernetes ne gère qu'un seul pool de noeuds dans le cluster, recherchez la ligne suivante dans le fichier
cluster-autoscaler.yaml
et enlevez-la :- --nodes=1:5:{{ node pool ocid 2 }}
- Si vous voulez que l'outil de redimensionnement automatique de cluster Kubernetes gère un deuxième pool de noeuds dans le cluster, recherchez 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 voulez que l'outil de redimensionnement automatique de cluster Kubernetes gère plus de pools de noeuds, insérez des paramètres
--nodes
supplémentaires dans le fichiercluster-autoscaler.yaml
et définissez les valeurs appropriées correspondantes. - Enregistrez le fichier
cluster-autoscaler.yaml
.
Pour utiliser le paramètre --node-group-auto-discovery
afin d'indiquer que l'outil de redimensionnement automatique de cluster Kubernetes doit repérer les pools 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 indiquant 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 paramètre
--node-group-auto-discovery
a le format 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 le cluster dans lequel exécuter l'outil de redimensionnement automatique de cluster Kubernetes.<compartment-ocid>
est l'OCID du compartiment dans lequel se trouve le pool 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>}}
indique éventuellement 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 balises que nécessaire (vous n'êtes pas limité à deux). Si vous indiquez plusieurs balises, toutes les balises doivent correspondre.<min-nodes>
est le nombre minimal de noeuds autorisés dans le pool de noeuds. L'outil de redimensionnement automatique de cluster Kubernetes ne réduira pas le nombre de noeuds en deçà de ce nombre.<max-nodes>
est le nombre maximal de noeuds autorisés dans le pool de noeuds. L'outil de redimensionnement automatique de cluster Kubernetes n'augmentera pas le nombre de noeuds au-delà de ce nombre. Assurez-vous que le nombre maximal de noeuds que vous spécifiez ne dépasse pas les limites de location de la forme de noeud de processus actif définie pour le pool de noeuds.
-
Modifiez la valeur du paramètre
--node-group-auto-discovery
pour indiquer les éléments suivants :- Cluster dans lequel exécuter l'outil de redimensionnement automatique de cluster Kubernetes.
- OCID du compartiment dans lequel se trouve le pool de noeuds.
- Noms de balise et valeurs de balise à mettre en correspondance.
- Nombre minimal de noeuds autorisés dans le pool de noeuds. Par exemple : 1.
- Nombre maximal de noeuds autorisés dans le pool 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 enlevez-la :- --nodes=1:5:{{ node pool ocid 2 }}
- Si vous voulez que l'outil de redimensionnement automatique de cluster Kubernetes gère davantage de pools de noeuds, dans des compartiments différents, ou avec des noms de balise et des valeurs de balise différents, ou avec des nombres minimal et maximal de noeuds autorisés différents, insérez des paramètres
--node-group-auto-discovery
supplémentaires dans le fichiercluster-autoscaler.yaml
et définissez les valeurs appropriées pour eux.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
.
Etape 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 indiquer comment vous avez configuré l'outil de redimensionnement automatique de cluster Kubernetes afin d'accéder aux services et ressources OCI :- Si vous avez configuré un principal d'instance pour permettre à l'outil de redimensionnement automatique de cluster 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 globale pour permettre à l'outil de redimensionnement automatique de cluster 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 le cluster.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 à l'outil de redimensionnement automatique de cluster 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 le cluster. Par défaut, le paramètre suppose que le cluster exécute Kubernetes version 1.27 ou ultérieure (ou version 1.23 ou antérieure) et qu'il est défini suroci
. Si le cluster 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
, localisez la ligne suivante :- --cloud-provider=oci
-
Si le cluster 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 de l'outil de redimensionnement automatique de cluster Kubernetes à télécharger à partir d'Oracle Cloud Infrastructure Registry. Les images sont disponibles dans certaines régions. Pour des performances optimales, choisissez la région la plus proche de celle où le cluster est déployé :-
Dans le fichier
cluster-autoscaler.yaml
, localisez la ligne de modèle suivante:- image: iad.ocir.io/oracle/oci-cluster-autoscaler:{{ image tag }}
-
Remplacez le chemin de l'image par l'un des chemins suivants, en fonction de l'emplacement et de la version de Kubernetes du cluster dans lequel exécuter l'outil de redimensionnement automatique de cluster Kubernetes :
Emplacement d'image Version de Kubernetes Chemin de l'image Allemagne centrale (Francfort) Kubernetes 1.30 fra.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 Allemagne centrale (Francfort) Kubernetes 1.31 fra.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 Allemagne centrale (Francfort) Kubernetes 1.32 fra.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Allemagne centrale (Francfort) Kubernetes 1.33 fra.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Sud du Royaume-Uni (Londres) Kubernetes 1.30 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 Sud du Royaume-Uni (Londres) Kubernetes 1.31 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 Sud du Royaume-Uni (Londres) Kubernetes 1.32 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Sud du Royaume-Uni (Londres) Kubernetes 1.33 lhr.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Est des Etats-Unis - Ashburn Kubernetes 1.30 iad.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 Est des Etats-Unis - Ashburn Kubernetes 1.31 iad.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 Est des Etats-Unis - Ashburn Kubernetes 1.32 iad.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Est des Etats-Unis - Ashburn Kubernetes 1.33 iad.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Ouest des Etats-Unis (Phoenix) Kubernetes 1.30 phx.ocir.io/oracle/oci-cluster-autoscaler:1.30.4-3 Ouest des Etats-Unis (Phoenix) Kubernetes 1.31 phx.ocir.io/oracle/oci-cluster-autoscaler:1.31.2-1 Ouest des Etats-Unis (Phoenix) Kubernetes 1.32 phx.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Ouest des Etats-Unis (Phoenix) Kubernetes 1.33 phx.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1 Par exemple, si vous souhaitez exécuter l'outil de redimensionnement automatique de cluster Kubernetes dans un cluster Kubernetes 1.32 situé dans la région Sud du Royaume-Uni, spécifiez l'image suivante :
- image: lhr.ocir.io/oracle/oci-cluster-autoscaler:1.32.1-1
Conseil
Pour déployer l'outil de redimensionnement automatique de cluster Kubernetes sur un cluster Kubernetes qui ne se trouve pas dans la même région que les référentiels Oracle contenant des images d'outil de redimensionnement automatique de cluster, nous vous recommandons de propager l'image vers un référentiel se trouvant dans la même région que le cluster, comme suit :
i. Extrayez l'image d'un référentiel Oracle à l'aide de la commande
docker pull
. Reportez-vous à Extraction d'images à l'aide de l'interface de ligne de commande Docker.ii. Balisez l'image (à l'aide de la commande
docker tag
), puis propagez-la vers un référentiel dans Oracle Cloud Infrastructure Registry qui se trouve dans la même région que le cluster dans lequel vous voulez exécuter l'outil de redimensionnement automatique de cluster Kubernetes (à l'aide de la commandedocker push
). Reportez-vous à Propagation 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
.Remarque
Si vous souhaitez déployer l'outil de redimensionnement automatique de cluster Kubernetes sur un cluster Kubernetes où vous avez activé la vérification d'image, ne spécifiez pas simplement de chemin d'image à partir d'un des référentiels Oracle dans le fichier
cluster-autoscaler.yaml
. Procédez plutôt comme suit :i. Extrayez l'image d'un référentiel Oracle à l'aide de la commande
docker pull
. Reportez-vous à Extraction d'images à l'aide de l'interface de ligne de commande Docker.ii. Balisez l'image (à l'aide de la commande
docker tag
), puis propagez-la vers un référentiel dans Oracle Cloud Infrastructure Registry qui se trouve dans la même région que le cluster dans lequel vous voulez exécuter l'outil de redimensionnement automatique de cluster Kubernetes (à l'aide de la commandedocker push
). Reportez-vous à Propagation d'images à l'aide de l'interface de ligne de commande Docker.iii. Signez l'image à l'aide d'une clé maître et d'une version de clé dans le service Vault, créant ainsi une signature d'image. Reportez-vous à 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 de la synthèse d'image plutôt que de la balise d'image (reportez-vous à Application de l'utilisation des 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 pools de noeuds que l'outil de redimensionnement automatique de cluster Kubernetes doit gérer. Les limites par défaut sont relativement faibles. Par conséquent, envisagez d'augmenter les limites si vous souhaitez que l'outil de redimensionnement automatique de cluster Kubernetes gère un grand nombre de pools de noeuds. Notez qu'il est de votre responsabilité de définir les limites sur des valeurs appropriées.-
Dans le fichier
cluster-autoscaler.yaml
, localisez les lignes suivantes :resources: limits: cpu: 100m memory: 300Mi
-
Définissez les limites d'UC et de mémoire sur les valeurs appropriées pour le nombre de pools de noeuds que l'outil de redimensionnement automatique de cluster 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éé, indiquez d'autres paramètres pour l'outil de redimensionnement automatique de cluster Kubernetes. Pour plus d'informations sur les paramètres que vous pouvez définir, reportez-vous à Paramètres de l'outil de redimensionnement automatique de cluster Kubernetes pris en charge. - Enregistrez et fermez le fichier
cluster-autoscaler.yaml
.
Etape 3 : déploiement de l'outil de redimensionnement automatique de cluster Kubernetes dans le cluster et vérification du déploiement
-
Si vous ne l'avez pas encore fait, suivez les étapes permettant de configurer le fichier de configuration Kubeconfig du cluster et (si nécessaire) de définir la variable d'environnement KUBECONFIG de sorte qu'elle pointe vers le fichier. Vous devez configurer votre propre fichier Kubeconfig. Vous ne pouvez pas accéder à un cluster à l'aide d'un fichier Kubeconfig configuré par un autre utilisateur. Reportez-vous à Configuration de l'accès à un cluster.
- Déployez l'outil de redimensionnement automatique de cluster Kubernetes sur le cluster en saisissant ce qui suit :
kubectl apply -f cluster-autoscaler.yaml
- Affichez les journaux de l'outil de redimensionnement automatique de cluster Kubernetes pour vérifier qu'il a été déployé et qu'il surveille actuellement la charge globale des pools de noeuds dans le cluster en saisissant ce qui suit :
kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler
- Identifiez lequel des trois pods de l'outil de redimensionnement automatique de cluster Kubernetes définis dans le fichier
cluster-autoscaler.yaml
exécute actuellement des actions en saisissant ce qui suit :kubectl -n kube-system get lease
- Obtenez une vue globale de l'état de l'outil de redimensionnement automatique de cluster Kubernetes à partir de l'objet ConfigMap dans l'espace de noms kube-system en saisissant ce qui suit :
kubectl -n kube-system get cm cluster-autoscaler-status -oyaml
Etape 4 : observation de l'opération de redimensionnement
Vous pouvez observer l'outil de redimensionnement automatique de cluster Kubernetes que vous avez déployé pendant qu'il redimensionne automatiquement les noeuds de processus actif dans un pool de noeuds. Pour rendre l'opération de redimensionnement plus évidente, tenez compte des suggestions suivantes (celles-ci concernent l'observation uniquement et peuvent être contraires aux recommandations présentées dans Recommandations relatives à l'utilisation de l'outil de redimensionnement automatique de cluster Kubernetes dans des environnements de production) :
- Observez un cluster disposant d'un pool de noeuds unique (pool de noeuds géré par l'outil de redimensionnement automatique de cluster Kubernetes).
- Si le cluster à observer comporte plusieurs pools de noeuds, limitez l'exécution des pods sur les noeuds du pool de noeuds unique géré par l'outil de redimensionnement automatique de cluster Kubernetes. Reportez-vous à Affectation de pods aux noeuds dans la documentation Kubernetes.
- Commencez par un noeud du pool de noeuds géré par l'outil de redimensionnement automatique de cluster Kubernetes.
- Dans le fichier de configuration de l'outil de redimensionnement automatique de cluster Kubernetes, indiquez le nombre maximal de noeuds autorisés dans le pool de noeuds. Assurez-vous que le nombre maximal de noeuds que vous spécifiez ne dépasse pas la limite de location de la forme de noeud de processus actif définie pour le pool de noeuds.
Pour voir le redimensionnement automatiquement des noeuds de processus actif effectué par l'outil de redimensionnement automatique de cluster Kubernetes, procédez comme suit :
- Vérifiez le nombre total actuel de noeuds de processus actif dans le cluster en saisissant ce qui suit :
kubectl get nodes
-
Définissez une application échantillon Nginx en créant un fichier nommé
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"
Une limite de demande de ressource a été définie.
- Déployez l'application échantillon en saisissant ce qui suit :
kubectl create -f nginx.yaml
- Augmentez le nombre de pods dans le déploiement pour le définir sur 100 (valeur de départ : 2) en saisissant ce qui suit :
kubectl scale deployment nginx-deployment --replicas=100
A présent, l'outil de redimensionnement automatique de cluster Kubernetes ajoute des noeuds de processus actif au pool de noeuds pour répondre à l'augmentation de la charge globale.
- Observez le statut du déploiement en saisissant ce qui suit :
kubectl get deployment nginx-deployment --watch
- Au bout de quelques minutes, visualisez le nombre total de noeuds de processus actif dans le cluster après augmentation en saisissant ce qui suit :
kubectl get nodes
Le nombre de noeuds de processus actif affiché dépend de la forme de noeud de processus actif et du nombre maximal de noeuds spécifiés dans le fichier de configuration de l'outil de redimensionnement automatique de cluster Kubernetes.
Etape 5 : nettoyage
- Supprimez l'application échantillon Nginx en saisissant ce qui suit :
kubectl delete deployment nginx-deployment
- Au bout de dix minutes, vérifiez que le nombre de noeuds de processus actif a été réduit au nombre d'origine en saisissant ce qui suit :
kubectl get nodes
Après avoir supprimé l'application échantillon Nginx et attendu un peu, le nombre de noeuds de processus actif affiché est moindre mais quand même supérieur au nombre d'origine. Cela est probablement dû au fait que des pods kube-system ont été programmés pour être exécutés sur ces noeuds. Les pods kube-system peuvent empêcher l'outil de redimensionnement automatique de cluster Kubernetes d'enlever des noeuds car le paramètre skip-nodes-with-system-pods
de l'outil est défini sur true
par défaut.