K8s的资源限制
1 https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-cpu-resource/
2 https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-memory-resource/
### 名称空间的限制管理
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/manage-resources/
k8s采用request和limit两种限制类型来对资源进行分配
- request(资源需求):即运行pod的节点必须满足运行pod的最基本需求才能运行pod。
- limit(资源限制):即运行pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。
资源类型:
- CPU的单位是核心数,内存的单位是字节。
- 一个容器申请0.5各CPU,就相当于申请1个CPU的一半,可以加个后缀m表示千分之一的概念。比如说100m的CPU,100豪的CPU和0.1个CPU都是一样的。
内存单位:
- K,M,G,T,P,E #通常是以1000为换算标准的。
- Ki,Mi,Gi,Ti,Pi,Ei #通常是以1024为换算标准的。
内存资源限制实例
resources:
requests :节点所需的最小计算资源量,k8s调度的时候的依据值
limits :限制允许的最大计算资源量,真正的资源限制参数
apiVersion: v1 # 指定Pod资源使用的API版本
kind: Pod # 定义资源类型,这里是Pod
metadata: # 包含Pod的元数据
name: memory-demo # Pod的名称
spec: # Pod的规格定义
containers: # 容器部分
- name: memory-demo # 容器的名称
image: polinux/stress # 使用的容器镜像,这里是stress工具
args: # 传递给容器的命令行参数
- --vm # 启用虚拟内存
- "1" # 启动一个虚拟内存实例
- --vm-bytes # 指定虚拟内存的大小
- 200M # 设置虚拟内存为200MB
resources: # 定义资源请求和限制
requests: # 请求的资源量
memory: 50Mi # 请求50Mi的内存
limits: # 资源限制
memory: 100Mi # 限制最大使用100Mi的内存
----------------------------------------------------------------------------------------
apiVersion: v1
kind: Pod
metadata:
name: memory-demo
spec:
containers:
- name: memory-demo-ctr
image: polinux/stress
resources:
limits:
memory: "100Mi"
requests:
memory: "50Mi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
#### 内存做了限制 无法启动 被oomkilled
[root@master resou]# kubectl get pod
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 ContainerCreating 0 4s
[root@master resou]# kubectl get pod
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 OOMKilled 0 6s
### ############ 修改
resources:
limits:
memory: "80M"
requests:
memory: "50M"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "70M", "--vm-hang", "1"]
-- # 正常运行
[root@master resou]# kubectl get pod
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 ContainerCreating 0 4s
[root@master resou]# kubectl get pod
NAME READY STATUS RESTARTS AGE
memory-demo 1/1 Running 0 5s
CPU资源限制
node01 物理机双核
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
spec:
containers:
- name: cpu-demo-ctr
image: vish/stress
resources:
limits:
cpu: "1"
requests:
cpu: "0.5"
args:
- -cpus
- "2"
## 配置文件的 args 部分提供了容器启动时的参数。-cpus “2”参数告诉容器尝试使用 2 个 CPU。
[root@master resou]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master 137m 6% 1163Mi 61%
node01 1031m 51% 861Mi 45% ### 使用了一个cpu
node02 31m 1% 691Mi 36%
node03 40m 2% 1264Mi 33%
[root@master resou]# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cpu-demo 1/1 Running 0 66s 10.2.1.23 node01 <none> <none>
### 将cpu 限制在1核心
[root@master resou]# kubectl top pod
NAME CPU(cores) MEMORY(bytes)
cpu-demo 1000m 0Mi