Os usuários estão sendo confundidos por pods que não conseguem agendar devido a deficiências de recursos. Pode ser difícil saber quando um pod está pendente porque ele ainda não foi inicializado ou porque o cluster não tem espaço para programá-lo. http://kubernetes.io/v1.1/docs/user-guide/compute-resources.html#monitoring -compute-resource-usage ajuda, mas não é tão detectável (eu tendo a tentar um 'get' em um pod em pendente primeiro, e só depois de esperar um pouco e ver que ele está "preso" em pendente, devo usar "descrever" para perceber que é um problema de agendamento).
Isso também é complicado porque os pods do sistema estão em um namespace oculto. Os usuários esquecem que esses pods existem e 'contam contra' os recursos do cluster.
Existem várias soluções possíveis de improviso, não sei qual seria o ideal:
1) Desenvolva um novo estado de pod diferente de Pendente para representar "tentou agendar e falhou por falta de recursos".
2) Faça com que kubectl get po ou kubectl get po -o = wide exiba uma coluna para detalhar porque algo está pendente (talvez o container.state que está Esperando neste caso ou o event.message mais recente).
3) Crie um novo comando kubectl para descrever os recursos com mais facilidade. Estou imaginando um "uso de kubectl" que dá uma visão geral da CPU e Mem total do cluster, por CPU e Mem de nó e o uso de cada pod / contêiner. Aqui incluiríamos todos os pods, incluindo os do sistema. Isso pode ser útil a longo prazo junto com agendadores mais complexos, ou quando seu cluster tem recursos suficientes, mas nenhum nó tem (diagnosticando o problema 'sem buracos grandes o suficiente').
Algo na linha de (2) parece razoável, embora o pessoal de UX saiba mais do que eu.
(3) parece vagamente relacionado a # 15743, mas não tenho certeza se eles são próximos o suficiente para combinar.
Além do caso acima, seria bom ver a utilização de recursos que estamos obtendo.
kubectl utilization requests
pode mostrar (talvez kubectl util
ou kubectl usage
sejam melhores / mais curtos):
cores: 4.455/5 cores (89%)
memory: 20.1/30 GiB (67%)
...
Neste exemplo, as solicitações de contêiner agregado são 4,455 núcleos e 20,1 GiB e há 5 núcleos e 30 GiB no total no cluster.
Há:
$ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
cluster1-k8s-master-1 312m 15% 1362Mi 68%
cluster1-k8s-node-1 124m 12% 233Mi 11%
Eu uso o comando abaixo para obter uma visão rápida do uso de recursos. É a maneira mais simples que encontrei.
kubectl describe nodes
Se houvesse uma maneira de "formatar" a saída de kubectl describe nodes
, eu não me importaria em criar um script para resumir todas as solicitações / limites de recursos do nó.
aqui está meu hack kubectl describe nodes | grep -A 2 -e "^\\s*CPU Requests"
@de-nìvel obrigado, exatamente o que eu estava procurando
Sim, este é o meu:
$ cat bin/node-resources.sh
#!/bin/bash
set -euo pipefail
echo -e "Iterating...\n"
nodes=$(kubectl get node --no-headers -o custom-columns=NAME:.metadata.name)
for node in $nodes; do
echo "Node: $node"
kubectl describe node "$node" | sed '1,/Non-terminated Pods/d'
echo
done
@goltermann Não há rótulos de assinatura neste assunto. Adicione um rótulo de assinatura por:
(1) mencionando um sig: @kubernetes/sig-<team-name>-misc
(2) especificando o rótulo manualmente: /sig <label>
_Nota: o método (1) irá disparar uma notificação para a equipe. Você pode encontrar a lista de times aqui ._
@ kubernetes / sig-cli-misc
Você pode usar o comando abaixo para encontrar a porcentagem de processamento de seus nós
alias util='kubectl get nodes | grep node | awk '\''{print $1}'\'' | xargs -I {} sh -c '\''echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- ; echo '\'''
Note: 4000m cores is the total cores in one node
alias cpualloc="util | grep % | awk '{print \$1}' | awk '{ sum += \$1 } END { if (NR > 0) { result=(sum**4000); printf result/NR \"%\n\" } }'"
$ cpualloc
3.89358%
Note: 1600MB is the total cores in one node
alias memalloc='util | grep % | awk '\''{print $3}'\'' | awk '\''{ sum += $1 } END { if (NR > 0) { result=(sum*100)/(NR*1600); printf result/NR "%\n" } }'\'''
$ memalloc
24.6832%
@tomfotherby alias util='kubectl get nodes | grep node | awk '\''{print $1}'\'' | xargs -I {} sh -c '\''echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- ; echo '\'''
@ alok87 - Obrigado por seus apelidos. No meu caso, isso é o que funcionou para mim, visto que usamos os tipos de instância bash
e m3.large
(2 cpu, 7,5 G de memória).
alias util='kubectl get nodes --no-headers | awk '\''{print $1}'\'' | xargs -I {} sh -c '\''echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- ; echo '\'''
# Get CPU request total (we x20 because because each m3.large has 2 vcpus (2000m) )
alias cpualloc='util | grep % | awk '\''{print $1}'\'' | awk '\''{ sum += $1 } END { if (NR > 0) { print sum/(NR*20), "%\n" } }'\'''
# Get mem request total (we x75 because because each m3.large has 7.5G ram )
alias memalloc='util | grep % | awk '\''{print $5}'\'' | awk '\''{ sum += $1 } END { if (NR > 0) { print sum/(NR*75), "%\n" } }'\'''
$util
ip-10-56-0-178.ec2.internal
CPU Requests CPU Limits Memory Requests Memory Limits
960m (48%) 2700m (135%) 630Mi (8%) 2034Mi (27%)
ip-10-56-0-22.ec2.internal
CPU Requests CPU Limits Memory Requests Memory Limits
920m (46%) 1400m (70%) 560Mi (7%) 550Mi (7%)
ip-10-56-0-56.ec2.internal
CPU Requests CPU Limits Memory Requests Memory Limits
1160m (57%) 2800m (140%) 972Mi (13%) 3976Mi (53%)
ip-10-56-0-99.ec2.internal
CPU Requests CPU Limits Memory Requests Memory Limits
804m (40%) 794m (39%) 824Mi (11%) 1300Mi (17%)
cpualloc
48.05 %
$ memalloc
9.95333 %
https://github.com/kubernetes/kubernetes/issues/17512#issuecomment -267992922 kubectl top
mostra o uso , não a alocação. A alocação é o que causa o problema insufficient CPU
. Há muita confusão nesta edição sobre a diferença.
AFAICT, não há uma maneira fácil de obter um relatório de alocação de CPU do nó por pod, uma vez que as solicitações são por contêiner na especificação. E mesmo assim, é difícil porque .spec.containers[*].requests
pode ou não ter os campos limits
/ requests
(em minha experiência)
/ cc @mysterikkit
Entrando nesta festa de script de shell. Eu tenho um cluster mais antigo executando o CA com redução de escala desabilitada. Eu escrevi este script para determinar aproximadamente o quanto posso reduzir o cluster quando ele começa a aumentar seus limites de rota AWS:
#!/bin/bash
set -e
KUBECTL="kubectl"
NODES=$($KUBECTL get nodes --no-headers -o custom-columns=NAME:.metadata.name)
function usage() {
local node_count=0
local total_percent_cpu=0
local total_percent_mem=0
local readonly nodes=$@
for n in $nodes; do
local requests=$($KUBECTL describe node $n | grep -A2 -E "^\\s*CPU Requests" | tail -n1)
local percent_cpu=$(echo $requests | awk -F "[()%]" '{print $2}')
local percent_mem=$(echo $requests | awk -F "[()%]" '{print $8}')
echo "$n: ${percent_cpu}% CPU, ${percent_mem}% memory"
node_count=$((node_count + 1))
total_percent_cpu=$((total_percent_cpu + percent_cpu))
total_percent_mem=$((total_percent_mem + percent_mem))
done
local readonly avg_percent_cpu=$((total_percent_cpu / node_count))
local readonly avg_percent_mem=$((total_percent_mem / node_count))
echo "Average usage: ${avg_percent_cpu}% CPU, ${avg_percent_mem}% memory."
}
usage $NODES
Produz resultados como:
ip-REDACTED.us-west-2.compute.internal: 38% CPU, 9% memory
...many redacted lines...
ip-REDACTED.us-west-2.compute.internal: 41% CPU, 8% memory
ip-REDACTED.us-west-2.compute.internal: 61% CPU, 7% memory
Average usage: 45% CPU, 15% memory.
Também existe a opção de pod no comando superior:
kubectl top pod
@ylogx https://github.com/kubernetes/kubernetes/issues/17512#issuecomment -326089708
Minha maneira de obter a alocação, em todo o cluster:
$ kubectl get po --all-namespaces -o=jsonpath="{range .items[*]}{.metadata.namespace}:{.metadata.name}{'\n'}{range .spec.containers[*]} {.name}:{.resources.requests.cpu}{'\n'}{end}{'\n'}{end}"
Ele produz algo como:
kube-system:heapster-v1.5.0-dc8df7cc9-7fqx6
heapster:88m
heapster-nanny:50m
kube-system:kube-dns-6cdf767cb8-cjjdr
kubedns:100m
dnsmasq:150m
sidecar:10m
prometheus-to-sd:
kube-system:kube-dns-6cdf767cb8-pnx2g
kubedns:100m
dnsmasq:150m
sidecar:10m
prometheus-to-sd:
kube-system:kube-dns-autoscaler-69c5cbdcdd-wwjtg
autoscaler:20m
kube-system:kube-proxy-gke-cluster1-default-pool-cd7058d6-3tt9
kube-proxy:100m
kube-system:kube-proxy-gke-cluster1-preempt-pool-57d7ff41-jplf
kube-proxy:100m
kube-system:kubernetes-dashboard-7b9c4bf75c-f7zrl
kubernetes-dashboard:50m
kube-system:l7-default-backend-57856c5f55-68s5g
default-http-backend:10m
kube-system:metrics-server-v0.2.0-86585d9749-kkrzl
metrics-server:48m
metrics-server-nanny:5m
kube-system:tiller-deploy-7794bfb756-8kxh5
tiller:10m
Isso é estranho. Quero saber quando estou na capacidade de alocação ou quase chegando. Parece uma função bastante básica de um cluster. Quer se trate de uma estatística que mostra uma alta% ou de um erro textual ... como outras pessoas sabem disso? Sempre use o escalonamento automático em uma plataforma de nuvem?
Eu escrevi https://github.com/dpetzold/kube-resource-explorer/ para o endereço # 3. Aqui está um exemplo de saída:
$ ./resource-explorer -namespace kube-system -reverse -sort MemReq
Namespace Name CpuReq CpuReq% CpuLimit CpuLimit% MemReq MemReq% MemLimit MemLimit%
--------- ---- ------ ------- -------- --------- ------ ------- -------- ---------
kube-system event-exporter-v0.1.7-5c4d9556cf-kf4tf 0 0% 0 0% 0 0% 0 0%
kube-system kube-proxy-gke-project-default-pool-175a4a05-mshh 100m 10% 0 0% 0 0% 0 0%
kube-system kube-proxy-gke-project-default-pool-175a4a05-bv59 100m 10% 0 0% 0 0% 0 0%
kube-system kube-proxy-gke-project-default-pool-175a4a05-ntfw 100m 10% 0 0% 0 0% 0 0%
kube-system kube-dns-autoscaler-244676396-xzgs4 20m 2% 0 0% 10Mi 0% 0 0%
kube-system l7-default-backend-1044750973-kqh98 10m 1% 10m 1% 20Mi 0% 20Mi 0%
kube-system kubernetes-dashboard-768854d6dc-jh292 100m 10% 100m 10% 100Mi 3% 300Mi 11%
kube-system kube-dns-323615064-8nxfl 260m 27% 0 0% 110Mi 4% 170Mi 6%
kube-system fluentd-gcp-v2.0.9-4qkwk 100m 10% 0 0% 200Mi 7% 300Mi 11%
kube-system fluentd-gcp-v2.0.9-jmtpw 100m 10% 0 0% 200Mi 7% 300Mi 11%
kube-system fluentd-gcp-v2.0.9-tw9vk 100m 10% 0 0% 200Mi 7% 300Mi 11%
kube-system heapster-v1.4.3-74b5bd94bb-fz8hd 138m 14% 138m 14% 301856Ki 11% 301856Ki 11%
@shtouff
root<strong i="7">@debian9</strong>:~# kubectl get po -n chenkunning-84 -o=jsonpath="{range .items[*]}{.metadata.namespace}:{.metadata.name}{'\n'}{range .spec.containers[*]} {.name}:{.resources.requests.cpu}{'\n'}{end}{'\n'}{end}"
error: error parsing jsonpath {range .items[*]}{.metadata.namespace}:{.metadata.name}{'\n'}{range .spec.containers[*]} {.name}:{.resources.requests.cpu}{'\n'}{end}{'\n'}{end}, unrecognized character in action: U+0027 '''
root<strong i="8">@debian9</strong>:~# kubectl version
Client Version: version.Info{Major:"1", Minor:"6+", GitVersion:"v1.6.7-beta.0+$Format:%h$", GitCommit:"bb053ff0cb25a043e828d62394ed626fda2719a1", GitTreeState:"dirty", BuildDate:"2017-08-26T09:34:19Z", GoVersion:"go1.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"6+", GitVersion:"v1.6.7-beta.0+$Format:84c3ae0384658cd40c1d1e637f5faa98cf6a965c$", GitCommit:"3af2004eebf3cbd8d7f24b0ecd23fe4afb889163", GitTreeState:"clean", BuildDate:"2018-04-04T08:40:48Z", GoVersion:"go1.8.1", Compiler:"gc", Platform:"linux/amd64"}
@ harryge00 : U + 0027 é uma citação ondulada, provavelmente um problema de copiar e colar
@nfirvine Obrigado! Resolvi o problema usando:
kubectl get pods -n my-ns -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].resources.limits.cpu} {"\n"}{end}' |awk '{sum+=$2 ; print $0} END{print "sum=",sum}'
Ele funciona para namespaces cujos pods contêm apenas 1 contêiner cada.
@xmik Ei, estou usando k8 1.7 e executando o hepaster. Quando executo $ kubectl top nodes --heapster-namespace = kube-system, ele me mostra "erro: as métricas ainda não estão disponíveis". Alguma pista para resolver o erro?
@abushoeb :
kubectl top
suporte a bandeira: --heapster-namespace
.<none>
? Verifique o último com um comando como: kubectl -n kube-system describe svc/heapster
@xmik você está certo, o heapster não foi configurado corretamente. Muito obrigado. Está funcionando agora. Você sabe se existe uma maneira de obter informações de uso da GPU em tempo real? Este comando superior fornece apenas o uso da CPU e da memória.
Eu não sei disso. :(
@abushoeb Estou recebendo o mesmo erro "erro: métricas ainda não disponíveis". Como você consertou isso?
@avgKol verifique sua implantação de heapster primeiro. No meu caso, ele não foi implantado corretamente. Uma maneira de verificar isso é acessar as métricas por meio do comando CURL, como curl -L http://heapster-pod-ip:heapster-service-port/api/v1/model/metrics/
. Se não mostrar métricas, verifique o pod e os registros do heapster. As métricas do hepster também podem ser acessadas por meio de um navegador da web como este .
Se alguém estiver interessado, criei uma ferramenta para gerar HTML estático para uso de recursos do Kubernetes (e custos): https://github.com/hjacobs/kube-resource-report
@hjacobs Eu gostaria de usar essa ferramenta, mas não sou um fã de instalar / usar pacotes Python. Importa-se de empacotá-lo como uma imagem docker?
@tonglil, o projeto está bem no início, mas meu plano é ter uma imagem do Docker pronta para usar, incl. servidor web com o qual você pode apenas fazer kubectl apply -f ..
.
Aqui está o que funcionou para mim:
kubectl get nodes -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.allocatable.memory}{'\t'}{.status.allocatable.cpu}{'\n'}{end}"
Ele mostra a saída como:
ip-192-168-101-177.us-west-2.compute.internal 251643680Ki 32
ip-192-168-196-254.us-west-2.compute.internal 251643680Ki 32
@tonglil, uma imagem Docker está agora disponível: https://github.com/hjacobs/kube-resource-report
Os problemas ficam obsoletos após 90 dias de inatividade.
Marque o problema como novo com /remove-lifecycle stale
.
Problemas obsoletos apodrecem após 30 dias adicionais de inatividade e, eventualmente, fecham.
Se este problema puder ser encerrado agora, faça-o com /close
.
Envie feedback para sig-testing, kubernetes / test-infra e / ou fejta .
/ lifecycle stale
/ remove-lifecycle stale
A cada mês, mais ou menos, meu Google me leva de volta a esse problema. Existem maneiras de obter as estatísticas de que preciso com strings jq
longas ou com painéis Grafana com um monte de cálculos ... mas seria _tão_ bom se houvesse um comando como:
# kubectl utilization cluster
cores: 19.255/24 cores (80%)
memory: 16.4/24 GiB (68%)
# kubectl utilization [node name]
cores: 3.125/4 cores (78%)
memory: 2.1/4 GiB (52%)
(semelhante ao que @chrishiestand mencionou anteriormente no tópico).
Muitas vezes estou construindo e destruindo algumas dezenas de clusters de teste por semana e prefiro não ter que construir automação ou adicionar alguns aliases de shell para ser capaz de apenas ver "se eu colocar tantos servidores lá fora e jogar fora esses aplicativos sobre eles, qual é a minha utilização / pressão geral ".
Especialmente para clusters menores / mais esotéricos, não quero configurar o escalonamento automático para a lua (geralmente por motivos financeiros), mas preciso saber se tenho sobrecarga suficiente para lidar com eventos de escalonamento automático menores.
Uma solicitação adicional - eu gostaria de ser capaz de ver o uso de recursos somados por namespace (no mínimo; por implantação / rótulo também seria útil), para que eu possa concentrar meus esforços de corte de recursos descobrindo quais namespaces valem concentrando-se.
Fiz um pequeno plugin kubectl-view-usage , que fornece a funcionalidade @geerlingguy descrita. A instalação através do gerenciador de plugins do krew está disponível. Isso é implementado em BASH e precisa de awk e bc.
Com a estrutura do plugin kubectl, isso pode ser completamente abstraído das ferramentas principais.
Estou feliz que outros também estivessem enfrentando esse desafio. Eu criei o Kube Eagle (um exportador prometheus) que me ajudou a obter uma melhor visão geral dos recursos do cluster e, finalmente, me permitiu utilizar melhor os recursos de hardware disponíveis:
Este é um script Python para obter a utilização real do nó em formato de tabela
https://github.com/amelbakry/kube-node-utilization
Utilização do nó do Kubernetes ..........
+ ------------------------------------------------ + -------- + -------- +
| NodeName | CPU | Memória |
+ ------------------------------------------------ + -------- + -------- +
| ip-176-35-32-139.eu-central-1.compute.internal | 13,49% | 60,87% |
| ip-176-35-26-21.eu-central-1.compute.internal | 5,89% | 15,10% |
| ip-176-35-9-122.eu-central-1.compute.internal | 8,08% | 65,51% |
| ip-176-35-22-243.eu-central-1.compute.internal | 6,29% | 19,28% |
+ ------------------------------------------------ + -------- + -------- +
Para mim, pelo menos @amelbakry , é a utilização no nível do cluster que é importante: "eu preciso adicionar mais máquinas?" / "devo remover algumas máquinas?" / "devo esperar que o cluster seja ampliado em breve?" ..
E quanto ao uso de armazenamento efêmero? Alguma ideia de como obtê-lo de todos os pods?
E para ser útil, minhas dicas:
kubectl get pods -o json -n kube-system | jq -r '.items[] | .metadata.name + " \n Req. RAM: " + .spec.containers[].resources.requests.memory + " \n Lim. RAM: " + .spec.containers[].resources.limits.memory + " \n Req. CPU: " + .spec.containers[].resources.requests.cpu + " \n Lim. CPU: " + .spec.containers[].resources.limits.cpu + " \n Req. Eph. DISK: " + .spec.containers[].resources.requests["ephemeral-storage"] + " \n Lim. Eph. DISK: " + .spec.containers[].resources.limits["ephemeral-storage"] + "\n"'
...
kube-proxy-xlmjt
Req. RAM: 32Mi
Lim. RAM: 256Mi
Req. CPU: 100m
Lim. CPU:
Req. Eph. DISK: 100Mi
Lim. Eph. DISK: 512Mi
...
echo "\nRAM Requests TOTAL:" && kubectl describe namespace kube-system | grep 'requests.memory' && echo "\nRAM Requests:\n" && kubectl get pods -o json -n kube-system | jq -r '.items[] | .spec.containers[].resources.requests.memory + " | " + .metadata.name'
echo "\nRAM Limits TOTAL:" && kubectl describe namespace kube-system | grep 'limits.memory' && echo "\nRAM Limits:\n" && kubectl get pods -o json -n kube-system | jq -r '.items[] | .spec.containers[].resources.limits.memory + " | " + .metadata.name'
echo "\nCPU Requests TOTAL:" && kubectl describe namespace kube-system | grep 'requests.cpu' && echo "\nCPU Requests:\n" && kubectl get pods -o json -n kube-system | jq -r '.items[] | .spec.containers[].resources.requests.cpu + " | " + .metadata.name'
echo "\nCPU Limits TOTAL:" && kubectl describe namespace kube-system | grep 'limits.cpu' && echo "\nCPU Limits:\n" && kubectl get pods -o json -n kube-system | jq -r '.items[] | .spec.containers[].resources.limits.cpu + " | " + .metadata.name'
echo "\nEph. DISK Requests TOTAL:" && kubectl describe namespace kube-system | grep 'requests.ephemeral-storage' && echo "\nEph. DISK Requests:\n" && kubectl get pods -o json -n kube-system | jq -r '.items[] | .spec.containers[].resources.requests["ephemeral-storage"] + " | " + .metadata.name'
echo "\nEph. DISK Limits TOTAL:" && kubectl describe namespace kube-system | grep 'limits.ephemeral-storage' && echo "\nEph. DISK Limits:\n" && kubectl get pods -o json -n kube-system | jq -r '.items[] | .spec.containers[].resources.limits["ephemeral-storage"] + " | " + .metadata.name'
RAM Requests TOTAL:
requests.memory 3504Mi 16Gi
RAM Requests:
64Mi | aws-alb-ingress-controller-6b569b448c-jzj6f
...
@ kivagant-ba você pode tentar este snipt para obter métricas de pod por nó, você pode obter todos os nós, como
https://github.com/amelbakry/kube-node-utilization
def get_pod_metrics_per_node (nó):
pod_metrics = "/api/v1/pods?fieldSelector=spec.nodeName%3D" + node
resposta = api_client.call_api (pod_metrics,
'GET', auth_settings = ['BearerToken'],
response_type = 'json', _preload_content = False)
resposta = json.loads (resposta [0] .data.decode ('utf-8'))
resposta de retorno
@kierenj Acho que o componente de autoescalador de cluster com base no qual o Cloud Kubernetes está sendo executado deve lidar com a capacidade. não tenho certeza se esta é a sua pergunta.
Os problemas ficam obsoletos após 90 dias de inatividade.
Marque o problema como novo com /remove-lifecycle stale
.
Problemas obsoletos apodrecem após 30 dias adicionais de inatividade e, eventualmente, fecham.
Se este problema puder ser encerrado agora, faça-o com /close
.
Envie feedback para sig-testing, kubernetes / test-infra e / ou fejta .
/ lifecycle stale
/ remove-lifecycle stale
Eu, como muitos outros, continuo voltando aqui - há anos - para obter o hack de que precisamos para gerenciar os clusters via CLI (por exemplo, AWS ASGs)
@etopeter Obrigado por um plugin CLI tão legal. Ame a simplicidade disso. Algum conselho sobre como entender melhor os números e seu significado exato?
Se alguém puder encontrar uso dele, aqui está um script que descartará os limites atuais dos pods.
kubectl get pods --all-namespaces -o=jsonpath="{range .items[*]}{.metadata.namespace}:{.metadata.name}{'\n'}\
{'.spec.nodeName -'} {.spec.nodeName}{'\n'}\
{range .spec.containers[*]}\
{'requests.cpu -'} {.resources.requests.cpu}{'\n'}\
{'limits.cpu -'} {.resources.limits.cpu}{'\n'}\
{'requests.memory -'} {.resources.requests.memory}{'\n'}\
{'limits.memory -'} {.resources.limits.memory}{'\n'}\
{'\n'}{end}\
{'\n'}{end}"
Saída de exemplo
...
kube- system: addon-http-application-routing-nginx-ingress-controller-6bq49l7
.spec.nodeName - aks-agentpool-84550961-0
request.cpu -
limites.cpu -
solicitações.memória -
limites.memória -
sistema kube
.spec.nodeName - aks-agentpool-84550961-0
request.cpu - 100m
limites.cpu -
solicitações.memória - 70Mi
limites.memória - 170Mi
sistema kube
.spec.nodeName - aks-agentpool-84550961-2
request.cpu - 100m
limites.cpu -
solicitações.memória - 70Mi
limites.memória - 170Mi
sistema kube
.spec.nodeName - aks-agentpool-84550961-1
request.cpu - 100m
limites.cpu -
solicitações.memória - 70Mi
limites.memória - 170Mi
sistema kube
.spec.nodeName - aks-agentpool-84550961-2
request.cpu - 20m
limites.cpu -
solicitações.memória - 10Mi
limites.memória -
sistema kube
.spec.nodeName - aks-agentpool-84550961-0
request.cpu - 20m
limites.cpu -
solicitações.memória - 10Mi
limites.memória -
sistema kube
.spec.nodeName - aks-agentpool-84550961-1
request.cpu - 100m
limites.cpu -
solicitações.memória -
limites.memória -
...
@ Spaceman1861 você poderia mostrar um exemplo de saída?
@ eduncan911 feito
Acho mais fácil ler a saída em formato de tabela, como este (mostra solicitações em vez de limites):
kubectl get pods -o custom-columns=NAME:.metadata.name,"CPU(cores)":.spec.containers[*].resources.requests.cpu,"MEMORY(bytes)":.spec.containers[*].resources.requests.memory --all-namespaces
Saída de amostra:
NAME CPU(cores) MEMORY(bytes)
pod1 100m 128Mi
pod2 100m 128Mi,128Mi
@ lentzi90 apenas para sua informação: você pode mostrar colunas personalizadas semelhantes no Kubernetes Web View ("kubectl para a web"), demo: https://kube-web-view.demo.j-serv.de/clusters/local/namespaces/ default / pods? join = metrics; customcols = CPU + Requests = join (% 27,% 20% 27,% 20spec.containers [ ] .resources.requests.cpu)% 3BMemory + Requests = join (% 27,% 20% 27,% 20spec.containers [ ]
Documentos em colunas personalizadas: https://kube-web-view.readthedocs.io/en/latest/features.html#listing -resources
Oooo brilhante @hjacobs eu gosto disso.
Este é um script (deployment-health.sh) para obter a utilização dos pods na implantação com base no uso e nos limites configurados
https://github.com/amelbakry/kubernetes-scripts
Inspirado pelas respostas de @ lentzi90 e @ylogx , criei um grande script que mostra o uso real de recursos ( kubectl top pods
) e solicitações e limites de recursos:
join -a1 -a2 -o 0,1.2,1.3,2.2,2.3,2.4,2.5, -e '<none>' <(kubectl top pods) <(kubectl get pods -o custom-columns=NAME:.metadata.name,"CPU_REQ(cores)":.spec.containers[*].resources.requests.cpu,"MEMORY_REQ(bytes)":.spec.containers[*].resources.requests.memory,"CPU_LIM(cores)":.spec.containers[*].resources.limits.cpu,"MEMORY_LIM(bytes)":.spec.containers[*].resources.limits.memory) | column -t -s' '
exemplo de saída:
NAME CPU(cores) MEMORY(bytes) CPU_REQ(cores) MEMORY_REQ(bytes) CPU_LIM(cores) MEMORY_LIM(bytes)
xxxxx-847dbbc4c-c6twt 20m 110Mi 50m 150Mi 150m 250Mi
xxx-service-7b6b9558fc-9cq5b 19m 1304Mi 1 <none> 1 <none>
xxxxxxxxxxxxxxx-hook-5d585b449b-zfxmh 0m 46Mi 200m 155M 200m 155M
Aqui está o alias para você usar apenas kstats
em seu terminal:
alias kstats='join -a1 -a2 -o 0,1.2,1.3,2.2,2.3,2.4,2.5, -e '"'"'<none>'"'"' <(kubectl top pods) <(kubectl get pods -o custom-columns=NAME:.metadata.name,"CPU_REQ(cores)":.spec.containers[*].resources.requests.cpu,"MEMORY_REQ(bytes)":.spec.containers[*].resources.requests.memory,"CPU_LIM(cores)":.spec.containers[*].resources.limits.cpu,"MEMORY_LIM(bytes)":.spec.containers[*].resources.limits.memory) | column -t -s'"'"' '"'"
PS Eu testei scripts apenas no meu mac, para linux e windows pode requerer algumas mudanças
Este é um script (deployment-health.sh) para obter a utilização dos pods na implantação com base no uso e nos limites configurados
https://github.com/amelbakry/kubernetes-scripts
@amelbakry Estou recebendo o seguinte erro ao tentar executá-lo em um Mac:
Failed to execute process './deployment-health.sh'. Reason:
exec: Exec format error
The file './deployment-health.sh' is marked as an executable but could not be run by the operating system.
Woops,
"#!" precisa ser a primeira linha. Em vez disso, tente "bash
./deployment-health.sh "para solucionar o problema.
/ charles
PS. PR aberto para corrigir o problema
Na quarta-feira, 25 de setembro de 2019 às 10:19 Dmitri Moore [email protected]
escreveu:
Este é um script (deployment-health.sh) para obter a utilização dos pods
na implantação com base no uso e limites configurados
https://github.com/amelbakry/kubernetes-scripts@amelbakry https://github.com/amelbakry Estou recebendo o seguinte
erro ao tentar executá-lo em um Mac:Falha ao executar o processo './deployment-health.sh'. Razão:
exec: erro de formato de execução
O arquivo './deployment-health.sh' está marcado como um executável, mas não pode ser executado pelo sistema operacional.-
Você está recebendo isto porque está inscrito neste tópico.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/kubernetes/kubernetes/issues/17512?email_source=notifications&email_token=AACA3TODQEUPWK3V3UY3SF3QLOMSFA5CNFSM4BUXCUG2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD7SVHRQ#issuecomment-535122886 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AACA3TOPOBIWXFX2DAOT6JDQLOMSFANCNFSM4BUXCUGQ
.
@cgthayer Você pode querer aplicar essa correção de RP globalmente. Além disso, quando executei os scripts no MacOs Mojave, vários erros apareceram, incluindo nomes de zona específicos da UE que não uso. Parece que esses scripts foram escritos para um projeto específico.
Aqui está uma versão modificada do ex de junção. que também faz totais de colunas.
oc_ns_pod_usage () {
# show pod usage for cpu/mem
ns="$1"
usage_chk3 "$ns" || return 1
printf "$ns\n"
separator=$(printf '=%.0s' {1..50})
printf "$separator\n"
output=$(join -a1 -a2 -o 0,1.2,1.3,2.2,2.3,2.4,2.5, -e '<none>' \
<(kubectl top pods -n $ns) \
<(kubectl get -n $ns pods -o custom-columns=NAME:.metadata.name,"CPU_REQ(cores)":.spec.containers[*].resources.requests.cpu,"MEMORY_REQ(bytes)":.spec.containers[*].resources.requests.memory,"CPU_LIM(cores)":.spec.containers[*].resources.limits.cpu,"MEMORY_LIM(bytes)":.spec.containers[*].resources.limits.memory))
totals=$(printf "%s" "$output" | awk '{s+=$2; t+=$3; u+=$4; v+=$5; w+=$6; x+=$7} END {print s" "t" "u" "v" "w" "x}')
printf "%s\n%s\nTotals: %s\n" "$output" "$separator" "$totals" | column -t -s' '
printf "$separator\n"
}
Exemplo
$ oc_ns_pod_usage ls-indexer
ls-indexer
==================================================
NAME CPU(cores) MEMORY(bytes) CPU_REQ(cores) MEMORY_REQ(bytes) CPU_LIM(cores) MEMORY_LIM(bytes)
ls-indexer-f5-7cd5859997-qsfrp 15m 741Mi 1 1000Mi 2 2000Mi
ls-indexer-f5-7cd5859997-sclvg 15m 735Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-4b7j2 92m 1103Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-5xj5l 88m 1124Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-6vvl2 92m 1132Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-85f66 85m 1151Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-924jz 96m 1124Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-g6gx8 119m 1119Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-hkhnt 52m 819Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-hrsrs 51m 1122Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-j4qxm 53m 885Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-lxlrb 83m 1215Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-mw6rt 86m 1131Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-pbdf8 95m 1115Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-qk9bm 91m 1141Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-sdv9r 54m 1194Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-t67v6 75m 1234Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-tkxs2 88m 1364Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-v6jl2 53m 747Mi 1 1000Mi 2 2000Mi
ls-indexer-filebeat-7858f56c9-wkqr7 53m 838Mi 1 1000Mi 2 2000Mi
ls-indexer-metricbeat-74d89d7d85-jp8qc 190m 1191Mi 1 1000Mi 2 2000Mi
ls-indexer-metricbeat-74d89d7d85-jv4bv 192m 1162Mi 1 1000Mi 2 2000Mi
ls-indexer-metricbeat-74d89d7d85-k4dcd 194m 1144Mi 1 1000Mi 2 2000Mi
ls-indexer-metricbeat-74d89d7d85-n46tz 192m 1155Mi 1 1000Mi 2 2000Mi
ls-indexer-packetbeat-db98f6fdf-8x446 35m 1198Mi 1 1000Mi 2 2000Mi
ls-indexer-packetbeat-db98f6fdf-gmxxd 22m 1203Mi 1 1000Mi 2 2000Mi
ls-indexer-syslog-5466bc4d4f-gzxw8 27m 1125Mi 1 1000Mi 2 2000Mi
ls-indexer-syslog-5466bc4d4f-zh7st 29m 1153Mi 1 1000Mi 2 2000Mi
==================================================
Totals: 2317 30365 28 28000 56 56000
==================================================
E o que é usage_chk3?
Também gostaria de compartilhar minhas ferramentas ;-) kubectl-view-alocations: plug-in kubectl para listar as alocações (cpu, memória, gpu, ... X solicitado, limite, alocável, ...). , os pedidos são bem-vindos.
Fiz isso porque gostaria de fornecer aos meus usuários (internos) uma maneira de ver "quem aloca o quê". Por padrão, todos os recursos são exibidos, mas no exemplo a seguir, solicito apenas o recurso com "gpu" no nome.
> kubectl-view-allocations -r gpu
Resource Requested %Requested Limit %Limit Allocatable Free
nvidia.com/gpu 7 58% 7 58% 12 5
├─ node-gpu1 1 50% 1 50% 2 1
│ └─ xxxx-784dd998f4-zt9dh 1 1
├─ node-gpu2 0 0% 0 0% 2 2
├─ node-gpu3 0 0% 0 0% 2 2
├─ node-gpu4 1 50% 1 50% 2 1
│ └─ aaaa-1571819245-5ql82 1 1
├─ node-gpu5 2 100% 2 100% 2 0
│ ├─ bbbb-1571738839-dfkhn 1 1
│ └─ bbbb-1571738888-52c4w 1 1
└─ node-gpu6 2 100% 2 100% 2 0
├─ bbbb-1571738688-vlxng 1 1
└─ cccc-1571745684-7k6bn 1 1
próxima (s) versão (ões):
Obrigado a kubectl-view-usage pela inspiração, mas adicionar suporte a outros recursos era muito difícil de copiar / colar ou fazer no bash (de uma forma genérica).
aqui está meu hack
kubectl describe nodes | grep -A 2 -e "^\\s*CPU Requests"
Isso não funciona mais :(
Experimente kubectl describe node | grep -A5 "Allocated"
Este é atualmente o quarto problema mais solicitado pelos polegares, mas ainda é priority/backlog
.
Eu ficaria feliz em tentar fazer isso se alguém pudesse me indicar a direção certa ou se pudéssemos finalizar uma proposta. Eu acho que a UX da ferramenta de kubectl
.
Usando os seguintes comandos: kubectl top nodes
& kubectl describe node
não obtemos resultados consistentes
Por exemplo, com o primeiro, a CPU (núcleos) tem 1064m, mas este resultado não pode ser obtido com o segundo (1480m):
kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
abcd-p174e23ea5qa4g279446c803f82-abc-node-0 1064m 53% 6783Mi 88%
kubectl describe node abcd-p174e23ea5qa4g279446c803f82-abc-node-0
...
Resource Requests Limits
-------- -------- ------
cpu 1480m (74%) 1300m (65%)
memory 2981486848 (37%) 1588314624 (19%)
Alguma ideia sobre como obter a CPU (núcleos) sem usar o kubectl top nodes
?
Também gostaria de compartilhar minhas ferramentas ;-) kubectl-view-alocations: plug-in kubectl para listar as alocações (cpu, memória, gpu, ... X solicitado, limite, alocável, ...). , os pedidos são bem-vindos.
Fiz isso porque gostaria de fornecer aos meus usuários (internos) uma maneira de ver "quem aloca o quê". Por padrão, todos os recursos são exibidos, mas no exemplo a seguir, solicito apenas o recurso com "gpu" no nome.
> kubectl-view-allocations -r gpu Resource Requested %Requested Limit %Limit Allocatable Free nvidia.com/gpu 7 58% 7 58% 12 5 ├─ node-gpu1 1 50% 1 50% 2 1 │ └─ xxxx-784dd998f4-zt9dh 1 1 ├─ node-gpu2 0 0% 0 0% 2 2 ├─ node-gpu3 0 0% 0 0% 2 2 ├─ node-gpu4 1 50% 1 50% 2 1 │ └─ aaaa-1571819245-5ql82 1 1 ├─ node-gpu5 2 100% 2 100% 2 0 │ ├─ bbbb-1571738839-dfkhn 1 1 │ └─ bbbb-1571738888-52c4w 1 1 └─ node-gpu6 2 100% 2 100% 2 0 ├─ bbbb-1571738688-vlxng 1 1 └─ cccc-1571745684-7k6bn 1 1
próxima (s) versão (ões):
* will allow to hide (node, pod) level or to choose how to group, (eg to provide an overview with only resources) * installation via curl, krew, brew, ... (currently binary are available under the releases section of github)
Obrigado a kubectl-view-usage pela inspiração, mas adicionar suporte a outros recursos era muito difícil de copiar / colar ou fazer no bash (de uma forma genérica).
Olá David, seria bom se você fornecesse mais binários compilados para novas distribuições. No Ubuntu 16.04 temos
kubectl-view-alocations: /lib/x86_64-linux-gnu/libc.so.6: versão `GLIBC_2.25 'não encontrada (exigido por kubectl-view-alocations)
dpkg -l |grep glib
ii libglib2.0-0: amd64 2.48.2-0ubuntu4.4
@omerfsen, você pode tentar a nova versão kubectl-view-alocations e comentar na versão do tíquete
Minha maneira de obter a alocação, em todo o cluster:
$ kubectl get po --all-namespaces -o=jsonpath="{range .items[*]}{.metadata.namespace}:{.metadata.name}{'\n'}{range .spec.containers[*]} {.name}:{.resources.requests.cpu}{'\n'}{end}{'\n'}{end}"
Ele produz algo como:
kube-system:heapster-v1.5.0-dc8df7cc9-7fqx6 heapster:88m heapster-nanny:50m kube-system:kube-dns-6cdf767cb8-cjjdr kubedns:100m dnsmasq:150m sidecar:10m prometheus-to-sd: kube-system:kube-dns-6cdf767cb8-pnx2g kubedns:100m dnsmasq:150m sidecar:10m prometheus-to-sd: kube-system:kube-dns-autoscaler-69c5cbdcdd-wwjtg autoscaler:20m kube-system:kube-proxy-gke-cluster1-default-pool-cd7058d6-3tt9 kube-proxy:100m kube-system:kube-proxy-gke-cluster1-preempt-pool-57d7ff41-jplf kube-proxy:100m kube-system:kubernetes-dashboard-7b9c4bf75c-f7zrl kubernetes-dashboard:50m kube-system:l7-default-backend-57856c5f55-68s5g default-http-backend:10m kube-system:metrics-server-v0.2.0-86585d9749-kkrzl metrics-server:48m metrics-server-nanny:5m kube-system:tiller-deploy-7794bfb756-8kxh5 tiller:10m
de longe a melhor resposta aqui.
Inspirado nos scripts acima, criei o seguinte script para visualizar o uso, solicitações e limites:
join -1 2 -2 2 -a 1 -a 2 -o "2.1 0 1.3 2.3 2.5 1.4 2.4 2.6" -e '<wait>' \
<( kubectl top pods --all-namespaces | sort --key 2 -b ) \
<( kubectl get pods --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,"CPU_REQ(cores)":.spec.containers[*].resources.requests.cpu,"MEMORY_REQ(bytes)":.spec.containers[*].resources.requests.memory,"CPU_LIM(cores)":.spec.containers[*].resources.limits.cpu,"MEMORY_LIM(bytes)":.spec.containers[*].resources.limits.memory | sort --key 2 -b ) \
| column -t -s' '
Como o script de shell join
espera uma lista ordenada, os scripts fornecidos acima falharam para mim.
Você vê como resultado o uso atual do topo e da implantação as solicitações e os limites de (aqui) todos os namespaces:
NAMESPACE NAME CPU(cores) CPU_REQ(cores) CPU_LIM(cores) MEMORY(bytes) MEMORY_REQ(bytes) MEMORY_LIM(bytes)
kube-system aws-node-2jzxr 18m 10m <none> 41Mi <none> <none>
kube-system aws-node-5zn6w <wait> 10m <none> <wait> <none> <none>
kube-system aws-node-h8cc5 20m 10m <none> 42Mi <none> <none>
kube-system aws-node-h9n4f 0m 10m <none> 0Mi <none> <none>
kube-system aws-node-lz5fn 17m 10m <none> 41Mi <none> <none>
kube-system aws-node-tpmxr 20m 10m <none> 39Mi <none> <none>
kube-system aws-node-zbkkh 23m 10m <none> 47Mi <none> <none>
cluster-autoscaler cluster-autoscaler-aws-cluster-autoscaler-5db55fbcf8-mdzkd 1m 100m 500m 9Mi 300Mi 500Mi
cluster-autoscaler cluster-autoscaler-aws-cluster-autoscaler-5db55fbcf8-q9xs8 39m 100m 500m 75Mi 300Mi 500Mi
kube-system coredns-56b56b56cd-bb26t 6m 100m <none> 11Mi 70Mi 170Mi
kube-system coredns-56b56b56cd-nhp58 6m 100m <none> 11Mi 70Mi 170Mi
kube-system coredns-56b56b56cd-wrmxv 7m 100m <none> 12Mi 70Mi 170Mi
gitlab-runner-l gitlab-runner-l-gitlab-runner-6b8b85f87f-9knnx 3m 100m 200m 10Mi 128Mi 256Mi
gitlab-runner-m gitlab-runner-m-gitlab-runner-6bfd5d6c84-t5nrd 7m 100m 200m 13Mi 128Mi 256Mi
gitlab-runner-mda gitlab-runner-mda-gitlab-runner-59bb66c8dd-bd9xw 4m 100m 200m 17Mi 128Mi 256Mi
gitlab-runner-ops gitlab-runner-ops-gitlab-runner-7c5b85dc97-zkb4c 3m 100m 200m 12Mi 128Mi 256Mi
gitlab-runner-pst gitlab-runner-pst-gitlab-runner-6b8f9bf56b-sszlr 6m 100m 200m 20Mi 128Mi 256Mi
gitlab-runner-s gitlab-runner-s-gitlab-runner-6bbccb9b7b-dmwgl 50m 100m 200m 27Mi 128Mi 512Mi
gitlab-runner-shared gitlab-runner-shared-gitlab-runner-688d57477f-qgs2z 3m <none> <none> 15Mi <none> <none>
kube-system kube-proxy-5b65t 15m 100m <none> 19Mi <none> <none>
kube-system kube-proxy-7qsgh 12m 100m <none> 24Mi <none> <none>
kube-system kube-proxy-gn2qg 13m 100m <none> 23Mi <none> <none>
kube-system kube-proxy-pz7fp 15m 100m <none> 18Mi <none> <none>
kube-system kube-proxy-vdjqt 15m 100m <none> 23Mi <none> <none>
kube-system kube-proxy-x4xtp 19m 100m <none> 15Mi <none> <none>
kube-system kube-proxy-xlpn7 0m 100m <none> 0Mi <none> <none>
metrics-server metrics-server-5875c7d795-bj7cq 5m 200m 500m 29Mi 200Mi 500Mi
metrics-server metrics-server-5875c7d795-jpjjn 7m 200m 500m 29Mi 200Mi 500Mi
gitlab-runner-s runner-heq8ujaj-project-10386-concurrent-06t94f <wait> 200m,100m 200m,200m <wait> 200Mi,128Mi 500Mi,500Mi
gitlab-runner-s runner-heq8ujaj-project-10386-concurrent-10lpn9j 1m 200m,100m 200m,200m 12Mi 200Mi,128Mi 500Mi,500Mi
gitlab-runner-s runner-heq8ujaj-project-10386-concurrent-11jrxfh <wait> 200m,100m 200m,200m <wait> 200Mi,128Mi 500Mi,500Mi
gitlab-runner-s runner-heq8ujaj-project-10386-concurrent-129hpvl 1m 200m,100m 200m,200m 12Mi 200Mi,128Mi 500Mi,500Mi
gitlab-runner-s runner-heq8ujaj-project-10386-concurrent-13kswg8 1m 200m,100m 200m,200m 12Mi 200Mi,128Mi 500Mi,500Mi
gitlab-runner-s runner-heq8ujaj-project-10386-concurrent-15qhp5w <wait> 200m,100m 200m,200m <wait> 200Mi,128Mi 500Mi,500Mi
Digno de nota: você pode classificar o consumo de CPU com, por exemplo:
| awk 'NR<2{print $0;next}{print $0| "sort --key 3 --numeric -b --reverse"}
Isso funciona no Mac - não tenho certeza se funciona no Linux também (por causa de join, sort, etc ...).
Felizmente, alguém pode usar isso até que o kubectl tenha uma boa visão disso.
Tenho uma boa experiência com capacidade kube .
Exemplo:
kube-capacity --util
NODE CPU REQUESTS CPU LIMITS CPU UTIL MEMORY REQUESTS MEMORY LIMITS MEMORY UTIL
* 560m (28%) 130m (7%) 40m (2%) 572Mi (9%) 770Mi (13%) 470Mi (8%)
example-node-1 220m (22%) 10m (1%) 10m (1%) 192Mi (6%) 360Mi (12%) 210Mi (7%)
example-node-2 340m (34%) 120m (12%) 30m (3%) 380Mi (13%) 410Mi (14%) 260Mi (9%)
Para que essa ferramenta seja realmente útil, ela deve detectar todos os plug-ins de dispositivos kubernetes implantados no cluster e mostrar o uso de todos eles. CPU / Mem definitivamente não é suficiente. Há também GPUs, TPUs (para aprendizado de máquina), Intel QAT e provavelmente mais que eu não conheço. E quanto ao armazenamento? Devo ser capaz de ver facilmente o que foi solicitado e o que é usado (de preferência em termos de iops também).
@ boniek83 , É por isso que criei kubectl-view-alocações , porque preciso listar a GPU, ... qualquer feedback (sobre o projeto do github) é bem
@ boniek83 , É por isso que criei kubectl-view-alocações , porque preciso listar a GPU, ... qualquer feedback (sobre o projeto do github) é bem
Conheço a sua ferramenta e, para mim, é a melhor que existe atualmente. Obrigado por fazer isso!
Vou tentar testar os TPUs depois da Páscoa. Seria útil se esses dados estivessem disponíveis no formato de aplicativo da web com gráficos bonitos, para que eu não tivesse que dar acesso ao kubernetes para cientistas de dados. Eles só querem saber quem está consumindo recursos e nada mais :)
Como nenhuma das ferramentas e scripts acima atendem às minhas necessidades (e esse problema ainda está aberto :(), eu hackeei minha própria variante:
https://github.com/eht16/kube-cargo-load
Ele fornece uma visão geral rápida dos PODs em um cluster e mostra suas solicitações e limites de memória configurados e o uso real de memória. A ideia é obter uma imagem da proporção entre os limites de memória configurados e o uso real.
Como podemos obter logs de despejo de memória dos pods?
Os pods costumam travar,
kubectl describe nodes
OR kubectl top nodes
, qual deles deve ser considerado para calcular a utilização de recursos do cluster?/ tipo recurso
Todos os comentários e hacks com nós funcionaram bem para mim. Eu também preciso de algo para uma visão superior para acompanhar ... como a soma de recursos por pool de nós!
Oi,
Quero registrar o uso da CPU e da memória de um pod, a cada 5 minutos durante um determinado período. Em seguida, usaria esses dados para criar um gráfico no Excel. Alguma ideia? Obrigado
Oi,
Estou feliz em ver que o Google apontou todos nós para este problema :-) (um pouco desapontado por ainda estar aberto depois de quase 5 anos). Obrigado por todos os recortes de shell e outras ferramentas.
Hack simples e rápido:
$ kubectl describe nodes | grep 'Name:\| cpu\| memory'
Name: XXX-2-wke2
cpu 1552m (77%) 2402m (120%)
memory 2185Mi (70%) 3854Mi (123%)
Name: XXX-2-wkep
cpu 1102m (55%) 1452m (72%)
memory 1601Mi (51%) 2148Mi (69%)
Name: XXX-2-wkwz
cpu 852m (42%) 1352m (67%)
memory 1125Mi (36%) 3624Mi (116%)
Hack simples e rápido:
$ kubectl describe nodes | grep 'Name:\| cpu\| memory' Name: XXX-2-wke2 cpu 1552m (77%) 2402m (120%) memory 2185Mi (70%) 3854Mi (123%) Name: XXX-2-wkep cpu 1102m (55%) 1452m (72%) memory 1601Mi (51%) 2148Mi (69%) Name: XXX-2-wkwz cpu 852m (42%) 1352m (67%) memory 1125Mi (36%) 3624Mi (116%)
Os plug-ins do dispositivo não estão lá. Eles deveriam ser. Esses dispositivos também são recursos.
Olá!
Eu criei este script e compartilho com você.
https://github.com/Sensedia/open-tools/blob/master/scripts/listK8sHardwareResources.sh
Este script contém uma compilação de algumas das ideias que você compartilhou aqui. O script pode ser incrementado e pode ajudar outras pessoas a obter as métricas de forma mais simples.
Obrigado por compartilhar as dicas e comandos!
Para o meu caso de uso, acabei escrevendo um plug-in kubectl
simples que lista limites / reservas de CPU / RAM para nós em uma tabela. Ele também verifica o consumo atual de CPU / RAM do pod (como kubectl top pods
), mas ordenando a saída por CPU em ordem decrescente.
É mais uma coisa conveniente do que qualquer outra coisa, mas talvez outra pessoa também ache útil.
Uau, que thread enorme e ainda nenhuma solução adequada da equipe do kubernetes para calcular corretamente o uso geral atual da CPU de um cluster inteiro?
Para quem deseja executar isso no minikube, primeiro habilite o complemento do servidor de métricas
minikube addons enable metrics-server
e então execute o comando
kubectl top nodes
Se você estiver usando o Krew :
kubectl krew install resource-capacity
kubectl resource-capacity
NODE CPU REQUESTS CPU LIMITS MEMORY REQUESTS MEMORY LIMITS
* 16960m (35%) 18600m (39%) 26366Mi (14%) 3100Mi (1%)
ip-10-0-138-176.eu-north-1.compute.internal 2460m (31%) 4200m (53%) 567Mi (1%) 784Mi (2%)
ip-10-0-155-49.eu-north-1.compute.internal 2160m (27%) 2200m (27%) 4303Mi (14%) 414Mi (1%)
ip-10-0-162-84.eu-north-1.compute.internal 3860m (48%) 3900m (49%) 8399Mi (27%) 414Mi (1%)
ip-10-0-200-101.eu-north-1.compute.internal 2160m (27%) 2200m (27%) 4303Mi (14%) 414Mi (1%)
ip-10-0-231-146.eu-north-1.compute.internal 2160m (27%) 2200m (27%) 4303Mi (14%) 414Mi (1%)
ip-10-0-251-167.eu-north-1.compute.internal 4160m (52%) 3900m (49%) 4491Mi (14%) 660Mi (2%)
Comentários muito úteis
Há: