Un modo per migliorare le prestazioni delle applicazioni basate su container è aumentare le risorse del cluster aggiungendo nodi o risorse, come CPU o memoria, ai nodi. Tuttavia, questo approccio può diventare costoso. Ottimizzare i nodi del cluster per prestazioni migliori ti aiuta a ottimizzare l'utilizzo delle risorse per i tuoi carichi di lavoro in modo economicamente vantaggioso. Questo documento descrive come utilizzare l'operatore di ottimizzazione delle prestazioni per ottimizzare i nodi worker per migliorare le prestazioni del carico di lavoro per Google Distributed Cloud.
Per ottenere il massimo dall'hardware e dal software sottostanti, diversi tipi di applicazioni, in particolare quelle ad alte prestazioni, traggono vantaggio dalla regolazione delle impostazioni dei nodi come le seguenti:
- CPU dedicate per carichi di lavoro sensibili alle prestazioni
- CPU riservate per i servizi e i daemon Kubernetes standard
- Dimensioni delle pagine di memoria aumentate con hugepage da 1 GiB (gibibyte) o 2 MiB (mebibyte)
- Distribuzione del carico di lavoro in base all'architettura di sistema, ad esempio processori multi-core e NUMA
Con l'operatore di ottimizzazione delle prestazioni, puoi configurare le impostazioni delle prestazioni a livello di nodo creando risorse personalizzate Kubernetes che applicano le configurazioni delle prestazioni. Ecco i vantaggi:
Interfaccia di configurazione singola e unificata:con Performance Tuning Operator, aggiorni uno o più manifest
PerformanceTuningProfile
che possono essere applicati ai nodi worker con i selettori di nodi. Non è necessario configurare ogni nodo singolarmente con più impostazioni di configurazione e criteri. Questo approccio ti consente di gestire le configurazioni a livello di nodo e di container in modo unico e unificato.Persistenza e affidabilità: ottieni anche tutta l'affidabilità che Kubernetes offre con la sua architettura ad alta disponibilità. Le risorse personalizzate
PerformanceTuningProfile
possono essere aggiornate in qualsiasi momento e le relative impostazioni vengono mantenute durante le operazioni principali del cluster, ad esempio gli upgrade.
Performance Tuning Operator funziona orchestrando le seguenti funzionalità e strumenti di Kubernetes e del sistema operativo (OS) correlati alle prestazioni:
Per evitare conflitti, quando utilizzi Performance Tuning Operator, ti consigliamo di non utilizzare in modo indipendente gli strumenti e le funzionalità di Kubernetes e del sistema operativo menzionati in precedenza.
Prerequisiti e limitazioni
Di seguito sono riportati i prerequisiti e le limitazioni per l'utilizzo di Performance Tuning Operator:
Solo Red Hat Enterprise Linux (RHEL):l'operatore di ottimizzazione delle prestazioni è supportato solo per i nodi che eseguono versioni supportate di RHEL.
Cluster utente o ibrido con nodi worker:l'operatore di ottimizzazione delle prestazioni è supportato per l'utilizzo solo con i nodi worker nei cluster utente o ibridi. L'utilizzo di Performance Tuning Operator per ottimizzare i nodi del control plane non è supportato. Performance Tuning Operator utilizza un selettore di nodi per determinare come applicare i profili di ottimizzazione. Per assicurarti che i profili di ottimizzazione vengano applicati solo ai nodi worker, la risorsa personalizzata
nodeSelector
in ogni profilo deve includere l'etichetta standard del nodo workernode-role.kubernetes.io/worker: ""
. SenodeSelector
in un profilo di ottimizzazione corrisponde alle etichette di un nodo del piano di controllo, il nodo non viene ottimizzato e viene impostata una condizione di errore. Per ulteriori informazioni sulle condizioni di errore, consulta Controllare lo stato. Assicurati che il cluster funzioni correttamente prima di installare l'operatore di ottimizzazione delle prestazioni e applicare i profili di ottimizzazione.TuneD 2.22.0: Performance Tuning Operator richiede che TuneD versione 2.22.0 sia preinstallato nei nodi di lavoro che intendi ottimizzare. Per ulteriori informazioni su TuneD, incluse le istruzioni di installazione, consulta Guida introduttiva a TuneD nella documentazione di Red Hat Enterprise Linux. L'operatore di ottimizzazione delle prestazioni utilizza TuneD con il profilo
cpu-partitioning
. Se non hai questo profilo, puoi installarlo con il seguente comando:dnf install -y tuned-profiles-cpu-partitioning
Requisiti delle risorse del workload:per ottenere il massimo dalla messa a punto delle prestazioni, devi avere una buona conoscenza dei requisiti di memoria e CPU (richieste e limiti delle risorse) per i tuoi workload.
Risorse nodo disponibili:trova le risorse di CPU e memoria per i tuoi nodi. Puoi ottenere informazioni dettagliate su CPU e memoria per il tuo nodo rispettivamente nei file
/proc/cpuinfo
e/proc/meminfo
. Puoi anche utilizzarekubectl get nodes
per recuperare la quantità di risorse di calcolo e memoria (status.allocatable
) disponibili per i pod in un nodo worker.Richiede lo svuotamento:nell'ambito della procedura di ottimizzazione, l'operatore di ottimizzazione delle prestazioni svuota prima i nodi, poi applica un profilo di ottimizzazione. Di conseguenza, i nodi potrebbero segnalare lo stato
NotReady
durante l'ottimizzazione delle prestazioni. Ti consigliamo di utilizzare la strategia di aggiornamento in sequenza (spec.updateStrategy.type: rolling
) anziché un aggiornamento batch per ridurre al minimo l'indisponibilità del carico di lavoro.Richiede il riavvio:affinché le modifiche alla configurazione dei nodi vengano applicate, l'operatore di ottimizzazione delle prestazioni riavvia il nodo dopo aver applicato il profilo di ottimizzazione.
Installa l'operatore di ottimizzazione delle prestazioni
L'operatore di ottimizzazione delle prestazioni è costituito principalmente da due controller (un deployment e un DaemonSet)
che interagiscono tra loro per ottimizzare i nodi in base alle impostazioni del profilo.
Per impostazione predefinita, Performance Tuning Operator non è installato con Google Distributed Cloud. Scarichi
i manifest dell'operatore di ottimizzazione delle prestazioni da Cloud Storage e utilizzi kubectl apply
per
creare risorse dell'operatore di ottimizzazione delle prestazioni sul cluster.
Per attivare l'ottimizzazione delle prestazioni con i valori predefiniti per il cluster:
Crea una directory
performance-tuning
sulla workstation di amministrazione.Dalla directory
performance-tuning
, scarica l'ultimo pacchetto dell'operatore di ottimizzazione delle prestazioni dal bucket di rilascio di Cloud Storage:gcloud storage cp gs://anthos-baremetal-release/node-performance-tuning/0.1.0-gke.47 . --recursive
I file scaricati includono i manifest per il deployment
performance-tuning-operator
e il DaemonSetnodeconfig-controller-manager
. Sono inclusi anche i manifest per le funzioni correlate, come controllo dell'accesso basato sui ruoli (RBAC) e il controllo dinamico dell'ammissione.In qualità di utente root, applica tutti i manifest dell'operatore di ottimizzazione del rendimento in modo ricorsivo al tuo cluster utente (o ibrido):
kubectl apply -f performance-tuning --recursive –-kubeconfig USER_KUBECONFIG
Una volta creati e in esecuzione Deployment e DaemonSet, la tua unica interazione consiste nel modificare e applicare i manifest
PerformanceTuningProfile
.
Esamina i requisiti delle risorse per i tuoi carichi di lavoro
Prima di poter ottimizzare i nodi, devi comprendere i requisiti di risorse di calcolo e memoria dei tuoi carichi di lavoro. Se i nodi worker dispongono di risorse sufficienti, possono essere ottimizzati per fornire memoria garantita (standard e hugepages) per i tuoi carichi di lavoro nella classe di qualità del servizio (QoS) garantita.
Kubernetes assegna classi QoS a ciascun pod in base ai vincoli di risorse specificati per i container associati. Kubernetes utilizza quindi le classi QoS per determinare come pianificare i pod e i container e allocare le risorse ai carichi di lavoro. Per sfruttare al meglio la funzionalità di ottimizzazione dei nodi per i tuoi carichi di lavoro, questi devono avere impostazioni di richieste o limiti di risorse di CPU o memoria.
Per assegnare una classe QoS garantita, i tuoi pod devono soddisfare i seguenti requisiti:
- Per ogni container nel pod:
- Specifica i valori per le richieste di risorse di memoria
(
spec.containers[].resources.requests.memory
) e i limiti (spec.containers[].resources.limits.memory
). - Il valore dei limiti di memoria deve essere uguale al valore delle richieste di memoria.
- Specifica i valori per le richieste di risorse CPU
(
spec.containers[].resources.requests.cpu
) e i limiti (spec.containers[].resources.limits.cpu
). - Il valore dei limiti di CPU deve essere uguale al valore delle richieste di CPU.
- Specifica i valori per le richieste di risorse di memoria
(
Il seguente estratto della specifica del pod mostra le impostazioni delle risorse della CPU che soddisfano i requisiti della classe QoS garantita:
spec:
containers:
- name: sample-app
image: images.my-company.example/app:v4
resources:
requests:
memory: "128Mi"
cpu: "2"
limits:
memory: "128Mi"
cpu: "2"
...
Quando recuperi i dettagli del pod con kubectl get pods
, la sezione status
deve includere la classe QoS assegnata, come mostrato nell'esempio seguente:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2023-09-22T21:05:23Z"
generateName: my-deployment-6fdd69987d-
labels:
app: metrics
department: sales
pod-template-hash: 6fdd69987d
name: my-deployment-6fdd69987d-7kv42
namespace: default
...
spec:
containers:
...
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2023-09-22T21:05:23Z"
status: "True"
type: Initialized
...
qosClass: BestEffort
startTime: "2023-09-22T21:05:23Z"
Per saperne di più sulle classi QoS, consulta la sezione Classi di qualità del servizio dei pod nella documentazione di Kubernetes. Per istruzioni sulla configurazione di pod e container in modo che venga assegnata una classe QoS, consulta Configurare la qualità del servizio per i pod
Requisiti della CPU
Quando regoli un nodo, puoi specificare un insieme di core CPU riservati
(spec.cpu.reservedCPUs
) per l'esecuzione di daemon di sistema Kubernetes come kubelet
e il runtime del container. Lo stesso insieme di CPU riservate esegue anche i daemon del sistema operativo, come sshd
e udev
. I core CPU rimanenti vengono
allocati come isolati. Le CPU isolate sono destinate ad applicazioni CPU-bound, che richiedono tempo CPU dedicato senza interferenze da altre applicazioni o interruzioni dalla rete o da altri dispositivi.
Per pianificare un pod sulle CPU isolate di un nodo worker:
Configura il pod per una qualità del servizio (QoS) garantita.
I requisiti e i limiti della CPU devono essere specificati in numeri interi. Se specifichi risorse CPU parziali nella specifica del pod, ad esempio
cpu: 0.5
ocpu: 250m
(250 millicore), la pianificazione non può essere garantita.
Requisiti di memoria
Quando ottimizzi un nodo con Performance Tuning Operator, puoi creare pagine enormi e associarle ai nodi NUMA (non-uniform memory access) sulla macchina. In base alle impostazioni di pod e nodi, i pod possono essere pianificati con l'affinità NUMA-node.
Crea un profilo di ottimizzazione delle prestazioni
Dopo aver installato l'operatore di ottimizzazione delle prestazioni, interagisci solo con il cluster che esegue
i tuoi workload. Crea risorse personalizzate PerformanceTuningProfile
direttamente
sul cluster utente o sul cluster ibrido, non sul cluster di amministrazione. Ogni risorsa
PerformanceTuningProfile
contiene un insieme di parametri che specificano
la configurazione delle prestazioni applicata a un nodo.
Il nodeSelector
nella risorsa determina i nodi a cui viene applicato il profilo di ottimizzazione. Per applicare un profilo a un nodo, inserisci l'etichetta
della coppia chiave-valore corrispondente sul nodo. Un profilo di ottimizzazione viene applicato ai nodi che hanno tutte le etichette specificate nel campo nodeSelector
.
Puoi creare più risorse PerformanceTuningProfile
in un cluster. Se
più di un profilo corrisponde a un determinato nodo, viene impostata una condizione di errore in
status
della risorsa personalizzata PerformanceTuningProfile
. Per ulteriori
informazioni sulla sezione status
, vedi Controllare lo stato.
Imposta lo spazio dei nomi per la risorsa personalizzata PerformanceTuningProfile
su
kube-system
.
Per ottimizzare uno o più nodi worker:
Modifica il manifest
PerformanceTuningProfile
.Per informazioni su ogni campo nel manifest e un manifest di esempio, consulta il riferimento alla risorsa
PerformanceTuningProfile
.(Facoltativo) Per i nodi di lavoro a cui stai applicando un profilo, aggiungi etichette che corrispondano alla coppia chiave-valore
spec.nodeSelector
.Se nella risorsa personalizzata
PerformanceTuningProfile
non viene specificata alcuna coppia chiave-valorespec.nodeSelector
, il profilo viene applicato a tutti i nodi worker.Applica il manifest al cluster.
kubectl apply -f PROFILE_MANIFEST --kubeconfig KUBECONFIG
Sostituisci quanto segue:
PROFILE_MANIFEST
: il percorso del file manifest per la risorsa personalizzataPerformanceTuningProfile
.KUBECONFIG
: il percorso del file kubeconfig del cluster.
Rimuovere un profilo di ottimizzazione
Per reimpostare un nodo sullo stato originale non modificato:
Elimina la risorsa personalizzata
PerformanceTuningProfile
dal cluster.Aggiorna o rimuovi le etichette sul nodo in modo che non venga selezionato di nuovo dal profilo di ottimizzazione.
Se al nodo sono associati più profili di sintonizzazione, ripeti i passaggi precedenti, se necessario.
Mettere in pausa un profilo di ottimizzazione
Se devi eseguire la manutenzione del cluster, puoi mettere in pausa temporaneamente
l'ottimizzazione modificando la risorsa personalizzata PerformanceTuningProfile
. Ti consigliamo di sospendere l'ottimizzazione prima di eseguire operazioni critiche del cluster, ad esempio un upgrade del cluster.
Un'applicazione del profilo non riuscita è un altro caso in cui potresti mettere in pausa la sintonizzazione. Se il processo di ottimizzazione non va a buon fine, il controller potrebbe continuare a tentare di ottimizzare il nodo, il che potrebbe comportare il riavvio ripetuto del nodo. Se noti che lo stato del nodo passa dallo stato pronto a quello non pronto, metti in pausa la regolazione in modo da poter ripristinare lo stato interrotto.
Per mettere in pausa la sintonizzazione:
Modifica il manifest della risorsa personalizzata
PerformanceTuningProfile
per impostarespec.paused
sutrue
.Utilizza
kubectl apply
per aggiornare la risorsa.
Quando l'ottimizzazione delle prestazioni viene sospesa, il controller dell'operatore di ottimizzazione delle prestazioni interrompe tutte le sue operazioni. La sospensione evita il rischio che le operazioni del controller Performance Tuning Operator siano in conflitto con le operazioni di qualsiasi controller Google Distributed Cloud.
PerformanceTuningProfile
riferimento alla risorsa
Questa sezione descrive ciascuno dei campi nella risorsa personalizzata PerformanceTuningProfile
. Questa risorsa viene utilizzata per creare un profilo di ottimizzazione per uno o più nodi del cluster. Tutti i campi della risorsa sono modificabili dopo la creazione del profilo. I profili devono trovarsi nello spazio dei nomi kube-system
.
Il seguente manifest del profilo di esempio numa
per i nodi con 8 core CPU
specifica le seguenti allocazioni di risorse:
4 core CPU (
0-3
) sono riservati all'overhead del sistema Kubernetes.4 core CPU (
4-7
) sono riservati solo ai carichi di lavoro.Per impostazione predefinita, la memoria del nodo è suddivisa in pagine da 2 MiB anziché nelle pagine standard da 4 Ki.
10 pagine di memoria di 1 GiB sono riservate all'utilizzo da parte del nodo NUMA 0.
5 pagine di memoria di 2 MiB sono riservate all'utilizzo da parte del nodo NUMA 1.
Topology Manager utilizza la normativa best effort per la pianificazione dei carichi di lavoro.
apiVersion: anthos.gke.io/v1alpha1
kind: PerformanceTuningProfile
metadata:
name: numa
namespace: kube-system
spec:
cpu:
isolatedCPUs: 4-7
reservedCPUs: 0-3
defaultHugepagesSize: 2M
nodeSelector:
app: database
node-role.kubernetes.io/worker: ""
pages:
- count: 10
numaNode: 0
size: 1G
- count: 5
numaNode: 1
size: 2M
topologyManagerPolicy: best-effort
Puoi recuperare la definizione della risorsa personalizzata PerformanceTuningProfile
correlata dal gruppo anthos.gke.io
nel tuo cluster. La definizione della risorsa personalizzata viene installata dopo che l'annotazione della funzionalità di anteprima è stata aggiunta alla risorsa del cluster autogestito.
Configurazione della CPU
Proprietà | Descrizione |
---|---|
cpu.reservedCPUs |
Obbligatorio. Modificabile. Stringa. Questo campo definisce un insieme di core CPU da
riservare ai daemon di sistema Kubernetes, come kubelet, il runtime
del container e il rilevatore problemi nodo. Questi core della CPU vengono utilizzati anche per
i daemon di sistema del sistema operativo (OS), come sshd e
udev .
Il campo |
cpu.isolatedCPUs |
Facoltativo. Modificabile. Stringa. Il campo cpu.isolatedCPUs
definisce un insieme di CPU utilizzate esclusivamente per applicazioni
sensibili alle prestazioni. CPU Manager pianifica i container solo sulle CPU non riservate, in base alle
classi di qualità del servizio (QoS) di Kubernetes.
Per garantire che i carichi di lavoro vengano eseguiti sulle CPU isolate,
configura i pod con la classe QoS garantita e
assegna una risorsa CPU al pod o al container.
Per la pianificazione garantita dei pod, devi specificare unità CPU intere, non
risorse CPU parziali (cpu: "0.5" ).
apiVersion: v1 kind: Pod ... spec: containers: ... resources: limits: cpu: "1" requests: cpu: "1" ... Massimizzare le CPU isolate per i carichi di lavoro offre il miglior vantaggio
in termini di prestazioni. Questo campo accetta un elenco di numeri di CPU o intervalli di numeri di CPU.
Assicurati che l'elenco delle CPU non si sovrapponga all'elenco specificato con
|
cpu.balanceIsolated |
Facoltativo. Modificabile. Valore booleano. Predefinito: true . Questo campo
specifica se il set di CPU isolate è idoneo o meno al bilanciamento del carico automatico
dei carichi di lavoro tra le CPU. Quando imposti questo campo su
false , i tuoi carichi di lavoro devono assegnare esplicitamente ogni thread
a una CPU specifica per distribuire il carico tra le CPU. Con le assegnazioni esplicite della CPU, ottieni le prestazioni più prevedibili per i carichi di lavoro garantiti, ma aggiungi maggiore complessità ai tuoi carichi di lavoro. |
cpu.globallyEnableIRQLoadBalancing |
Obbligatorio. Modificabile. Valore booleano. Predefinito: true . Questo campo
specifica se abilitare o meno il bilanciamento del carico delle richieste di interruzione (IRQ)
per il set di CPU isolato. |
Configurazione della memoria
Proprietà | Descrizione |
---|---|
defaultHugePageSize |
Facoltativo. Modificabile. Enumerazione: 1G o 2M .
Questo campo definisce le dimensioni predefinite di hugepage nei parametri di avvio del kernel.
Le hugepage vengono allocate all'avvio, prima che la memoria venga frammentata.
È importante notare che l'impostazione della dimensione predefinita di hugepages su 1G
rimuove tutte le cartelle correlate a 2M dal nodo. Una dimensione hugepage predefinita di
1G impedisce di configurare hugepage da 2 MB nel nodo.
|
pages |
Facoltativo. Modificabile. Numero intero. Questo campo specifica il numero di hugepage da creare all'avvio. Questo campo accetta un array di pagine. Controlla la memoria disponibile per i nodi prima di specificare hugepages. Non richiedere più hugepage del necessario e non riservare tutta la memoria per le hugepage. Anche i tuoi workload hanno bisogno di memoria standard. |
Selezione nodo
Proprietà | Descrizione |
---|---|
nodeSelector |
Obbligatorio. Modificabile. Questo campo richiede sempre l'etichetta del nodo worker Kubernetes, node-role.kubernetes.io/worker:"" , che garantisce che l'ottimizzazione delle prestazioni venga eseguita solo sui nodi worker. Questo campo accetta
un'etichetta di nodo facoltativa come coppia chiave-valore. Le etichette delle coppie chiave-valore vengono
utilizzate per selezionare nodi worker specifici con etichette corrispondenti. Quando le etichette
nodeSelector corrispondono alle etichette di un nodo worker, il
profilo di rendimento viene applicato a quel nodo. Se non specifichi un'etichetta
chiave-valore nel tuo profilo, questa viene applicata a tutti i nodi worker nel
cluster.
Ad esempio, il seguente ... spec: nodeSelector: app: database node-role.kubernetes.io/worker: "" ... |
Configurazione di Kubelet
Proprietà | Descrizione |
---|---|
topologyManagerPolicy |
Facoltativo. Modificabile. Enumerazione: none , best-effort ,
restricted o single-numa-node . Predefinito: best-effort .
Questo campo specifica la policy Topology Manager di Kubernetes utilizzata per allocare le risorse per i tuoi carichi di lavoro, in base alla classe di qualità del servizio (QoS) assegnata. Per ulteriori informazioni su come vengono assegnate le classi QoS, consulta Configurare la qualità del servizio per i pod.
|
Operazioni sui profili
Proprietà | Descrizione |
---|---|
paused |
Facoltativo. Modificabile. Valore booleano. Imposta paused su
true per impedire temporaneamente ai controller DaemonSet di
ottimizzare i nodi selezionati. |
updateStrategy |
Facoltativo. Modificabile. Specifica la strategia per l'applicazione delle modifiche alla configurazione della messa a punto ai nodi selezionati. |
updateStrategy.rollingUpdateMaxUnavailalble |
Facoltativo. Modificabile. Numero intero. Predefinito: 1 . Specifica il
numero massimo di nodi che possono essere ottimizzati contemporaneamente. Questo campo
si applica solo quando type è impostato su rolling . |
updateStrategy.type |
Facoltativo. Modificabile. Enumerazione: batch o rolling .
Predefinito: rolling . Specifica come applicare gli aggiornamenti del profilo
ai nodi selezionati. Se vuoi applicare l'aggiornamento a tutti i nodi selezionati
contemporaneamente, imposta type su batch . Per impostazione predefinita,
gli aggiornamenti vengono implementati in sequenza sui singoli nodi, uno dopo l'altro. |
Verifica lo stato
Dopo la creazione o l'aggiornamento della risorsa personalizzata PerformanceTuningProfile
, un controller regola i nodi selezionati in base alla configurazione fornita nella risorsa. Per controllare lo stato di PerformanceTuningProfile
, stiamo esponendo
il seguente campo in Status
:
Proprietà | Descrizione |
---|---|
conditions |
L'attributo condition [condizione] rappresenta le ultime osservazioni disponibili dello stato attuale della risorsa profilo. |
conditions.lastTransitionTime |
Sempre restituito. Stringa (nel formato data e ora). L'ultima volta che la condizione è passata da uno stato all'altro. Questo orario indica in genere quando è cambiata la condizione sottostante. Se l'ora non è nota, indica quando è stato modificato il campo API. |
conditions.message |
Facoltativo. Stringa. Un messaggio leggibile che indica i dettagli della transizione. Questo campo potrebbe essere vuoto. |
conditions.observedGeneration |
Facoltativo. Numero intero. Se impostato, questo campo rappresenta il metadata.generation
in base al quale è stata impostata la condizione. Ad esempio, se metadata.generation
è 12 , ma status.condition[x].observedGeneration
è 9 , la condizione non è aggiornata in base allo stato attuale dell'istanza. |
conditions.reason |
Obbligatorio. Stringa. Il motivo dell'ultima transizione di condizione. |
conditions.status |
Obbligatorio. Stato della condizione: True , False o
Unknown . |
conditions.type |
Obbligatorio. Il tipo è il tipo di condizione: Stalled o
Reconciling . |
readyNodes |
Il numero di nodi a cui è stato applicato correttamente il profilo di ottimizzazione. |
reconcilingNodes |
Il numero di nodi selezionati (o selezionati in precedenza) che sono in fase di riconciliazione con l'ultimo profilo di ottimizzazione da parte del DaemonSet nodeconfig-controller-manager . |
selectedNodes |
Il numero di note selezionate. ovvero il numero di
nodi che corrispondono al selettore di nodi per questa
risorsa personalizzata PerformanceTuningProfile . |