**Kubernetes四大核心资源详解:Pod / Deployment / Service / Ingress 最全入门与实战解析
彻底搞懂 Kubernetes 资源对象关系!从 Pod 到 Ingress 的完整图解与实战指南**
1. Kubernetes 核心概念(Pod、Deployment、Service、Ingress)
摘要
在学习或使用 Kubernetes 进行容器编排的过程中,很多初学者会被核心概念所困扰:
- 什么是 Pod?
- 一个 Pod 为什么可以包含多个容器?
- Deployment 和 ReplicaSet 有何区别?
- Service 是如何将内部 Pod 暴露给外部访问的?
- Ingress 与 Service 又是什么关系?
这些对象虽有清晰定义,但串联不清、理解割裂,就容易在部署集群或调试服务时“晕头转向”。本篇博客将系统梳理 Kubernetes 的四大核心资源对象,并通过图解与流程梳理,帮助开发者快速理清对象之间的关系与职责边界。
文章目录
1.1 开发环境
| 项目 | 配置 |
|---|---|
| 操作系统 | macOS 14 / Ubuntu 22.04 |
| Kubernetes 版本 | v1.28 |
| 本地集群 | minikube / kind |
| YAML 工具 | kubectl + K9s |
| 容器运行时 | containerd |
| 可视化 | Lens / KubeSphere(可选) |
1.2 什么是 Pod?
Pod 是 Kubernetes 中最小的部署单位,封装了一个或多个容器,通常是共享网络和存储资源的紧密协作单元。
多容器场景
一个 Pod 可以包含多个容器,但它们:
- 共用一个 Network Namespace(
localhost互通) - 可以通过共享 Volume 协作
常见用途:
| 场景 | 容器1 | 容器2 |
|---|---|---|
| 主应用 + 代理 | Web 服务容器 | Nginx 反向代理 |
| 日志收集 | 应用容器 | sidecar 日志采集容器 |
1.3 Deployment 与 ReplicaSet 的关系
Deployment 是一个高层控制器,负责管理 ReplicaSet 的生命周期,而 ReplicaSet 则负责维护 Pod 的副本数。
- 当 Deployment 更新版本时,会创建一个新的 ReplicaSet
- 老的 ReplicaSet 会被缩容或清除
- 这样实现了声明式的滚动更新
1.4 Service:如何暴露 Pod?
Pod 的 IP 是动态变化的,Service 提供了一个稳定的访问入口。
Service 作用:
- 通过 Label Selector 匹配 Pod
- 自动负载均衡多个 Pod
- 提供稳定的
ClusterIP地址
| 类型 | 用途 | 特点 |
|---|---|---|
| ClusterIP | 内部通信 | 默认类型,集群内部可访问 |
| NodePort | 外部访问 | 绑定宿主机端口,便于测试 |
| LoadBalancer | 云环境使用 | 云厂商分配公网IP |
| ExternalName | DNS映射 | 仅做DNS别名,非代理流量 |
1.5 Ingress:HTTP层级的路由管理器
Ingress 是 Kubernetes 的七层(HTTP)代理控制器,通常配合 nginx-ingress、traefik 使用。
为什么不能只用 Service?
Service 只能将流量路由到某个端口,无法处理如下场景:
example.com/api转发到后端Aexample.com/web转发到前端B
Ingress 则支持基于 路径/域名/头信息 的路由。
1.6 资源关系总览图
1.7 YAML 配置片段示例
Deployment 示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.25
Service 示例
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- port: 80
targetPort: 80
type: ClusterIP
1.8 对象对比总结表格
| 对象 | 角色定位 | 是否持久 | 控制粒度 | 作用范围 |
|---|---|---|---|---|
| Pod | 容器运行单元 | 否 | 单个 | 一组容器 |
| Deployment | 版本管理控制器 | 是 | 应用级 | 控制副本和滚动更新 |
| ReplicaSet | 副本维持者 | 是(受Deployment控制) | Pod级 | 确保Pod数量 |
| Service | 服务发现 + 负载均衡 | 是 | 服务级 | 提供访问入口 |
| Ingress | 路由管理器(HTTP) | 是 | 域名+路径级 | 多服务路由 |
1.9 常见误区 & 推荐实践
初学者常将 Deployment、Pod、Service 混为一谈,建议在本地使用
kubectl get all查看资源层级。
✅ 推荐实践:
| 场景 | 做法 |
|---|---|
| 控制副本数 | 使用 Deployment 而非裸 Pod |
| 内部通信 | 使用 ClusterIP Service |
| 本地调试 | NodePort + Ingress 配合 |
| 高可用更新 | 开启 rollingUpdate 策略 |
| 可视化学习 | 安装 Lens 或 K9s |
1.10 总结
Kubernetes 的资源设计非常灵活且模块化,但也正因如此,学习曲线相对陡峭。将核心对象之间的“职责与协作”理解透彻,才能真正上手管理中小规模的容器集群。
Kubernetes的学习路径应遵循从 Pod → Deployment → Service → Ingress 的层层深入,而不是“堆命令上线”。
📚 更多云原生实战与Bug解决方案,请查看 ==> 全栈Bug解决方案专栏

82

被折叠的 条评论
为什么被折叠?



