minikube start -c containerd
kubectl create deployment python \ --image=ghcr.io/learnk8s/python-metrics \ --port=8080 \ -- /usr/local/bin/python3 -m http.server 8080 kubectl get po -o wide
NAME READY STATUS IP
python-66dc9f5c8b-w6x4b 1/1 Running 10.244.0.5
minikube start -c containerd
kubectl create deployment python \ --image=ghcr.io/learnk8s/python-metrics \ --port=8080 \ -- /usr/local/bin/python3 -m http.server 8080 kubectl get po -o wide
NAME READY STATUS IP
python-66dc9f5c8b-w6x4b 1/1 Running 10.244.0.5
minikube start -c containerd
kubectl create deployment python \ --image=ghcr.io/learnk8s/python-metrics \ --port=8080 \ -- /usr/local/bin/python3 -m http.server 8080 kubectl get po -o wide
NAME READY STATUS IP
python-66dc9f5c8b-w6x4b 1/1 Running 10.244.0.5
minikube delete
minikube delete
minikube delete
stat -fc %T /sys/fs/cgroup/
tmpfs
stat -fc %T /sys/fs/cgroup/
tmpfs
stat -fc %T /sys/fs/cgroup/
tmpfs
minikube start -c containerd
kubectl create deployment python \ --image=ghcr.io/learnk8s/python-metrics \ --port=8080 \ -- /usr/local/bin/python3 -m http.server 8080
minikube start -c containerd
kubectl create deployment python \ --image=ghcr.io/learnk8s/python-metrics \ --port=8080 \ -- /usr/local/bin/python3 -m http.server 8080
minikube start -c containerd
kubectl create deployment python \ --image=ghcr.io/learnk8s/python-metrics \ --port=8080 \ -- /usr/local/bin/python3 -m http.server 8080
kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP
python-66dc9f5c8b-4248r 1/1 Running 0 42s 10.244.0.4
kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP
python-66dc9f5c8b-4248r 1/1 Running 0 42s 10.244.0.4
kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP
python-66dc9f5c8b-4248r 1/1 Running 0 42s 10.244.0.4
kubectl proxy --port=8001 &
curl -X GET http://127.0.0.1:8001/api/v1/nodes/minikube/proxy/configz | jq . | grep -i qos
"cgroupsPerQOS": true,
kubectl proxy --port=8001 &
curl -X GET http://127.0.0.1:8001/api/v1/nodes/minikube/proxy/configz | jq . | grep -i qos
"cgroupsPerQOS": true,
kubectl proxy --port=8001 &
curl -X GET http://127.0.0.1:8001/api/v1/nodes/minikube/proxy/configz | jq . | grep -i qos
"cgroupsPerQOS": true,
minikube ssh -- "sudo cat /var/lib/kubelet/config.yaml | grep -i cgroupDriver"
cgroupDriver: cgroupfs
minikube ssh -- "sudo cat /var/lib/kubelet/config.yaml | grep -i cgroupDriver"
cgroupDriver: cgroupfs
minikube ssh -- "sudo cat /var/lib/kubelet/config.yaml | grep -i cgroupDriver"
cgroupDriver: cgroupfs
minikube ssh -- "ls -la /sys/fs/cgroup/cpu/kubepods/"
drwxr-xr-x 5 root root 0 Mar 20 12:10 besteffort
drwxr-xr-x 7 root root 0 Mar 20 12:11 burstable
drwxr-xr-x 3 root root 0 Mar 20 12:12 guaranteed
minikube ssh -- "ls -la /sys/fs/cgroup/cpu/kubepods/"
drwxr-xr-x 5 root root 0 Mar 20 12:10 besteffort
drwxr-xr-x 7 root root 0 Mar 20 12:11 burstable
drwxr-xr-x 3 root root 0 Mar 20 12:12 guaranteed
minikube ssh -- "ls -la /sys/fs/cgroup/cpu/kubepods/"
drwxr-xr-x 5 root root 0 Mar 20 12:10 besteffort
drwxr-xr-x 7 root root 0 Mar 20 12:11 burstable
drwxr-xr-x 3 root root 0 Mar 20 12:12 guaranteed
minikube ssh -- "ls -la /sys/fs/cgroup/cpu/kubepods/besteffort/"
drwxr-xr-x 4 root root 0 Mar 20 03:51 pod23e59e27-abe5-4529-bf9c-581516ae0c0b
drwxr-xr-x 4 root root 0 Mar 20 03:51 pod9f874003-a948-425d-a072-f389dc21bdff
drwxr-xr-x 4 root root 0 Mar 20 03:51 podc1d8cd50-b50a-4b3c-a33d-8963242c60ef
minikube ssh -- "ls -la /sys/fs/cgroup/cpu/kubepods/besteffort/"
drwxr-xr-x 4 root root 0 Mar 20 03:51 pod23e59e27-abe5-4529-bf9c-581516ae0c0b
drwxr-xr-x 4 root root 0 Mar 20 03:51 pod9f874003-a948-425d-a072-f389dc21bdff
drwxr-xr-x 4 root root 0 Mar 20 03:51 podc1d8cd50-b50a-4b3c-a33d-8963242c60ef
minikube ssh -- "ls -la /sys/fs/cgroup/cpu/kubepods/besteffort/"
drwxr-xr-x 4 root root 0 Mar 20 03:51 pod23e59e27-abe5-4529-bf9c-581516ae0c0b
drwxr-xr-x 4 root root 0 Mar 20 03:51 pod9f874003-a948-425d-a072-f389dc21bdff
drwxr-xr-x 4 root root 0 Mar 20 03:51 podc1d8cd50-b50a-4b3c-a33d-8963242c60ef
kubectl get pod python-66dc9f5c8b-4248r -o jsonpath='{.metadata.uid}'
c1d8cd50-b50a-4b3c-a33d-8963242c60ef
kubectl get pod python-66dc9f5c8b-4248r -o jsonpath='{.metadata.uid}'
c1d8cd50-b50a-4b3c-a33d-8963242c60ef
kubectl get pod python-66dc9f5c8b-4248r -o jsonpath='{.metadata.uid}'
c1d8cd50-b50a-4b3c-a33d-8963242c60ef
minikube ssh -- "ls -la /sys/fs/cgroup/cpu/kubepods/besteffort/podc1d8cd50-b50a-4b3c-a33d-8963242c60ef/"
-rw-r--r-- 1 root root 0 Mar 20 12:16 cpu.shares
-rw-r--r-- 1 root root 0 Mar 20 12:16 cpu.cfs_quota_us
drwxr-xr-x 2 root root 0 Mar 20 03:52 ef455b35bf7e2afa0942e25b58cd10858d40ed1d97fffe7f0b6a664d2e64aa54
-rw-r--r-- 1 root root 0 Mar 20 04:22 tasks
minikube ssh -- "ls -la /sys/fs/cgroup/cpu/kubepods/besteffort/podc1d8cd50-b50a-4b3c-a33d-8963242c60ef/"
-rw-r--r-- 1 root root 0 Mar 20 12:16 cpu.shares
-rw-r--r-- 1 root root 0 Mar 20 12:16 cpu.cfs_quota_us
drwxr-xr-x 2 root root 0 Mar 20 03:52 ef455b35bf7e2afa0942e25b58cd10858d40ed1d97fffe7f0b6a664d2e64aa54
-rw-r--r-- 1 root root 0 Mar 20 04:22 tasks
minikube ssh -- "ls -la /sys/fs/cgroup/cpu/kubepods/besteffort/podc1d8cd50-b50a-4b3c-a33d-8963242c60ef/"
-rw-r--r-- 1 root root 0 Mar 20 12:16 cpu.shares
-rw-r--r-- 1 root root 0 Mar 20 12:16 cpu.cfs_quota_us
drwxr-xr-x 2 root root 0 Mar 20 03:52 ef455b35bf7e2afa0942e25b58cd10858d40ed1d97fffe7f0b6a664d2e64aa54
-rw-r--r-- 1 root root 0 Mar 20 04:22 tasks
minikube ssh -- "cat /sys/fs/cgroup/memory/kubepods/besteffort/\
podc1d8cd50-b50a-4b3c-a33d-8963242c60ef/\
memory.limit_in_bytes" 9223372036854771712
minikube ssh -- "cat /sys/fs/cgroup/memory/kubepods/besteffort/\
podc1d8cd50-b50a-4b3c-a33d-8963242c60ef/\
memory.limit_in_bytes" 9223372036854771712
minikube ssh -- "cat /sys/fs/cgroup/memory/kubepods/besteffort/\
podc1d8cd50-b50a-4b3c-a33d-8963242c60ef/\
memory.limit_in_bytes" 9223372036854771712
minikube ssh -- "mount | grep cgroup" cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,relatime,pids)
minikube ssh -- "mount | grep cgroup" cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,relatime,pids)
minikube ssh -- "mount | grep cgroup" cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,relatime,pids)
minikube ssh -- "cat /proc/cgroups" #subsys_name hierarchy num_cgroups enabled
cpuset 1 34 1
cpu 2 52 1
cpuacct 3 34 1
minikube ssh -- "cat /proc/cgroups" #subsys_name hierarchy num_cgroups enabled
cpuset 1 34 1
cpu 2 52 1
cpuacct 3 34 1
minikube ssh -- "cat /proc/cgroups" #subsys_name hierarchy num_cgroups enabled
cpuset 1 34 1
cpu 2 52 1
cpuacct 3 34 1
minikube ssh -- "stat -fc %T /sys/fs/cgroup/" tmpfs
minikube ssh -- "stat -fc %T /sys/fs/cgroup/" tmpfs
minikube ssh -- "stat -fc %T /sys/fs/cgroup/" tmpfs
minikube ssh -- "ls -la /sys/fs/cgroup/" drwxr-xr-x 15 root root 0 Feb 23 05:17 blkio
drwxr-xr-x 15 root root 0 Feb 23 05:17 cpu
drwxr-xr-x 2 root root 40 Feb 23 05:17 cpu,cpuacct
drwxr-xr-x 23 root root 0 Feb 23 05:17 cpuacct
drwxr-xr-x 23 root root 0 Feb 23 05:17 cpuset
drwxr-xr-x 18 root root 0 Feb 23 05:17 devices
drwxr-xr-x 23 root root 0 Feb 23 05:17 freezer
minikube ssh -- "ls -la /sys/fs/cgroup/" drwxr-xr-x 15 root root 0 Feb 23 05:17 blkio
drwxr-xr-x 15 root root 0 Feb 23 05:17 cpu
drwxr-xr-x 2 root root 40 Feb 23 05:17 cpu,cpuacct
drwxr-xr-x 23 root root 0 Feb 23 05:17 cpuacct
drwxr-xr-x 23 root root 0 Feb 23 05:17 cpuset
drwxr-xr-x 18 root root 0 Feb 23 05:17 devices
drwxr-xr-x 23 root root 0 Feb 23 05:17 freezer
minikube ssh -- "ls -la /sys/fs/cgroup/" drwxr-xr-x 15 root root 0 Feb 23 05:17 blkio
drwxr-xr-x 15 root root 0 Feb 23 05:17 cpu
drwxr-xr-x 2 root root 40 Feb 23 05:17 cpu,cpuacct
drwxr-xr-x 23 root root 0 Feb 23 05:17 cpuacct
drwxr-xr-x 23 root root 0 Feb 23 05:17 cpuset
drwxr-xr-x 18 root root 0 Feb 23 05:17 devices
drwxr-xr-x 23 root root 0 Feb 23 05:17 freezer
minikube ssh -- "ls -la /sys/fs/cgroup/" -r--r--r-- 1 root root 0 Apr 28 10:51 cgroup.controllers
-r--r--r-- 1 root root 0 Apr 28 10:58 cgroup.stat
-rw-r--r-- 1 root root 0 Apr 28 10:51 memory.high
drwxr-xr-x 5 root root 0 Apr 28 10:51 kubepods.slice
...
minikube ssh -- "ls -la /sys/fs/cgroup/" -r--r--r-- 1 root root 0 Apr 28 10:51 cgroup.controllers
-r--r--r-- 1 root root 0 Apr 28 10:58 cgroup.stat
-rw-r--r-- 1 root root 0 Apr 28 10:51 memory.high
drwxr-xr-x 5 root root 0 Apr 28 10:51 kubepods.slice
...
minikube ssh -- "ls -la /sys/fs/cgroup/" -r--r--r-- 1 root root 0 Apr 28 10:51 cgroup.controllers
-r--r--r-- 1 root root 0 Apr 28 10:58 cgroup.stat
-rw-r--r-- 1 root root 0 Apr 28 10:51 memory.high
drwxr-xr-x 5 root root 0 Apr 28 10:51 kubepods.slice
...
minikube ssh -- "mount | grep cgroup" cgroup on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,...)
minikube ssh -- "mount | grep cgroup" cgroup on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,...)
minikube ssh -- "mount | grep cgroup" cgroup on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,...)
minikube ssh -- "cat /proc/cgroups" #subsys_name hierarchy num_cgroups enabled
cpu 0 208 1
cpuacct 0 208 1
blkio 0 208 1
devices 0 208 1
minikube ssh -- "cat /proc/cgroups" #subsys_name hierarchy num_cgroups enabled
cpu 0 208 1
cpuacct 0 208 1
blkio 0 208 1
devices 0 208 1
minikube ssh -- "cat /proc/cgroups" #subsys_name hierarchy num_cgroups enabled
cpu 0 208 1
cpuacct 0 208 1
blkio 0 208 1
devices 0 208 1
minikube ssh -- "stat -fc %T /sys/fs/cgroup/" cgroup2fs
minikube ssh -- "stat -fc %T /sys/fs/cgroup/" cgroup2fs
minikube ssh -- "stat -fc %T /sys/fs/cgroup/" cgroup2fs
minikube ssh -- "sudo cat /etc/containerd/config.toml | grep -i -C2 'SystemdCgroup'"
runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true [plugins."io.containerd.grpc.v1.cri".cni]
minikube ssh -- "sudo cat /etc/containerd/config.toml | grep -i -C2 'SystemdCgroup'"
runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true [plugins."io.containerd.grpc.v1.cri".cni]
minikube ssh -- "sudo cat /etc/containerd/config.toml | grep -i -C2 'SystemdCgroup'"
runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true [plugins."io.containerd.grpc.v1.cri".cni]
minikube ssh -- "ls -d /sys/fs/cgroup/kubepods.slice/*/"
/sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/
/sys/fs/cgroup/kubepods.slice/kubepods-burstable.slice/
/sys/fs/cgroup/kubepods-poded2df55a_639e_4beb_aee3_5db422c35910.slice/
minikube ssh -- "ls -d /sys/fs/cgroup/kubepods.slice/*/"
/sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/
/sys/fs/cgroup/kubepods.slice/kubepods-burstable.slice/
/sys/fs/cgroup/kubepods-poded2df55a_639e_4beb_aee3_5db422c35910.slice/
minikube ssh -- "ls -d /sys/fs/cgroup/kubepods.slice/*/"
/sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/
/sys/fs/cgroup/kubepods.slice/kubepods-burstable.slice/
/sys/fs/cgroup/kubepods-poded2df55a_639e_4beb_aee3_5db422c35910.slice/
kubectl get pods -A \ -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name,UID:.metadata.uid' \ | grep ed2df55a
kube-system kindnet-qkqvh ed2df55a-639e-4beb-aee3-5db422c35910
kubectl get pods -A \ -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name,UID:.metadata.uid' \ | grep ed2df55a
kube-system kindnet-qkqvh ed2df55a-639e-4beb-aee3-5db422c35910
kubectl get pods -A \ -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name,UID:.metadata.uid' \ | grep ed2df55a
kube-system kindnet-qkqvh ed2df55a-639e-4beb-aee3-5db422c35910
kubectl get pod kindnet-qkqvh -n kube-system -o jsonpath='{.status.qosClass}{"\n"}'
Guaranteed
kubectl get pod kindnet-qkqvh -n kube-system -o jsonpath='{.status.qosClass}{"\n"}'
Guaranteed
kubectl get pod kindnet-qkqvh -n kube-system -o jsonpath='{.status.qosClass}{"\n"}'
Guaranteed
kubectl get pod kindnet-qkqvh -n kube-system -o jsonpath='QoS={.status.qosClass}{"\n"}UID={.metadata.uid}{"\n"}'
QoS=Guaranteed
UID=ed2df55a-639e-4beb-aee3-5db422c35910
kubectl get pod kindnet-qkqvh -n kube-system -o jsonpath='QoS={.status.qosClass}{"\n"}UID={.metadata.uid}{"\n"}'
QoS=Guaranteed
UID=ed2df55a-639e-4beb-aee3-5db422c35910
kubectl get pod kindnet-qkqvh -n kube-system -o jsonpath='QoS={.status.qosClass}{"\n"}UID={.metadata.uid}{"\n"}'
QoS=Guaranteed
UID=ed2df55a-639e-4beb-aee3-5db422c35910
minikube ssh -- "ls -la /sys/fs/cgroup/kubepods.slice/kubepods-poded2df55a_639e_4beb_aee3_5db422c35910.slice/"
cri-containerd-7ae5ffd3996a6ac09031cbf283d6bd9727a24bc723a06e76141132a8e57f1716.scope
cri-containerd-d24246f29f54f7adced123bc6194d9e0f15fd3a15c54326cd8c96d39961760c0.scope
minikube ssh -- "ls -la /sys/fs/cgroup/kubepods.slice/kubepods-poded2df55a_639e_4beb_aee3_5db422c35910.slice/"
cri-containerd-7ae5ffd3996a6ac09031cbf283d6bd9727a24bc723a06e76141132a8e57f1716.scope
cri-containerd-d24246f29f54f7adced123bc6194d9e0f15fd3a15c54326cd8c96d39961760c0.scope
minikube ssh -- "ls -la /sys/fs/cgroup/kubepods.slice/kubepods-poded2df55a_639e_4beb_aee3_5db422c35910.slice/"
cri-containerd-7ae5ffd3996a6ac09031cbf283d6bd9727a24bc723a06e76141132a8e57f1716.scope
cri-containerd-d24246f29f54f7adced123bc6194d9e0f15fd3a15c54326cd8c96d39961760c0.scope
/sys/fs/cgroup/
└── kubepods.slice └── kubepods-poded2df55a_639e_4beb_aee3_5db422c35910.slice ├── cri-containerd-7ae5ffd3996a6ac09031cbf283d6bd9727a24bc723a06e76141132a8e57f1716.scope └── cri-containerd-d24246f29f54f7adced123bc6194d9e0f15fd3a15c54326cd8c96d39961760c0.scope
/sys/fs/cgroup/
└── kubepods.slice └── kubepods-poded2df55a_639e_4beb_aee3_5db422c35910.slice ├── cri-containerd-7ae5ffd3996a6ac09031cbf283d6bd9727a24bc723a06e76141132a8e57f1716.scope └── cri-containerd-d24246f29f54f7adced123bc6194d9e0f15fd3a15c54326cd8c96d39961760c0.scope
/sys/fs/cgroup/
└── kubepods.slice └── kubepods-poded2df55a_639e_4beb_aee3_5db422c35910.slice ├── cri-containerd-7ae5ffd3996a6ac09031cbf283d6bd9727a24bc723a06e76141132a8e57f1716.scope └── cri-containerd-d24246f29f54f7adced123bc6194d9e0f15fd3a15c54326cd8c96d39961760c0.scope
kubectl get pod python-66dc9f5c8b-2kktd -o jsonpath='{.status.qosClass}'
BestEffort
kubectl get pod python-66dc9f5c8b-2kktd -o jsonpath='{.status.qosClass}'
BestEffort
kubectl get pod python-66dc9f5c8b-2kktd -o jsonpath='{.status.qosClass}'
BestEffort
kubectl get pod python-66dc9f5c8b-2kktd -o jsonpath='{.metadata.uid}'
b60baa0b-1e66-4990-8670-93c5919f09cb
kubectl get pod python-66dc9f5c8b-2kktd -o jsonpath='{.metadata.uid}'
b60baa0b-1e66-4990-8670-93c5919f09cb
kubectl get pod python-66dc9f5c8b-2kktd -o jsonpath='{.metadata.uid}'
b60baa0b-1e66-4990-8670-93c5919f09cb
minikube ssh -- "ls -d /sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/*/"
/sys/fs/cgroup/.../kubepods-besteffort-pod740242e7_85e5_4369_a8a0_d6101719e386.slice/
/sys/fs/cgroup/.../kubepods-besteffort-pod857495d4_07b5_45a2_895b_0298f68797d8.slice/
/sys/fs/cgroup/.../kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/
minikube ssh -- "ls -d /sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/*/"
/sys/fs/cgroup/.../kubepods-besteffort-pod740242e7_85e5_4369_a8a0_d6101719e386.slice/
/sys/fs/cgroup/.../kubepods-besteffort-pod857495d4_07b5_45a2_895b_0298f68797d8.slice/
/sys/fs/cgroup/.../kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/
minikube ssh -- "ls -d /sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/*/"
/sys/fs/cgroup/.../kubepods-besteffort-pod740242e7_85e5_4369_a8a0_d6101719e386.slice/
/sys/fs/cgroup/.../kubepods-besteffort-pod857495d4_07b5_45a2_895b_0298f68797d8.slice/
/sys/fs/cgroup/.../kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/
minikube ssh -- "ls /sys/fs/cgroup/kubepods.slice/\
kubepods-besteffort.slice/kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/ | grep scope"
cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope
cri-containerd-b8609ccf36f85b5a4fc652317358950861a6f0a538e6c4b4c4243241189fbc11.scope
minikube ssh -- "ls /sys/fs/cgroup/kubepods.slice/\
kubepods-besteffort.slice/kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/ | grep scope"
cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope
cri-containerd-b8609ccf36f85b5a4fc652317358950861a6f0a538e6c4b4c4243241189fbc11.scope
minikube ssh -- "ls /sys/fs/cgroup/kubepods.slice/\
kubepods-besteffort.slice/kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/ | grep scope"
cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope
cri-containerd-b8609ccf36f85b5a4fc652317358950861a6f0a538e6c4b4c4243241189fbc11.scope
minikube ssh -- "sudo crictl ps --name python"
CONTAINER IMAGE NAME POD ID POD
b21e881ca9d62 bdbec6b439339 python-metrics b8609ccf36f85 python-66dc9f5c8b-2kktd
minikube ssh -- "sudo crictl ps --name python"
CONTAINER IMAGE NAME POD ID POD
b21e881ca9d62 bdbec6b439339 python-metrics b8609ccf36f85 python-66dc9f5c8b-2kktd
minikube ssh -- "sudo crictl ps --name python"
CONTAINER IMAGE NAME POD ID POD
b21e881ca9d62 bdbec6b439339 python-metrics b8609ccf36f85 python-66dc9f5c8b-2kktd
minikube ssh -- "\
ls -la \
/sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/\
kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/\
cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope"
cpu.max
hugetlb.2MB.events
memory.high
memory.stat
minikube ssh -- "\
ls -la \
/sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/\
kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/\
cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope"
cpu.max
hugetlb.2MB.events
memory.high
memory.stat
minikube ssh -- "\
ls -la \
/sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/\
kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/\
cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope"
cpu.max
hugetlb.2MB.events
memory.high
memory.stat
/sys/fs/cgroup/
└── kubepods.slice └── kubepods-besteffort.slice └── kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice ├── cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope │ └── python-metrics container └── cri-containerd-b8609ccf36f85b5a4fc652317358950861a6f0a538e6c4b4c4243241189fbc11.scope └── pod sandbox / pause container
/sys/fs/cgroup/
└── kubepods.slice └── kubepods-besteffort.slice └── kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice ├── cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope │ └── python-metrics container └── cri-containerd-b8609ccf36f85b5a4fc652317358950861a6f0a538e6c4b4c4243241189fbc11.scope └── pod sandbox / pause container
/sys/fs/cgroup/
└── kubepods.slice └── kubepods-besteffort.slice └── kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice ├── cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope │ └── python-metrics container └── cri-containerd-b8609ccf36f85b5a4fc652317358950861a6f0a538e6c4b4c4243241189fbc11.scope └── pod sandbox / pause container
minikube ssh -- "cat /sys/fs/cgroup/kubepods.slice/\
kubepods-besteffort.slice/kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/\
cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope/\
memory.stat" | head -5
anon 9601024
file 13496320
kernel 1056768
kernel_stack 16384
pagetables 94208
minikube ssh -- "cat /sys/fs/cgroup/kubepods.slice/\
kubepods-besteffort.slice/kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/\
cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope/\
memory.stat" | head -5
anon 9601024
file 13496320
kernel 1056768
kernel_stack 16384
pagetables 94208
minikube ssh -- "cat /sys/fs/cgroup/kubepods.slice/\
kubepods-besteffort.slice/kubepods-besteffort-podb60baa0b_1e66_4990_8670_93c5919f09cb.slice/\
cri-containerd-b21e881ca9d6228281aa32cb1e2ebba5537f2a7b90e860a2f0cc6afec3305229.scope/\
memory.stat" | head -5
anon 9601024
file 13496320
kernel 1056768
kernel_stack 16384
pagetables 94208
minikube ssh -- "sudo crictl inspectp b8609ccf36f85 | grep image"
"image": "registry.k8s.io/pause:3.10.1",
minikube ssh -- "sudo crictl inspectp b8609ccf36f85 | grep image"
"image": "registry.k8s.io/pause:3.10.1",
minikube ssh -- "sudo crictl inspectp b8609ccf36f85 | grep image"
"image": "registry.k8s.io/pause:3.10.1",
minikube ssh -- "sudo crictl inspectp b8609ccf36f85 | grep -E '\"pid\"'"
"pid": "CONTAINER", "pid": 1647,
minikube ssh -- "sudo crictl inspectp b8609ccf36f85 | grep -E '\"pid\"'"
"pid": "CONTAINER", "pid": 1647,
minikube ssh -- "sudo crictl inspectp b8609ccf36f85 | grep -E '\"pid\"'"
"pid": "CONTAINER", "pid": 1647,
minikube ssh -- "sudo ps -e -o pid,ppid,cmd | grep -E '\\b1603\\b|\\b1647\\b'"
1603 1 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id b8609... -address /run/containerd/containerd.sock
1647 1603 /pause
1694 1603 /usr/local/bin/python3 -m http.server 8080
minikube ssh -- "sudo ps -e -o pid,ppid,cmd | grep -E '\\b1603\\b|\\b1647\\b'"
1603 1 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id b8609... -address /run/containerd/containerd.sock
1647 1603 /pause
1694 1603 /usr/local/bin/python3 -m http.server 8080
minikube ssh -- "sudo ps -e -o pid,ppid,cmd | grep -E '\\b1603\\b|\\b1647\\b'"
1603 1 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id b8609... -address /run/containerd/containerd.sock
1647 1603 /pause
1694 1603 /usr/local/bin/python3 -m http.server 8080
minikube start -p test-driverfromcri --container-runtime=cri-o
minikube start -p test-driverfromcri --container-runtime=cri-o
minikube start -p test-driverfromcri --container-runtime=cri-o
minikube ssh -p test-driverfromcri -- "sudo cat /var/lib/kubelet/config.yaml | grep -A2 cgroupDriver"
cgroupDriver: systemd
clusterDNS:
- 10.96.0.10
minikube ssh -p test-driverfromcri -- "sudo cat /var/lib/kubelet/config.yaml | grep -A2 cgroupDriver"
cgroupDriver: systemd
clusterDNS:
- 10.96.0.10
minikube ssh -p test-driverfromcri -- "sudo cat /var/lib/kubelet/config.yaml | grep -A2 cgroupDriver"
cgroupDriver: systemd
clusterDNS:
- 10.96.0.10
minikube ssh -p test-driverfromcri -- "sudo journalctl -u kubelet | grep -E 'RuntimeConfig|CRI implementation'"
"RuntimeConfig from runtime service failed" err="rpc error: code = Unimplemented desc = unknown method RuntimeConfig"
"CRI implementation should be updated to support RuntimeConfig. Falling back to using cgroupDriver from kubelet config."
minikube ssh -p test-driverfromcri -- "sudo journalctl -u kubelet | grep -E 'RuntimeConfig|CRI implementation'"
"RuntimeConfig from runtime service failed" err="rpc error: code = Unimplemented desc = unknown method RuntimeConfig"
"CRI implementation should be updated to support RuntimeConfig. Falling back to using cgroupDriver from kubelet config."
minikube ssh -p test-driverfromcri -- "sudo journalctl -u kubelet | grep -E 'RuntimeConfig|CRI implementation'"
"RuntimeConfig from runtime service failed" err="rpc error: code = Unimplemented desc = unknown method RuntimeConfig"
"CRI implementation should be updated to support RuntimeConfig. Falling back to using cgroupDriver from kubelet config."
kubectl proxy --port=8001
kubectl proxy --port=8001
kubectl proxy --port=8001
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/cadvisor container_cpu_usage_seconds_total{container="python-metrics",cpu="total",pod="python-66dc9f5c8b-2kktd"} 0.105818
container_memory_usage_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 2.5870336e+07
container_fs_reads_bytes_total{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 1.49504e+07
container_processes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 1
container_spec_cpu_shares{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 2
container_spec_memory_limit_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/cadvisor container_cpu_usage_seconds_total{container="python-metrics",cpu="total",pod="python-66dc9f5c8b-2kktd"} 0.105818
container_memory_usage_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 2.5870336e+07
container_fs_reads_bytes_total{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 1.49504e+07
container_processes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 1
container_spec_cpu_shares{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 2
container_spec_memory_limit_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/cadvisor container_cpu_usage_seconds_total{container="python-metrics",cpu="total",pod="python-66dc9f5c8b-2kktd"} 0.105818
container_memory_usage_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 2.5870336e+07
container_fs_reads_bytes_total{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 1.49504e+07
container_processes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 1
container_spec_cpu_shares{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 2
container_spec_memory_limit_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0
curl -sS \ http://localhost:8001/api/v1/nodes/minikube/proxy/stats/summary \ | jq '.pods[] | select(.podRef.name == "python-66dc9f5c8b-2kktd")'
{ "podRef": { "name": "python-66dc9f5c8b-2kktd", "namespace": "default", "uid": "b60baa0b-1e66-4990-8670-93c5919f09cb" }, "containers": [ { "name": "python-metrics", "cpu": { "usageNanoCores": 151695, "usageCoreNanoSeconds": 226134000 }, "memory": { "usageBytes": 25870336, "workingSetBytes": 22114304, "rssBytes": 9596928, "pageFaults": 3346, "majorPageFaults": 136 }, "rootfs": { "usedBytes": 122880 }, "logs": { "usedBytes": 8192 }, "swap": { "swapAvailableBytes": 0, "swapUsageBytes": 0 } } ]
}
curl -sS \ http://localhost:8001/api/v1/nodes/minikube/proxy/stats/summary \ | jq '.pods[] | select(.podRef.name == "python-66dc9f5c8b-2kktd")'
{ "podRef": { "name": "python-66dc9f5c8b-2kktd", "namespace": "default", "uid": "b60baa0b-1e66-4990-8670-93c5919f09cb" }, "containers": [ { "name": "python-metrics", "cpu": { "usageNanoCores": 151695, "usageCoreNanoSeconds": 226134000 }, "memory": { "usageBytes": 25870336, "workingSetBytes": 22114304, "rssBytes": 9596928, "pageFaults": 3346, "majorPageFaults": 136 }, "rootfs": { "usedBytes": 122880 }, "logs": { "usedBytes": 8192 }, "swap": { "swapAvailableBytes": 0, "swapUsageBytes": 0 } } ]
}
curl -sS \ http://localhost:8001/api/v1/nodes/minikube/proxy/stats/summary \ | jq '.pods[] | select(.podRef.name == "python-66dc9f5c8b-2kktd")'
{ "podRef": { "name": "python-66dc9f5c8b-2kktd", "namespace": "default", "uid": "b60baa0b-1e66-4990-8670-93c5919f09cb" }, "containers": [ { "name": "python-metrics", "cpu": { "usageNanoCores": 151695, "usageCoreNanoSeconds": 226134000 }, "memory": { "usageBytes": 25870336, "workingSetBytes": 22114304, "rssBytes": 9596928, "pageFaults": 3346, "majorPageFaults": 136 }, "rootfs": { "usedBytes": 122880 }, "logs": { "usedBytes": 8192 }, "swap": { "swapAvailableBytes": 0, "swapUsageBytes": 0 } } ]
}
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/resource | grep python-metrics
container_cpu_usage_seconds_total{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0.298696 1777623311728
container_memory_working_set_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 2.2114304e+07 1777623311728
container_start_time_seconds{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 1.7776221060112867e+09
container_swap_limit_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0 1777623324188
container_swap_usage_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0 1777623324188
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/resource | grep python-metrics
container_cpu_usage_seconds_total{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0.298696 1777623311728
container_memory_working_set_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 2.2114304e+07 1777623311728
container_start_time_seconds{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 1.7776221060112867e+09
container_swap_limit_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0 1777623324188
container_swap_usage_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0 1777623324188
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/resource | grep python-metrics
container_cpu_usage_seconds_total{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0.298696 1777623311728
container_memory_working_set_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 2.2114304e+07 1777623311728
container_start_time_seconds{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 1.7776221060112867e+09
container_swap_limit_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0 1777623324188
container_swap_usage_bytes{container="python-metrics",pod="python-66dc9f5c8b-2kktd"} 0 1777623324188
curl -sS \ http://localhost:8001/api/v1/nodes/minikube/proxy/metrics \ | grep kubelet_runtime_operations_duration_seconds \ | tail -n 3
kubelet_runtime_operations_duration_seconds_bucket{operation_type="version",le="+Inf"} 152
kubelet_runtime_operations_duration_seconds_sum{operation_type="version"} 0.12228928199999994
kubelet_runtime_operations_duration_seconds_count{operation_type="version"} 152
curl -sS \ http://localhost:8001/api/v1/nodes/minikube/proxy/metrics \ | grep kubelet_runtime_operations_duration_seconds \ | tail -n 3
kubelet_runtime_operations_duration_seconds_bucket{operation_type="version",le="+Inf"} 152
kubelet_runtime_operations_duration_seconds_sum{operation_type="version"} 0.12228928199999994
kubelet_runtime_operations_duration_seconds_count{operation_type="version"} 152
curl -sS \ http://localhost:8001/api/v1/nodes/minikube/proxy/metrics \ | grep kubelet_runtime_operations_duration_seconds \ | tail -n 3
kubelet_runtime_operations_duration_seconds_bucket{operation_type="version",le="+Inf"} 152
kubelet_runtime_operations_duration_seconds_sum{operation_type="version"} 0.12228928199999994
kubelet_runtime_operations_duration_seconds_count{operation_type="version"} 152
curl -sSL https://raw.githubusercontent.com/kubernetes/cri-api/master/pkg/apis/runtime/v1/api.proto \ | grep -E 'rpc (ContainerStats|ListContainerStats|PodSandboxStats|ListPodSandboxStats)' rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} rpc PodSandboxStats(PodSandboxStatsRequest) returns (PodSandboxStatsResponse) {} rpc ListPodSandboxStats(ListPodSandboxStatsRequest) returns (ListPodSandboxStatsResponse) {}
curl -sSL https://raw.githubusercontent.com/kubernetes/cri-api/master/pkg/apis/runtime/v1/api.proto \ | grep -E 'rpc (ContainerStats|ListContainerStats|PodSandboxStats|ListPodSandboxStats)' rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} rpc PodSandboxStats(PodSandboxStatsRequest) returns (PodSandboxStatsResponse) {} rpc ListPodSandboxStats(ListPodSandboxStatsRequest) returns (ListPodSandboxStatsResponse) {}
curl -sSL https://raw.githubusercontent.com/kubernetes/cri-api/master/pkg/apis/runtime/v1/api.proto \ | grep -E 'rpc (ContainerStats|ListContainerStats|PodSandboxStats|ListPodSandboxStats)' rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} rpc PodSandboxStats(PodSandboxStatsRequest) returns (PodSandboxStatsResponse) {} rpc ListPodSandboxStats(ListPodSandboxStatsRequest) returns (ListPodSandboxStatsResponse) {}
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Unit]
Wants=containerd.service [Service]
ExecStart=
ExecStart=/var/lib/minikube/binaries/v1.34.0/kubelet \ --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \ --config=/var/lib/kubelet/config.yaml \ --hostname-override=minikube \ --kubeconfig=/etc/kubernetes/kubelet.conf \ --node-ip=192.168.49.2 \ --v=5 [Install]
[Unit]
Wants=containerd.service [Service]
ExecStart=
ExecStart=/var/lib/minikube/binaries/v1.34.0/kubelet \ --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \ --config=/var/lib/kubelet/config.yaml \ --hostname-override=minikube \ --kubeconfig=/etc/kubernetes/kubelet.conf \ --node-ip=192.168.49.2 \ --v=5 [Install]
[Unit]
Wants=containerd.service [Service]
ExecStart=
ExecStart=/var/lib/minikube/binaries/v1.34.0/kubelet \ --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \ --config=/var/lib/kubelet/config.yaml \ --hostname-override=minikube \ --kubeconfig=/etc/kubernetes/kubelet.conf \ --node-ip=192.168.49.2 \ --v=5 [Install]
sudo systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet
minikube ssh -- "ss -lx | grep containerd.sock"
u_str LISTEN 0 4096 /run/containerd/containerd.sock.ttrpc 80566 * 0
u_str LISTEN 0 4096 /run/containerd/containerd.sock 79442 * 0
minikube ssh -- "ss -lx | grep containerd.sock"
u_str LISTEN 0 4096 /run/containerd/containerd.sock.ttrpc 80566 * 0
u_str LISTEN 0 4096 /run/containerd/containerd.sock 79442 * 0
minikube ssh -- "ss -lx | grep containerd.sock"
u_str LISTEN 0 4096 /run/containerd/containerd.sock.ttrpc 80566 * 0
u_str LISTEN 0 4096 /run/containerd/containerd.sock 79442 * 0
minikube ssh -- "sudo cat /var/lib/kubelet/config.yaml | grep -i containerRuntimeEndpoint"
containerRuntimeEndpoint: unix:///run/containerd/containerd.sock
minikube ssh -- "sudo cat /var/lib/kubelet/config.yaml | grep -i containerRuntimeEndpoint"
containerRuntimeEndpoint: unix:///run/containerd/containerd.sock
minikube ssh -- "sudo cat /var/lib/kubelet/config.yaml | grep -i containerRuntimeEndpoint"
containerRuntimeEndpoint: unix:///run/containerd/containerd.sock
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics \ | grep 'kubernetes_feature_enabled.*PodAndContainer' kubernetes_feature_enabled{name="PodAndContainerStatsFromCRI",stage="ALPHA"} 0
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics \ | grep 'kubernetes_feature_enabled.*PodAndContainer' kubernetes_feature_enabled{name="PodAndContainerStatsFromCRI",stage="ALPHA"} 0
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics \ | grep 'kubernetes_feature_enabled.*PodAndContainer' kubernetes_feature_enabled{name="PodAndContainerStatsFromCRI",stage="ALPHA"} 0
...
featureGates: PodAndContainerStatsFromCRI: true
...
featureGates: PodAndContainerStatsFromCRI: true
...
featureGates: PodAndContainerStatsFromCRI: true
sudo systemctl restart kubelet
sudo systemctl restart kubelet
sudo systemctl restart kubelet
sudo journalctl -u kubelet | grep -i containerstats May 01 10:27:57 minikube kubelet[4205]: feature gates: {map[PodAndContainerStatsFromCRI:true]}
May 01 10:27:57 minikube kubelet[4205]: "PodAndContainerStatsFromCRI": true
sudo journalctl -u kubelet | grep -i containerstats May 01 10:27:57 minikube kubelet[4205]: feature gates: {map[PodAndContainerStatsFromCRI:true]}
May 01 10:27:57 minikube kubelet[4205]: "PodAndContainerStatsFromCRI": true
sudo journalctl -u kubelet | grep -i containerstats May 01 10:27:57 minikube kubelet[4205]: feature gates: {map[PodAndContainerStatsFromCRI:true]}
May 01 10:27:57 minikube kubelet[4205]: "PodAndContainerStatsFromCRI": true
kubectl proxy --port=8001
curl -sS \ http://localhost:8001/api/v1/nodes/minikube/proxy/stats/summary \ | jq '.pods[] | select(.podRef.name == "python-66dc9f5c8b-2kktd")'
{ "podRef": { "name": "python-66dc9f5c8b-2kktd", "namespace": "default" }, "containers": [ { "name": "python-metrics", "cpu": { "usageNanoCores": 149575, "usageCoreNanoSeconds": 1647087000 }, "memory": { "workingSetBytes": 22114304 } } ]
}
kubectl proxy --port=8001
curl -sS \ http://localhost:8001/api/v1/nodes/minikube/proxy/stats/summary \ | jq '.pods[] | select(.podRef.name == "python-66dc9f5c8b-2kktd")'
{ "podRef": { "name": "python-66dc9f5c8b-2kktd", "namespace": "default" }, "containers": [ { "name": "python-metrics", "cpu": { "usageNanoCores": 149575, "usageCoreNanoSeconds": 1647087000 }, "memory": { "workingSetBytes": 22114304 } } ]
}
kubectl proxy --port=8001
curl -sS \ http://localhost:8001/api/v1/nodes/minikube/proxy/stats/summary \ | jq '.pods[] | select(.podRef.name == "python-66dc9f5c8b-2kktd")'
{ "podRef": { "name": "python-66dc9f5c8b-2kktd", "namespace": "default" }, "containers": [ { "name": "python-metrics", "cpu": { "usageNanoCores": 149575, "usageCoreNanoSeconds": 1647087000 }, "memory": { "workingSetBytes": 22114304 } } ]
}
kubectl get pod python-66dc9f5c8b-2kktd -o jsonpath='{.status.containerStatuses[*].containerID}'
containerd://9b508d38b441b
kubectl get pod python-66dc9f5c8b-2kktd -o jsonpath='{.status.containerStatuses[*].containerID}'
containerd://9b508d38b441b
kubectl get pod python-66dc9f5c8b-2kktd -o jsonpath='{.status.containerStatuses[*].containerID}'
containerd://9b508d38b441b
minikube ssh -- sudo crictl stats CONTAINER CPU % MEM DISK INODES
...
5e63e93291a32 0.21 75.7MB 36.86kB 11
62bbd4d869537 0.04 66.93MB 65.54kB 24
6cff256e868f3 0.00 37.74MB 65.54kB 24
9b508d38b441b 0.02 22.11MB 122.9kB 16
minikube ssh -- sudo crictl stats CONTAINER CPU % MEM DISK INODES
...
5e63e93291a32 0.21 75.7MB 36.86kB 11
62bbd4d869537 0.04 66.93MB 65.54kB 24
6cff256e868f3 0.00 37.74MB 65.54kB 24
9b508d38b441b 0.02 22.11MB 122.9kB 16
minikube ssh -- sudo crictl stats CONTAINER CPU % MEM DISK INODES
...
5e63e93291a32 0.21 75.7MB 36.86kB 11
62bbd4d869537 0.04 66.93MB 65.54kB 24
6cff256e868f3 0.00 37.74MB 65.54kB 24
9b508d38b441b 0.02 22.11MB 122.9kB 16
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/resource \ | grep -i "python-66dc9f5c8b-2kktd" pod_cpu_usage_seconds_total{namespace="default",pod="python-66dc9f5c8b-2kktd"} 1.760035 1777632057760
pod_memory_working_set_bytes{namespace="default",pod="python-66dc9f5c8b-2kktd"} 2.2421504e+07 1777632057760
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/resource \ | grep -i "python-66dc9f5c8b-2kktd" pod_cpu_usage_seconds_total{namespace="default",pod="python-66dc9f5c8b-2kktd"} 1.760035 1777632057760
pod_memory_working_set_bytes{namespace="default",pod="python-66dc9f5c8b-2kktd"} 2.2421504e+07 1777632057760
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/resource \ | grep -i "python-66dc9f5c8b-2kktd" pod_cpu_usage_seconds_total{namespace="default",pod="python-66dc9f5c8b-2kktd"} 1.760035 1777632057760
pod_memory_working_set_bytes{namespace="default",pod="python-66dc9f5c8b-2kktd"} 2.2421504e+07 1777632057760
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/cadvisor
machine_cpu_cores{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 20
machine_cpu_physical_cores{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 14
machine_cpu_sockets{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 1
machine_memory_bytes{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 3.338305536e+10
machine_swap_bytes{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 3.4088153088e+10
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/cadvisor
machine_cpu_cores{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 20
machine_cpu_physical_cores{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 14
machine_cpu_sockets{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 1
machine_memory_bytes{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 3.338305536e+10
machine_swap_bytes{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 3.4088153088e+10
curl -sS http://localhost:8001/api/v1/nodes/minikube/proxy/metrics/cadvisor
machine_cpu_cores{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 20
machine_cpu_physical_cores{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 14
machine_cpu_sockets{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 1
machine_memory_bytes{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 3.338305536e+10
machine_swap_bytes{machine_id="a5b246...",system_uuid="7bd5a1e2-ea5e-452b-a202-536452caf458"} 3.4088153088e+10 - Table of contents
- How Kubernetes Monitoring Layers Stack Up
- Where Metrics Originate
- cgroup v1 with cgroupfs: The Legacy Baseline
- At the crux of how cgroup hierarchy is shaped
- How Kubernetes Creates and Manages the Cgroup Hierarchy
- Kubernetes QoS Classes and cgroup Placement
- Auto-Detecting cgroup Drivers via KubeletCgroupDriverFromCRI
- cAdvisor: Embedded Resource Monitoring in Kubelet
- Kubelet’s Metrics Endpoints
- From cAdvisor to CRI: How Kubelet Collects Metrics Today
- Validating CRI-Based Metrics Collection in Kubelet - kubelet.service
- containerd.service - A pod is classified as Guaranteed only when every container has CPU and memory requests and limits set, and each request exactly matches its corresponding limit.
- A pod is Burstable when it defines at least one CPU or memory request or limit but does not meet the stricter Guaranteed rules.
- A pod is BestEffort when none of its containers define CPU or memory requests or limits. - /metrics/resource reports about 22.42 MB,
- /stats/summary and crictl stats report about 22.11 MB. - Kubernetes does not directly enforce Linux resource limits; the Linux kernel enforces them through cgroups. Kubelet and the container runtime translate pod resource settings into cgroup configuration, then the kernel applies the actual CPU, memory, pids, and related controls.
- cgroup v2 uses a single unified hierarchy where controllers coexist under /sys/fs/cgroup/. cgroup v1 uses separate controller hierarchies, so controllers such as CPU, memory, and pids can be mounted as separate cgroup trees.
- cgroup v1 has been officially deprecated since Kubernetes v1.35. As part of KEP-5573, kubelet now fails by default on cgroup v1 nodes unless failCgroupV1 is explicitly set to false, with full code removal planned no earlier than Kubernetes v1.38.
- Kubelet and the container runtime must use a compatible cgroup driver. With the systemd driver, kubelet and the runtime place containers under systemd-managed slices; with cgroupfs, they manage cgroup paths directly. For cgroup v2, Kubernetes strongly recommends the systemd cgroup driver.
- KubeletCgroupDriverFromCRI graduated to GA in Kubernetes v1.34. At startup, kubelet asks the runtime for the cgroup driver through the CRI RuntimeConfig RPC when the runtime supports it; otherwise kubelet falls back to its configured cgroupDriver.
- cAdvisor is embedded inside the kubelet process and starts as part of kubelet. By default, kubelet uses cAdvisor to collect node, pod, container, volume, and filesystem statistics, then exposes that data through kubelet HTTP endpoints. There is no separate cAdvisor sidecar or daemon in the normal kubelet setup.
- Kubelet exposes several metrics and stats endpoints. /metrics/cadvisor exposes cAdvisor-style container and machine metrics in Prometheus format. /stats/summary returns structured JSON for node, pod, container, and volume stats. /metrics/resource exposes lightweight CPU and memory resource metrics used by modern Metrics Server versions. /metrics exposes kubelet’s own internal component metrics, such as operation counters and latencies. Metrics Server 0.6.x and later query /metrics/resource, not /stats/summary.
- CRI is the gRPC API that standardizes kubelet-to-runtime communication. It lets kubelet manage pods and containers through the runtime, and with compatible runtimes it can also collect pod and container metrics directly from the runtime over the runtime socket.
- PodAndContainerStatsFromCRI is an Alpha feature gate and is disabled by default. When enabled with a compatible runtime, kubelet collects pod and container stats through CRI instead of relying on cAdvisor for those pod and container stats.
- Even with CRI-based pod and container metrics collection, kubelet still depends on cAdvisor for stats that CRI does not provide, especially node-level, machine-level, volume, and filesystem-related data. - Kubernetes 1.25: cgroup v2 graduates to GA
- Kubernetes v1.34: KubeletCgroupDriverFromCRI graduates to GA
- kube-state-metrics addon
- pkg/features/kube_features.go
- pkg/kubelet/cadvisor/util.go We're interested in UsingLegacyCadvisorStats function.
- minikube Runtime configuration
- cri protocol definition
- cri-dockerd adapter for docker
- raw handler
- cAdvisor issues #2785
- cAdvisor-less, CRI-full Container and Pod Stats Enhancement
- PodAndContainerStatsFromCRI feature gate
- KEP #2371 tracking
- implement CRI ListPodSandboxMetrics
- containerd CRI configuration
- container-stats exporter to the Kata Containers