1、容器服务质量
服务质量(quality of Services,QoS),是kubernetes用于对pod的进行优先级划分的一种机制。通过QoS,kubernetes将pod划分为3个等级。如下所示
Guaranteed 优先级最高 pod中每个容器都被设置了CPU/内存的资源请求和资源限制,并且资源请求的值与资源限制的值相等
Burstable 优先级中等 pod中至少有一个容器设置了CPU或内存的资源请求或资源限制
BestEffort 优先级最低 pod中没有容器设置资源请求和资源限制
- 创建一个QoS级别为Guaranteed的pod
[root@k8s-master k8s]# cat pod-qos1.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-qos1
spec:
containers:
- name: web
image: uhub.service.ucloud.cn/librarys/nginx:1.23
resources:
# 资源请求
requests:
memory: "500Mi"
cpu: "200m"
# 资源限制
limits:
memory: "500Mi"
cpu: "200m"
[root@k8s-master k8s]# kubectl apply -f pod-qos1.yaml
pod/pod-qos1 created
[root@k8s-master k8s]# kubectl describe pod pod-qos1 | grep "QoS"
QoS Class: Guaranteed
- 创建一个QoS级别为Burstable的pod
[root@k8s-master k8s]# cat pod-qos2-Burstable.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-qos2
spec:
containers:
- name: web
image: uhub.service.ucloud.cn/librarys/nginx:1.23
resources:
# 资源请求
requests:
memory: "500Mi"
# 资源限制
limits:
memory: "500Mi"
[root@k8s-master k8s]# kubectl apply -f pod-qos2-Burstable.yaml
pod/pod-qos2 created
[root@k8s-master k8s]# kubectl describe pod pod-qos2 | grep "QoS"
QoS Class: Burstable
- 创建一个QoS级别为BestEffort的pod
[root@k8s-master k8s]# cat pod-qos3-BestEffort.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-qos3
spec:
containers:
- name: web
image: uhub.service.ucloud.cn/librarys/nginx:1.23
[root@k8s-master k8s]# kubectl apply -f pod-qos3-BestEffort.yaml
pod/pod-qos3 created
[root@k8s-master k8s]# kubectl describe pod pod-qos3 | grep "QoS"
QoS Class: BestEffort
综上所述,pod的QoS级别是由资源请求和资源限制决定的。了解pod的QoS级别对于管理和优化集群资源分配提供了有效的依据,具有以下作用
资源分配优化:了解pod 的QoS级别有助于更好的理解和规划资源分配,通过针对不同QoS级别的pod采取不同的资源调度策略,可以最大程度提高集群的资源利用率
故障恢复:当节点发生故障或资源不足时,kubernetes会优先保留Guaranteed级别的pod,并终止或重启低级别的pod,以保护集群的稳定性。因此,QoS级别可以帮助预测哪些pod可能受到影响,并相应的设计故障恢复机制
为了提高应用程序的服务质量,可以根据应用程序的需求设置合适的QoS级别,如将核心应用设置为Guaranteed级别,将常规应用设置为Burstable级别。
2、容器环境变量
在pod配置中,env字段用于设置容器的环境变量。通过环境变量,可以向容器中传递数据,如配置信息、授权凭据等。容器中的应用程序可以读取这些环境以获取数据并使用
- 环境变量配置示例如下:
[root@k8s-master k8s]# cat pod-env.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: pod-env
name: pod-env
spec:
containers:
- name: web
image: uhub.service.ucloud.cn/librarys/nginx:1.23
env:
- name: API_URL
value: "https://172.16.99.71/api"
- name: API_KEY
value: "LuNOpq"
在上述配置中,容器设置了两个环境变量。分别是API_URL和API_KEY
[root@k8s-master k8s]# kubectl apply -f pod-env.yaml
pod/pod-env created
[root@k8s-master k8s]# kubectl exec -it pod-env -- bash
容器中应用程序可以通过读取这两个环境变量来获取API连接信息
root@pod-env:/# echo $API_URL
https://172.16.99.71/api
root@pod-env:/# echo $API_KEY
LuNOpq
另外,kubernetes还提供了 DownwardAPI功能,该功能允许容器获取与pod 相关的元数据信息。如pod的名称、命名空间、ip地址等。配置示例如下
[root@k8s-master k8s]# cat pod-env-info.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: pod-env-info
name: pod-env-info
spec:
containers:
- name: web
image: uhub.service.ucloud.cn/librarys/nginx:1.23
env:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
[root@k8s-master k8s]# kubectl apply -f pod-env-info.yaml
pod/pod-env-info created
[root@k8s-master k8s]# kubectl exec -it pod-env-info -- bash
root@pod-env-info:/# echo -e "$MY_NODE_NAME\t$MY_POD_NAME\t$MY_POD_NAMESPACE\t$MY_POD_IP"
k8s-node02 pod-env-info default 10.244.58.238
- 在上述配置中,将以下pod相关信息注入容器的环境变量中
MY_NODE_NAME:这个环境变量的值来自pod所在的节点名称
MY_POD_NAME:这个环境变量来自pod的名称
MY_POD_NAMESPACE:这个环境变量来自pod所在的命名空间
MY_POD_IP:这个环境变量来自pod的ip地址
容器中的应用程序可以很方便的读取这些环境变量,以获取pod相关信息
标签:D14,容器,QoS,name,kubernetes,env,pod,k8s,root
From: https://www.cnblogs.com/suyj/p/18397047