1.k8s容器资源限制
Kubernetes采用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为换算标准的。
2.内存限制
实验
(1) 推送所需镜像stress到私有仓库,以便集群各节点拉取
(2)做内存资源限制
启用一个占用200Mi的pod,设定内存资源上限100Mi,下限50Mi
应用yaml文件,pod调度失败
[root@server2 ~]# mkdir quota
[root@server2 ~]# cd quota
[root@server2 quota]# vim demo.yml
[root@server2 quota]# cat demo.yml
apiVersion: v1
kind: Pod
metadata:
name: memory-demo
spec:
containers:
- name: memory-demo
image: stress
args: ##启用一个pod,他会占用200M内存
- --vm
- "1"
- --vm-bytes
- 200M
resources:
requests:
memory: 50Mi ##下限50Mi
limits:
memory: 100Mi ##上限100Mi
[root@server2 quota]# kubectl apply -f demo.yml
pod/memory-demo created
[root@server2 quota]# kubectl get pod
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 ContainerCreating 0 6s
[root@server2 quota]# kubectl get pod ##超出内存限制,调度失败
NAME READY STATUS RESTARTS AGE
memory-demo 0/1 OOMKilled 2 33s
[root@server2 quota]# kubectl describe pod memory-demo
Name: memory-demo
Namespace: default
Priority: 0
Node: server3/172.25.12.3
Start Time: Fri, 10 Jul 2020 07:12:28 +0800
Labels: <none>
Annotations: Status: Running
IP: 10.244.1.47
IPs:
IP: 10.244.1.47
Containers:
memory-demo:
Container ID: docker://4c3975e48d5fc09540e9d0b344ab2c4e70f5185f27514205b5d53e448efef587
Image: stress
Image ID: docker-pullable://stress@sha256:48a71454d405dbe1c756dd728cadeb577f429f61313ac62b413b52fbaa8a3b44
Port: <none>
Host Port: <none>
Args:
--vm
1
--vm-bytes
200M
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: OOMKilled
Exit Code: 1
Started: Fri, 10 Jul 2020 07:13:20 +0800
Finished: Fri, 10 Jul 2020 07:13:20 +0800
Ready: False
Restart Count: 3
Limits:
memory: 100Mi
Requests:
memory: 50Mi
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-d8qhv (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
default-token-d8qhv:
Type: