时人不识凌云木,直待凌云始道高。这篇文章主要讲述k8s—pod进阶(资源限制,健康检查)相关的知识,希望能为你提供帮助。
一、资源限制
- ??当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源??
- ??当为 Pod 中的容器指定了 request 资源时,调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为容器指定了 limit 资源时,kubelet 就会确保运行的容器不会使用超出所设的 limit 资源量。kubelet 还会为容器预留所设的 request 资源量, 供该容器使用??
- ??如果 Pod 运行所在的节点具有足够的可用资源,容器可以使用超出所设置的 request 资源量。不过,容器不可以使用超出所设置的 limit 资源量??
- ??如果给容器设置了内存的 limit 值,但未设置内存的 request 值,Kubernetes 会自动为其设置与内存 limit 相匹配的 request 值。类似的,如果给容器设置了 CPU 的 limit 值但未设置 CPU 的 request 值,则 Kubernetes 自动为其设置 CPU 的 request 值 并使之与 CPU 的 limit 值匹配??
??request??1、Pod 和 容器的资源请求和限制
??limit??
- ??容器使用的最小资源需求, 作为容器调度时资源分配的判断依赖。??
- ??只有当前节点上可分配的资源量 > = request 时才允许将容器调度到该节点。??
- ??request参数不限制容器的最大可使用资源??
- ??容器能使用资源的最大值??
- ??设置为0表示对使用的资源不做限制, 可无限的使用??
??request 和 limit 关系??
??request能保证pod有足够的资源来运行, 而limit则是防止某个pod无限制的使用资源, 导致其他pod崩溃. 两者的关系必须满足:0 < = request < = limit??
??如果limit=0表示不对资源进行限制, 这时可以小于request。??
??目前CPU支持设置request和limit,memory只支持设置request, limit必须强制等于request, 这样确保容器不会因为内存的使用量超过request但是没有超过limit的情况下被意外kill掉。??
spec.containers[].resources. requests.cpu#定义创建容器时预分配的CPU资源
spec.containers[].resources.requests.memory#定义创建容器时预分配的内存资源
spec.containers[].resources.limits.cpu#定义 cpu 的资源上限
spec.containers[].resources.limits.memory#定义内存的资源上限
2、CPU资源单位
??CPU 资源的 request 和 limit 以??? cpu 为单位???。Kubernetes 中的一个 cpu 相当于1个 vCPU(1个超线程)??
【k8s—pod进阶(资源限制,健康检查)】??Kubernetes 也支持带小数 CPU 的请求。spec.containers[].resources.requests.cpu 为 0.5 的容器能够获得一个 cpu 的一半 CPU 资源(类似于Cgroup对CPU资源的时间分片)表达式 0.1 等价于表达式 100m(毫核),表示每 1000 毫秒内容器可以使用的 CPU 时间总量为 0.1*1000 毫秒??
3、内存资源单位
??内存的 request 和 limit 以???字节为单位???。可以以整数表示,或者以10为底数的指数的单位(E、P、T、G、M、K)来表示, 或者以2为底数的指数的单位(Ei、Pi、Ti、Gi、Mi、Ki)来表示??
??如:1KB=10^3=1000,1MB=10^6=1000000=1000KB,1GB=10^9=1000000000=1000MB??4、示例
?? 1KiB=2^10=1024,1MiB=2^20=1048576=1024KiB??
1.示例1
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: images.my-company.example/app:v4
env:
- name: mysql_ROOT_PASSWORD
value: "password"
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- name: log-aggregator
image: images.my-company.example/log-aggregator:v6
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
??此例子中的 Pod 有两个容器。每个容器的 request 值为 0.25 cpu 和 64MiB 内存,每个容器的 limit 值为 0.5 cpu 和 128MiB 内存。那么可以认为该 Pod 的总的资源 request 为 0.5 cpu 和 128 MiB 内存,总的资源 limit 为 1 cpu 和 256MiB 内存??
2.示例2
vim pod2.yaml
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: web
image: nginx
env:
- name: WEB_ROOT_PASSWORD
value: "password"
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- name: wp
image: wordpress
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
kubectl apply -f pod2.yaml
kubectl describe pod frontend
kubectl get pods -o wide
NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATES
frontend2/2Running515m10.244.2.4node02< none> < none>
kubectl describe nodes node02#由于当前虚拟机有2个CPU,所以Pod的CPU Limits一共占用了50%
NamespaceNameCPU RequestsCPU LimitsMemory RequestsMemory LimitsAGE
------------------------------------------------------------------
defaultfrontend500m (25%)1 (50%)128Mi (3%)256Mi (6%)16m
kube-systemkube-flannel-ds-amd64-f4pbp100m (5%)100m (5%)50Mi (1%)50Mi (1%)19h
kube-systemkube-proxy-pj4wp0 (0%)0 (0%)0 (0%)0 (0%)19h
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
ResourceRequestsLimits
----------------------
cpu600m (30%)1100m (55%)
memory178Mi (推荐阅读
- Tomcat Session管理分析面试+工作
- vi/vim基本使用方法
- Centos6.5安装配置mongodb
- IT人不要一辈子靠技术生存
- 集群(cluster)
- Nginx负载均衡NFS配置
- Win11 桌面壁纸文件夹_Win11系统桌面壁纸位置
- Linux系统中vi是什么?vi模式有几种()
- MongoDB添加索引