Riduzione dell'utilizzo delle risorse dei componenti aggiuntivi in cluster più piccoli

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa pagina spiega come ridurre le risorse utilizzate dai componenti aggiuntivi del cluster Google Kubernetes Engine (GKE). Utilizza queste tecniche su cluster di piccole dimensioni, ad esempio cluster con tre nodi o meno o cluster che utilizzano tipi di macchine con risorse limitate.

Panoramica

Oltre al carico di lavoro, i nodi cluster eseguono diversi componenti aggiuntivi che integrano il nodo con il piano di controllo del cluster e offrono altre funzionalità. Pertanto, esiste una disparità tra le risorse totali di un nodo e le risorse disponibili per il tuo carico di lavoro. Scopri di più sull'architettura del cluster in GKE.

Le configurazioni predefinite di questi componenti aggiuntivi sono appropriati per i cluster tipici, ma puoi ottimizzarne l'utilizzo in base alla configurazione del cluster particolare. Puoi anche disattivare alcuni componenti aggiuntivi non richiesti dal tuo caso d'uso.

L'ottimizzazione è particolarmente utile per cluster con risorse di calcolo limitate, ad esempio cluster con un singolo nodo o pochissimi nodi o cluster eseguiti su tipi di macchine a basso costo. Puoi utilizzare un piccolo cluster per provare GKE o per sperimentare nuove funzionalità.

Configurazione dei componenti aggiuntivi

Puoi configurare ogni singolo componente aggiuntivo per ridurre il suo impatto sulle risorse dei nodi.

I componenti aggiuntivi offrono visibilità e debug per il cluster. Ad esempio, se disabiliti il monitoraggio su un cluster che esegue carichi di lavoro di produzione, sarà più difficile eseguire il debug dei problemi.

Cloud Logging

Cloud Logging raccoglie, elabora e archivia automaticamente i log dei container e del sistema. Per configurare Cloud Logging, consulta Configurazione del supporto di monitoraggio e logging per un nuovo cluster.

Puoi disabilitare completamente Cloud Logging o lasciarlo abilitato, ma limitarne l'utilizzo delle risorse perfezionando il componente aggiuntivo Fluentd.

Visualizzazione dei log quando Cloud Logging è disabilitato

Se Cloud Logging è disabilitato, puoi comunque visualizzare le voci di log recenti.

Per visualizzare i log di un pod specifico, esegui il comando seguente:

kubectl logs -f POD_NAME

L'opzione -f trasmette i log in streaming.

Per visualizzare i log di tutti i pod corrispondenti a un selector, esegui il comando seguente:

kubectl logs -l SELECTOR

Sostituisci SELECTOR con un selettore di deployment (ad esempio 'app=frontend').

Regolazione fluente

Se scegli di non disabilitare il logging, puoi vincolare le risorse utilizzate dal logging ottimizzando Fluentd.

Fluentd raccoglie i log dai nodi e li invia alla suite operativa di Google Cloud. Viene eseguito il deployment dell'agente Fluentd nel tuo cluster utilizzando un DaemonSet in modo che un'istanza dell'agente venga eseguita su ogni nodo del cluster. Per le applicazioni che scrivono una grande quantità di dati di logging, Fluentd potrebbe richiedere risorse aggiuntive.

Puoi regolare l'allocazione delle risorse di Fluentd creando un criterio di scalabilità specifico per i tuoi requisiti. Un criterio di scalabilità definisce le richieste di risorse e i limiti di un pod. Consulta la documentazione di Kubernetes sulla gestione delle risorse per i container per scoprire come lo scheduler Kubernetes gestisce le richieste e i limiti delle risorse. Per ulteriori informazioni su come le richieste di risorse e i limiti influiscono sulla qualità dei servizi (QoS), consulta Qualità del servizio in Kubernetes.

Espandi la seguente sezione per istruzioni su come misurare l'utilizzo delle risorse di Fluentd' e come scrivere un criterio di scalabilità personalizzato utilizzando questi valori.

Cloud Monitoring

Ti consigliamo di utilizzare Cloud Monitoring. Tuttavia, puoi disabilitare il monitoraggio per recuperare alcune risorse.

Per ulteriori informazioni su Cloud Monitoring, consulta la panoramica di Cloud Operations for GKE.

Se utilizzi il componente aggiuntivo Horizontal Pod Autoscaler con metriche personalizzate di Cloud Monitoring, devi disabilitare Horizontal Pod Autoscaler nel cluster prima di poter disabilitare completamente Cloud Monitoring.

Per configurare Cloud Monitoring, consulta Configurazione del supporto di monitoraggio e logging per un nuovo cluster.

Scalabilità automatica pod orizzontale

Scalabilità automatica pod orizzontale consente di scalare le repliche dei tuoi deployment in base a metriche come l'utilizzo della CPU o la memoria. Se non hai bisogno della scalabilità automatica del pod orizzontale e hai già disattivato Cloud Monitoring, puoi anche disabilitare la scalabilità automatica orizzontale del pod.

Per disabilitare il componente aggiuntivo per la scalabilità automatica del pod orizzontale, esegui il comando seguente:

gcloud container clusters update CLUSTER_NAME \
    --update-addons=HorizontalPodAutoscaling=DISABLED

Per abilitare il componente aggiuntivo di scalabilità automatica pod orizzontale, esegui il comando seguente:

gcloud container clusters update CLUSTER_NAME \
    --update-addons=HorizontalPodAutoscaling=ENABLED

DNS di Kubernetes (kube-dns)

DNS DNS (kube-dns) pianifica un deployment e un servizio DNS nel tuo cluster, e i pod nel tuo cluster utilizzano il servizio kube-dns per risolvere i nomi DNS in indirizzi IP per servizi, pod, nodi e indirizzi IP pubblici. kube-dns risolve i nomi di dominio pubblico come example.com e risolve i nomi di servizio come my-svc.my-namespace.svc.cluster-domain.example. Scopri di più su Service Discovery e DNS.

Per impostazione predefinita, GKE esegue diverse repliche kube-dns per garantire l'alta disponibilità. Se non hai bisogno di DNS a disponibilità elevata, puoi risparmiare risorse riducendo il numero di repliche kube-dns. Se non hai bisogno di una risoluzione del nome DNS, puoi disattivare completamente kube-dns. Se disabiliti kube-dns, puoi configurare un DNS esterno sui tuoi pod.

Per ulteriori informazioni, consulta Utilizzo di kube-dns.

Ridurre la replica kube-dns

Per disattivare kube-dns autoscaler e ridurre kube-dns alla replica 1, esegui i comandi seguenti:

kubectl scale --replicas=0 deployment/kube-dns-autoscaler --namespace=kube-system
kubectl scale --replicas=1 deployment/kube-dns --namespace=kube-system

Per attivare kube-dns autoscaler, esegui questo comando:

kubectl scale --replicas=1 deployment/kube-dns-autoscaler --namespace=kube-system

Per un controllo più preciso della scalabilità automatica, puoi ottimizzare i parametri di scalabilità automatica.

Per informazioni su come configurare un deployment kube-dns personalizzato, consulta Configurare un deployment kube-dns personalizzato.

Disattivazione di kube-dns

Puoi disabilitare completamente kube-dns. kube-dns è necessario per i carichi di lavoro che risolvono il nome DNS di qualsiasi servizio dipendente. Sono inclusi i nomi di dominio pubblico e i nomi dei servizi del cluster.

Per disabilitare kube-dns, esegui i comandi seguenti:

kubectl scale --replicas=0 deployment/kube-dns-autoscaler --namespace=kube-system
kubectl scale --replicas=0 deployment/kube-dns --namespace=kube-system

Per abilitare kube-dns, esegui il comando seguente e sostituisci --replicas=1 con il numero di repliche desiderato:

kubectl scale --replicas=1 deployment/kube-dns --namespace=kube-system

Per abilitare la scalabilità automatica kube-dns, esegui il comando seguente:

kubectl scale --replicas=1 deployment/kube-dns-autoscaler --namespace=kube-system
Ricerche DNS esterne senza kube-dns

Puoi configurare i tuoi pod in modo che utilizzino la risoluzione dei nomi di dominio esterno con un servizio DNS a tua scelta. L'esempio seguente mostra un pod che utilizza Google Public DNS per le ricerche sui nomi esterni:

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-example
spec:
  containers:
    - name: test
      image: nginx
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 8.8.8.8
      - 8.8.4.4
Service Discovery senza kube-dns

Puoi utilizzare le variabili di ambiente del servizio in alternativa al rilevamento di servizi basati su DNS. Quando viene creato un pod, le variabili di ambiente del servizio vengono create automaticamente per ogni servizio nello stesso spazio dei nomi del pod. È più restrittivo di kube-dns, perché le variabili di ambiente vengono create solo per i servizi creati prima della creazione del pod.

Passaggi successivi