一、QoS如何使用¶
1.1 示例1:实现QoS为Guaranteed的Pod¶
Guaranteed级别的Pod具有最高的优先级,Kubernetes会确保这些Pod获得足够的资源,也就是Kubernetes调度器会确保这些Pod调度到能够提供所需资源的节点上。
配置Guaranteed级别的Pod,需要满足如下条件:
-
1)Pod中的每个容器必须指定limits.memory和requests.memory,并且两者需要相等
-
2)Pod中的每个容器必须指定limits.cpu和limits.cpu,并且两者需要相等
yaml
limits:
memory: "200Mi"
cpu: "700m"
requests:
memory: "200Mi"
cpu: "700m"
下面进行示例演示:
1.定义一个yaml文件
[root@k8s-master01 study]# vim qos-guaranteed.yaml
apiVersion: v1
kind: Pod
metadata:
name: qos-demo
namespace: qos-example
spec:
containers:
- name: qos-demo-ctr
image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
resources:
limits:
memory: "200Mi"
cpu: "700m"
requests:
memory: "200Mi"
cpu: "700m"
2.创建一个命名空间
[root@k8s-master01 study]# kubectl create ns qos-example
3.创建Pod
[root@k8s-master01 study]# kubectl create -f qos-guaranteed.yaml -n qos-example
4.查看pod
[root@k8s-master01 study]# kubectl get po -n qos-example
NAME READY STATUS RESTARTS AGE
qos-demo 1/1 Running 0 33s
5.将pod输出到yaml文件,观察到qosClass: Guaranteed
[root@k8s-master01 study]# kubectl get po -n qos-example qos-demo -oyaml
...
...
started: true
state:
running:
startedAt: "2022-12-11T07:47:56Z"
hostIP: 192.168.100.35
phase: Running
podIP: 172.27.14.203
podIPs:
- ip: 172.27.14.203
qosClass: Guaranteed
startTime: "2022-12-11T07:47:55Z"
...
...
1.2 示例2:实现QoS为Burstable的Pod¶
Burstable级别的Pod具有中等优先级,Kubernetes会尽量满足其资源请求,但在资源紧张时可能会被驱逐,Kubernetes调度器会确保这些Pod调度到能够提供所需资源的节点上,如果节点上有额外的资源,这些Pod可以使用超过其请求的资源。
配置Burstable级别的Pod,需要满足如下条件:
-
1)Pod不符合Guaranteed的配置要求
-
2)Pod中至少有一个容器配置了requests.cpu或requests.memory
yaml
limits:
memory: "200Mi"
requests:
memory: "100Mi"
下面进行示例演示:
1.定义一个yaml文件
[root@k8s-master01 study]# vim qos-burstable.yaml
apiVersion: v1
kind: Pod
metadata:
name: qos-demo-2
namespace: qos-example
spec:
containers:
- name: qos-demo-2-ctr
image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
2.创建一个命名空间
[root@k8s-master01 study]# kubectl create ns qos-example
3.创建Pod
[root@k8s-master01 study]# kubectl create -f qos-burstable.yaml -n qos-example
4.查看pod
[root@k8s-master01 study]# kubectl get po -n qos-example
NAME READY STATUS RESTARTS AGE
qos-demo 1/1 Running 0 11m
qos-demo-2 1/1 Running 0 6s
5.将pod输出到yaml文件,观察到qosClass: Burstable
[root@k8s-master01 study]# kubectl get po -n qos-example qos-demo-2 -oyaml
...
...
...
state:
running:
startedAt: "2022-12-11T07:59:20Z"
hostIP: 192.168.100.34
phase: Running
podIP: 172.17.125.8
podIPs:
- ip: 172.17.125.8
qosClass: Burstable
startTime: "2022-12-11T07:59:19Z"
1.3 示例3:实现QoS为BestEffort的Pod¶
BestEffort级别的Pod是最低优先级,Kubernetes不保证这些Pod获得任何资源,在资源紧张时,这些Pod最先被驱逐。同时Kubernetes调度器会尝试将这些Pod调度到任何节点上,但不保证节点上有足够的资源。
配置BestEffort级别的Pod,不配置resources字段即可。
下面进行示例演示:
1.定义一个yaml文件
[root@k8s-master01 study]# vim qos-besteffort.yaml
apiVersion: v1
kind: Pod
metadata:
name: qos-demo-3
namespace: qos-example
spec:
containers:
- name: qos-demo-3-ctr
image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
2.创建一个命名空间
[root@k8s-master01 study]# kubectl create ns qos-example
3.创建Pod
[root@k8s-master01 study]# kubectl create -f qos-besteffort.yaml -n qos-example
4.查看pod
[root@k8s-master01 study]# kubectl get po -n qos-example
NAME READY STATUS RESTARTS AGE
qos-demo 1/1 Running 0 14m
qos-demo-2 1/1 Running 0 3m31s
qos-demo-3 1/1 Running 0 8s
5.将pod输出到yaml文件,观察到qosClass: BestEffort
[root@k8s-master01 study]# kubectl get po -n qos-example qos-demo-3 -oyaml
...
...
...
- ip: 172.18.195.4
qosClass: BestEffort
startTime: "2022-12-11T08:02:42Z"