Kubernetes: Perlu perintah kubectl sederhana untuk melihat penggunaan sumber daya cluster

Dibuat pada 19 Nov 2015  Β·  88Komentar  Β·  Sumber: kubernetes/kubernetes

Pengguna tersandung oleh pod yang tidak dapat dijadwalkan karena kekurangan sumber daya. Mungkin sulit untuk mengetahui kapan sebuah pod tertunda karena belum dimulai, atau karena cluster tidak memiliki ruang untuk menjadwalkannya. http://kubernetes.io/v1.1/docs/user-guide/compute-resources.html#monitoring -compute-resource-usage membantu, tetapi bukankah itu dapat ditemukan (saya cenderung mencoba 'mendapatkan' pod di pending terlebih dahulu, dan hanya setelah menunggu beberapa saat dan melihatnya 'macet' dalam pending, apakah saya menggunakan 'describe' untuk menyadari bahwa ini adalah masalah penjadwalan).

Ini juga diperumit oleh pod sistem yang berada di namespace yang disembunyikan. Pengguna lupa bahwa pod itu ada, dan 'menghitung' sumber daya cluster.

Ada beberapa kemungkinan perbaikan begitu saja, saya tidak tahu apa yang ideal:

1) Kembangkan status pod baru selain Pending untuk mewakili "mencoba menjadwalkan dan gagal karena kekurangan sumber daya".

2) Minta kubectl get po atau kubectl get po -o=wide menampilkan kolom untuk merinci mengapa ada sesuatu yang tertunda (mungkin container.state yang Menunggu dalam kasus ini, atau event.message terbaru).

3) Buat perintah kubectl baru untuk mendeskripsikan resource dengan lebih mudah. Saya membayangkan "penggunaan kubectl" yang memberikan gambaran umum tentang total cluster CPU dan Mem, per node CPU dan Mem dan setiap penggunaan pod/wadah. Di sini kami akan menyertakan semua pod, termasuk yang sistem. Ini mungkin berguna dalam jangka panjang bersama dengan penjadwal yang lebih kompleks, atau ketika cluster Anda memiliki sumber daya yang cukup tetapi tidak ada satu node pun yang melakukannya (mendiagnosis masalah 'tidak ada lubang yang cukup besar').

kinfeature prioritbacklog sicli

Komentar yang paling membantu

Ada:

$ 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% 

Semua 88 komentar

Sesuatu di sepanjang baris (2) tampaknya masuk akal, meskipun orang-orang UX akan tahu lebih baik daripada saya.

(3) tampaknya samar-samar terkait dengan #15743 tetapi saya tidak yakin mereka cukup dekat untuk digabungkan.

Selain kasus di atas, alangkah baiknya untuk melihat pemanfaatan sumber daya apa yang kita dapatkan.

kubectl utilization requests mungkin ditampilkan (mungkin kubectl util atau kubectl usage lebih baik/lebih pendek):

cores: 4.455/5 cores (89%)
memory: 20.1/30 GiB (67%)
...

Dalam contoh ini, permintaan container agregat adalah 4.455 core dan 20.1 GiB dan ada 5 core dan total 30GiB di cluster.

Ada:

$ 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% 

Saya menggunakan perintah di bawah ini untuk mendapatkan tampilan cepat untuk penggunaan sumber daya. Ini adalah cara paling sederhana yang saya temukan.

kubectl describe nodes

Jika ada cara untuk "memformat" output dari kubectl describe nodes , saya tidak keberatan membuat skrip cara saya untuk meringkas semua permintaan/batas sumber daya node.

ini retasan saya kubectl describe nodes | grep -A 2 -e "^\\s*CPU Requests"

@from-nibly terima kasih, hanya apa yang saya cari

Ya, ini milikku:

$ 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 Tidak ada label tanda pada masalah ini. Silakan tambahkan label tanda dengan:
(1) menyebutkan tanda: @kubernetes/sig-<team-name>-misc
(2) menentukan label secara manual: /sig <label>

_Catatan: metode (1) akan memicu pemberitahuan ke tim. Anda dapat menemukan daftar tim di sini ._

@ kubernetes / sig-cli-misc

Anda dapat menggunakan perintah di bawah ini untuk menemukan persentase penggunaan cpu dari node Anda

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 - Terima kasih atas alias Anda. Dalam kasus saya, inilah yang berhasil bagi saya karena kami menggunakan tipe instans bash dan m3.large (2 cpu , memori 7.5G).

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 menunjukkan penggunaan , bukan alokasi. Alokasi inilah yang menyebabkan masalah insufficient CPU . Ada banyak kebingungan dalam masalah ini tentang perbedaannya.

AFAICT, tidak ada cara mudah untuk mendapatkan laporan alokasi CPU node oleh pod, karena permintaan adalah per container dalam spec. Dan bahkan kemudian, itu sulit karena .spec.containers[*].requests mungkin atau mungkin tidak memiliki bidang limits / requests (dalam pengalaman saya)

/cc @misterikkit

Masuk ke pesta skrip shell ini. Saya memiliki cluster lama yang menjalankan CA dengan penurunan skala dinonaktifkan. Saya menulis skrip ini untuk menentukan secara kasar seberapa banyak saya dapat menurunkan skala cluster ketika mulai menabrak batas rute AWS-nya:

#!/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

Menghasilkan keluaran seperti:

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.

Ada juga opsi pod di perintah teratas:

kubectl top pod

Cara saya untuk mendapatkan alokasi, di seluruh 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}"

Ini menghasilkan sesuatu seperti:

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

Ini aneh. Saya ingin tahu kapan saya mencapai atau mendekati kapasitas alokasi. Tampaknya fungsi yang cukup mendasar dari sebuah cluster. Entah itu statistik yang menunjukkan % tinggi atau kesalahan tekstual... bagaimana orang lain mengetahuinya? Selalu gunakan penskalaan otomatis di platform cloud?

Saya menulis https://github.com/dpetzold/kube-resource-explorer/ ke alamat #3. Berikut adalah beberapa contoh keluaran:

$ ./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 adalah kutipan keriting, mungkin masalah salin-tempel

@nfirvine Terima kasih! Saya telah memecahkan masalah dengan menggunakan:

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}'

Ini berfungsi untuk ruang nama yang masing-masing podnya hanya berisi 1 wadah.

@xmik Hei, saya menggunakan k8 1.7 dan menjalankan hepaster. Ketika saya menjalankan $ kubectl top node --heapster-namespace=kube-system, ini menunjukkan "error: metrics not available yet". Adakah petunjuk untuk mengatasi kesalahan?

@abushoeb :

  1. Saya tidak berpikir kubectl top mendukung flag: --heapster-namespace . Sunting: bendera ini didukung, Anda benar: https://github.com/kubernetes/kubernetes/issues/44540#issuecomment -362882035 .
  2. Jika Anda melihat "kesalahan: metrik belum tersedia", Anda harus memeriksa penerapan heapster. Apa yang dikatakan lognya? Apakah layanan heapster baik-baik saja, titik akhir tidak <none> ? Periksa yang terakhir dengan perintah seperti: kubectl -n kube-system describe svc/heapster

@xmik Anda benar, heapster tidak dikonfigurasi dengan benar. Terima kasih banyak. Ini bekerja sekarang. Tahukah Anda jika ada cara untuk mendapatkan informasi penggunaan GPU secara real-time? Perintah teratas ini hanya memberikan penggunaan CPU dan Memori.

Saya tidak tahu itu. :(

@abushoeb Saya mendapatkan kesalahan yang sama "error: metrics not available yet" . Bagaimana Anda memperbaikinya?

@avgKol periksa penerapan heapster Anda terlebih dahulu. Dalam kasus saya, itu tidak digunakan dengan benar. Salah satu cara untuk memeriksanya adalah dengan mengakses metrik melalui perintah CURL seperti curl -L http://heapster-pod-ip:heapster-service-port/api/v1/model/metrics/ . Jika tidak menampilkan metrik, periksa pod dan log heapster. Metrik hepster juga dapat diakses melalui browser web seperti ini .

Jika ada yang tertarik, saya membuat alat untuk menghasilkan HTML statis untuk penggunaan sumber daya Kubernetes (dan biaya): https://github.com/hjacobs/kube-resource-report

@hjacobs Saya ingin menggunakan alat itu tetapi bukan penggemar menginstal/menggunakan paket python. Keberatan mengemasnya sebagai gambar buruh pelabuhan?

@tonglil proyek ini cukup awal, tetapi rencana saya adalah memiliki gambar Docker yang siap pakai termasuk. server web yang dapat Anda lakukan dengan kubectl apply -f .. .

Inilah yang berhasil untuk saya:

kubectl get nodes -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.allocatable.memory}{'\t'}{.status.allocatable.cpu}{'\n'}{end}"

Ini menunjukkan output sebagai:

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 gambar Docker sekarang tersedia: https://github.com/hjacobs/kube-resource-report

Masalah menjadi basi setelah 90 hari tidak aktif.
Tandai masalah sebagai baru dengan /remove-lifecycle stale .
Masalah basi membusuk setelah 30 hari tambahan tidak aktif dan akhirnya ditutup.

Jika masalah ini aman untuk ditutup sekarang, silakan lakukan dengan /close .

Kirim umpan balik ke sig-testing, kubernetes/test-infra dan/atau fejta .
/siklus hidup basi

/hapus siklus hidup basi

Setiap bulan atau lebih, Googling saya membawa saya kembali ke masalah ini. Ada beberapa cara untuk mendapatkan statistik yang saya butuhkan dengan string jq , atau dengan dasbor Grafana dengan banyak perhitungan... tetapi akan lebih baik _so_ jika ada perintah seperti:

# 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%)

(mirip dengan apa yang @chrishiestand sebutkan sebelumnya di utas).

Saya sering membangun dan menghancurkan beberapa lusin cluster pengujian per minggu, dan saya lebih suka tidak perlu membangun otomatisasi atau menambahkan beberapa alias shell untuk dapat melihat "jika saya meletakkan banyak server di luar sana, dan membuang aplikasi ini pada mereka, berapa pemanfaatan/tekanan saya secara keseluruhan".

Khusus untuk cluster yang lebih kecil/lebih esoterik, saya tidak ingin mengatur autoscale-to-the-moon (biasanya karena alasan uang), tetapi perlu tahu apakah saya memiliki cukup overhead untuk menangani peristiwa autoscaling pod kecil.

Satu permintaan tambahan -- Saya ingin dapat melihat penggunaan sumber daya yang dijumlahkan berdasarkan namespace (minimal; menurut Deployment/label juga akan berguna), jadi saya dapat memfokuskan upaya pemangkasan sumber daya saya dengan mencari tahu namespace mana yang layak berkonsentrasi pada.

Saya membuat plugin kecil kubectl-view-utilization , yang menyediakan fungsionalitas yang dijelaskan @geerlingguy . Instalasi melalui manajer plugin krew tersedia. Ini diimplementasikan dalam BASH dan perlu awk dan bc.
Dengan kerangka plugin kubectl, ini dapat sepenuhnya diabstraksikan dari alat inti.

Saya senang orang lain juga menghadapi tantangan ini. Saya membuat Kube Eagle (pengekspor prometheus) yang membantu saya mendapatkan gambaran yang lebih baik tentang sumber daya klaster dan pada akhirnya memungkinkan saya memanfaatkan sumber daya perangkat keras yang tersedia dengan lebih baik:

https://github.com/google-cloud-tools/kube-eagle

Kubernetes Resource monitoring dashboard

Ini adalah skrip python untuk mendapatkan pemanfaatan simpul aktual dalam format tabel
https://github.com/amelbakry/kube-node-utilization

Pemanfaatan Node Kubernetes..........
+------------------------------------------------+ --------+--------+
| NamaNode | CPU | Memori |
+------------------------------------------------+ --------+--------+
| 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% |
+------------------------------------------------+ --------+--------+

Bagi saya setidaknya @amelbakry itu pemanfaatan tingkat cluster yang penting: "apakah saya perlu menambahkan lebih banyak mesin?" / "apakah saya harus menghapus beberapa mesin?" / "haruskah saya berharap cluster akan segera ditingkatkan?" ..

Bagaimana dengan penggunaan penyimpanan fana? Adakah ide bagaimana mendapatkannya dari semua pod?

Dan agar bermanfaat, petunjuk saya:

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 Anda dapat mencoba snipt ini untuk mendapatkan metrik pod per node, Anda bisa mendapatkan semua node seperti
https://github.com/amelbakry/kube-node-utilization

def get_pod_metrics_per_node(simpul):
pod_metrics = "/api/v1/pods?fieldSelector=spec.nodeName%3D" + simpul
respon = api_client.call_api(pod_metrics,
'GET', auth_settings=['BearerToken'],
response_type='json', _preload_content=False)

respons = json.loads(response[0].data.decode('utf-8'))

balasan balasan

@kierenj Saya pikir komponen cluster-autoscaler berdasarkan cloud kubernetes yang berjalan harus menangani kapasitas. tidak yakin apakah ini pertanyaan Anda.

Masalah menjadi basi setelah 90 hari tidak aktif.
Tandai masalah sebagai baru dengan /remove-lifecycle stale .
Masalah basi membusuk setelah 30 hari tambahan tidak aktif dan akhirnya ditutup.

Jika masalah ini aman untuk ditutup sekarang, silakan lakukan dengan /close .

Kirim umpan balik ke sig-testing, kubernetes/test-infra dan/atau fejta .
/siklus hidup basi

/hapus siklus hidup basi

Saya, seperti banyak orang lain, terus kembali ke sini - selama bertahun-tahun - untuk mendapatkan peretasan, kami perlu mengelola kluster melalui CLI (mis. AWS ASG)

@etopeter Terima kasih atas plugin CLI yang keren. Suka dengan kesederhanaannya. Adakah saran tentang cara lebih memahami angka-angka dan artinya yang sebenarnya?

Jika ada yang bisa menggunakannya di sini adalah skrip yang akan membuang batas pod saat ini.

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}"

Contoh keluaran
...
kube- sistem: addon-http-application-routing-nginx-ingress-controller-6bq49l7
.spec.nodeName - aks-agentpool-84550961-0
request.cpu -
batas.cpu -
permintaan.memori -
batas.memori -

kube- sistem: coredns-696c4d987c-pjht8
.spec.nodeName - aks-agentpool-84550961-0
request.cpu - 100m
batas.cpu -
request.memory - 70Mi
limit.memory - 170Mi

kube- sistem: coredns-696c4d987c-rtkl6
.spec.nodeName - aks-agentpool-84550961-2
request.cpu - 100m
batas.cpu -
request.memory - 70Mi
limit.memory - 170Mi

kube- sistem: coredns-696c4d987c-zgcbp
.spec.nodeName - aks-agentpool-84550961-1
request.cpu - 100m
batas.cpu -
request.memory - 70Mi
limit.memory - 170Mi

kube- sistem: coredns-autoscaler-657d77ffbf-7t72x
.spec.nodeName - aks-agentpool-84550961-2
request.cpu - 20m
batas.cpu -
request.memory - 10Mi
batas.memori -

kube- sistem: coredns-autoscaler-657d77ffbf-zrp6m
.spec.nodeName - aks-agentpool-84550961-0
request.cpu - 20m
batas.cpu -
request.memory - 10Mi
batas.memori -

kube- sistem: kube-proxy-57nw5
.spec.nodeName - aks-agentpool-84550961-1
request.cpu - 100m
batas.cpu -
permintaan.memori -
batas.memori -
...

@Spaceman1861 dapatkah Anda menunjukkan contoh di luar?

@eduncan911 selesai

Saya merasa lebih mudah untuk membaca output dalam format tabel, seperti ini (ini menunjukkan permintaan daripada batas):

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

Contoh keluaran:

NAME                                CPU(cores)      MEMORY(bytes)
pod1                                100m            128Mi
pod2                                100m            128Mi,128Mi

@lentzi90 hanya FYI: Anda dapat menampilkan kolom kustom serupa di Kubernetes Web View ("kubectl untuk web"), demo: https://kube-web-view.demo.j-serv.de/cluster/local/namespaces/ default/pods?join=metrics;customcols=CPU+Requests=gabung (%27,%20%27,%20spec.containers[ ].resources.requests.cpu)%3BMemory+Requests=join(%27,%20% 27,%20spec.containers[ ].resources.requests.memory)

Dokumen pada kolom khusus: https://kube-web-view.readthedocs.io/en/latest/features.html#listing -resources

Oooo mengkilap @hjacobs Saya suka itu.

Ini adalah skrip (deployment-health.sh) untuk mendapatkan pemanfaatan pod dalam penerapan berdasarkan penggunaan dan batas yang dikonfigurasi
https://github.com/amelbakry/kubernetes-scripts

Screenshot from 2019-09-02 15-11-42

Terinspirasi oleh jawaban dari @lentzi90 dan @ylogx , saya telah membuat skrip besar sendiri yang menunjukkan penggunaan sumber daya aktual ( kubectl top pods ) dan permintaan serta batasan sumber daya:

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' ' 

contoh keluaran:

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

Ini adalah alias untuk Anda gunakan kstats di terminal Anda:

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 Saya telah menguji skrip hanya di mac saya, untuk linux dan windows mungkin memerlukan beberapa perubahan

Ini adalah skrip (deployment-health.sh) untuk mendapatkan pemanfaatan pod dalam penerapan berdasarkan penggunaan dan batas yang dikonfigurasi
https://github.com/amelbakry/kubernetes-scripts

@amelbakry Saya mendapatkan kesalahan berikut saat mencoba menjalankannya di 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.

Ups,
"#!" harus menjadi baris pertama. Alih-alih coba "bash
./deployment-health.sh" untuk mengatasi masalah ini.

/charles
PS. PR dibuka untuk memperbaiki masalah

Pada hari Rabu, 25 Sep 2019 jam 10:19 Dmitri Moore [email protected]
menulis:

Ini adalah skrip (deployment-health.sh) untuk mendapatkan pemanfaatan pod
dalam penyebaran berdasarkan penggunaan dan batas yang dikonfigurasi
https://github.com/amelbakry/kubernetes-scripts

@amelbakry https://github.com/amelbakry Saya mendapatkan yang berikut
kesalahan saat mencoba menjalankannya di Mac:

Gagal menjalankan proses './deployment-health.sh'. Alasan:
exec: Kesalahan format Exec
File './deployment-health.sh' ditandai sebagai file yang dapat dieksekusi tetapi tidak dapat dijalankan oleh sistem operasi.

β€”
Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/kubernetes/kubernetes/issues/17512?email_source=notifications&email_token=AACA3TODQEUPWK3V3UY3SF3QLOMSFA5CNFSM4BUXCUG2YY3PNVWWK3TUL52HS4DFVREXG43VMVBJW63LNMVX
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AACA3TOPOBIWXFX2DAOT6JDQLOMSFANCNFSM4BUXCUGQ
.

@cgthayer Anda mungkin ingin menerapkan perbaikan PR itu secara global. Juga, ketika saya menjalankan skrip di MacOs Mojave, banyak kesalahan muncul, termasuk nama zona khusus UE yang tidak saya gunakan. Sepertinya skrip ini telah ditulis untuk proyek tertentu.

Berikut adalah versi modifikasi dari join ex. yang melakukan total kolom juga.

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"
}

Contoh

$ 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
==================================================

Dan apa itu usage_chk3?

Saya juga ingin membagikan alat saya ;-) kubectl-view-allocations: plugin kubectl untuk membuat daftar alokasi (cpu, memory, gpu,... X request, limit, allocatable,...). , permintaan dipersilakan.

Saya membuatnya karena saya ingin memberikan kepada pengguna (internal) saya cara untuk melihat "siapa yang mengalokasikan apa". Secara default setiap sumber daya ditampilkan, tetapi dalam contoh berikut saya hanya meminta sumber daya dengan nama "gpu".

> 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

versi yang akan datang:

  • akan memungkinkan untuk menyembunyikan (node, pod) level atau untuk memilih cara mengelompokkan, (mis. untuk memberikan gambaran umum hanya dengan sumber daya)
  • instalasi melalui curl, krew, brew, ... (saat ini biner tersedia di bawah bagian rilis github)

Terima kasih kepada kubectl-view-utilization untuk inspirasinya, tetapi menambahkan dukungan ke sumber daya lain adalah banyak salin/tempel atau sulit dilakukan untuk saya di bash (untuk cara umum).

ini retasan saya kubectl describe nodes | grep -A 2 -e "^\\s*CPU Requests"

Ini tidak berfungsi lagi :(

Cobalah kubectl describe node | grep -A5 "Allocated"

Saat ini ini adalah masalah yang diminta tertinggi ke-4 dengan jempol, tetapi masih priority/backlog .

Saya akan dengan senang hati mencoba hal ini jika seseorang dapat mengarahkan saya ke arah yang benar atau jika kami dapat menyelesaikan proposal. Saya pikir UX alat @davidB luar biasa, tetapi ini benar-benar termasuk dalam inti kubectl .

Menggunakan perintah berikut: kubectl top nodes & kubectl describe node kami tidak mendapatkan hasil yang konsisten

Misalnya dengan yang pertama CPU (inti) adalah 1064m tetapi hasil ini tidak dapat diambil dengan yang kedua (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%)

Adakah ide tentang mendapatkan CPU(core) tanpa menggunakan kubectl top nodes ?

Saya juga ingin membagikan alat saya ;-) kubectl-view-allocations: plugin kubectl untuk membuat daftar alokasi (cpu, memory, gpu,... X request, limit, allocatable,...). , permintaan dipersilakan.

Saya membuatnya karena saya ingin memberikan kepada pengguna (internal) saya cara untuk melihat "siapa yang mengalokasikan apa". Secara default setiap sumber daya ditampilkan, tetapi dalam contoh berikut saya hanya meminta sumber daya dengan nama "gpu".

> 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

versi yang akan datang:

* 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)

Terima kasih kepada kubectl-view-utilization untuk inspirasinya, tetapi menambahkan dukungan ke sumber daya lain adalah banyak salin/tempel atau sulit dilakukan untuk saya di bash (untuk cara umum).

Halo David, alangkah baiknya jika Anda menyediakan lebih banyak biner terkompilasi untuk distribusi baru. Di Ubuntu 16.04 kita mendapatkan

kubectl-view-allocations: /lib/x86_64-linux-gnu/libc.so.6: versi `GLIBC_2.25' tidak ditemukan (diperlukan oleh kubectl-view-allocations)

dpkg -l |grep glib

ii libglib2.0-0:amd64 2.48.2-0ubuntu4.4

@omerfsen dapatkah Anda mencoba versi baru kubectl-view-allocations dan mengomentari versi tiket

Cara saya untuk mendapatkan alokasi, di seluruh 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}"

Ini menghasilkan sesuatu seperti:

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

sejauh ini jawaban terbaik di sini.

Terinspirasi oleh skrip di atas, saya membuat skrip berikut untuk melihat penggunaan, permintaan, dan batasan:

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' '

Karena skrip shell join mengharapkan daftar yang diurutkan, skrip yang diberikan di atas gagal untuk saya.

Anda melihat sebagai hasilnya penggunaan saat ini dari atas dan dari penerapan permintaan dan batas (di sini) semua ruang nama:

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

Yang perlu diperhatikan: Anda dapat mengurutkan konsumsi CPU dengan mis:

| awk 'NR<2{print $0;next}{print $0| "sort --key 3 --numeric -b --reverse"}

Ini berfungsi di Mac - Saya tidak yakin, apakah itu berfungsi di Linux juga (karena bergabung, mengurutkan, dll ...).

Mudah-mudahan, seseorang dapat menggunakan ini sampai kubectl mendapatkan tampilan yang bagus untuk itu.

Saya memiliki pengalaman yang baik dengan kube-capacity .

Contoh:

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%)

Agar alat ini benar-benar berguna, alat ini harus mendeteksi semua plugin perangkat kubernetes yang digunakan di cluster dan menunjukkan penggunaan untuk semuanya. CPU/Mem jelas tidak cukup. Ada juga GPU, TPU (untuk pembelajaran mesin), Intel QAT, dan mungkin lebih banyak lagi yang tidak saya ketahui. Juga bagaimana dengan penyimpanan? Saya harus dapat dengan mudah melihat apa yang diminta dan apa yang digunakan (idealnya dalam hal iops juga).

@boniek83 , Itu sebabnya saya membuat kubectl-view-allocations , karena saya perlu membuat daftar GPU,... umpan balik apa pun (pada proyek github) diterima. Saya ingin tahu apakah itu mendeteksi TPU (seharusnya jika terdaftar sebagai sumber daya Node)

@boniek83 , Itu sebabnya saya membuat kubectl-view-allocations , karena saya perlu membuat daftar GPU,... umpan balik apa pun (pada proyek github) diterima. Saya ingin tahu apakah itu mendeteksi TPU (seharusnya jika terdaftar sebagai sumber daya Node)

Saya mengetahui alat Anda dan, untuk tujuan saya, itu adalah yang terbaik yang tersedia saat ini. Terima kasih telah membuatnya!
Saya akan mencoba menguji TPU setelah Paskah. Akan sangat membantu jika data ini tersedia dalam format aplikasi web dengan grafik yang cantik sehingga saya tidak perlu memberikan akses apa pun ke kubernetes kepada ilmuwan data. Mereka hanya ingin tahu siapa yang menggerogoti sumber daya dan tidak lebih :)

Karena tidak ada alat dan skrip di atas yang sesuai dengan kebutuhan saya (dan masalah ini masih terbuka :( ), saya meretas varian saya sendiri:
https://github.com/eht16/kube-cargo-load

Ini memberikan gambaran singkat tentang POD dalam sebuah cluster dan menunjukkan permintaan dan batas memori yang dikonfigurasi serta penggunaan memori yang sebenarnya. Idenya adalah untuk mendapatkan gambaran rasio antara batas memori yang dikonfigurasi dan penggunaan aktual.

Bagaimana kita bisa mendapatkan log dump memori dari pod?
Polong sering digantung,

  • kubectl describe nodes OR kubectl top nodes , mana yang harus dipertimbangkan untuk menghitung pemanfaatan sumber daya cluster ?
  • Juga Mengapa ada perbedaan antara 2 hasil ini.
    Apakah sudah ada penjelasan logis tentang ini?

/jenis fitur

Semua komentar dan peretasan dengan node bekerja dengan baik untuk saya. Saya juga membutuhkan sesuatu untuk tampilan yang lebih tinggi untuk melacak..seperti jumlah sumber daya per kumpulan node!

Hai,
Saya ingin mencatat penggunaan cpu dan memori untuk sebuah pod, setiap 5 menit selama periode waktu tertentu. Saya kemudian akan menggunakan data ini untuk membuat grafik di excel. Ada ide? Terima kasih

Hai,
Saya senang melihat bahwa Google mengarahkan kita semua ke masalah ini :-) (sedikit kecewa karena masih terbuka setelah hampir 5 tahun.) Terima kasih untuk semua shell snips dan alat lainnya.

Retas sederhana dan cepat:

$ 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%)

Retas sederhana dan cepat:

$ 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%)

Plugin perangkat tidak ada. Mereka seharusnya. Perangkat tersebut adalah sumber daya juga.

Halo!

Saya membuat skrip ini dan membagikannya kepada Anda.

https://github.com/Sensedia/open-tools/blob/master/scripts/listK8sHardwareResources.sh

Skrip ini memiliki kompilasi dari beberapa ide yang Anda bagikan di sini. Skrip dapat ditambahkan dan dapat membantu orang lain mendapatkan metrik dengan lebih sederhana.

Terima kasih telah berbagi tip dan perintah!

Untuk kasus penggunaan saya, saya akhirnya menulis plugin kubectl yang mencantumkan batas/reservasi CPU/RAM untuk node dalam sebuah tabel. Itu juga memeriksa konsumsi CPU/RAM pod saat ini (seperti kubectl top pods ), tetapi memesan output oleh CPU dalam urutan menurun.

Ini lebih merupakan hal yang nyaman daripada apa pun, tetapi mungkin orang lain juga akan menganggapnya berguna.

https://github.com/laurybueno/kubectl-hoggers

Wah, utas yang sangat besar dan masih belum ada solusi yang tepat dari tim kubernetes untuk menghitung dengan benar penggunaan cpu keseluruhan saat ini dari seluruh cluster?

Bagi mereka yang ingin menjalankan ini di minikube , pertama-tama aktifkan add-on server metrik
minikube addons enable metrics-server
dan kemudian jalankan perintah
kubectl top nodes

Jika Anda menggunakan Kru :

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%)
Apakah halaman ini membantu?
0 / 5 - 0 peringkat