K8S从入门到实战(2)

2401 字
12 分钟
K8S从入门到实战(2)

存储#

存储分类#

  • 元数据
    • configMap:用于保存配置数据(明文)
    • Secret:用于保存敏感数据(编码)
    • Downward API:容器在运行时从Kubernetes API 服务器获取有关它们自生的信息
  • 真实数据
    • Volume:用于存储临时或者持久性数据
    • PersistentVolume:申请制的持久化存储

configMap#

ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者 JSON 二进制等对象

一次注入后,多次读取不在消耗网络IO

创建#

  • 用文件创建configmap对象

kubectl create configmap game-config —from-file=hongfu.file

  • 直接用key value创建configmap对象, 适合值比较少的创建

kubectl create configmap literal-config —from-literal=name=dave —from-literal==password=pass

热更新#

ConfigMap 热更新,指的是在不重启、不重建 Pod 的前提下,让容器内的应用程序自动感知并加载 ConfigMap 的配置变更,实现配置的「无停机生效」,是生产环境中非常核心的运维能力。有文件链接

  • 以 Volume 卷挂载方式注入 → 支持热更新(集群侧自动同步)

  • 以环境变量方式注入 → 完全不支持热更新

secret#

secrte 对象类型用来保存敏感信息,列如密码,令牌,ssh秘钥等待。更加灵活安全。

  • Kubernetes 通过仅仅将 Secret 分发到需要访问 Secret 的 Pod 所在的机器节点来保障其安全性

  • Secret 只会存储在节点的内存中,永不写入物理存储,这样从节点删除 secret 时就不需要擦除磁盘数据

  • 从 Kubernetes1.7 版本开始,etcd 会以加密形式存储 Secret,一定程度的保证了 Secret 安全性

Downward API - 存在的意义#

Downward API 是Kubernetes 中一个功能,它允许容器运行的时候从Kubernetes API服务器中获取有关它们自生的信息。这些信息可以作为容器的内部环境变量或者文件注入到容器中,以便容器可以获取有关其运行环境的各种信息,如Pod名称、命令空间等待

  • 提供容器元数据
  • 动态配置
  • 与Kubernetes 环境集成

Volume-存在的意义#

容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet会重启它,但是容器中的文件将丢失—容器以干净的状态重新启动。在pod中同时运行多个容器时,这些容器之间需要共享文件。Kubernetes中的Volume抽象就很好解决了这些问题。

PV/PVC#

1.PV(PersistentVolume,持久卷)#

PV 是集群级别的存储资源,由集群管理员预先配置、管理,代表了集群中的一块实际存储(如云盘、NAS、本地磁盘、分布式存储等)。

  • 生命周期:独立于 Pod,是集群的底层存储资源,不会随 Pod 或 PVC 的删除而自动销毁(取决于回收策略)
  • 作用:对底层存储进行抽象,向上提供统一的存储接口,屏蔽不同存储厂商的底层实现差异
  • 归属:集群级别资源,不属于任何 Namespace

2. PVC(PersistentVolumeClaim,持久卷声明)#

PVC 是用户 / 租户级别的存储申请,由应用开发者创建,代表 Pod 对存储资源的需求(比如需要多大空间、什么访问模式)。

  • 生命周期:与 Pod 绑定,属于 Namespace 级别的资源
  • 作用:作为用户对存储的「申请单」,向集群申请符合要求的 PV 资源
  • 归属:Namespace 级别资源,必须和 Pod 在同一个 Namespace

3.PV/PVC - 关联条件#

◆ 容量: PV 的值不小于 PVC 要求,可以大于最好一致

◆ 读写策略:完全匹配

□ 单节点读写 - ReadWriteOnce - RWO

□ 多节点只读 - ReadOnlyMany - ROX

□ 多节点读写 - ReadWriteMany - RWX

◆ 存储类: PV 的类与 PVC 的类必须一致,不存在包容降级关系

PV/PVC - 回收策略#

➢ Retain(保留):手动回收

➢ Recycle(回收):基本擦除(rm -rf /thevolume/*

➢ Delete(删除):关联的存储资产(例如 AWS EBS、GCE PD、Azure Disk 和 OpenStack Cinder 卷)将被删除

当前,只有 NFS 和 HostPath 支持回收策略。AWS EBS、GCE PD、Azure Disk 和 Cinder 卷支持删除策略

专业补充说明

  1. Retain(保留)

    这是默认策略,PVC 删除后 PV 会被保留,数据不会被自动清除,需要管理员手动清理 PV 与底层存储数据,适用于数据敏感、需长期留存的场景。

  2. Recycle(回收)

    会自动清空卷内的所有数据,清空后 PV 重新变为可用状态,可被新的 PVC 绑定,Kubernetes 1.25 版本后已被废弃,推荐改用动态供给实现。

  3. Delete(删除)

    PVC 删除后,PV 与对应的底层存储资产会被同步自动删除,适合云厂商块存储等支持自动销毁的存储类型,需注意数据会被永久删除,不可恢复。

StorageClass#

image-20260521213810450
image-20260521213810450

调度器#

概念#

Scheduler 是 Kubernetes 的调度器,主要任务就是把定义的pod分配到集群的节点上

亲和性#

节点亲和性#

  1. preferredDuringSchedulingIgnoredDuringExecution:软性亲和策略
  • 核心逻辑:优先调度到满足规则的节点,若没有符合条件的节点,Pod 也可以调度到其他节点,不会出现 Pending 无法启动的情况。
  • 适用场景:非强制的资源偏好、业务就近调度、性能优先级匹配等场景,不影响集群整体调度可用性。
  • 权重机制:可通过 weight 字段给不同规则设置优先级,权重越高的规则,调度时优先级越高。
  1. requiredDuringSchedulingIgnoredDuringExecution:硬性亲和策略
  • 核心逻辑强制要求 Pod 必须调度到完全满足规则的节点上,若集群中没有符合条件的节点,Pod 会一直处于 Pending 状态,无法启动。
  • 适用场景:强业务隔离、专属资源绑定、合规要求、硬件专属匹配(如 GPU 节点)等强约束场景。

pod亲和性#

podAffinity(Pod 亲和性)让 Pod和指定的 Pod 部署在同一拓扑域(同一节点 / 同一机房 / 同一可用区)业务强依赖 Pod 就近部署、降低跨节点网络延迟、同业务 Pod 聚合管理

podAntiAffinity(Pod 反亲和性)让 Pod和指定的 Pod 部署在不同拓扑域(不同节点 / 不同机房 / 不同可用区)高可用部署(多副本 Pod 分散到不同节点,避免单节点故障导致服务全挂)、业务实例隔离、避免资源争抢

然后也分软硬

  1. preferredDuringSchedulingIgnoredDuringExecution软性策略
  • 核心逻辑:优先让 Pod 满足规则,若集群中没有符合条件的节点,Pod 依然可以正常调度,不会出现 Pending。
  • 适用场景:非强制的业务就近部署、高可用的弱约束场景,不影响集群整体调度可用性。
  • 支持通过weight字段给规则设置权重,权重越高的规则,调度优先级越高。
  1. requiredDuringSchedulingIgnoredDuringExecution硬性策略
  • 核心逻辑:强制要求Pod 必须满足规则,若集群中没有符合条件的节点,Pod 会一直处于 Pending 状态,无法启动。
  • 适用场景:强高可用约束、合规要求、业务强隔离等必须严格遵守的调度规则。

污点和容忍#

如果pod能够容忍节点的污点,就表示可以有下一步匹配,否则不行

NoSchedule:不让新 Pod 来,已来的不管

PreferNoSchedule:尽量不让新 Pod 来,实在没地方来也能来

NoExecute:不让新 Pod 来,已经来的也得赶走

污点和容忍 好像 防火墙和安全组

固定节点调度#

pod.spec.nodeName 会将 Pod 直接强制调度到指定的 Node 节点上,完全跳过 Kubernetes Scheduler 的所有调度策略,属于强制匹配规则。

k8s集群安全机制#

Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介,也是外部控制的入口。所以 Kubernetes 的安全机制基本就是围绕保护 API Server 来设计的。

  • 认证:你是不是公司的人
  • 鉴权:你有没有这个操作的权限
  • 准入控制:虽然你有这个权限,但是这个操作是否合理

helm#

概念#

Helm 本质就是让 K8s 的应用管理(Deployment,Service 等)可配置,能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml, service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署

Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有两个重要的概念:chartrelease

  • Chart:是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包
  • Release:是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release
  • Helm cli:helm 客户端组件,负责和 kubernetes apiS 通信
  • Repository:用于发布和存储 Chart 的仓库

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
K8S从入门到实战(2)
https://ztl123z.github.io/posts/drafts/k8s从入门到实战2-/
作者
三叶草
发布于
2026-05-19
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
三叶草
Hello, I'm Clover.
公告
欢迎来到三叶草☘️的博客
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
47
分类
14
标签
53
总字数
52,789
运行时长
0
最后活动
0 天前

目录