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

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 :

  1. Connectez-vous à la console.
  2. Créez un groupe dynamique de niveau compartiment contenant les noeuds de processus actif (instances de calcul) dans le cluster :

    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 le cluster.
    3. 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).
    4. Entrez une règle qui inclut les noeuds de processus actif du compartiment au format suivant :

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

      <compartment-ocid> est l'OCID du compartiment auquel appartient le cluster.

      Par exemple :

      ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
    5. Sélectionnez Créer un groupe dynamiques.
  3. Créez une stratégie pour permettre aux noeuds de processus actif de gérer les pools de noeuds :

    1. Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous Identité, sélectionnez Stratégies.
    2. 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).
    3. 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 format dynamic-group '<identity-domain-name>'/'<dynamic-group-name>'. Vous pouvez également indiquer le groupe dynamique à l'aide de son OCID, au format dynamic-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
    4. 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 :

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

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

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ètre node-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 :

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

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

Etape 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 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"

      <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"
  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 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 sur oci. Si le cluster 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, localisez la ligne suivante :

      - --cloud-provider=oci
    2. Si le cluster 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 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é :
    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. 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 commande docker 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 commande docker 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).

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

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

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

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

  1. 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.
  2. Déployez l'outil de redimensionnement automatique de cluster Kubernetes sur le cluster en saisissant ce qui suit :
    kubectl apply -f cluster-autoscaler.yaml
  3. 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
  4. 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
  5. 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 :

  1. Vérifiez le nombre total actuel de noeuds de processus actif dans le cluster en saisissant ce qui suit :
    kubectl get nodes
  2. 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.

  3. Déployez l'application échantillon en saisissant ce qui suit :
    kubectl create -f nginx.yaml
  4. 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.

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

  1. Supprimez l'application échantillon Nginx en saisissant ce qui suit :
    kubectl delete deployment nginx-deployment
  2. 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.