2.k8s基本概念

本文介绍了Kubernetes 1.25的重要变化,包括镜像仓库的迁移和CRI不再支持docker。深入讲解了K8S的基本概念,如RC(ReplicationController)升级为RS(ReplicaSet),Deployment的使用场景,以及Job在批处理任务中的角色。同时,讨论了资源限制和对象分类,并概述了K8S中资源管理和自动伸缩的概念。

一、Kubernetes 概述

定义:Kubernetes(K8s)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展与管理。

核心机制

  • 最小调度单元:Pod
  • 声明式API:用户定义期望状态,系统自动驱动至该状态
  • 事实标准:起源于Google Borg,由CNCF维护,云原生时代的“分布式操作系统”

核心能力

  • 自动部署与回滚
  • 服务发现与负载均衡
  • 自我修复(重启/替换故障容器)
  • 水平扩缩容(HPA)
  • 配置与密钥管理

版本变更(1.25)

  • 镜像仓库:k8s.gcr.ioregistry.k8s.io
  • CRI:不再支持Docker,需使用兼容CRI的运行时(containerd等)

二、基础接口定义

缩写全称作用说明
CNIContainer Network Interface容器网络接口
CRIContainer Runtime Interface容器运行时接口(1.25后弃Docker)
CSIContainer Storage Interface容器存储接口

三、控制平面组件(Master)

组件核心职责
API Server集群唯一入口,处理所有REST请求(kubectl及其他组件均通过其通信)
Controller Manager运行各类控制器,确保实际状态与期望状态一致
Scheduler将新Pod调度至合适节点(依据资源、亲和性、污点等策略)
etcd分布式键值存储,集群唯一真相源,存储所有配置与状态数据

四、工作节点组件(Node)

组件核心职责
Kubelet节点代理,与Master通信,管理Pod及容器的完整生命周期
Container Runtime底层容器运行引擎(containerd等),拉取镜像、创建容器、资源隔离
Kube-Proxy网络代理与负载均衡,维护iptables/IPVS规则,实现Service流量转发

五、工作负载对象

1. Pod

定义:Kubernetes中最小可调度与部署单元,代表一个逻辑主机,封装一个或多个紧密协作的容器。

核心特点

  • 共享网络命名空间:容器间通过localhost通信
  • 共享存储卷:支持容器间数据交换
  • 统一生命周期:Pod启停,内部容器同步

常见模式

  • 单容器Pod(标准)
  • 多容器Pod(主容器+Sidecar)
  • 无状态Pod(依赖外部存储)
  • 有状态Pod(需持久化数据)

2. ReplicationController(RC,已废弃)

定义:早期副本控制器,确保指定数量Pod持续运行。

局限:仅支持等式匹配选择器,K8s v1.2起被ReplicaSet取代。


3. ReplicaSet(RS)

定义:RC的增强版本,Pod副本管理的标准控制器。

核心特性

  • 副本数控制:自动维持指定Pod数量
  • 高级选择器:支持基于集合的匹配(In、NotIn、Exists)
  • 自愈与扩缩容:Pod故障重建,修改replicas即可伸缩

生产实践:RS通常由Deployment自动管理,不直接操作


4. Deployment

定义:管理无状态应用的核心控制器,通过声明式配置维持期望状态。

工作原理:通过控制ReplicaSet实现应用生命周期管理。

核心能力

  • 滚动更新:零停机升级
  • 自动修复:故障Pod自动重建
  • 弹性伸缩:手动改副本数或配合HPA自动伸缩
  • 版本回滚:一键回退至历史版本
  • 声明式配置:统一管理镜像、资源、探针等

最佳实践:所有长期运行的无状态服务必须使用Deployment


5. DaemonSet

定义:确保每个节点(或指定节点)运行且仅运行一个Pod副本的控制器。

适用场景:节点级系统守护进程(日志采集、监控代理、网络插件、存储客户端)。

核心特性

  • 节点全覆盖:新节点加入自动创建Pod,节点移除自动清理
  • 调度控制:支持nodeSelector、亲和性、污点容忍
  • 滚动更新:支持平滑升级守护进程

最佳实践:所有需每节点运行的系统服务优先使用DaemonSet


6. StatefulSet

定义:管理有状态应用的控制器,强调Pod身份稳定性状态持久性

适用场景:数据库(MySQL、MongoDB)、分布式协调(ZooKeeper、etcd)、消息队列(Kafka)。

核心特性

  • 有序部署/扩缩容:按序号顺序创建,逆序终止
  • 稳定网络标识:Pod名固定,通过Headless Service提供可解析DNS域名
  • 持久化存储volumeClaimTemplates为每个Pod自动创建独立PVC,重建后仍挂载原卷
  • 服务发现:配合Headless Service实现Pod级精确访问

最佳实践:所有需保留身份、存储或启动顺序的应用必须使用StatefulSet


7. Job

定义:管理批处理型任务的控制器,适用于有明确结束的一次性任务。

完成模式

模式completionsparallelism说明
单次完成(默认)111个Pod成功即完成
固定次数完成N≥1N个Pod均成功才算完成
工作队列模式1N任一Pod成功即完成(需应用自协调)

注意:Pod成功退出后不再重启,restartPolicy必须为OnFailureNever


六、服务发现与配置对象

1. Service

定义:为一组Pod提供稳定网络访问入口的抽象,实现服务发现与四层负载均衡。

核心特性

  • 稳定访问地址:分配ClusterIP(虚拟IP),生命周期独立于Pod
  • 自动负载均衡:请求均匀分发至就绪Pod
  • 动态服务发现:通过Label Selector自动关联Pod,实时更新Endpoints
  • 多访问类型
    • ClusterIP:集群内访问(默认)
    • NodePort:节点IP+端口暴露
    • LoadBalancer:云厂商LB
    • ExternalName:DNS CNAME映射

最佳实践:所有需被访问的Pod必须通过Service暴露


2. Ingress

定义:将外部HTTP/HTTPS流量路由至集群内部服务的API对象,提供七层流量入口。

注意:Ingress本身不处理流量,需配合Ingress Controller(Nginx、Traefik等)生效。

核心特性

  • 基于规则的路由:按主机名、路径转发至不同Service
  • SSL/TLS终止:Ingress层解密HTTPS,后端使用HTTP
  • 负载均衡:外部请求分发至后端多Pod
  • 路径重写:转发前修改请求路径

工作流程
用户创建Ingress → Ingress Controller监听变化并生成反向代理配置 → 外部请求经Controller转发至对应Service → Pod

最佳实践:生产环境用Ingress+Controller替代多个LoadBalancer Service,统一入口管理。


3. ConfigMap

定义:将非敏感配置数据与容器镜像解耦的资源对象,以键值对形式存储配置。

核心特性

  • 注入方式
    • 环境变量(不支持热更新
    • 卷挂载为文件(支持热更新,数秒内同步)
  • 与镜像解耦:配置变更无需重建镜像
  • 限制:仅限非敏感数据;单个大小≤1MiB

最佳实践:配置文件优先以卷挂载方式注入,便于管理与更新。


4. Secret

定义安全存储与管理敏感信息的资源对象(密码、密钥、证书、镜像仓库凭据等)。

核心特性

  • 支持类型
    • Opaque:通用键值对
    • kubernetes.io/dockerconfigjson:私有镜像仓库认证(最常用场景
    • kubernetes.io/tls:TLS证书与私钥
  • 注入方式
    • 卷挂载(推荐):文件形式,权限可控
    • 环境变量(慎用):易意外泄露
  • 动态更新:挂载为文件时支持热同步

安全警示:Secret默认Base64编码(非加密)存储etcd,生产环境必须启用静态加密与RBAC访问控制


七、存储对象

1. PersistentVolume(PV)

定义集群级别的存储资源抽象,独立于Pod生命周期,提供持久化存储。

核心特性

  • 生命周期独立:Pod删除,PV及数据保留
  • 多种后端:本地磁盘、NFS、Ceph、云存储(AWS EBS、Azure Disk等)
  • 分配方式
    • 静态供给:管理员预创建PV,用户PVC绑定
    • 动态供给:通过StorageClass自动按需创建(生产推荐
  • 访问模式
    • ReadWriteOnce(RWO):单节点读写
    • ReadOnlyMany(ROX):多节点只读
    • ReadWriteMany(RWX):多节点读写(需存储后端支持)

2. PersistentVolumeClaim(PVC)

定义用户对持久化存储的请求,声明所需容量、访问模式及存储类型。

核心特性

  • 声明式存储请求:K8s自动匹配或动态创建PV
  • 支持StorageClass:指定存储类型(SSD、HDD等)
  • 访问模式声明:需与PV兼容
  • 动态供给:PVC创建可触发PV自动创建与绑定

工作流程
用户创建PVC → K8s匹配/创建PV → PVC与PV绑定 → Pod挂载PVC使用存储

最佳实践:应用始终通过PVC申请存储,生产环境优先使用动态供给+StorageClass


八、组织与策略对象

1. Namespace

定义:对集群资源进行逻辑隔离与组织的机制,将物理集群划分为多个虚拟集群。

注意:仅提供逻辑隔离,网络隔离需配合NetworkPolicy

核心用途

  • 资源隔离:同名资源可在不同Namespace共存
  • 权限控制:RBAC细粒度授权
  • 资源配额ResourceQuota限制总资源用量;LimitRange设置容器默认资源请求/限制

系统默认Namespace

  • default:未指定时的默认空间
  • kube-system:系统组件空间
  • kube-public:公共资源(所有用户可读)
  • kube-node-lease:节点心跳租约

最佳实践:生产环境按团队、环境、项目划分Namespace


2. 资源限制

机制:基于Linux cgroups,对容器CPU和内存进行限制。

单位

  • CPU:毫核(m),1000m=1核
  • 内存Mi(MiB)、Gi(GiB)

命令示例

# 限制Deployment中的nginx容器最多只用50%的CPU和128MB的内存
kubectl set resources deployment nginx-app -c=nginx \
  --limits=cpu=500m,memory=128Mi


九、Kubernetes 资源对象分类

1. 工作负载(Workload)

  • Pod
  • ReplicaSet / ReplicationController(RC已废弃)
  • Deployment
  • StatefulSet
  • DaemonSet
  • Job / CronJob
  • HorizontalPodAutoscaler(HPA)

2. 配置与发现

  • Service
  • Ingress
  • ConfigMap
  • Secret
  • Namespace
  • Node
  • ServiceAccount
  • Label(逻辑标识)
  • CustomResourceDefinition(CRD)

3. 存储

  • Volume(临时卷)
  • PersistentVolume(PV)
  • PersistentVolumeClaim(PVC)

4. 策略与安全

  • ResourceQuota(命名空间资源总量限制)
  • LimitRange(容器资源默认/边界限制)
  • SecurityContext(Pod/容器安全上下文)

说明:实际应用中常组合多种对象(如Deployment+Service+ConfigMap)构建完整应用系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

您的赞赏,是我深夜码字时最亮的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值