当前位置: 首页 > 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.dtcms.com/a/410409.html

相关文章:

  • 医疗数据集成的挑战,iPaaS 如何保障隐私与安全?
  • 【金仓数据库产品体验官】Windows 安装 KingbaseES V9R1C10 与 Oracle 兼容特性实战
  • 阿里云建站流程集约化网站建设
  • Classic McEliece:后量子密码的“元老”与NIST标准化的启示
  • 【论健康】健康的不可能三角
  • 19C数据库提示ORA-65096: 公用用户名或角色名无效(详细操作版)
  • 软考中级习题与解答——第十三章_数据库分析与设计(2)
  • tomcat升级操作
  • 广州高端品牌网站建设后台管理便捷蜜雪冰城推广软文
  • 基于 SpringBoot+Logicflow 的轻流程任务执行
  • 基础组合计数(三道例题)
  • ShardingSphere 与分库分表:分布式数据库中间件实战指南
  • 《三重AI协作交易系统:从技术债泥潭到毫秒级响应的实战笔记》
  • AI 赋能楼宇自控 DDC 系统:重构智慧建筑的核心引擎
  • 更改wordpress密码上海关键词优化排名哪家好
  • 最好的设计师网站wordpress 实例
  • IDEA 实现SpringBoot热部署(HotSwap和DevTools混用)
  • 《IDEA 2025 长效使用指南:2099 年有效期配置实战之JetBrains全家桶有效》​
  • IntelliJ IDEA / Android Studio 里直接跑 Cursor(不用来回切窗口)
  • HarmonyOS应用前后台状态切换
  • 网站建设app销售好做吗哪里长沙网站开发
  • pdf文件根据页数解析成图片 js vue3
  • Http与WebSocket
  • AI 赋能 EMS 微电网能效管理平台:构建分布式能源的智能调控中枢
  • 内网信息收集与命令详解
  • 电茶炉方案开发,茶炉板MCU控制方案分析
  • React Zustand 学习笔记(对照Vue3)
  • PyTorch实现CIFAR-10图像分类:从数据加载到模型训练全流程
  • 鸿蒙应用内存优化全攻略:从泄漏排查到对象池实战
  • ReactUse 与ahook对比