Utilizzo di Autoscaler come componente aggiuntivo del cluster

Scopri come installare, configurare e utilizzare Kubernetes Cluster Autoscaler come componente aggiuntivo cluster per ridimensionare automaticamente i pool di nodi gestiti in un cluster creato utilizzando Kubernetes Engine (OKE).

L'utilizzo di Kubernetes Cluster Autoscaler come componente aggiuntivo cluster (il 'componente aggiuntivo Cluster Autoscaler') anziché come programma standalone semplifica la configurazione e la manutenzione continua. Puoi più semplicemente:

  • Abilitare o disabilitare Cluster Autoscaler.
  • Esegui l'opt-in e l'out degli aggiornamenti automatici da parte di Oracle.
  • Selezionare le versioni dei componenti aggiuntivi Cluster Autoscaler.
  • Gestisci personalizzazioni specifiche del componente aggiuntivo utilizzando argomenti di configurazione approvati per coppie chiave-valore.

Nelle sezioni riportate di seguito viene descritto come utilizzare il componente aggiuntivo Cluster Autoscaler per gestire i pool di nodi.

Distribuzione del componente aggiuntivo Autoscaler del cluster

Passo 1: impostazione di un principal dell'istanza o di un principal dell'identità del carico di lavoro per abilitare il componente aggiuntivo di scala automatica cluster per l'accesso ai pool di nodi

Per gestire i pool di nodi, Kubernetes Cluster Autoscaler esegue azioni su altre risorse del servizio Oracle Cloud Infrastructure. Per eseguire tali azioni sulle risorse del servizio OCI, Kubernetes Cluster Autoscaler utilizza le credenziali di un attore (o principal) autorizzato. Al momento, è possibile impostare i seguenti tipi di principal per consentire a Kubernetes Cluster Autoscaler di eseguire azioni sulle risorse del servizio OCI:

  • Principal istanza: l'Autoscaler del cluster Kubernetes utilizza l'identità dell'istanza in cui è in esecuzione.
  • Principal di identità del carico di lavoro: l'Autoscaler del cluster Kubernetes utilizza l'identità di una risorsa del carico di lavoro in esecuzione su un cluster Kubernetes.

Tenere presente l'uso dei principal delle identità del carico di lavoro per consentire all'Autoscaler del cluster Kubernetes di accedere ai servizi e alle risorse OCI:

  • è supportato con cluster avanzati, ma non con cluster di base.
  • è supportato solo con Cluster Autoscaler versione 1.26 (o successiva)

Utilizzo delle entità di istanza per abilitare il componente aggiuntivo Cluster Autoscaler per accedere ai pool di nodi

È possibile impostare un principal istanza per consentire all'Autoscaler del cluster Kubernetes di eseguire azioni sulle risorse del servizio OCI.

Per impostare un principal istanza:

  1. Eseguire il login a Console.
  2. Creare un nuovo gruppo dinamico a livello di compartimento contenente i nodi di lavoro (istanze di computazione) nel cluster:

    1. Aprire il menu di navigazione e selezionare Identità e sicurezza. In Identità, selezionare Domini. In Dominio di Identity, selezionare Gruppi dinamici.
    2. Selezionare il compartimento contenente il cluster.
    3. Seguire le istruzioni in Per creare un gruppo dinamico e assegnare al gruppo dinamico un nome (ad esempio, acme-oke-cluster-autoscaler-dyn-grp).
    4. Immettere una regola che includa i nodi di lavoro nel compartimento, nel formato seguente:

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

      dove <compartment-ocid> è l'OCID del compartimento a cui appartiene il cluster.

      Ad esempio:

      ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
    5. Fare clic su Crea gruppo dinamico.
  3. Creare un criterio per consentire ai nodi di lavoro di gestire i pool di nodi:

    1. Aprire il menu di navigazione e selezionare Identità e sicurezza. In Identità, selezionare Criteri.
    2. Seguire le istruzioni in Per creare un criterio e assegnare un nome al criterio, ad esempio acme-oke-cluster-autoscaler-dyn-grp-policy.
    3. Immettere un'istruzione dei criteri per consentire ai nodi di lavoro di gestire i pool di nodi (insieme ad altre istruzioni dei criteri correlate all'inizializzazione dei nodi di lavoro) nel formato seguente:

      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>

      Dove:

      • <dynamic-group-name> è il nome del gruppo dinamico creato in precedenza. Ad esempio, acme-oke-cluster-autoscaler-dyn-grp. Si noti che se un gruppo dinamico non si trova nel dominio di identità predefinito, anteporre al nome del gruppo dinamico il nome del dominio di identità nel formato dynamic-group '<identity-domain-name>'/'<dynamic-group-name>'. È inoltre possibile specificare il gruppo dinamico utilizzando il relativo OCID, nel formato dynamic-group id <dynamic-group-ocid>.
      • <compartment-name> è il nome del compartimento a cui appartiene il cluster. Ad esempio, acme-oke-cluster-autoscaler-compartment

      Ad esempio:

      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. Fare clic su Crea per creare il nuovo criterio.
    Nota

    Se un pool di nodi appartiene a un compartimento e le risorse di rete utilizzate dal pool di nodi appartengono a un altro compartimento, è necessario creare criteri in entrambi i compartimenti come indicato di seguito.

    • Nel compartimento del pool di nodi creare un criterio con istruzioni criteri nel formato seguente:

      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>
    • Nel compartimento delle risorse di rete, creare un criterio con istruzioni criterio nel formato seguente:

      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>

Prima di distribuire il componente aggiuntivo Cluster Autoscaler, è necessario indicare che si desidera che il componente aggiuntivo Cluster Autoscaler acceda ai pool di nodi utilizzando i principal delle istanze impostando il parametro authType su instance nel file di configurazione. Vedere Passo 2: creazione del file di configurazione del componente aggiuntivo di scala automatica cluster.

Utilizzo delle identità del carico di lavoro per consentire all'add-on Cluster Autoscaler di accedere ai pool di nodi

È possibile impostare un principal di identità del carico di lavoro per consentire all'Autoscaler del cluster Kubernetes di eseguire azioni sulle risorse del servizio OCI. Tenere presente che è possibile utilizzare solo le identità dei carichi di lavoro con cluster avanzati.

Per impostare un principal di identità del carico di lavoro, effettuare le operazioni riportate di seguito.

  1. Ottenere l'OCID del cluster (ad esempio, utilizzando la scheda Dettagli cluster nella console).
  2. Aprire il menu di navigazione e selezionare Identità e sicurezza. In Identità, selezionare Criteri.
  3. Seguire le istruzioni in Creazione di un criterio e assegnare un nome al criterio, ad esempio acme-oke-cluster-autoscaler-policy.
  4. Immettere le istruzioni dei criteri per consentire la gestione del pool di nodi nel formato seguente:

    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>'} 

    Dove:

    • <compartment-name> è il nome del compartimento a cui appartiene il cluster. Ad esempio, acme-oke-cluster-autoscaler-compartment
    • <cluster-ocid> è l'OCID del cluster ottenuto in precedenza.

    Ad esempio:

    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. Fare clic su Crea per creare il nuovo criterio.
Nota

Se un pool di nodi appartiene a un compartimento e le risorse di rete utilizzate dal pool di nodi appartengono a un altro compartimento, è necessario creare criteri in entrambi i compartimenti come indicato di seguito.

  • Nel compartimento del pool di nodi creare un criterio con istruzioni criteri nel formato seguente:

    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>'} 
  • Nel compartimento delle risorse di rete, creare un criterio con istruzioni criterio nel formato seguente:

    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>'} 

Prima di distribuire il componente aggiuntivo Cluster Autoscaler, è necessario indicare che si desidera che il componente aggiuntivo Cluster Autoscaler acceda ai pool di nodi utilizzando le identità del carico di lavoro impostando il parametro authType su workload nel file di configurazione. Vedere Passo 2: creazione del file di configurazione del componente aggiuntivo di scala automatica cluster.

Passo 2: Creare il file di configurazione del componente aggiuntivo Autoscaler cluster

Nota

Queste istruzioni descrivono come creare un file di configurazione dei componenti aggiuntivi Cluster Autoscaler per consentire la distribuzione del componente aggiuntivo Cluster Autoscaler mediante l'interfaccia CLI. Il file di configurazione contiene argomenti di configurazione della coppia chiave/valore approvati. È necessario creare un file di configurazione quando si distribuisce il componente aggiuntivo utilizzando l'interfaccia CLI (o l'API). È inoltre possibile utilizzare la console per distribuire il componente aggiuntivo Cluster Autoscaler, nel qual caso gli argomenti di configurazione vengono specificati nell'interfaccia utente. Per ulteriori informazioni sulla distribuzione del componente aggiuntivo Cluster Autoscaler mediante la console, vedere Installazione di un componente aggiuntivo cluster.

Passo 2a: creare il file di configurazione

  1. In un editor appropriato, creare un file JSON con il nome desiderato (queste istruzioni presuppongono che il file sia denominato cluster-autoscaler-add-on.json) contenente quanto segue:

    {
      "addonName": "ClusterAutoscaler",
      "configurations": [
        {
          "key": "nodes",
          "value": "1:5:{{ node pool ocid 1 }}"
        }
      ]
    }
  2. Salvare il file cluster-autoscaler-add-on.json creato.

Passo 2b: specificare i pool di nodi da gestire

Nel file cluster-autoscaler-add-on.json creato, specificare i pool di nodi del cluster che si desidera gestire dal gestore automatico cluster Kubernetes.

È possibile specificare che si desidera che il gestore automatico cluster Kubernetes gestisca un pool a nodo singolo o più pool di nodi. Si consiglia di disporre sempre di almeno un pool di nodi non gestito da Kubernetes Cluster Autoscaler per eseguire componenti aggiuntivi di cluster critici e per garantire che Kubernetes Cluster Autoscaler non esegua lo scale down dei nodi su cui è in esecuzione. Si noti inoltre che è responsabilità dell'utente ridimensionare manualmente tutti i pool di nodi non specificati nel file di configurazione.

È possibile specificare i pool di nodi che si desidera vengano gestiti da Kubernetes Cluster Autoscaler in uno dei due modi riportati di seguito.

  • È possibile specificare in modo esplicito ogni pool di nodi da gestire, utilizzando il parametro nodes per specificare l'OCID di ogni pool di nodi.
  • È possibile specificare che Autoscaler del cluster Kubernetes debba individuare il pool di nodi (o i pool di nodi) da gestire, utilizzando il parametro nodeGroupAutoDiscovery per specificare le tag di corrispondenza. È possibile specificare sia tag definite che tag in formato libero (per ulteriori informazioni sull'aggiunta di tag ai pool di nodi, vedere Applicazione di tag ai pool di nodi). Il ridimensionatore automatico del cluster Kubernetes gestisce i pool di nodi con tag corrispondenti alle tag specificate. Si noti che il parametro nodeGroupAutoDiscovery è supportato con Cluster Autoscaler versione 1.30.3, versione 1.31.1, e versione 1.32.0 e successive.

Non è possibile specificare sia il parametro nodes che il parametro nodeGroupAutoDiscovery nello stesso file cluster-autoscaler-add-on.json. I due parametri si escludono a vicenda.

Per utilizzare il parametro nodes per specificare in modo esplicito i pool di nodi da gestire, procedere come segue.

  1. Nel file cluster-autoscaler-add-on.json individuare le seguenti righe del modello:

          "key": "nodes",
          "value": "1:5:{{ node pool ocid 1 }}"

    Il valore del parametro nodes ha il formato seguente:

    "value": "<min-nodes>:<max-nodes>:<nodepool-ocid>"

    Dove:

    • <min-nodes> è il numero minimo di nodi consentiti nel pool di nodi. L'Autoscaler del cluster Kubernetes non ridurrà il numero di nodi al di sotto di questo numero.
    • <max-nodes> è il numero massimo di nodi consentiti nel pool di nodi. L'Autoscaler del cluster Kubernetes non aumenterà il numero di nodi sopra questo numero. Assicurarsi che il numero massimo di nodi specificato non superi i limiti della tenancy per la forma del nodo di lavoro definita per il pool di nodi.
    • <nodepool-ocid> è l'OCID del pool di nodi da gestire.
  2. Modificare il valore del parametro nodes per specificare:

    • Il numero minimo di nodi consentiti nel pool di nodi. ad esempio 1.
    • Il numero massimo di nodi consentiti nel pool di nodi. ad esempio 5.
    • L'OCID del pool di nodi che si desidera gestire dal gestore automatico del cluster Kubernetes.

    Ad esempio:

          "key": "nodes",
          "value": "2:4:ocid1.nodepool.oc1.iad.aaaaaaaaae____ydq"
  3. Se si desidera che il gestore automatico cluster Kubernetes gestisca un secondo pool di nodi nel cluster, aggiungere i dettagli appropriati per il secondo pool di nodi al valore del parametro nodes. Ad esempio:
          "key": "nodes",
          "value": "2:4:ocid1.nodepool.oc1.iad.aaaaaaaaae____ydq, 1:5:ocid1.nodepool.oc1.iad.aaaaaaaaah____bzr"
  4. Se si desidera che il gestore automatico cluster Kubernetes gestisca più pool di nodi, aggiungere i dettagli appropriati al valore del parametro nodes.
  5. Salvare il file cluster-autoscaler-add-on.json.

Per utilizzare il parametro nodeGroupAutoDiscovery per specificare che Autoscaler del cluster Kubernetes consente di individuare i pool di nodi da gestire:

  1. Nel file cluster-autoscaler-add-on.json creato, individuare le seguenti righe del modello:

          "key": "nodes",
          "value": "1:5:{{ node pool ocid 1 }}"
  2. Eliminare le righe che specificano il parametro nodes e sostituirle con le righe seguenti:

          "key": "nodeGroupAutoDiscovery",
          "value": "compartmentId:{{ compartment ocid }},nodepoolTags:{{ tagKey1 }}={{ tagValue1 }}&{{ tagKey2 }}={{ tagValue2 }},min:{{ min }},max:{{ max }}"

    Il formato del valore del parametro nodeGroupAutoDiscovery è il seguente:

    "value": "compartmentId:{{<compartment-ocid>}},nodepoolTags:{{<tagKey1>}}={{<tagValue1>}}&{{<tagKey2>}}={{<tagValue2>}},min:{{<min-nodes>}},max:{{<max-nodes>}}"

    Dove:

    • <compartment-ocid> è l'OCID del compartimento in cui si trova il pool di nodi.
    • {{<tagKey1>}}={{<tagValue1>}} specifica il nome della prima tag corrispondente e il valore della tag corrispondente.
    • {{<tagKey2>}}={{<tagValue2>}} specifica facoltativamente il nome di una seconda tag da abbinare e il valore di tale tag da abbinare. È possibile specificare il numero di tag desiderato (non si è limitati a due). Se si specificano più tag, tutte le tag devono corrispondere.
    • <min-nodes> è il numero minimo di nodi consentiti nel pool di nodi. L'Autoscaler del cluster Kubernetes non ridurrà il numero di nodi al di sotto di questo numero.
    • <max-nodes> è il numero massimo di nodi consentiti nel pool di nodi. L'Autoscaler del cluster Kubernetes non aumenterà il numero di nodi sopra questo numero. Assicurarsi che il numero massimo di nodi specificato non superi i limiti della tenancy per la forma del nodo di lavoro definita per il pool di nodi.
  3. Modificare il valore del parametro nodeGroupAutoDiscovery per specificare:

    • OCID del compartimento in cui si trova il pool di nodi.
    • Uno o più nomi di tag e valori di tag corrispondenti.
    • Numero minimo di nodi consentiti nel pool di nodi. ad esempio 1.
    • Numero massimo di nodi consentiti nel pool di nodi. ad esempio 5.

    Ad esempio:

          "key": "nodeGroupAutoDiscovery",
          "value": "compartmentId:ocid1.compartment.oc1..aaaaaaaa______t7a,nodepoolTags:managedby=ca,min:1,max:5"
  4. Se si desidera che Kubernetes Cluster Autoscaler gestisca più pool di nodi, in compartimenti diversi o con nomi di tag e valori di tag diversi o con numeri minimi e massimi diversi di nodi consentiti, aggiungere i dettagli appropriati al valore del parametro nodeGroupAutoDiscovery, separati da un punto e virgola.

    Ad esempio:

          "key": "nodeGroupAutoDiscovery",
          "value": "compartmentId:ocid1.compartment.oc1..aaaaaaaa______t7a,nodepoolTags:managedby=ca,min:1,max:5;compartmentId:ocid1.compartment.oc1..aaaaaaaa______jyv,nodepoolTags:managedby=ca,min:2,max:6"
  5. Salvare il file cluster-autoscaler-add-on.json.

Passo 2c: includere impostazioni di configurazione aggiuntive

  1. Nel file cluster-autoscaler-add-on.json creato, utilizzare il parametro authType per specificare la modalità di impostazione di Kubernetes Cluster Autoscaler per accedere ai servizi e alle risorse OCI:

    • Se è stato impostato un principal istanza per consentire all'Autoscaler del cluster Kubernetes di accedere ai servizi e alle risorse OCI, impostare il parametro authType su instance.
    • Se è stato impostato un principal di identità del carico di lavoro per consentire all'Autoscaler del cluster Kubernetes di accedere ai servizi e alle risorse OCI, impostare il parametro authType su workload.

    Ad esempio:

          "key": "authType",
          "value": "workload"

    Si noti che instance è il valore predefinito del parametro authType, pertanto se non si specifica in modo esplicito un valore per authType, Kubernetes Cluster Autoscaler utilizza l'identità dell'istanza in cui è in esecuzione per accedere ai servizi e alle risorse OCI. Per ulteriori informazioni, vedere Passo 1: impostazione di un principal dell'istanza o di un principal dell'identità del carico di lavoro per abilitare il componente aggiuntivo di scala automatica cluster per l'accesso ai pool di nodi.

  2. Nel file cluster-autoscaler-add-on.json creato, specificare altri parametri per l'Autoscaler del cluster Kubernetes. Per informazioni sui parametri che è possibile impostare, vedere Parametri Autoscaler del cluster Kubernetes supportati.

    Ad esempio:

    {
      "configurations": [
        {
          "key": "nodes",
          "value": "2:4:ocid1.nodepool.oc1.iad.aaaaaaaaae____ydq, 1:5:ocid1.nodepool.oc1.iad.aaaaaaaaah____bzr"
        },
        {
          "key": "authType",
          "value": "workload"
        },
        {
          "key": "numOfReplicas",
          "value": "1"
        },
        {
          "key": "maxNodeProvisionTime",
          "value": "15m"
        },
        {
          "key": "scaleDownDelayAfterAdd",
          "value": "15m"
        },
        {
          "key": "scaleDownUnneededTime",
          "value": "10m"
        },
        {
          "key": "annotations",
          "value": "{\"prometheus.io/scrape\":\"true\",\"prometheus.io/port\":\"8086\"}"
        }
      
  3. Salvare e chiudere il file cluster-autoscaler-add-on.json.

Passo 3: Distribuire il componente aggiuntivo Cluster Autoscaler sul cluster e confermare la distribuzione riuscita

Nota

Queste istruzioni descrivono come distribuire il componente aggiuntivo Cluster Autoscaler utilizzando l'interfaccia CLI e un file di configurazione. Puoi anche distribuire il componente aggiuntivo utilizzando la console e l'API. Per ulteriori informazioni, vedere Installazione di un componente aggiuntivo cluster.

  1. Se non è già stato fatto, attenersi alla procedura per impostare il file di configurazione kubeconfig del cluster e (se necessario) impostare la variabile di ambiente KUBECONFIG in modo che punti al file. Si noti che è necessario impostare il proprio file kubeconfig. Non è possibile accedere a un cluster utilizzando un file kubeconfig impostato da un altro utente. Vedere Impostazione dell'accesso al cluster.
  2. Verificare che il componente aggiuntivo Cluster Autoscaler non sia già stato installato sul cluster immettendo:
    oci ce cluster list-addons --cluster-id <cluster-ocid>

    dove <cluster-ocid> è l'OCID del cluster su cui si desidera distribuire il componente aggiuntivo Cluster Autoscaler.

  3. Distribuire il componente aggiuntivo Cluster Autoscaler sul cluster immettendo:

    oci ce cluster install-addon --addon-name ClusterAutoscaler --from-json file://<path-to-config-file> --cluster-id <cluster-ocid>

    Dove:

    • --cluster-id <cluster-ocid> è l'OCID del cluster in cui si desidera distribuire il componente aggiuntivo Cluster Autoscaler.
    • --from-json file://<path-to-config-file> specifica la posizione del file di configurazione del componente aggiuntivo Cluster Autoscaler da utilizzare durante la distribuzione del componente aggiuntivo. Ad esempio, --from-json file://./cluster-autoscaler-add-on.json

    Ad esempio:

    oci ce cluster install-addon --addon-name ClusterAutoscaler --from-json file://./cluster-autoscaler-add-on.json --cluster-id ocid1.cluster.oc1.iad.aaaaaaaam______dfr

    Viene creata una richiesta di lavoro per installare le risorse Kubernetes richieste dal cluster Autoscaler Kubernetes nel cluster.

  4. Facoltativo: visualizzare lo stato dei pod Autoscaler del cluster Kubernetes per osservare l'avanzamento della distribuzione, immettendo:
    kubectl get pods -n kube-system | grep cluster-autoscaler
  5. Visualizzare i log di Autoscaler del cluster Kubernetes per verificare che il componente aggiuntivo sia stato distribuito correttamente e stia attualmente monitorando il carico di lavoro dei pool di nodi nel cluster, immettendo:
    kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler

Passo 4: Visualizzare l'operazione di scala

Puoi guardare l'Autoscaler del cluster Kubernetes distribuito mentre ridimensiona automaticamente i nodi di lavoro in un pool di nodi. Per rendere più ovvia l'operazione di ridimensionamento, considera i seguenti suggerimenti (nota che sono solo a scopo di osservazione e potrebbero essere contrari ai suggerimenti mostrati nei raccomandazioni quando si utilizza il ridimensionatore automatico del cluster Kubernetes negli ambienti di produzione):

  • Osservare un cluster con un pool a nodo singolo (il pool di nodi gestito da Kubernetes Cluster Autoscaler).
  • Se il cluster che si desidera osservare dispone di più pool di nodi, limitare l'esecuzione dei pod sui nodi nel pool a nodo singolo gestito da Kubernetes Cluster Autoscaler. Vedere Assegnazione dei pod ai nodi nella documentazione di Kubernetes.
  • Iniziare con un nodo nel pool di nodi gestito da Autoscaler del cluster Kubernetes.
  • Nel file di configurazione Autoscaler del cluster Kubernetes è possibile specificare il numero massimo di nodi consentiti nel pool di nodi. Assicurarsi che il numero massimo di nodi specificato non superi il limite della tenancy per la forma del nodo di lavoro definita per il pool di nodi.

Per visualizzare il ridimensionamento automatico dei nodi di lavoro del cluster Kubernetes:

  1. Confermare il numero totale corrente di nodi di lavoro nel cluster immettendo:
    kubectl get nodes
  2. Definire un'applicazione Nginx di esempio creando un file denominato nginx.yaml in un editor di testo, con il seguente contenuto:

    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"

    Si noti che è stato impostato un limite di richiesta di risorsa.

  3. Per distribuire l'applicazione di esempio, immettere:
    kubectl create -f nginx.yaml
  4. Aumentare il numero di pod nella distribuzione a 100 (da 2) immettendo:
    kubectl scale deployment nginx-deployment --replicas=100

    Kubernetes Cluster Autoscaler ora aggiunge nodi di lavoro al pool di nodi per soddisfare il carico di lavoro aumentato.

  5. Osservare lo stato della distribuzione immettendo:
    kubectl get deployment nginx-deployment --watch
  6. Dopo alcuni minuti, visualizzare il numero totale aumentato di nodi di lavoro nel cluster immettendo:
    kubectl get nodes

    Si noti che il numero di nodi di lavoro visualizzati dipenderà dalla forma del nodo di lavoro e dal numero massimo di nodi specificati nel file di configurazione Autoscaler del cluster Kubernetes.

Passo 5: eseguire il cleanup

  1. Eliminare l'applicazione Nginx di esempio immettendo:
    kubectl delete deployment nginx-deployment
  2. Dopo dieci minuti, confermare che i nodi di lavoro sono stati ridotti al numero originale immettendo:
    kubectl get nodes

Tenere presente che dopo l'eliminazione dell'applicazione Nginx di esempio e l'attesa, è possibile che vengano visualizzati meno nodi di lavoro, ma comunque più del numero originale. Ciò è probabilmente dovuto al fatto che i pod del sistema kube sono stati programmati per l'esecuzione su tali nodi. I pod del sistema kube possono impedire all'Autoscaler del cluster Kubernetes di rimuovere i nodi perché il parametro skip-nodes-with-system-pods dell'Autoscaler è impostato su true per impostazione predefinita.

Aggiornamento del componente aggiuntivo Cluster Autoscaler

Nota

In queste istruzioni viene descritto come aggiornare il componente aggiuntivo Cluster Autoscaler utilizzando l'interfaccia CLI e un file di configurazione. Puoi anche aggiornare il componente aggiuntivo utilizzando la console e l'API. Per ulteriori informazioni, vedere Aggiornamento di un componente aggiuntivo cluster.

  1. Aprire il file di configurazione del componente aggiuntivo Cluster Autoscaler in un editor appropriato

  2. Aggiungere, rimuovere o modificare i parametri di configurazione nel file di configurazione in base alle esigenze. Per informazioni sui parametri che è possibile impostare, vedere Parametri Autoscaler del cluster Kubernetes supportati.

  3. Per aggiornare il componente aggiuntivo Cluster Autoscaler mediante il comando oci ce cluster update-addon, immettere il comando seguente:
    oci ce cluster update-addon --addon-name ClusterAutoscaler --from-json file://<path-to-config-file> --cluster-id <cluster-ocid>

    Dove:

    • --cluster-id <cluster-ocid> è l'OCID del cluster in cui si desidera aggiornare il componente aggiuntivo Cluster Autoscaler.
    • --from-json file://<path-to-config-file> specifica la posizione del file di configurazione dei componenti aggiuntivi Cluster Autoscaler da utilizzare durante l'aggiornamento del componente aggiuntivo. Ad esempio, --from-json file://./cluster-autoscaler-add-on.json

    Ad esempio:

    oci ce cluster update-addon --addon-name ClusterAutoscaler --from-json file://./cluster-autoscaler-add-on.json --cluster-id ocid1.cluster.oc1.iad.aaaaaaaam______dfr

    Viene creata una richiesta di lavoro per aggiornare le risorse Kubernetes richieste dall'Autoscaler del cluster Kubernetes.

  4. Facoltativo: visualizzare lo stato dei pod Autoscaler del cluster Kubernetes per osservare lo stato di avanzamento, immettendo:
    kubectl get pods -n kube-system | grep cluster-autoscaler

Disabilitazione (e rimozione) del componente aggiuntivo di scala automatica cluster

Nota

In queste istruzioni viene descritto come disabilitare e rimuovere il componente aggiuntivo Cluster Autoscaler utilizzando l'interfaccia CLI e un file di configurazione. Puoi anche aggiornare il componente aggiuntivo utilizzando la console e l'API. Per ulteriori informazioni, vedere Disabilitazione (e rimozione) di un componente aggiuntivo del cluster.

  1. Disabilitare (e facoltativamente rimuovere) il componente aggiuntivo Cluster Autoscaler mediante il comando oci ce cluster disable-addon, immettendo:

    oci ce cluster disable-addon --addon-name ClusterAutoscaler --cluster-id <cluster-ocid> --is-remove-existing-add-on <true|false>

    Dove:

    • --cluster-id <cluster-ocid> è l'OCID del cluster in cui si desidera disabilitare (e facoltativamente rimuovere) il componente aggiuntivo Cluster Autoscaler.
    • --is-remove-existing-add-on <true|false> specifica di rimuovere completamente il componente aggiuntivo Cluster Autoscaler (se impostato su true) o di non rimuovere il componente aggiuntivo, ma di disabilitarlo e di non utilizzarlo (se impostato su false). Se disabiliti il componente aggiuntivo, Oracle non lo aggiorna più automaticamente quando diventano disponibili nuove versioni.

    Ad esempio:

    oci ce cluster disable-addon --addon-name ClusterAutoscaler --cluster-id ocid1.cluster.oc1.iad.aaaaaaaam______dfr --is-remove-existing-add-on true

    Viene creata una richiesta di lavoro per disabilitare (e facoltativamente rimuovere) il gestore automatico cluster Kubernetes.

  2. Facoltativo: visualizzare lo stato dei pod Autoscaler del cluster Kubernetes per osservare lo stato di avanzamento, immettendo:
    kubectl get pods -n kube-system | grep cluster-autoscaler