Kubernetes服务介绍
Kubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。它最初由 Google 开发,并在 2015 年贡献给云原生计算基金会(CNCF)。Kubernetes 可以运行在本地数据中心、公有云、混合云、多云 环境中,为应用提供高可用性、可扩展性和弹性管理能力。
- Kubernetes 的核心功能
✅ 自动化部署与管理
通过 YAML 配置文件 或者 kubectl 命令行工具,快速部署和管理应用。
支持滚动更新,实现 零宕机 部署和回滚。
✅ 弹性伸缩
根据 CPU/内存使用率自动扩展(HPA - Horizontal Pod Autoscaler)。
也支持手动扩容 kubectl scale。
✅ 负载均衡
内置 Service 机制(ClusterIP、NodePort、LoadBalancer)。
可结合 Ingress Controller(如 Nginx、Traefik)进行 HTTP/HTTPS 负载均衡。
✅ 服务发现与通信
Pod 内部通信 通过 ClusterIP 自动发现。
不同服务之间可通过 DNS 解析互访(CoreDNS 负责解析 Service 名称)。
✅ 自愈能力
Pod 失败后自动重启。
节点失效后重新调度 Pod 到其他可用节点。
✅ 存储管理
支持动态存储卷(Persistent Volume, PV)。
支持多种存储后端(NFS、Ceph、GlusterFS、云存储 EBS/GCE PD 等)。
✅ 安全与权限管理
RBAC(基于角色的访问控制),细粒度管理用户权限。
NetworkPolicy 控制 Pod 之间的网络访问规则。
✅ 日志与监控
内置事件机制 可监控 Pod 状态。
结合 Prometheus + Grafana 进行监控与告警。
ELK / Loki 进行日志收集与分析。
Kubernetes 组件
Kubernetes由控制平面(Control Plane) 和工作节点(Worker Node) 组成,应用服务部署在Node节点上,且可以通过配置选择应用部署在某些特定的节点上。
(1) 控制平面(Master 节点)
- kube-apiserver
是整个集群的 API 入口,所有组件(如 kube-scheduler、kube-controller-manager、kubelet)都通过它的REST API 接口与集群交互,处理所有请求 - etcd
作为 Kubernetes 的分布式存储,存储集群所有数据(键值存储数据库),kube-apiserver 负责读取和写入 etcd 数据 - kube-scheduler
监听 etcd,发现新的未调度的 Pod,并根据资源情况将其分配到合适的 Worker 节点。 - kube-controller-manager
负责维持集群状态,例如确保 Deployment 定义的 Pod 数量正确、发现节点故障并触发迁移等。
(2) 工作节点(Worker 节点)
- kubelet
运行在每个 Worker 节点上,定期向 kube-apiserver 汇报状态,并根据调度指令拉取容器镜像、创建 Pod 和管理生命周期。 - Container Runtime
(如 Containerd) 运行容器(Docker/Containerd/CRI-O) - kube-proxy
负责 Worker 节点之间的网络通信,维护 Service 规则,实现负载均衡和网络转发。

整个系统通过 kube-apiserver 连接所有组件,etcd 记录状态,控制平面决定 Pod 运行位置,工作节点执行任务,最终实现 Kubernetes 的高可用、弹性伸缩和自动化管理。
Kubernetes 生态
Kubernetes 拥有丰富的生态系统,支持多种工具和插件:
- 容器运行时(CRI):容器运行时负责拉取、管理和运行容器,Kubernetes 通过 CRI(Container Runtime Interface) 适配不同的容器运行时。
官网说明
Containerd、CRI-O、Docker(需 cri-dockerd 适配)。对比如下
| 运行时 | 维护者 | 特点 | 适用场景 |
|---|---|---|---|
| Containerd | - CNCF / Docker | - 轻量级,K8s 官方推荐,性能稳定 | 生产环境首选 |
| CRI-O | -Kubernetes / Red Hat | -针对 K8s 设计,兼容 OCI 镜像,轻量高效 | OpenShift / 高安全性需求 |
| Docker -(需 cri-dockerd) | Docker | - 传统开发者熟悉,但 Kubernetes 已不再原生支持(1.24版本舍弃) | 作为过渡使用,不推荐长期 |
部署选择:
生产环境 推荐 Containerd(兼容性强,性能稳定)。
安全合规 可选 CRI-O(无额外功能,仅适用于 K8s)。
本地开发 / 过渡 可继续使用 Docker + cri-dockerd。
- 网络插件(CNI):CNI(Container Network Interface)插件用于管理 Pod 之间的网络通信。
Calico、Flannel、Cilium、Weave。插件对比如下:
| CNI 插件 | 维护者 | 特点 | 适用场景 |
|---|---|---|---|
| Calico | Tigera BGP | 路由,支持 NetworkPolicy,性能高 | 大规模集群,企业应用 |
| Flannel | CoreOS / Red Hat | 轻量级,易部署,但不支持 NetworkPolicy | 小规模集群 |
| Cilium | Isovalent | 基于 eBPF,性能高,安全性强,Service Mesh 兼容 | 云原生、高性能 |
| Weave | Weaveworks | 无需外部依赖,支持 NetworkPolicy | 小型私有集群 |
部署选择:
企业生产环境:Calico(成熟稳定,支持 NetworkPolicy)。
云原生高性能:Cilium(eBPF 加速,兼容 Service Mesh)。
小型测试集群:Flannel(简单易用,配置少)。
- 存储插件(CSI):CSI(Container Storage Interface)插件提供持久化存储支持。
Ceph、GlusterFS、Longhorn、Rook。对比如下
| CSI 插件 | 维护者 | 特点 | 适用场景 |
|---|---|---|---|
| Ceph / Rook | Red Hat / CNCF | 分布式存储,支持块、文件、对象存储 | 适合大规模集群 |
| Longhorn | Rancher | 轻量级,易于管理,支持快照和备份 | 小规模集群 |
| OpenEBS | MayaData | 本地存储解决方案,支持多种存储引擎 | DevOps / CI/CD |
| NFS / EFS | 开源 / 云厂商 | 传统共享存储,适用于静态文件存储 | 共享存储需求 |
部署选择:
高可用分布式存储:Ceph / Rook(适合大规模生产环境)。
轻量级存储:Longhorn(适合 Rancher 生态)。
本地开发 / 测试:OpenEBS / NFS(配置简单,适合小规模存储)。
Kubernetes 基本对象
Kubernetes 通过声明式 API 定义和管理资源,核心的基本对象用于描述 计算、存储、网络 等方面的需求。以下是 Kubernetes 主要的基本对象及其作用

计算(计算资源相关)
- Pod:Pod是Kubernetes创建或部署的最小单位。一个Pod封装一个或多个容器(container)、存储资源(volume)、一个独立的网络IP以及管理控制容器运行方式的策略选项
- Node:代表一个 Kubernetes 集群中的物理机或虚拟机
- Deployment:Deployment是对Pod的服务化封装。一个Deployment可以包含一个或多个Pod,每个Pod的角色相同,所以系统会自动为Deployment的多个Pod分发请求。
- ReplicaSet:维持 Pod 副本数量,通常由 Deployment 管理
- DaemonSet:确保每个节点都运行一个 Pod,适用于日志/监控
- StatefulSet:StatefulSet是用来管理有状态应用的对象。和Deployment相同的是,StatefulSet管理了基于相同容器定义的一组Pod。但和Deployment不同的是,StatefulSet为它们的每个Pod维护了一个固定的ID。这些Pod是基于相同的声明来创建的,但是不能相互替换,无论怎么调度,每个Pod都有一个永久不变的ID。
- Job:Job是用来控制批处理型任务的对象。批处理业务与长期伺服业务(Deployment)的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出(Pod自动删除)。
- CronJob:CronJob是基于时间控制的Job,类似于Linux系统的crontab,在指定的时间周期运行指定的任务。
存储(数据持久化相关)
- PersistentVolume(PV):物理存储,提供持久化数据
- PersistentVolumeClaim(PVC):申请存储资源,与 PV 绑定
- StorageClass:定义存储类型(如 SSD、HDD、云存储)
- ConfigMap:存储应用配置信息(非敏感)
- Secret:存储敏感信息(如密码、证书)
网络(通信与负载均衡)
- Service:Service是用来解决Pod访问问题的。Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡
- Ingress:Service是基于四层TCP和UDP协议转发的,Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分。
- NetworkPolicy:控制 Pod 之间的网络访问权限
访问控制(权限与调度)
- Namespace:逻辑隔离 Kubernetes 资源
- ServiceAccount :Pod使用的身份标识,访问 API 资源
- Role / ClusterRole:定义权限(针对单个 Namespace 或整个集群)
- RoleBinding / ClusterRoleBinding:绑定用户或组到 Role / ClusterRole subjects、roleRef
- ResourceQuota:限制 Namespace 资源使用
- LimitRange:限制 Pod/容器的 CPU 和内存
Kubernetes 工作负载类型
Kubernetes 主要有无状态和有状态两类工作负载:
- 无状态工作负载
无状态应用通常不需要存储持久化数据,Pod 可以随时销毁或重建。
| 类型 | 特点 | 适用场景 |
|---|---|---|
| Deployment | 维护多个 Pod 的副本,支持滚动更新、回滚 | Web 应用、API 服务 |
| ReplicaSet | 仅保证 Pod 副本数,通常被 Deployment 管理 | 仅需简单扩缩容的服务 |
| DaemonSet | 确保每个 Node 上都运行一个 Pod | 日志收集、监控、网络代理 |
| Job | 运行一次性任务,完成后退出 | 任务计算、批处理 |
| CronJob | 按计划定期运行 Job | 定时任务(如数据库备份) |
- 有状态工作负载
有状态应用通常需要稳定的网络标识、持久化存储,Pod 顺序启动、重启不会丢失数据。
| 类型 | 特点 | 适用场景 |
|---|---|---|
| StatefulSet | 确保 Pod 名称固定(如 pod-0, pod-1)存储持久化(使用 PVC) 、 按顺序启动和终止 | 数据库(MySQL、PostgreSQL) 、 分布式应用(ZooKeeper、Kafka) |

浙公网安备 33010602011771号