D14 kubernetes 容器服务质量和容器环境变量

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相关信息
posted @   Hello_worlds  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于决定:把自己家的能源管理系统开源了!
· [.NET] 使用客户端缓存提高API性能
· 外部H5唤起常用小程序链接规则整理
· C#实现 Winform 程序在系统托盘显示图标 & 开机自启动
· WPF 怎么利用behavior优雅的给一个Datagrid添加一个全选的功能
点击右上角即可分享
微信分享提示