Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il server delle metriche è un'origine scalabile ed efficiente delle metriche delle risorse del contenitore per le pipeline di scalabilità automatica predefinite di Kubernetes. Con servizio Azure Kubernetes (servizio Azure Kubernetes), la scalabilità automatica verticale dei pod è abilitata per il server delle metriche. Il server delle metriche viene comunemente usato da altri componenti aggiuntivi Kubernetes, ad esempio Horizontal Pod Autoscaler.
Vertical Pod Autoscaler (VPA) consente di modificare il limite di risorse quando il server metriche riscontra vincoli coerenti di CPU e risorse di memoria.
Operazioni preliminari
Il cluster del servizio Azure Kubernetes esegue Kubernetes versione 1.24 e successive.
Limitazione del server delle metriche
Se la frequenza di limitazione del server metriche è elevata e l'utilizzo della memoria dei due pod è sbilanciato, vuol dire che il server metriche richiede più risorse rispetto ai valori predefiniti specificati.
Per aggiornare i valori del coefficiente, creare un oggetto ConfigMap nello spazio dei nomi kube-system di sovrimpressione per eseguire l'override dei valori nella specifica del server metriche. Per aggiornare il server metriche, seguire questa procedura.
Creare un file ConfigMap denominato metrics-server-config.yaml e copiarlo nel manifesto seguente.
apiVersion: v1 kind: ConfigMap metadata: name: metrics-server-config namespace: kube-system labels: kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: EnsureExists data: NannyConfiguration: |- apiVersion: nannyconfig/v1alpha1 kind: NannyConfiguration baseCPU: 100m cpuPerNode: 1m baseMemory: 100Mi memoryPerNode: 8Mi
Nell'esempio ConfigMap, il limite di risorse e la richiesta vengono modificati nel modo seguente:
- cpu: (100+1n) millicore
- memoria: (100+8n) mebibyte
Dove n è il numero di nodi.
Creare ConfigMap usando il comando applicare kubectl e specificare il nome del manifesto YAML.
kubectl apply -f metrics-server-config.yaml
Riavviare i pod del server metriche. Sono disponibili due pod del server metriche e il comando seguente li elimina tutti.
kubectl -n kube-system delete po -l k8s-app=metrics-server
Per verificare che le risorse aggiornate siano state applicate, eseguire il comando seguente per esaminare il log VPA del server metriche.
kubectl -n kube-system logs metrics-server-pod-name -c metrics-server-vpa
L'output di esempio seguente è simile ai risultati indicanti che sono state applicate le impostazioni di limitazione aggiornate.
ERROR: logging before flag.Parse: I0315 23:12:33.956112 1 pod_nanny.go:68] Invoked by [/pod_nanny --config-dir=/etc/config --cpu=44m --extra-cpu=0.5m --memory=51Mi --extra-memory=4Mi --poll-period=180000 --threshold=5 --deployment=metrics-server --container=metrics-server] ERROR: logging before flag.Parse: I0315 23:12:33.956159 1 pod_nanny.go:69] Version: 1.8.14 ERROR: logging before flag.Parse: I0315 23:12:33.956171 1 pod_nanny.go:85] Watching namespace: kube-system, pod: metrics-server-545d8b77b7-5nqq9, container: metrics-server. ERROR: logging before flag.Parse: I0315 23:12:33.956175 1 pod_nanny.go:86] storage: MISSING, extra_storage: 0Gi ERROR: logging before flag.Parse: I0315 23:12:33.957441 1 pod_nanny.go:116] cpu: 100m, extra_cpu: 1m, memory: 100Mi, extra_memory: 8Mi ERROR: logging before flag.Parse: I0315 23:12:33.957456 1 pod_nanny.go:145] Resources: [{Base:{i:{value:100 scale:-3} d:{Dec:<nil>} s:100m Format:DecimalSI} ExtraPerNode:{i:{value:0 scale:-3} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:104857600 scale:0} d:{Dec:<nil>} s:100Mi Format:BinarySI} ExtraPerNode:{i:{value:0 scale:0} d:{Dec:<nil>} s: Format:BinarySI} Name:memory
Prestare attenzione a baseCPU, cpuPerNode, baseMemorye memoryPerNode, perché ConfigMap non viene convalidato dal servizio Azure Kubernetes. Come procedura consigliata, aumentare gradualmente il valore per evitare il consumo di risorse non necessario. Monitorare in modo proattivo l'utilizzo delle risorse durante l'aggiornamento o la creazione di ConfigMap. Un numero elevato di richieste di risorse potrebbe influire negativamente sul nodo.
Configurare manualmente l'utilizzo delle risorse del server metriche
La VPA del server metriche regola l'utilizzo delle risorse in base al numero di nodi. Se il cluster aumenta o riduce spesso le prestazioni, il server metriche potrebbe essere riavviato di frequente. In questo caso, è possibile ignorare la VPA e controllare manualmente l'utilizzo delle risorse. Questo metodo per configurare la VPA non deve essere eseguito in aggiunta ai passaggi descritti nella sezione precedente.
Se si vuole ignorare la VPA del server metriche e controllarne manualmente l'utilizzo delle risorse, seguire questa procedura.
Creare un file ConfigMap denominato metrics-server-config.yaml e copiarlo nel manifesto seguente.
apiVersion: v1 kind: ConfigMap metadata: name: metrics-server-config namespace: kube-system labels: kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: EnsureExists data: NannyConfiguration: |- apiVersion: nannyconfig/v1alpha1 kind: NannyConfiguration baseCPU: 100m cpuPerNode: 0m baseMemory: 100Mi memoryPerNode: 0Mi
In questo esempio, ConfigMap modifica il limite di risorse e la richiesta ai seguenti valori:
- cpu: 100 millicore
- memoria: 100 mebibyte
La modifica del numero di nodi non attiva la scalabilità automatica.
Creare ConfigMap usando il comando applicare kubectl e specificare il nome del manifesto YAML.
kubectl apply -f metrics-server-config.yaml
Riavviare i pod del server metriche. Sono disponibili due pod del server metriche e il comando seguente li elimina tutti.
kubectl -n kube-system delete po -l k8s-app=metrics-server
Per verificare che le risorse aggiornate siano state applicate, eseguire il comando seguente per esaminare il log VPA del server metriche.
kubectl -n kube-system logs metrics-server-pod-name -c metrics-server-vpa
L'output di esempio seguente è simile ai risultati indicanti che sono state applicate le impostazioni di limitazione aggiornate.
ERROR: logging before flag.Parse: I0315 23:12:33.956112 1 pod_nanny.go:68] Invoked by [/pod_nanny --config-dir=/etc/config --cpu=44m --extra-cpu=0.5m --memory=51Mi --extra-memory=4Mi --poll-period=180000 --threshold=5 --deployment=metrics-server --container=metrics-server] ERROR: logging before flag.Parse: I0315 23:12:33.956159 1 pod_nanny.go:69] Version: 1.8.14 ERROR: logging before flag.Parse: I0315 23:12:33.956171 1 pod_nanny.go:85] Watching namespace: kube-system, pod: metrics-server-545d8b77b7-5nqq9, container: metrics-server. ERROR: logging before flag.Parse: I0315 23:12:33.956175 1 pod_nanny.go:86] storage: MISSING, extra_storage: 0Gi ERROR: logging before flag.Parse: I0315 23:12:33.957441 1 pod_nanny.go:116] cpu: 100m, extra_cpu: 0m, memory: 100Mi, extra_memory: 0Mi ERROR: logging before flag.Parse: I0315 23:12:33.957456 1 pod_nanny.go:145] Resources: [{Base:{i:{value:100 scale:-3} d:{Dec:<nil>} s:100m Format:DecimalSI} ExtraPerNode:{i:{value:0 scale:-3} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:104857600 scale:0} d:{Dec:<nil>} s:100Mi Format:BinarySI} ExtraPerNode:{i:{value:0 scale:0} d:{Dec:<nil>} s: Format:BinarySI} Name:memory}]
Risoluzione dei problemi
Se si usa il file configmap seguente, le personalizzazioni VPA del server metriche non vengono applicate. È necessario aggiungere un'unità per
baseCPU
.apiVersion: v1 kind: ConfigMap metadata: name: metrics-server-config namespace: kube-system labels: kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: EnsureExists data: NannyConfiguration: |- apiVersion: nannyconfig/v1alpha1 kind: NannyConfiguration baseCPU: 100 cpuPerNode: 1m baseMemory: 100Mi memoryPerNode: 8Mi
L'output di esempio seguente è simile ai risultati indicanti che le impostazioni di limitazione aggiornate non vengono applicate.
ERROR: logging before flag.Parse: I0316 23:32:08.383389 1 pod_nanny.go:68] Invoked by [/pod_nanny --config-dir=/etc/config --cpu=44m --extra-cpu=0.5m --memory=51Mi --extra-memory=4Mi --poll-period=180000 --threshold=5 --deployment=metrics-server --container=metrics-server] ERROR: logging before flag.Parse: I0316 23:32:08.383430 1 pod_nanny.go:69] Version: 1.8.14 ERROR: logging before flag.Parse: I0316 23:32:08.383441 1 pod_nanny.go:85] Watching namespace: kube-system, pod: metrics-server-7d78876589-hcrff, container: metrics-server. ERROR: logging before flag.Parse: I0316 23:32:08.383446 1 pod_nanny.go:86] storage: MISSING, extra_storage: 0Gi ERROR: logging before flag.Parse: I0316 23:32:08.384554 1 pod_nanny.go:192] Unable to decode Nanny Configuration from config map, using default parameters ERROR: logging before flag.Parse: I0316 23:32:08.384565 1 pod_nanny.go:116] cpu: 44m, extra_cpu: 0.5m, memory: 51Mi, extra_memory: 4Mi ERROR: logging before flag.Parse: I0316 23:32:08.384589 1 pod_nanny.go:145] Resources: [{Base:{i:{value:44 scale:-3} d:{Dec:<nil>} s:44m Format:DecimalSI} ExtraPerNode:{i:{value:5 scale:-4} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:53477376 scale:0} d:{Dec:<nil>} s:51Mi Format:BinarySI} ExtraPerNode:{i:{value:4194304 scale:0} d:{Dec:<nil>} s:4Mi Format:BinarySI} Name:memory}]
Per il cluster Kubernetes versione 1.23 e successive, il server metriche dispone di un podDisruptionBudget. Tale elemento garantisce che i pod del server metriche disponibile siano nel numero minimo di uno. Se si ottiene un risultato simile a questo dopo l'esecuzione di
kubectl -n kube-system get po
, è possibile che l'utilizzo personalizzato delle risorse sia ridotto. Aumentare i valori del coefficiente per risolvere il problema.metrics-server-679b886d4-pxwdf 1/2 CrashLoopBackOff 6 (36s ago) 6m33s metrics-server-679b886d4-svxxx 1/2 CrashLoopBackOff 6 (54s ago) 6m33s metrics-server-7d78876589-hcrff 2/2 Running 0 37m
Passaggi successivi
Il server metriche è un componente nella pipeline delle metriche principali. Per altre informazioni, vedere Progettazione dell'API del server metriche.
Azure Kubernetes Service