Quote delle risorse Kubernetes
sono uno strumento che consente agli amministratori di garantire
un'equa quota di risorse tra
utenti diversi. Una quota di risorse, definita da un oggetto ResourceQuota
, fornisce
vincoli che limitano il consumo di risorse aggregate in un singolo spazio dei nomi.
Controller gerarchia
estende il concetto di quote delle risorse per spazio dei nomi al fine di supportare
spazi dei nomi. Un oggetto HierarchicalResourceQuota
limita la risorsa aggregata
il consumo effettivo in tutti gli spazi dei nomi di un sottoalbero, consentendo agli amministratori
per limitare il consumo di risorse in più spazi dei nomi correlati.
Quando le quote delle risorse gerarchiche sono abilitate, Hierarchy Controller installa convalidare i webhook di ammissione , uno per applicare effettivamente i limiti di consumo delle risorse e l'altro per e convalidare autonomamente le quote delle risorse gerarchiche.
Abilita le quote delle risorse gerarchiche
Le quote delle risorse gerarchiche sono fornite da Hierarchy Controller. Per attivare le quote delle risorse gerarchiche, segui questi passaggi:
Installare Hierarchy Controller, utilizzando Config Sync 1.6.2 o versioni successive.
Nel file di configurazione per l'operatore ConfigManagement, nella sezione
spec.hierarchyController
, imposta il valore dell'oggetto DaenableHierarchicalResourceQuota
atrue
:# config-management.yaml apiVersion: configmanagement.gke.io/v1 kind: ConfigManagement metadata: name: config-management spec: hierarchyController: enabled: true # Set to true to enable hierarchical resource quotas: enableHierarchicalResourceQuota: true # ...other fields...
Applica la configurazione:
kubectl apply -f config-management.yaml
Dopo circa un minuto, il controller della gerarchia e la risorsa gerarchica le quote diventano utilizzabili nel cluster.
Per verificare che le quote delle risorse gerarchiche siano abilitate, segui questi passaggi:
Crea un oggetto
HierarchicalResourceQuota
in qualsiasi spazio dei nomi, ad esempio seguenti:cat > example-hrq.yaml <<EOF apiVersion: hierarchycontroller.configmanagement.gke.io/v1alpha1 kind: HierarchicalResourceQuota metadata: name: example-hrq spec: hard: configmaps: "1" EOF kubectl apply -f example-hrq.yaml -n default
Verifica che venga creato un nuovo oggetto
ResourceQuota
denominatogke-hc-hrq
in lo spazio dei nomi con lo stessospec.hard
di 1configmap
, ad esempio:kubectl describe resourcequota gke-hc-hrq -n default
Output:
Name: gke-hc-hrq Namespace: default Resource Used Hard -------- ---- ---- configmaps 0 1
Libera spazio:
kubectl delete hrq -n default example-hrq
Assicurati che l'oggetto creato automaticamente venga rimosso:
kubectl get resourcequota gke-hc-hrq -n default
Output:
Error from server (NotFound): resourcequotas "gke-hc-hrq" not found
Utilizzo di quote per risorse gerarchiche
Impostazione delle quote
Impostare un HierarchicalResourceQuota
equivale a impostare una normale
ResourceQuota
, ma con apiVersion
e kind
diversi; pertanto,
puoi impostare limiti per le risorse nel campo spec.hard
come faresti
ResourceQuota
.
Prendiamo in considerazione un team chiamato team-a
che possiede un servizio chiamato service-a
e ha una
chiamato team-b
, ognuno rappresentato da spazi dei nomi gerarchici
come segue:
kubectl hns tree team-a
Output:
team-a
├── service-a
└── team-b
Se vuoi limitare il numero di configmaps
in team-a
, ma senza
limitando il numero nei discendenti, puoi creare una regola ResourceQuota
come segue:
cat > team-a-rq.yaml <<EOF
apiVersion: v1
kind: ResourceQuota
metadata:
name: team-a-rq
namespace: team-a
spec:
hard:
configmaps: "1"
EOF
kubectl apply -f team-a-rq.yaml
Al contrario, per limitare il numero totale di configmaps
in team-a
e le relative
discendenti combinati, sostituisci apiVersion
e kind
nella precedente
esempio:
cat > team-a-hrq.yaml <<EOF
# Modify the following two lines:
apiVersion: hierarchycontroller.configmanagement.gke.io/v1alpha1
kind: HierarchicalResourceQuota
# Everything below this line remains the same
metadata:
name: team-a-hrq
namespace: team-a
spec:
hard:
configmaps: "1"
EOF
kubectl apply -f team-a-hrq.yaml
Il primo tentativo di creare un configmap
in uno di questi tre spazi dei nomi
. Ad esempio, potremmo scegliere di creare configmap
in una delle
spazi dei nomi figlio:
kubectl create configmap config-1 --from-literal key=value -n team-b
Output:
confimap/config-1 created
Ma qualsiasi ulteriore tentativo di creare nuove configmap in uno qualsiasi dei tre spazi dei nomi non riesce, anche negli spazi dei nomi di pari livello o padre:
kubectl create configmap config-2 --from-literal key=value -n service-a
kubectl create configmap config-2 --from-literal key=value -n team-a
Output per entrambi:
Error from server (Forbidden): admission webhook "resourcesquotasstatus.hierarchycontroller.configmanagement.gke.io" denied the request: exceeded hierarchical quota in namespace "team-a": "team-a-hrq", requested: configmaps=1, used: configmaps=1, limited: configmaps=1
Ispeziona le quote
Per visualizzare i limiti e l'utilizzo attuali di HierarchicalResourceQuota
, usa
kubectl describe
per visualizzare una quota normale delle risorse:
kubectl describe hrq team-a-hrq -n team-a
Output:
# ...other fields...
Spec:
Hard:
Configmaps: 1
Status:
Hard:
Configmaps: 1
Used:
Configmaps: 1
Aggiorna gerarchia dello spazio dei nomi
Uno spazio dei nomi è sempre soggetto a qualsiasi HierarchicalResourceQuota
nel suo
predecessori. La modifica della gerarchia dello spazio dei nomi attiva un ricalcolo del
gli utilizzi delle quote.
Rimuovi uno spazio dei nomi da un sottoalbero con quote gerarchiche
Quando uno spazio dei nomi viene spostato fuori da un sottoalbero con quote gerarchiche nei predecessori, non è più soggetta quote e le relative risorse vengono rimosse di utilizzo.
Ad esempio, se team-b
viene rimosso dal sottoalbero precedente, non saranno
limiti per il consumo di configmap
in team-b
. L'utilizzo della quota gerarchica
viene reimpostato su 0
, il che significa che team-a
e service-a
ora possono consumare uno
più configmap
in totale.
Aggiungi uno spazio dei nomi a un sottoalbero con quote gerarchiche
Quando uno spazio dei nomi viene aggiunto a un sottoalbero con quote gerarchiche, viene soggetto alle quote gerarchiche e i relativi utilizzi delle risorse vengono aggiunti alle quote di utilizzo.
Ad esempio, se viene aggiunto un altro spazio dei nomi al precedente sottoalbero, non viene
Il consumo di configmap
è consentito nello spazio dei nomi appena aggiunto. Analogamente, qualsiasi
l'utilizzo esistente di configmap
nello spazio dei nomi appena aggiunto viene aggiunto al
l'utilizzo della quota gerarchica.
Le quote gerarchiche non ti impediscono di spostare un nuovo spazio dei nomi in
anche se l'utilizzo del nuovo spazio dei nomi supera il limite
quote gerarchiche. Tuttavia, se viene superato un limite, l'ulteriore utilizzo delle risorse
è vietato finché l'utilizzo non scenda al di sotto del limite o finché il limite
viene sollevato. Questo comportamento è simile a quello di Kubernetes ResourceQuota
quando
imposto un limite inferiore all'utilizzo esistente nello spazio dei nomi.
Regole generali
Le quote delle risorse gerarchiche si comportano in modo simile alle quote delle risorse Kubernetes nei casi d'angolo. Ad esempio:
- Se allo stesso spazio dei nomi si applicano più quote delle risorse gerarchiche, vengono rispettati i limiti restrittivi delle risorse.
- Se crei un limite inferiore alla quantità di contenuti già consumati risorse esistenti non vengono eliminate, ma eventuali risorse future il consumo è vietato finché l'utilizzo non scenda al di sotto del limite o del limite viene sollevato.
Risoluzione dei problemi
InternalError
quando utilizzi risorse
Quando utilizzi risorse, ad esempio, durante la creazione di un configmap
, i tuoi
potrebbe non rispondere più per 10 secondi e verrà visualizzato il seguente messaggio di errore
messaggio:
Error from server (InternalError): Internal error occurred: resource quota evaluates timeout
Non dovrebbe essere visualizzato questo messaggio di errore, a meno che
gke-hc-controller-manager
pod è in uno stato non valido.
Per risolvere il problema, gli amministratori con autorizzazione possono eliminare il pod utilizzando
il prefisso gke-hc-controller-manager-
direttamente nello spazio dei nomi hnc-system
.
Il pod si riavvia automaticamente. Prima che il pod sia pronto, tieni presente
seguenti:
- Nessun consumo di risorse è soggetto a quote gerarchiche.
- Creazione/aggiornamento di
HierarchicalResourceQuota
non riuscito. - Se osservabilità gerarchica è abilitata, i pod vengono creati senza applicare etichette.
Se il problema persiste, segnalacelo per un'analisi, preferibilmente tramite che puoi ottenere utilizzando:
kubectl logs -n hnc-system deployment/gke-hc-controller-manager -c manager
Passaggi successivi
- Osserva i carichi di lavoro gerarchici.
- Scopri di più sulle attività comuni che potresti utilizzare HNC per svolgere in la Guida dell'utente di HNC: procedura.