深入掌握k8s核心概念--Pod(二)

详解Pod的配置管理与调度特性等剖析

  • Kubernetes 中 Pod 的配置管理(ConfigMap)、调度策略、回滚与扩缩容详解
    • 一、Pod 配置管理:ConfigMap
      • 创建 ConfigMap 示例
      • 使用 ConfigMap 的 Pod 示例
    • 二、玩转 Pod 调度:Kubernetes 高级调度策略大揭秘(带示例)
    • 三、Pod 回滚
      • 回滚 Deployment 示例
    • 四、Pod 扩缩容
      • 扩容 Pod 示例
      • 缩容 Pod 示例
  • 大总结
    • 一、ConfigMap 概述与创建/使用示例及应用场景
    • 二、Kubernetes 调度策略及示例
    • 三、Pod 回滚
    • 四、Pod 扩缩容

Kubernetes 中 Pod 的配置管理(ConfigMap)、调度策略、回滚与扩缩容详解

一、Pod 配置管理:ConfigMap

ConfigMap 是 Kubernetes 中一种用于存储应用配置数据的资源对象,旨在将应用的配置细节从容器镜像中解耦出来,

以便在不修改镜像的前提下,能够灵活地管理和更新应用配置。

ConfigMap 主要包含两种数据类型:键值对(key-value pairs)和配置文件内容。

具备以下主要特性:

  1. 数据隔离:ConfigMap 将应用配置与镜像分离,使配置更改无需重新构建镜像,提升了灵活性和可维护性。

  2. 类型多样:支持键值对形式的数据存储,也可以存储完整的配置文件内容,满足不同应用场景的需求。

  3. 数据注入:ConfigMap 数据可以通过环境变量、命令行参数或卷挂载等方式注入到 Pod 中,供容器内应用读取。

  4. 更新热加载:当 ConfigMap 更新后,若 Pod 使用了 ConfigMap 卷,Kubernetes 可以触发 Pod 内部的配置自动更新(需应用支持)。

创建 ConfigMap 示例

apiVersion: v1
kind: ConfigMap
metadata:name: example-configmap
data:app.properties: |-key1=value1key2=value2database-config.yaml: |-username: dbuserpassword: dbpassword

上述 YAML 描述了一个名为 example-configmap 的 ConfigMap,其中包含两个配置文件内容:app.propertiesdatabase-config.yaml

使用 ConfigMap 的 Pod 示例

apiVersion: v1
kind: Pod
metadata:name: configmap-pod
spec:containers:- name: app-containerimage: your-app-imagevolumeMounts:- name: config-volumemountPath: /etc/configenvFrom:- configMapRef:name: example-configmapvolumes:- name: config-volumeconfigMap:name: example-configmap

在这个例子中,我们创建了一个 Pod 并挂载了 example-configmap ConfigMap 到容器内的 /etc/config 目录,同时还将 ConfigMap 中的数据注入到容器环境变量,供应用直接读取。

使用ConfigMap的限制条件如下。

◎ ConfigMap必须在Pod之前创建。

◎ ConfigMap受Namespace限制,只有处于相同Namespace中的Pod才可以引用它。

◎ ConfigMap中的配额管理还未能实现。

◎ kubelet只支持可以被API Server管理的Pod使用ConfigMap。kubelet在本Node上通过 --manifest-url或–config自动创建的静态Pod将无法引用ConfigMap。

◎ 在Pod对ConfigMap进行挂载(volumeMount)操作时,在容器内部只能挂载为“目录”,无法挂载为“文件”。在挂载到容器内部后,在目录下将包含ConfigMap定义的每个item,如果在该目录下原来还有其他文件,则容器内的该目录将被挂载的ConfigMap覆盖。如果应用程序需要保留原来的其他文件,则需要进行额外的处理。可以将ConfigMap挂载到容器内部的临时目录,再通过启动脚本将配置文件复制或者链接到(cp或link命令)应用所用的实际配置目录下。

二、玩转 Pod 调度:Kubernetes 高级调度策略大揭秘(带示例)

Kubernetes 调度策略丰富多样,主要特性包括:

  1. 节点亲和性/反亲和性:通过节点标签选择特定节点部署 Pod,或者避免在某些节点上部署,如 nodeAffinity 和 nodeAntiAffinity。

  2. 区域亲和性/反亲和性:根据区域、可用区等高级地理属性控制 Pod 分布,确保应用高可用或资源优化。

  3. 资源约束:根据节点的 CPU、内存、磁盘、GPU 等资源条件进行调度,如 resources.requests 和 resources.limits。

  4. 污点容忍度:允许 Pod 允许或容忍节点上的污点(Taint),实现精细化调度。

  • NodeSelector: 根据节点标签和字段进行选择,将 Pod 限制在具有特定特性的节点上运行。

    示例:假设您有一个 Pod 需要访问专用的 GPU 资源。您可以使用 NodeSelector 将 Pod 调度到具有 gpu=true 标签的节点上。

    apiVersion: v1
    kind: Pod
    metadata:name: gpu-pod
    spec:nodeSelector:gpu: "true"containers:- name: my-appimage: my-app-image# ...其他容器配置
    
  • Pod Affinity & Anti-Affinity: 基于 Pod 的亲和性和反亲和性进行选择,控制 Pod 之间的距离,提升应用程序性能。

    示例:假设您有一个 Web 应用程序和一个数据库 Pod。您可以使用 Pod Affinity 将它们调度到同一节点上,降低网络延迟,提升性能。

    apiVersion: v1
    kind: Pod
    metadata:name: web-pod
    spec:affinity:podAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: Invalues:- webcontainers:- name: my-web-appimage: my-web-app-image# ...其他容器配置
    

    您可以使用 Pod Anti-Affinity 将对资源有竞争的 Pod 隔离在不同的节点上,避免争抢资源导致性能下降。

  • Tolerations & Taints: 利用容忍度和污点机制,控制 Pod 对节点瑕疵的敏感程度,灵活安排 Pod 运行位置。

    示例:假设您有一个节点,其上存在 node.unreachable: NoRouteFound 污点。您可以为 Pod 添加 Tolerations 允许它运行在该节点上。

    apiVersion: v1
    kind: Pod
    metadata:name: my-pod
    spec:tolerations:- key: node.unreachableoperator: Existscontainers:- name: my-appimage: my-app-image# ...其他容器配置
    
  • DaemonSet: 确保每个节点上都运行一个 Pod 副本,常用于部署集群范围的服务。
    在这里插入图片描述

    示例:假设您想在每个节点上部署一个日志收集代理。您可以使用 DaemonSet 来完成。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:name: logging-daemon
    spec:template:metadata:labels:app: loggingspec:containers:- name: fluentdimage: fluentd:latest# ...其他容器配置
    
  • Job: 用于运行一次性批处理作业,例如数据迁移或备份。

    示例:假设您想执行一次性数据迁移任务。您可以使用 Job 来完成。

    apiVersion: batch/v1
    kind: Job
    metadata:name: data-migration
    spec:template:metadata:labels:app: data-migrationspec:containers:- name: data-moverimage: data-mover-image# ...其他容器配置restartPolicy: OnFailure
    
  • Cronjob: 定期运行作业,例如每日报告或每周备份。

    示例:假设您想每天生成一份系统运行状况报告。您可以使用 Cronjob 来完成。

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:name: report-generator
    spec:schedule: "0 0 * * *"  # 每天凌晨执行jobTemplate:spec:template:metadata:labels:app: report-generatorspec:containers:- name: report-generator-containerimage: your-report-generator-image:latest # 使用包含报告生成逻辑的镜像command: ["/bin/sh", "-c"] # 假设容器内使用shell执行脚本args: ["./generate_report.sh"] # 执行生成报告的脚本文件volumeMounts:- name: report-storagemountPath: /var/reports # 将存储卷挂载至容器内的路径,以便持久化保存生成的报告volumes:- name: report-storagepersistentVolumeClaim:claimName: report-pvc # PVC名称,需要提前创建并关联PV用于持久化存储restartPolicy: OnFailure # 如果任务失败,则尝试重启容器

上述 YAML 配置片段展示了一个完整的 CronJob 示例,它将在每天凌晨执行一个名为 report-generator 的任务来生成系统运行状况报告。

其中,spec.jobTemplate.spec.template.spec.containers 包含一个容器的具体配置,包括:

name: 容器的名字,这里填写为 report-generator-container。
image: 指定运行报告生成逻辑的应用镜像及其版本。
command 和 args:指定了容器启动后执行的命令及参数,这里假设运行一个 shell 脚本来生成报告。

volumeMounts:配置了容器内的文件目录挂载,将持久卷 report-storage 挂载到 /var/reports 目录下,便于存储生成的报告。

volumes:定义了使用的持久卷,这里引用了一个名为 report-pvc 的 PersistentVolumeClaim,确保生成的报告数据能够持久化存储。
restartPolicy: 设置当 Job 中的容器遇到故障时的重启策略,此处设置为 OnFailure,即当容器执行失败时,会尝试重新启动容器以生成报告。

要使此 CronJob 正常工作,你需要确保已有一个合适的 Docker 镜像用于报告生成,并且已经创建了相应的 PersistentVolumeClaim(PVC),使其能够绑定到合适的 PersistentVolume(PV)。

三、Pod 回滚

  1. 回滚功能 对于 Deployment 或 StatefulSet 等控制器管理的 Pod,具有以下特性:

  2. 版本历史记录:Kubernetes 会自动保留每次 Deployment 更新的历史记录,用于后续回滚操作。

  3. 无缝切换:回滚操作可以快速将 Pod 滚回到前一个已知的良好版本,无需人工干预,业务连续性得到保障。

  4. 可视化管理:通过 kubectl rollout history 命令查看 Deployment 的滚动更新历史,以便决定回滚到哪个版本。

回滚 Deployment 示例

kubectl rollout undo deployment/my-deployment

这条命令将会把 my-deployment 的当前版本回滚到前一个已知的稳定版本。

四、Pod 扩缩容

扩缩容功能 支持自动或手动调整 Pod 数量,主要特性如下:

  1. 弹性伸缩:根据 CPU 或内存使用率、自定义指标或外部指标自动调整 Pod 副本数,以应对负载变化。

  2. 一键操作:通过 kubectl scale 命令快速调整 Deployment 或 ReplicaSet 控制器管理的 Pod 副本数。

  3. 滚动更新策略:在扩缩容过程中,Kubernetes 采用滚动更新策略,逐步替换旧 Pod,保证服务不间断。

扩容 Pod 示例

kubectl scale deployment/my-deployment --replicas=5

这将把 my-deployment 的副本数调整为 5。

缩容 Pod 示例

kubectl scale deployment/my-deployment --replicas=3

以上命令将减少 my-deployment 的副本数至 3。

ConfigMap 为 Pod 提供了灵活的配置管理,而 Kubernetes 强大的调度策略和伸缩机制,则帮助我们轻松应对复杂的应用部署与运维挑战。

在实际操作中,合理运用这些功能,能够有效提升云原生环境下的应用部署与管理效率。

大总结

一、ConfigMap 概述与创建/使用示例及应用场景

特性描述示例应用场景
数据隔离应用配置与镜像分离,方便独立更新如上所示的 example-configmap 创建与挂载示例配置频繁变动的应用,如数据库连接信息、API 密钥
数据类型支持键值对和完整配置文件内容app.propertiesdatabase-config.yamlSpring Boot 应用的属性文件、数据库连接配置
数据注入通过环境变量、命令行参数、卷挂载注入 PodenvFrom 使用 ConfigMap 注入环境变量无需修改应用代码即可传递配置信息
热加载更新ConfigMap后,符合条件的Pod可自动刷新配置config-volume 卷挂载 ConfigMap实现实时配置更新,比如调整应用阈值

创建 ConfigMap 示例:

apiVersion: v1
kind: ConfigMap
metadata:name: example-configmap
data:app.properties: |-key1=value1key2=value2database-config.yaml: |-username: dbuserpassword: dbpassword

使用 ConfigMap 的 Pod 示例:

apiVersion: v1
kind: Pod
metadata:name: configmap-pod
spec:containers:- name: app-containerimage: your-app-imagevolumeMounts:- name: config-volumemountPath: /etc/configenvFrom:- configMapRef:name: example-configmapvolumes:- name: config-volumeconfigMap:name: example-configmap

应用场景举例:

  • 数据隔离:在一个电商网站中,数据库密码需要定期更换,通过 ConfigMap 存储并更新密码,避免每次修改都需重建应用镜像。
  • 数据类型:Web 服务器配置文件(如 Nginx 的 nginx.conf),可通过 ConfigMap 存储并挂载到容器内,实现配置统一管理与更新。
  • 数据注入:微服务应用中,通过环境变量传递API密钥,保持密钥安全且易于管理。
  • 热加载:在线游戏服务器,根据流量调整限流阈值,更新 ConfigMap 后,游戏服务器能实时感知并应用新配置。

二、Kubernetes 调度策略及示例

调度策略描述示例应用场景
NodeSelector根据节点标签调度 Pod根据 gpu=true 标签调度 Pod 到 GPU 节点GPU 高性能计算任务
Pod Affinity/Anti-Affinity控制 Pod 间的亲和/反亲和关系同一节点部署 Web 与 DB Pod,保证低延迟微服务架构中关联性强的服务部署
资源约束根据节点资源进行调度设置 CPU 请求为 1, 限制为 2保证 Pod 不过度消耗节点资源
Tolerations控制 Pod 对污点节点的容忍度能够容忍 node.kubernetes.io/unreachable 污点的 Pod在问题节点上运行监控诊断工具
DaemonSet确保每个节点运行单个 Pod 实例部署日志收集代理到集群所有节点全局日志收集、监控代理
Job执行一次性任务执行全量数据迁移作业数据库迁移、定期全量备份
CronJob定时执行任务每天凌晨生成系统运行状况报告定期报表生成、清理任务

资源约束示例:

apiVersion: v1
kind: Pod
metadata:name: resource-constraint-pod
spec:containers:- name: my-appimage: my-app-imageresources:requests:cpu: "1"limits:cpu: "2"

DaemonSet 示例:

apiVersion: apps/v1
kind: DaemonSet
metadata:name: log-collector-daemonset
spec:selector:matchLabels:app: log-collectortemplate:metadata:labels:app: log-collectorspec:tolerations:- operator: Existseffect: NoSchedule # 保证 DaemonSet 的 Pod 运行在所有节点上containers:- name: log-agentimage: log-collector-image:v1.0ports:- containerPort: 5000 # 假设这是日志收集端口volumeMounts:- mountPath: /var/logname: host-logsvolumes:- name: host-logshostPath:path: /var/log

上述配置创建了一个名为 log-collector-daemonset 的 DaemonSet,它确保集群中的每个节点都运行一个名为 log-agent 的容器,用于从每个节点上的 /var/log 目录收集日志。由于设置了 tolerations,这些 Pod 将会被调度至所有节点,即使节点上有其他污点(如未调度)。

此外,Kubernetes 还提供了其他高级调度策略,例如:

  • Inter-Pod Affinity and Anti-Affinity:除了 Pod 之间的亲和性和反亲和性之外,还可以定义跨命名空间的 Pod 之间的亲和规则。

  • PriorityClass:通过给 Pod 分配优先级等级来影响其调度决策,高优先级 Pod 更有可能被优先调度。

这些策略灵活组合使用,可以帮助管理员实现更加复杂且精准的资源管理和应用部署方案,以适应各种不同的业务需求。

三、Pod 回滚

特性描述示例应用场景
版本历史记录自动保留更新历史,可用于回滚操作N/A发现新版本存在问题时,迅速恢复到先前正常运行版本
无缝切换快速回滚至前一稳定版本,不影响服务N/A应用出现 bug 或不可预见的问题,需要快速回滚至无问题版本
可视化管理使用 kubectl rollout history 查看并决定回滚版本kubectl rollout history deployment/my-deployment开发、测试环境中对比不同版本表现,或生产环境中排查问题时选择合适的回滚版本
回滚操作示例回滚至上一个修订版kubectl rollout undo deployment/my-deployment生产环境中因新版本发布引发故障,立即回滚至已知良好状态

四、Pod 扩缩容

特性描述示例应用场景
弹性伸缩根据负载自动调整副本数CPU 或内存利用率驱动,由 Horizontal Pod Autoscaler 控制应对流量高峰和低谷,自动增加或减少服务实例,节约资源成本
一键操作快速调整 Pod 数量扩容至5个副本:kubectl scale deployment/my-deployment --replicas=5
缩容至3个副本:kubectl scale deployment/my-deployment --replicas=3
针对突发业务需求,手动快速增加服务容量;非高峰期手动减少副本以节省资源
滚动更新策略保证服务连续性在扩缩容过程中,Kubernetes 逐步替换旧 Pod,维持服务不受中断服务升级、扩缩容时,确保在线用户不受影响,维持 SLA 和用户体验

晚安

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

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

相关文章

1 GBDT:梯度提升决策树

1 前言 前面简单梳理的基本的决策树算法,那么如何更好的使用这个基础算法模型去优化我们的结果是本节要探索的主要内容。 梯度提升决策树(Gradient Boosting Decision Trees)是一种集成学习方法,通常用于解决回归和分类问题。它通…

DC/DC电源模块直流升压变换器电压控制输出5V12V24V转0-50V80V110V150V180V200V250V300V500V800V1000V

特点 效率高达 75%以上1*2英寸标准封装单电压输出可直接焊在PCB 上工作温度: -40℃~75℃阻燃封装,满足UL94-V0 要求温度特性好电压控制输出,输出电压随控制电压线性变化 应用 GRB 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为:4.5~9V、…

【ElasticSearch】安装

1.官网寻找合适版本下载 这里我选择的是8.11.1 2.解压并启动 然后在浏览器输入http://localhost:9200/,判断是否启动成功 如下所示,则表示启动成功 安装过程中遇到过几个bug,记录在这篇文章中 【ElasticSearch】安装(bug篇&am…

六、OpenFeign服务接口调用

一、提问 已经有loadbalancer为什么还要学习OpenFeign? 两个都有道理的话,日常用那个? 二、是什么 OpenFeign是什么 官网翻译 Feign是一个声明性web服务客户端。它使编写web服务客户端变得更容易。使用Feign创建一个接口并对其进行注释。它具有可…

一键生成绘画作品,国内提供的7款AI绘画软件推荐

随着人工智能的迅猛发展,给我们的工作和兴趣带来了极大的便利。尤其是在绘画领域,随着越来越多的AI绘画工具的问世,我们能够以惊人的速度创作出精美的插图和照片。因此,本文将为大家介绍7款备受推崇的AI绘画软件~ 1.爱制作AI 爱制…

连连看游戏页面网站源码,直接使用

可以上传自己喜欢的图片 游戏页面 通关页面 源码免费下载地址抄笔记 (chaobiji.cn)

Java面试题:2024面试全攻略+BTA内部密卷 视频教程+springboot

基础篇 1、 Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) 阿里内部资料 基本类型 大小(字节) 默认值 封装类 6、Java自动装箱与拆箱 装箱就是…

ChatGPT 可以预测未来吗?

推荐 4月13日的一篇有趣的 paper,特来分享。 👉 当前的大型语言模型(LLMs)具有强大的数据合成和推理能力,但它们在直接预测尚未发生事件的准确性上常常受到限制。传统的预测方法依赖于直接询问模型关于未来的问题。 …

算法思想总结:链表

一、链表的常见技巧总结 二、两数相加 . - 力扣(LeetCode) class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {//利用t来存进位信息int t0;ListNode*newheadnew ListNode(0);//创建一个哨兵节点,方便尾插List…

现在新开两融账户融资利率最低可以多少?5%~4.5%

两融是融资和融券的简称,是一种信用交易的方式,可以让投资者在股票市场上放大收益,也放大风险。融资是指投资者向证券公司借入资金,用于买入股票或其他证券,期待价格上涨后卖出,赚取差价,并在约…

记录Python链接mysql数据的增删改查方法

一、添加方法 db pymysql.connect(hostlocalhost,userroot,password123456,dbpython) cursor db.cursor() sql """insert into EMPLOYEEVALUES(3,张,天爱,35,F,8000) """ try:cursor.execute(sql)db.commit() #提交后,数据才会变 …

顺序表(快速上手数据结构)

在介绍ArrayList之前, 我们需要先了解List. List是一个接口,它继承于Collection接口(Collection又继承于最顶层的接口Iterable). 从数据结构的角度来看,List就是一个线性表(Linear List),即n个具有相同类型元素的有限序列, 在该序列上可以执行增删查改等操作. 注意: List是一…

自动化测试之httprunner框架hook函数实操

本篇介绍httprunner中hook函数的使用,以及通过编程能力实现建设自动化测试更全面的场景覆盖 前置: 互联网时代让我们更快的学习到什么是Httprunner 正文: 经过上文了解到这个框架怎么使用之后,我们开始来探讨一下我们为什么要用…

【教程】一个比较良心的C++代码混淆器

这是一个比较良心的C代码混淆器,用于信息竞赛训练和保护代码免受抄袭。本文将介绍这个混淆器的使用方法、混淆效果和已知的一些bug。同时,我们也会给出一些示例来演示混淆器的具体操作。 引言 在信息竞赛训练和实际开发中,保护代码的安全性和…

汇编程序设计

文章目录 第一章8086的存储器组织寻址方式立即数寻址方式寄存器寻址方式存储器寻址方式直接寻址方式寄存器间接寻址寄存器相对寻址方式寄存器基址变址寻址相对基址变址寻址相对方式的补充 数据寻址方式的组合 第一章 8086的存储器组织 存储单元的地址 “段基地址:段…

Adobe AE(After Effects)2021下载地址及安装教程

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件,由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能,可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…

【C语言】每日一题,快速提升(2)!

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 题目:杨氏矩阵 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个…

error: failed to push some refs to ‘https://gitee.com/zhao-zhimin12/gk.git‘

git push origin master发现以下报错: 解决办法: 一、强制推送 git push origin master -f (加上 -f 就是强制) 二、 先拉取最新代码,再推送 1.git pull origin master 2.git push origin master

保护视力,从 CareUEyes 开始 —— 你的电脑护眼小助手

在数字化时代,我们的眼睛比以往任何时候都更频繁地面对屏幕。长时间盯着电脑工作,不仅影响视力,还可能导致眼疲劳和不适。今天,我要向大家推荐一款专为电脑用户设计的护眼软件——CareUEyes。 CareUEyes:你的视力守护者…

Linux系统中LVM与磁盘配额

目录 一、LVM逻辑卷管理 二、LVM的管理命令 物理卷管理 卷组管理 逻辑卷管理 *创建并使用LVM步骤 三、磁盘配额概述 实现磁盘限额的条件 Linux 磁盘限额的特点 四、磁盘配额管理 磁盘限额 一、LVM逻辑卷管理 能够在保持现有数据不变的情况下动态调整磁盘容量&#…