news 2026/9/5 3:30:55

Pod资源管理:避免争抢与浪费的核心手段

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pod资源管理:避免争抢与浪费的核心手段

默认情况下,容器可使用所在节点的全部CPU和内存资源,在多租户集群中极易引发资源争抢(如一个“贪婪”应用耗尽节点内存,导致其他Pod被杀死)、调度不均(调度器无法判断Pod合适节点)等问题。资源管理的核心目标,是通过声明式配置,让K8s“知晓”每个应用的资源需求,实现公平调度、资源隔离与稳定运行。

1、Secret(密钥管理)

1.1 概念

Secret 用来保存敏感数据,如:密码 Token 密钥

将敏感信息与Pod分离,方便控制访问并降低风险。

1.2 Secret 类型

类型说明
kubernetes.io/service-account-tokenKubernetes 自动创建,用于访问 APIServer。Pod 默认挂 载在 /run/secrets/kubernetes.io/serviceaccount。
Opaque默认类型,用户自定义密码、密钥等(Base64 编码)。
kubernetes.io/dockerconfigjson存储私有 Docker Registry 的认证信息。
kubernetes.io/tls存储 SSL/TLS 证书与私钥。

使用前提:Pod 必须引用 Secret 才能使用。

使用方式:

1. 作为Volume 文件挂载。

2. 作为环境变量

3. kubelet拉取镜像时使用认证信息

应用场景:凭据管理

1.3 创建Secret

1.3.1 方法一:命令行创建

echo -n 'zhangsan' > username.txt echo -n 'abc1234' > password.txt kubectl create secret generic mysecret --from-file=username.txt --from file=password.txt kubectl get secrets kubectl describe secret mysecret

1.3.2 方法二:YAML 文件(Base64 编码)

echo -n zhangsan | base64 # emhhbmdzYW4K= echo -n abc1234 | base64 # YWJjMTIzNAo== apiVersion: v1 kind: Secret metadata: name: mysecret1 type: Opaque data: password: 'YWJjMTIzNA==' username: 'emhhbmdzYW4=' kubectl apply -f secret.yaml kubectl get secret mysecret1 -o yaml

1.4 使用 Secret

1.4.1 方式一:挂载为文件

#将 Secret 挂载到 Volume 中,以 Volume 的形式挂载到 Pod 的某个目录下 vim secret-test.yaml apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: nginx image: nginx volumeMounts: - name: secrets mountPath: "/etc/secrets" readOnly: true volumes: - name: secrets secret: secretName: mysecret kubectl exec -it mypod -- ls /etc/secrets

1.4.2 方式二:导入环境变量

vim secret-test1.yaml apiVersion: v1 kind: Pod metadata: name: mypod1 spec: containers: - name: nginx image: nginx env: - name: TEST_USER valueFrom: secretKeyRef: name: mysecret1 key: username - name: TEST_PASSWORD valueFrom: secretKeyRef: name: mysecret1 key: password kubectl explain Pod.spec.containers.env.valueFrom kubectl exec -it mypod1 -- printenv | grep TEST

2、ConfigMap(配置管理)

2.1 概念

与 Secret 类似,但存储非敏感配置数据。

ConfigMap 可供应用读取配置文件、命令行参数或环境变量。

应用场景:应用配置管理

2.2 创建 ConfigMap

2.2.1 方法一:从目录创建

mkdir /opt/configmap/ vim /opt/configmap/game.properties enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30 vim /opt/configmap/ui.properties color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNice kubectl create configmap game-config --from-file=/opt/configmap/ //--from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件 名,值就是文件的内容

2.2.2 方法二:从文件创建

kubectl create configmap game-config-2 \ --from-file=/opt/configmap/game.properties \ --from-file=/opt/configmap/ui.properties

2.2.3 方法三:使用字面值

kubectl create configmap special-config \ --from-literal=special.how=very \ --from-literal=special.type=goo

2.3 Pod 中使用 ConfigMap

2.3.1 方式一:作为环境变量注入

vim env.yaml apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very special.type: good --- apiVersion: v1 kind: ConfigMap metadata: name: env-config namespace: default data: log_level: INFO kubectl create -f env.yaml kubectl get cm NAME DATA AGE env-config special-config 1 6S DATA 2 6S ---------------------------------------------- //Pod的创建 vim test-pod.yaml apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: busybox image: busybox:1.28.4 command: ["/bin/sh", "-c", "env"] env: - name: SPECIAL_HOW_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type envFrom: - configMapRef: name: env-config restartPolicy: Never kubectl logs test-pod

2.3.2 方式二:命令行参数使用

vim test-pod2.yaml apiVersion: v1 kind: Pod metadata: name: test-pod2 spec: containers: - name: busybox image: busybox:1.28.4 command: - /bin/sh - -c - echo "$(SPECIAL_HOW_KEY) $(SPECIAL_TYPE_KEY)" env: - name: SPECIAL_HOW_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type envFrom: - configMapRef: name: env-config restartPolicy: Never kubectl create -f test-pod2.yaml kubectl get pods NAME READY STATUS RESTARTS AGE test-pod2 0/1 Completed 0 34s kubectl logs test-pod2 very good

2.3.3 方式三:以 Volume 形式挂载

在数据卷里面使用 ConfigMap,就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容 vim test-pod3.yaml apiVersion: v1 kind: Pod metadata: name: test-pod3 spec: containers: - name: busybox image: busybox:1.28.4 command: [ "/bin/sh", "-c", "sleep 36000" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: special-config restartPolicy: Never kubectl create -f test-pod3.yaml kubectl get pods NAME READY STATUS RESTART AGE test-pod3 1/1 Running 0 5s kubectl exec -it test-pod3 sh # cd /etc/config/ # ls special.how special.type # vi special.how # vi special.type

2.3.4 ConfigMap 热更新机制

vim test-pod4.yaml apiVersion: v1 kind: ConfigMap metadata: name: log-config namespace: default data: log_level: INFO --- apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec: replicas: 1 selector: matchLabels: app: my-nginx template: metadata: labels: app: my-nginx spec: containers: - name: my-nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: log-config kubectl apply -f test-pod.yaml kubectl exec -it my-nginx-c6df7db54-2x54r -- cat /etc/config/log_level

修改:

kubectl edit configmap log-config apiVersion: v1 data: log_level: DEBUG #INFO 修改成 DEBUG kind: ConfigMap metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","data": {"log_level":"DEBUG"},"kind":"ConfigMap","metadata":{"annotations": {},"name":"log-config","namespace":"default"}} #INFO 修改成 DEBUG creationTimestamp: 2021-05-25T07:59:18Z name: log-config namespace: default resourceVersion: "93616" selfLink: /api/v1/namespaces/default/configmaps/log-config uid: 1b8115de-bd2f-11eb-acba-000c29d88bba # log_level: DEBUG //等大概10秒左右,使用该 ConfigMap 挂载的 Volume 中的数据同步更新 kubectl exec -it my-nginx-76b6489f44-6dwxh -- cat /etc/config/log_level DEBUG

Volume 挂载的数据约 10 秒后同步更新。 环境变量不会自动更新。

2.3.5 触发滚动更新

更新 ConfigMap 不会自动触发 Pod 重启,可手动触发滚动更新。

更新 ConfigMap 目前并不会触发相关 Pod 的滚动更新,可以通过在 .spec.template.metadata.annotations 中添加 version/config ,每次通过修改 version/config 来触发滚动更新 kubectl patch deployment my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20251016" }}}}}' annotations kubectl patch deployment myapp-cs --patch '{"spec": {"template": spec": {"containers":{"image":"soscscs/myapp:v2 }}}}}' spec":{"containers":[{"image":"soscscs/myapp:v1 kubectl get pods NAME READY STATUS RESTARTS AGE my-nginx-665dd4dc8c-j4k9t 0/1 ContainerCreating 0 4S my-nginx-76b6489f44-6dwxh 0/1 Terminating 0 10M kubectl get pods NAME READY STATUS RESTARTS AGE my-nginx-665dd4dc8c-j4k9t 1/1 Running 0 74s PS:更新 ConfigMap 后: ●使用该 ConfigMap 挂载的 Env 不会同步更新。 ●使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新

总结

项目SecretConfigMap
存储内容敏感信息(密码、密钥)普通配置信息
数据编码Base64纯文本
使用方式Volume、Env、镜像拉取凭证Volume、Env、命令参数
是否自动更新Volume 延迟更新,Env 不会Volume 延迟更新,Env 不会
安全性高(需 RBAC 控制)普通
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 13:58:24

红圈AI来了!做工程项目的你还在为这5件事熬夜吗?

凌晨一点,项目经理老张的手机屏还亮着。Excel表格里密密麻麻的数字,像蚂蚁一样爬满了屏幕。明天经营分析会的材料还没整理完——成本数据对不上,资金报表有缺口,供应商款情况更是一团乱麻。这不是老张一个人的夜晚,而是千千万万工程人的日常缩影。但就在最近,一些同行老板的朋友…

作者头像 李华
网站建设 2026/9/2 19:22:21

提示工程架构师揭秘:企业级AI应用提示工程中提示模板的设计与复用

提示工程架构师揭秘:企业级AI应用提示模板的设计与复用 引言:企业级AI应用的“提示工程痛点” 在企业级AI应用中,提示工程是连接业务需求与模型能力的关键桥梁。然而,当企业从“试点型AI项目”进入“规模化落地”阶段时&#xff0…

作者头像 李华
网站建设 2026/9/2 6:57:24

红蓝对抗 网络安全 网络安全红蓝对抗演练

什么是红蓝对抗 在军事领域,演习是专指军队进行大规模的实兵演习,演习中通常分为红军、蓝军,演习多以红军守、蓝军进攻为主。类似于军事领域的红蓝军对抗,网络安全中,红蓝军对抗则是一方扮演黑客(蓝军&…

作者头像 李华
网站建设 2026/9/3 1:50:48

【网安区块链项目参考】基于区块链的安全日志防篡改系统的设计与实现

整个系统资料包含:全套源码注释开发文档部署指导说明,需要的话可以私信博主获取,伸手党勿扰基于区块链的安全日志防篡改系统的设计与实现摘要随着信息系统规模的不断扩大,系统安全日志在网络安全审计、入侵检测与事后取证中发挥着…

作者头像 李华
网站建设 2026/9/3 1:51:05

C++2026核心介绍

C 核心介绍C 是由 Bjarne Stroustrup 在 1980 年代基于 C 语言扩展而来的编程语言,核心特点是兼容 C 语言且新增了面向对象编程(OOP)特性,同时保留了对底层硬件的直接操控能力,因此被称为 “混合范式语言”—— 既支持…

作者头像 李华
网站建设 2026/9/3 1:21:43

HarmonyOS 中如何避免线程阻塞?从原理到实战的完整解析

摘要 随着 HarmonyOS / OpenHarmony 在手机、平板、智慧屏、车机等多设备上的落地,应用的复杂度正在明显提升。页面不再只是简单展示,而是伴随着网络请求、数据计算、设备协同等大量逻辑。如果这些逻辑处理不当,很容易出现页面卡顿、点击无响…

作者头像 李华