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

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 :

  1. Connectez-vous à la console.
  2. Créez un nouveau groupe dynamique au niveau du compartiment contenant les noeuds de travail (instances de calcul) dans la grappe :

    1. 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.
    2. Sélectionnez le compartiment contenant la grappe.
    3. 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).
    4. Entrez une règle incluant les noeuds de travail du compartiment, au format :

      ALL {instance.compartment.id = '<compartment-ocid>'}

      <compartment-ocid> est l'OCID du compartiment auquel la grappe appartient.

      Par exemple :

      ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
    5. Sélectionnez Créer un groupe dynamique.
  3. Créez une politique pour permettre aux noeuds de travail de gérer des groupes de noeuds :

    1. Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous identité, sélectionnez Politiques.
    2. 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).
    3. 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éfixe dynamic-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 format dynamic-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
    4. 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 :

  1. Obtenez l'OCID de la grappe (par exemple, à l'aide de l'onglet Détails de la grappe dans la console).
  2. Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous identité, sélectionnez Politiques.
  3. Suivez les instructions de la rubrique Création d'une politique et attribuez un nom à la politique (par exemple, acme-oke-cluster-autoscaler-policy).
  4. 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'} 
  5. 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 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

  1. 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"
              
  2. 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ètre node-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 :

  1. 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.
  2. 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...
  3. 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 }}
  4. 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 }}
  5. 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 fichier cluster-autoscaler.yaml et attribuez-leur les valeurs appropriées.
  6. 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 :

  1. Dans le fichier cluster-autoscaler.yaml que vous avez créé, localisez la ligne de modèle suivante :

    - --nodes=1:5:{{ node pool ocid 1 }}
  2. 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.
  3. 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
  4. Localisez la ligne suivante dans le fichier cluster-autoscaler.yaml et supprimez-la :
    - --nodes=1:5:{{ node pool ocid 2 }}
  5. 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 fichier cluster-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
    
  6. Enregistrez le fichier cluster-autoscaler.yaml.

Étape 2c : Inclure des paramètres de configuration supplémentaires

  1. 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"

      <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"
  2. 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 par oci-oke :
    1. Dans le fichier cluster-autoscaler.yaml, repérez la ligne suivante :

      - --cloud-provider=oci
    2. Si la grappe exécute Kubernetes version 1.26, 1.25 ou 1.24, remplacez la valeur du paramètre --cloud-provider par oci-oke :
      - --cloud-provider=oci-oke
    3. Enregistrez le fichier cluster-autoscaler.yaml.
  3. 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 :
    1. Dans le fichier cluster-autoscaler.yaml, localisez la ligne de modèle suivante :

      - image: iad.ocir.io/oracle/oci-cluster-autoscaler:{{ image tag }}
    2. 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 commande docker 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 commande docker 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).

    3. Enregistrez le fichier cluster-autoscaler.yaml.
  4. 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.

    1. Dans le fichier cluster-autoscaler.yaml, localisez les lignes suivantes :

                resources:
                  limits:
                    cpu: 100m
                    memory: 300Mi
    2. 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
    3. Enregistrez le fichier cluster-autoscaler.yaml.
  5. 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.

  6. 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

  1. 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.
  2. Déployez le composant d'ajustement automatique de grappe de Kubernetes en entrant :
    kubectl apply -f cluster-autoscaler.yaml
  3. 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
  4. 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
  5. 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 :

  1. Vérifiez le nombre total courant de noeuds de travail dans la grappe en entrant :
    kubectl get nodes
  2. 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.

  3. Déployez l'exemple d'application en entrant :
    kubectl create -f nginx.yaml
  4. 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.

  5. Observez le statut du déploiement en entrant :
    kubectl get deployment nginx-deployment --watch
  6. 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

  1. Supprimez l'exemple d'application Nginx en entrant :
    kubectl delete deployment nginx-deployment
  2. 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.