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 控制)普通

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

告别枯燥表格:手把手教你用MySQL解锁数据可视化

数据不只是冰冷的数字,而是等待讲述的故事。本文将带你从数据库直通炫酷图表,让数据自己“开口说话”。在数据驱动决策的时代,优秀的可视化能帮你从海量数据中迅速洞察趋势、发现异常。但很多人不知道,MySQL不仅能存储数据&#x…

亲测好用自考必备8款AI论文工具深度测评

亲测好用自考必备8款AI论文工具深度测评 自考论文写作的高效利器:2026年AI工具测评指南 随着自考人数逐年增加,论文写作成为每位考生必须面对的挑战。从选题构思到文献检索,再到内容撰写与格式调整,整个过程耗时耗力,稍…

C 语言输入与输出详解

C 语言输入与输出详解 引言 C 语言作为一门历史悠久且应用广泛的编程语言,其输入与输出(I/O)功能是编程学习中的重要组成部分。本文将详细介绍 C 语言中的输入与输出操作,包括标准输入输出、文件输入输出等,旨在帮助读者全面理解 C 语言的 I/O 功能。 标准输入输出 标…

SQL CREATE INDEX

SQL CREATE INDEX 引言 在数据库管理中,索引是提高查询性能的关键因素。SQL中的CREATE INDEX语句用于在数据库表上创建索引。本文将详细解释CREATE INDEX语句的用法、类型以及如何有效地使用索引来提升数据库查询效率。 一、CREATE INDEX语句简介 CREATE INDEX语句用于创建…

Swift 数组

Swift 数组 引言 Swift 是一种强大的编程语言,广泛应用于 iOS、macOS、watchOS 和 tvOS 等平台的应用开发。在 Swift 中,数组是一种非常常见的数据结构,用于存储一系列有序的元素。本文将详细介绍 Swift 数组的概念、用法以及一些高级特性。 数组的基本概念 在 Swift 中…

`.addClass()` 方法详解

.addClass() 方法详解 引言 在Web开发中,JavaScript经常被用于操作DOM元素,以实现丰富的交互效果。.addClass() 方法是jQuery库中的一个常用方法,用于向一个或多个元素添加一个或多个类。本文将详细介绍 .addClass() 方法的使用方法、原理以及在实际开发中的应用。 一、方…

Highcharts 饼图:全面解析与最佳实践

Highcharts 饼图:全面解析与最佳实践 引言 Highcharts 是一款功能强大的图表库,它可以帮助开发者轻松地在网页上创建各种类型的图表。其中,饼图作为一种常见的统计图表,在数据展示方面具有直观、易懂的特点。本文将全面解析 Highcharts 饼图,从基本概念、功能特点到最佳…

云游戏挑选四大核心:延迟、画质、内容、价格——基于真实数据的决策手册

随着网络的演进与边缘计算节点的规模化、下沉式部署,云游戏行业已全面步入以“真实体验感知”为标尺的深水区。用户的需求从“能否运行”的基础层,跃升至“画质是否震撼”“跨场景是否连贯”的综合体验层。本次测评通过构建贴近真实用户日常使用场景的测…

《Ionic Range:深度解析及其在现代应用中的重要性》

《Ionic Range:深度解析及其在现代应用中的重要性》 引言 随着移动应用开发的不断发展,用户对应用性能和用户体验的要求越来越高。在此背景下,Ionic Range 作为一款流行的前端框架,因其出色的功能和易于使用的特性而备受开发者青睐。本文将深入探讨 Ionic Range 的概念、…

2026年主流云游戏平台综合评测:从从算力到生态,深度解析最大云游戏平台标准

随着网络基础设施的持续升级与云计算技术的不断成熟,云游戏正逐渐成为玩家体验大型游戏的重要方式之一,它让用户得以摆脱本地硬件的限制,在多终端上便捷访问游戏内容。然而,面对市场上功能各异、宣传侧重点不同的云游戏服务&#…

django学习

django学习一、Django入门学习 第一步:创建虚拟环境 在PyCharm中新建一个项目,环境为虚拟环境,这是为了避免不同项目之间Python版本的冲突,因为有些项目可能需要的包比较旧,这样的包只能兼容老一点的环境,但是有…

MATLAB实现PCA(主成分分析)、OPLS-DA(正交偏最小二乘判别分析)与CRITIC-TOPSIS(基于CRITIC权重的优劣解距离法) 三种方法结合使用多指标综合评价

1. PCA(无监督模式识别) 目的:初步探索样本间的整体化学差异与分布趋势。 应用步骤: 将银柴胡样本的化学数据(如色谱峰面积、成分含量等)构建数据矩阵。进行数据标准化(如UV scaling或Pareto sc…

金山办公获评最佳AI协同办公软件提供商,成唯一入选的国产厂商

近日,由政企市场专业门户企业网D1net、信众智与中国企业数字化联盟联合主办的2025 CEIA中国企业IT大奖揭晓。金山办公凭借WPS 365在AI协同办公领域的技术创新与实践成果,荣膺“最佳AI协同办公软件提供商”奖项,成为唯一入选该领域的国内协同办…

【Hadoop】HDFS Router-based Federation:解决 NameNode 扩展性问题的联邦方案

文章目录一、核心架构:Router State Store 的联邦层架构组件工作流程二、Router:联邦接口和状态监控联邦接口(Federated Interface)NameNode 心跳(NameNode Heartbeat)Router 心跳三、高可用和容错&#x…

救命神器10个AI论文工具,MBA毕业论文轻松搞定!

救命神器10个AI论文工具,MBA毕业论文轻松搞定! AI 工具,让论文写作不再“难” 在当前的学术环境中,MBA 学生面临着越来越高的论文写作要求。无论是选题、大纲搭建,还是内容撰写与降重,每一个环节都可能成为…

一篇文章带你轻松掌握ARP欺骗的原理以及运用

ARP欺骗原理以及实现 什么是ARP协议? 简单来说就是在通信协议中,数据的从一台设备向另一台设备转发时需要知道目标机的明确地址(就好比买的快递需要写家里的地址一样),在网络设备中除了通过网络层的IP协议去获得IP地…

百年匠心,科技赋能:神象人参粉——滋补养生的品质之选 - 行业调研院

在快节奏的现代生活中,我们常常面临体质虚弱、精力透支、免疫力下降的困扰。无论是长期伏案的脑力劳动者,还是术后恢复期的人群,都渴望找到一款安全、高效、便捷的滋补品。而上海上药神象健康药业有限公司旗下的神象…

第一次渗透

第一次接触渗透感觉十分的不熟悉,我对前面的课程有很多都没有学到位,很多都听不懂,最初几节课的环境搭建感觉听的云里雾里的。之前授课老师和这门课的老师讲课方式不一样,所以还没有适应。我不知道环境搭建需要那些东西&#xff0…

Vue3 响应式系统——computed 和 watch

学过上一节 ref、reactive、effect 后,接下来我们探究响应式变量的使用——computed 和 watch 。一、computed 和 watch 概述 所有响应式逻辑都会依赖 effect 执行,computed / watch / render 本质都是 effect。effe…

CC++核心介绍

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