做音乐网站需要版权么,工业设计图片产品,单页企业官网模板,教育类门户网站k8s-pod的资源限制一、指定内存请求和限制二、超过容器限制的内存三、超过整个节点容量的内存四、限制cpu总结官方文档#xff1a;https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-memory-resource/
一、指定内存请求和限制
创建一个容器#xff0c;将…
k8s-pod的资源限制一、指定内存请求和限制二、超过容器限制的内存三、超过整个节点容量的内存四、限制cpu总结官方文档https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-memory-resource/
一、指定内存请求和限制
创建一个容器将会请求 100 MiB 内存并且内存会被限制在 200 MiB 以内
[rootk8s-1 pod]# vim memory_request_limit.yaml
apiVersion: v1
kind: Pod
metadata:name: memory-demonamespace: mem-example
spec:containers:- name: memory-demo-ctrimage: polinux/stressresources:requests:memory: 100Milimits:memory: 200Micommand: [stress]args: [--vm, 1, --vm-bytes, 150M, --vm-hang, 1]执行
[rootk8s-1 pod]# kubectl apply -f memory_request_limit.yaml
Error from server (NotFound): error when creating memory_request_limit.yaml: namespaces mem-example not found
[rootk8s-1 pod]# kubectl get ns
NAME STATUS AGE
default Active 2d20h
kube-node-lease Active 2d20h
kube-public Active 2d20h
kube-system Active 2d20h
kubernetes-dashboard Active 2d18h# 创建命名空间
[rootk8s-1 pod]# kubectl create namespace mem-example
namespace/mem-example created
[rootk8s-1 pod]# kubectl get ns
NAME STATUS AGE
default Active 2d20h
kube-node-lease Active 2d20h
kube-public Active 2d20h
kube-system Active 2d20h
kubernetes-dashboard Active 2d18h
mem-example Active 4s
[rootk8s-1 pod]# kubectl apply -f memory_request_limit.yaml
pod/memory-demo created# 查看是否运行
[rootk8s-1 pod]# kubectl get pod -n memory-example
No resources found in memory-example namespace.
[rootk8s-1 pod]# kubectl get pod -n mem-example
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 ContainerCreating 0 40s
[rootk8s-1 pod]# kubectl get pod -n mem-example
NAME READY STATUS RESTARTS AGE
memory-demo 1/1 Running 0 117s
# 查看更多信息
[rootk8s-1 pod]# kubectl get pod -n mem-example -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
memory-demo 1/1 Running 0 7m40s 10.224.13.68 k8s-3 none none
[rootk8s-3 ~]# docker pull polinux/stress获取pod的指标数据需要用metrics
[rootk8s-1 pod]# kubectl top pod memory-demo --namespacemem-example
error: Metrics API not available
[rootk8s-1 pod]# docker pull registry.k8s.io/metrics-server/metrics-server:v0.6.3
Error response from daemon: Head https://us-west2-docker.pkg.dev/v2/k8s-artifacts-prod/images/metrics-server/metrics-server/manifests/v0.6.3: dial tcp 108.177.125.82:443: connect: connection refused# 每个节点导入镜像
[rootk8s-1 images]# ls
metrics-server-v0.6.3.tar
[rootk8s-1 images]# docker load -i metrics-server-v0.6.3.tar
[rootk8s-2 images]# docker load -i metrics-server-v0.6.3.tar [rootk8s-3 images]# docker load -i metrics-server-v0.6.3.tar [rootk8s-1 pod]# kubectl apply -f components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
[rootk8s-1 pod]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
metrics-server-784768bd4b-jtnsg 1/1 Running 0 2m20s
# 获取pod指标数据
[rootk8s-1 pod]# kubectl top pod memory-demo --namespacemem-example
NAME CPU(cores) MEMORY(bytes)
memory-demo 14m 150Mi 正在使用的内存大约为 150 MiB。 这大于 Pod 请求的 100 MiB但在 Pod 限制的 200 MiB之内 二、超过容器限制的内存
当节点拥有足够的可用内存时容器可以使用其请求的内存。 但是容器不允许使用超过其限制的内存。 如果容器分配的内存超过其限制该容器会成为被终止的候选容器。 如果容器继续消耗超出其限制的内存则终止容器。 如果终止的容器可以被重启则 kubelet 会重新启动它就像其他任何类型的运行时失败一样
创建一个 Pod尝试分配超出其限制的内存。 该容器的内存请求为 50 MiB内存限制为 100 MiB
[rootk8s-1 pod]# cat memory_request_limit.yaml
apiVersion: v1
kind: Pod
metadata:name: memory-demonamespace: mem-example
spec:containers:- name: memory-demo-ctrimage: polinux/stressresources:requests:memory: 50Milimits:memory: 100Micommand: [stress]args: [--vm, 1, --vm-bytes, 260M, --vm-hang, 1]
[rootk8s-1 pod]# kubectl apply -f memory_request_limit.yaml 查看pod信息
[rootk8s-1 pod]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
mem-example memory-demo 0/1 ContainerCreating 0 10s
[rootk8s-1 pod]# kubectl top pod memory-demo --namespacemem-example
Error from server (NotFound): podmetrics.metrics.k8s.io mem-example/memory-demo not found
[rootk8s-1 pod]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
mem-example memory-demo 0/1 OOMKilled 2 (36s ago) 54s
[rootk8s-1 pod]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
mem-example memory-demo 0/1 CrashLoopBackOff 2 (20s ago) 59s# 查看pod相关的详细信息
[rootk8s-1 pod]# kubectl get pod memory-demo --namespacemem-example
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 ContainerCreating 0 12s
[rootk8s-1 pod]# kubectl get pod memory-demo --namespacemem-example
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 OOMKilled 0 13s
[rootk8s-1 pod]# kubectl get pod memory-demo --namespacemem-example
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 Error 1 (8s ago) 19s
[rootk8s-1 pod]# kubectl get pod memory-demo --namespacemem-example
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 CrashLoopBackOff 1 (4s ago) 22s# 详细信息以yaml文件输出
[rootk8s-1 pod]# kubectl get pod memory-demo --outputyaml --namespacemem-example# 删除
[rootk8s-1 pod]# kubectl delete -f memory_request_limit.yaml
pod memory-demo deleted容器由于内存溢出OOM被杀掉、重启、再杀掉、再重启 三、超过整个节点容量的内存
Pod 的调度基于请求。只有当节点拥有足够满足 Pod 内存请求的内存时才会将 Pod 调度至节点上运行
[rootk8s-1 pod]# cat memory_request_limit.yaml
apiVersion: v1
kind: Pod
metadata:name: memory-demonamespace: mem-example
spec:containers:- name: memory-demo-ctrimage: polinux/stressresources:requests:memory: 1000Gilimits:memory: 1000Gicommand: [stress]args: [--vm, 1, --vm-bytes, 260M, --vm-hang, 1]
[rootk8s-1 pod]# kubectl apply -f memory_request_limit.yaml
pod/memory-demo createdPod 处于 Pending 状态。 这意味着该 Pod 没有被调度至任何节点上运行并且它会无限期的保持该状态
[rootk8s-1 pod]# kubectl get pod memory-demo --namespacemem-example
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 Pending 0 32s
# 由于节点内存不足该容器无法被调度
[rootk8s-1 pod]# kubectl describe pod memory-demo --namespacemem-example|grep -A 5 Events
Events:Type Reason Age From Message---- ------ ---- ---- -------Warning FailedScheduling 45s (x2 over 112s) default-scheduler 0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didnt tolerate, 2 Insufficient memory.四、限制cpu
[rootk8s-1 pod]# vim cpu_request_limit.yaml
apiVersion: v1
kind: Pod
metadata:name: cpu-demo-2namespace: cpu-example
spec:containers:- name: cpu-demo-ctr-2image: vish/stressresources:limits:cpu: 100requests:cpu: 100args:- -cpus- 2输出显示 Pod 状态为 Pending。也就是说Pod 未被调度到任何节点上运行 并且 Pod 将无限期地处于 Pending 状态
[rootk8s-1 pod]# kubectl create namespace cpu-example
namespace/cpu-example created
[rootk8s-1 pod]# kubectl apply -f cpu_request_limit.yaml
pod/cpu-demo-2 created
[rootk8s-1 pod]# kubectl get pod cpu-demo-2 --namespacecpu-example
NAME READY STATUS RESTARTS AGE
cpu-demo-2 0/1 Pending 0 10s查看有关 Pod 的详细信息包含事件 由于节点上的 CPU 资源不足无法调度容器
[rootk8s-1 pod]# kubectl describe pod cpu-demo-2 --namespacecpu-example
Events:Type Reason Age From Message---- ------ ---- ---- -------Warning FailedScheduling 47s (x5 over 4m) default-scheduler 0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didnt tolerate, 2 Insufficient cpu.总结
Pod 的资源限制是保障集群稳定性、避免资源争抢的核心机制通过定义 Pod 对 CPU、内存等计算资源的 “需求” 和 “上限”实现资源的合理分配
requests - Pod 运行所需的最小资源保障limits - Pod 能使用的最大资源上限