当前位置: 首页 > news >正文

K8s学习笔记(八) K8s资源对象 - 教程

在 Kubernetes(K8s)中,资源对象(Resource Object)是集群的核心抽象,用于定义和描述集群的期望状态(Desired State),例如 “运行哪些应用”“应用需要多少资源”“如何访问应用” 等。K8s 的控制平面(如 kube-controller-manager、kube-scheduler)会持续监控这些资源对象,将集群的实际状态(Actual State)调整为期望状态,这一过程称为 “调和(Reconciliation)”。

1 资源对象的核心属性

所有 K8s 资源对象都通过 YAML 或 JSON 格式定义,且包含以下 5 个核心字段(缺一不可),其余字段为各资源的特有配置:

字段名作用说明示例值
apiVersion资源所属的 API 版本(不同资源有不同版本,如v1apps/v1apps/v1(Deployment 所属版本)
kind资源的类型(如 Pod、Deployment、Service)Deployment
metadata资源的元素材(唯一标识、标签、注释等)name: nginx-deploy``labels: app: nginx
spec资源的期望状态(核心配置,如 Pod 的容器镜像、资源限制、副本数等)replicas: 3(期望 3 个副本)
status资源的实际状态(由 K8s 自动维护,用户不可手动修改,如当前副本数、运行状态)readyReplicas: 3(实际 3 个就绪副本)

2 资源对象的分类(按功能)

K8s 资源对象数量众多,按核心能力可分为 6 大类,以下是每类中最常用、最核心的资源:

2.1 工作负载资源(Workload Resources)

用于定义应用的运行方式(副本数、生命周期、更新策略等),是部署应用的核心载体。

资源名称API 版本作用范围核心作用关键特性
Podv1命名空间级最小部署单元,包含 1 个或多个共享网络 / 存储的容器生命周期短暂(重启 IP 变化);容器共享localhost网络;需通过控制器管理
ReplicationController(RC)v1命名空间级早期副本控制器,确保指定数量的 Pod 运行(已被 ReplicaSet 替代)仅支持等值标签选择器;无回滚能力;逐步被淘汰
ReplicaSet(RS)apps/v1命名空间级RC 的升级版,支持集合标签选择器,管理 Pod 副本标签选择器更灵活(如app in (nginx, apache));通常被 Deployment 间接管理
Deploymentapps/v1命名空间级无状态应用控制器,基于 RS 实现,拥护滚动更新、回滚、扩缩容自动维护 RS 和 Pod;支持更新策略(maxSurge/maxUnavailable);生产首选
StatefulSetapps/v1命名空间级有状态应用控制器,为 Pod 提供固定标识(名称、网络、存储)Pod 名称固定(如web-0);存储与 Pod 绑定;支持有序启停 / 更新;适合数据库集群
DaemonSetapps/v1命名空间级确保所有(或指定)Node 运行 1 个 Pod 副本新 Node 加入时自动部署;适合节点级服务(日志收集、监控代理)
Jobbatch/v1命名空间级一次性任务控制器,确保 Pod 成功完成(退出码 0)后终止支持重试失败 Pod;可设置并行数(parallelism)和完成数(completions
CronJobbatch/v1命名空间级定时任务控制器,基于 Cron 表达式周期性触发 Job支持时区设置;历史任务保留策略;可暂停任务(suspend: true
HorizontalPodAutoscaler(HPA)autoscaling/v2命名空间级基于指标自动扩缩容 Pod 副本数(关联 Deployment/StatefulSet/RS)支持 CPU / 内存、自定义指标(如 QPS);可设置最小 / 最大副本数

2.2 服务发现与网络资源(Service Discovery & Networking)

用于暴露应用访问入口、管理网络规则,解决 Pod 动态 IP 的访问问题。

资源名称API 版本作用范围核心作用关键特性
Service(SVC)v1命名空间级为一组 Pod 提供固定访问 IP 和端口,实现内部负载均衡类型:ClusterIP(集群内)、NodePort(节点端口)、LoadBalancer(云负载均衡);通过标签选择器关联 Pod
EndpointSlicediscovery.k8s.io/v1命名空间级存储 Service 关联的 Pod 网络端点(IP + 端口),替代传统 Endpoint支持 IPv4/IPv6 双栈;自动分片,提升大规模集群性能;Service 默认依赖此资源
Endpointv1命名空间级早期存储 Service 端点的资源(被 EndpointSlice 替代,仅兼容旧版本)直接存储 Pod 的 IP 和端口;无分片机制,大规模集群性能差
Ingressnetworking.k8s.io/v1命名空间级管理外部 HTTP/HTTPS 流量入口,通过域名 / 路径转发到 Service需 Ingress Controller(如 Nginx)生效;承受 SSL 证书、路径重写、限流
IngressClassnetworking.k8s.io/v1集群级定义 Ingress 运用的控制器类型(如区分不同 Nginx 实例)每个 Ingress 需关联一个 IngressClass;避免不同控制器冲突
NetworkPolicynetworking.k8s.io/v1命名空间级定义 Pod 间的网络访问规则(允许 / 拒绝通信)需网络插件支持(如 Calico);控制入站(ingress)和出站(egress)流量
Gatewaygateway.networking.k8s.io/v1命名空间级 / 集群级定义网络网关(如负载均衡器、API 网关),作为流量入口的抽象标准化网关设置;承受 TCP/UDP/HTTP;与 Ingress 互补,更灵活
ServiceExportmulticluster.x-k8s.io/v1alpha1命名空间级跨集群服务导出(多集群场景)将本地 Service 暴露到其他集群;需配合 ServiceImport 使用
ServiceImportmulticluster.x-k8s.io/v1alpha1命名空间级跨集群服务导入(多集群场景)引用其他集群导出的 Service;搭建跨集群服务发现

2.3 配置与存储资源(Configuration & Storage)

用于管理应用配置、敏感信息和数据持久化,实现安装与代码分离。

资源名称API 版本作用范围核心作用关键特性
ConfigMap(CM)v1命名空间级存储非敏感配置数据(环境变量、配置文件)键值对存储;可通过环境变量或资料挂载到 Pod;修改后需重启 Pod 生效(除非热加载)
Secretv1命名空间级存储敏感数据(密码、证书),数据经 Base64 编码(非加密)类型:Opaque(通用)、docker-registry(镜像仓库凭证)、tls(证书);需配合外部工具(如 Vault)加密
PersistentVolume(PV)v1集群级集群级持久化存储资源,抽象底层存储(云盘、NFS 等)生命周期独立于 Pod;支持访问模式(ReadWriteOnce/ReadOnlyMany等);容量固定
PersistentVolumeClaim(PVC)v1命名空间级Pod 对存储的请求声明,向 PV 申请存储与 PV 通过 StorageClass 或属性匹配;Pod 通过 PVC 挂载存储,无需关心底层细节
StorageClass(SC)storage.k8s.io/v1集群级动态创建 PV 的模板,避免手动创建 PV关联存储插件(provisioner);支持设置存储性能(如 SSD);可定义回收策略
VolumeSnapshotsnapshot.storage.k8s.io/v1命名空间级存储卷快照(基于 PVC 创建)需存储插件帮助;用于数据备份 / 恢复;可基于快照创建新 PVC
VolumeSnapshotClasssnapshot.storage.k8s.io/v1集群级定义 VolumeSnapshot 的创建规则(如快照保留策略)关联快照插件(snapshotter);类似 StorageClass 的快照版本
CSI Driverstorage.k8s.io/v1集群级注册容器存储接口(CSI)驱动,扩展 K8s 存储能力允许第三方存储集成(如 Ceph、GlusterFS);替代传统 in-tree 存储插件

2.4 集群管理资源(Cluster Management)

用于管理集群节点、命名空间、资源配额等集群级配置。

资源名称API 版本作用范围核心作用关键特性
Nodev1集群级描述集群中的工作节点(物理机 / 虚拟机),记录资源和状态状态:Ready/NotReady;可标记污点(taints)和容忍(tolerations);支持标签分组
Namespace(NS)v1集群级实现资源隔离(如研发 / 测试 / 生产环境)默认 NS:defaultkube-systemkube-public;NS 内资源名称唯一
ResourceQuota(RQ)v1命名空间级限制命名空间内的资源使用总量(如 CPU、内存、Pod 数量)防止单个 NS 过度占用资源;支持硬限制(hard)和范围限制
LimitRange(LR)v1命名空间级为命名空间内的 Pod / 容器设置默认资源限制(CPU / 内存)和请求(requests)避免 Pod 无限制利用资源;可设置最小 / 最大资源值、默认请求 / 限制
PodDisruptionBudget(PDB)policy/v1命名空间级确保 Pod 在自愿中断(如节点升级)时的最小可用副本数避免因维护操作导致服务不可用;支持minAvailable(最小可用)或maxUnavailable(最大不可用)
RuntimeClassnode.k8s.io/v1集群级定义容器运行时(如 containerd、CRI-O)的部署,为 Pod 指定运行时支持不同 Pod 使用不同运行时;可配置隔离级别(如虚拟机级隔离)
Leasecoordination.k8s.io/v1命名空间级用于领导者选举(如控制器选举主节点)和心跳检测轻量级资源;依据 TTL 机制自动过期;kubelet 与 apiserver 的心跳依赖此资源

2.5 安全资源(Security)

用于控制访问权限、证书管理、安全上下文等,保障集群安全。

资源名称API 版本作用范围核心作用关键特性
ServiceAccount(SA)v1命名空间级为 Pod 提供访问 K8s API 的身份凭证(替代用户账户)默认 Pod 使用default SA;通过 RoleBinding 授权;自动挂载token到 Pod
Rolerbac.authorization.k8s.io/v1命名空间级定义命名空间内的权限(如允许查看 Pod、创建 Deployment)权限基于 API 资源(如podsdeployments)和操作(getcreate
ClusterRolerbac.authorization.k8s.io/v1集群级定义集群级权限(如查看 Node、管理 Namespace)作用于整个集群;可被 RoleBinding 引用到特定 NS
RoleBindingrbac.authorization.k8s.io/v1命名空间级将 Role/ClusterRole 绑定到主体(用户、SA、组)仅在当前 NS 内生效;绑定 ClusterRole 时,权限范围限定在 NS 内
ClusterRoleBindingrbac.authorization.k8s.io/v1集群级将 ClusterRole 绑定到主体,授予集群级权限作用于整个集群;适合管理员权限设置
SecretProviderClasssecrets-store.csi.x-k8s.io/v1集群级从外部密钥管理系统(如 Vault、AWS Secrets Manager)挂载密钥到 Pod需 CSI 驱动支持;自动同步外部密钥更新
CertificateSigningRequest(CSR)certificates.k8s.io/v1集群级申请 K8s 集群签名的证书(如节点证书、SA 证书)需管理员审批(approve);用于加密通信(如 etcd TLS、API Server 证书)
PodSecurityContext嵌入 Pod.spec 中命名空间级定义 Pod 的安全上下文(如运行用户、SELinux 标签、特权模式)控制容器权限;可限制root用户运行;设置readOnlyRootFilesystem增强安全
PodSecurityPolicy(PSP)已废弃(被 PodSecurityContext 替代)-早期控制 Pod 安全的资源,已在 v1.25 移除,功能合并到 SecurityContext不再推荐使用,改用 Namespace 的 PodSecurity 标准

2.6 元信息与扩展资源(Metadata & Extensions)

用于资源标记、自定义资源扩展、事件记录等辅助特性。

资源名称API 版本作用范围核心作用关键特性
Label嵌入 metadata 中所有资源键值对标签,用于资源筛选和关联(如 Service 利用 Label 选择 Pod)可动态修改;支持多标签组合筛选(app=nginx,env=prod
Annotation嵌入 metadata 中所有资源键值对注释,存储非筛选用的附加信息(如构建时间、作者)不用于资源选择;内容可包含 JSON 等复杂结构;无大小限制(建议精简)
Eventv1命名空间级记录集群事件(如 Pod 创建、节点故障),用于排障由组件自动生成;包含类型(Normal/Warning)、原因、涉及资源
CustomResourceDefinition(CRD)apiextensions.k8s.io/v1集群级扩展 K8s API,定义自定义资源(如MyAppDatabase允许用户创建自定义资源类型;配合 Operator 实现复杂应用管理
CustomResource(CR)基于 CRD 定义命名空间级 / 集群级CRD 实例,即用户创建的自定义资源对象结构由 CRD 定义;可通过 kubectl 操作,与内置资源类似
PriorityClassscheduling.k8s.io/v1集群级定义 Pod 的优先级,影响调度和驱逐顺序优先级高的 Pod 优先调度;资源不足时,低优先级 Pod 先被驱逐
PodTemplatev1命名空间级Pod 模板,被 Deployment、StatefulSet 等控制器引用,避免重复配置控制器依据模板创建 Pod;修改模板会触发控制器更新 Pod

3 资源对象的核心设计理念

  1. 声明式 API:所有资源通过 YAML/JSON 定义 “期望状态”,K8s 控制平面自动调和实际状态与期望状态(无需手动编写操作步骤)。
  2. 标签与选择器:通过Labelselector实现资源关联(如 Service 关联 Pod、Deployment 管理 RS),是 K8s 灵活调度和管理的核心。
  3. 命名空间隔离:大部分资源属于命名空间级,通过 Namespace 实现多环境 / 多团队的资源隔离;集群级资源(如 Node、CRD)作用于整个集群。
  4. 扩展能力:通过 CRD 允许用户自定义资源,结合 Operator 模式可将复杂应用(如数据库集群)封装为 K8s 原生资源管理。
http://www.hskmm.com/?act=detail&tid=29281

相关文章:

  • 小分子抗体药物:突破传统抗体瓶颈,在精准治疗中开辟新赛道
  • python nms
  • 2025年PE涂布机定做厂家权威推荐榜:技术实力与定制服务深
  • OI 笑传 #18
  • 2025加药装置厂家权威推荐榜:精准计量与稳定运行优选指南
  • Linux文本搜索工具grep命令使用
  • 一款基于 .NET 开源免费、高效且用户友好文件搜索工具!
  • 2025上海保洁公司最新权威推荐榜:专业服务与用户口碑深度解
  • DedeCMS命令执行复现研究 | CVE-2025-6335 - 指南
  • 算法训练.16 - 实践
  • __pycache__是什么
  • 心得体会
  • 2025视频拍摄厂家最新权威推荐榜:专业设备与创意方案首选
  • Java连接MySQL数据库
  • Redis基础命令与数据结构概览
  • 2025年媒体投放机构权威推荐榜:精准策略与创新执行优选厂家
  • PHP计算过去一定时间段内日期范围函数
  • Git版本控制工具合并分支merge命令操作流程
  • 第七章 手写数字识别(终)
  • 2025南通摄影公司最新权威推荐榜:专业团队与创意服务口碑之
  • 在Kubernetes环境中引用变量的方法
  • 2025恒温恒湿车间厂家权威推荐:精密环境控制解决方案TOP
  • 2025预应力千斤顶厂家权威推荐榜:定制技术与耐用品质深度解
  • 实用指南:用Spark+Django打造食物营养数据可视化分析系统
  • 2025液压阀块厂家权威推荐榜:精密加工与直销优势深度解析
  • NOI/1.7编程基础之字符串/18:验证子串
  • 深入解析:【Linux网络】Socket编程:UDP网络编程实现DictServer
  • 2025焊接变位机厂家权威推荐榜:高效稳定与精准操控口碑之选
  • 20232404zxy 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 2025年10月铝塑板厂家最新推荐排行榜,吉祥铝塑板,门头铝塑板,墙面铝塑板,干挂铝塑板,外墙铝塑板公司推荐