K8S关键业务概念
目录
1. Pod
- 最小调度单元:一个或多个容器(Container)的逻辑组合,共享网络和存储。
- 生命周期短暂:Pod 可能因节点故障或调度策略被销毁重建。
2. Deployment
在 Kubernetes(K8S)中,Deployment 是用于管理 Pod 和 ReplicaSet 的核心抽象,旨在简化应用的部署、更新、扩缩容和回滚操作。以下是其核心概念、功能及使用场景的详细解析:
一、Deployment 的核心作用
1. 声明式管理 Pod 副本
- 功能:定义应用的期望状态(如运行多少个副本、使用哪个镜像版本),由 Deployment 控制器确保实际状态与期望一致。
- 场景:
当 Pod 因节点故障、手动删除或更新失败时,Deployment 会自动创建新 Pod 以维持副本数。
2. 滚动更新(Rolling Update)
- 功能:逐步替换旧版本 Pod 为新版本,确保服务不中断。
- 优势:
- 分批更新:每次只更新部分 Pod,剩余旧 Pod 继续处理请求。
- 自动回退:若更新后健康检查失败,自动回滚到上一个稳定版本。
3. 版本回滚(Rollback)
- 功能:快速回退到历史版本(通过
kubectl rollout undo命令)。 - 原理:Deployment 会记录每次更新的历史版本(ReplicaSet),回滚时切换到此版本。
4. 扩缩容(Scaling)
- 功能:手动或自动调整 Pod 副本数量(通过
kubectl scale或 Horizontal Pod Autoscaler)。
二、Deployment 的组成
1. 核心字段解析
在 Deployment 的 YAML 配置中,以下字段是关键:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment # Deployment 名称
spec:
replicas: 3 # 期望的 Pod 副本数
selector:
matchLabels:
app: nginx # 匹配 Pod 的标签
template: # Pod 模板
metadata:
labels:
app: nginx # Pod 标签(必须与 selector 匹配)
spec:
containers:
- name: nginx
image: nginx:1.20 # 容器镜像
ports:
- containerPort: 80
2. 与 ReplicaSet 的关系
- ReplicaSet:Deployment 通过创建 ReplicaSet 间接管理 Pod。
- 每次更新(如镜像版本变更)会生成新的 ReplicaSet。
- 旧 ReplicaSet 会被保留,用于版本回滚。

三、Deployment 的典型使用场景
1. 部署应用
# 创建 Deployment
kubectl apply -f nginx-deployment.yaml
# 查看 Deployment 状态
kubectl get deployments
kubectl get pods -l app=nginx
2. 更新镜像版本
# 滚动更新到新版本(nginx:1.21)
kubectl set image deployment/nginx-deployment nginx=nginx:1.21
# 观察更新过程
kubectl rollout status deployment/nginx-deployment
3. 回滚到旧版本
# 查看历史版本
kubectl rollout history deployment/nginx-deployment
# 回滚到上一个版本
kubectl rollout undo deployment/nginx-deployment
# 回滚到指定版本(通过 --to-revision)
kubectl rollout undo deployment/nginx-deployment --to-revision=2
4. 调整副本数
# 手动扩缩容
kubectl scale deployment nginx-deployment --replicas=5
# 自动扩缩容(需提前安装 HPA)
kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=3 --max=10
5. 蓝绿部署(高级场景)
通过调整 selector 或权重,逐步将流量从旧版本切换到新版本(需配合 Service 或 Ingress)。
四、Deployment 的配置策略
1. 滚动更新策略
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # 允许临时超出副本数的比例(默认25%)
maxUnavailable: 25% # 更新期间允许不可用的副本比例(默认25%)
2. 健康检查
通过 Readiness Probe 和 Liveness Probe 确保更新过程可靠:
containers:
- name: nginx
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
五、Deployment 与 StatefulSet 的区别
| 特性 | Deployment | StatefulSet |
|---|---|---|
| 适用场景 | 无状态应用(如 Web 服务) | 有状态应用(如数据库、分布式存储) |
| 网络标识 | Pod 名称随机(如 nginx-5c689d4d5-abcx) |
Pod 名称固定且有序(如 mysql-0, mysql-1) |
| 存储 | 临时存储或共享存储 | 每个 Pod 有独立的持久化存储 |
| 扩缩容顺序 | 无顺序要求 | 按顺序扩容/缩容(如先启动 mysql-0,再 mysql-1) |
六、总结
- Deployment 是管理无状态应用的核心工具:
通过声明式配置实现 Pod 的部署、滚动更新、扩缩容和回滚。 - 核心价值:
- 稳定性:确保指定数量的 Pod 始终运行。
- 灵活性:支持无缝更新和版本回退。
- 自动化:减少人工干预,提升运维效率。
- 典型应用:
Web 服务、API 后端、微服务组件等无状态场景。
3. Service
- 服务暴露与负载均衡:为一组 Pod 提供稳定的 IP 地址和 DNS 名称。
- 类型:
- ClusterIP:集群内部访问(默认)。
- NodePort:通过节点端口暴露服务。
- LoadBalancer:集成云厂商的负载均衡器(如 AWS ALB)。
4. ConfigMap & Secret
- ConfigMap:存储非敏感配置(如环境变量、配置文件)。
- Secret:存储敏感数据(Base64 编码,非加密),如数据库密码。
5. Volume
- 持久化存储:挂载外部存储到 Pod,支持本地磁盘、云存储(如 AWS EBS)、分布式存储(如 Ceph)。
6. Namespace
- 资源隔离:将集群划分为多个虚拟空间(如
dev、prod),隔离资源、权限和网络策略。
7. StatefulSet
- 有状态应用管理:适用于需要稳定网络标识(如数据库)、持久化存储和有序部署/扩展的场景(如 MySQL、Redis)。
8. DaemonSet
- 节点级守护进程:确保每个节点运行一个 Pod 副本(如日志采集器 Fluentd、监控代理 Prometheus Node Exporter)。
9. Job & CronJob
- Job:运行一次性任务,确保任务完成。
- CronJob:定时执行任务(如每日备份)。
10. Ingress
- 外部流量管理:通过路由规则(如域名、路径)将 HTTP/HTTPS 流量分发到不同服务,通常配合 Ingress Controller(如 Nginx、Traefik)使用。
11. 节点(Node)
在 Kubernetes 中,节点(Node) 是集群中的工作单元,可以是物理机或虚拟机,负责运行容器化应用(Pod)。
阿里云 ECS 是一种弹性计算服务,属于虚拟机,属于 基础设施资源(IaaS)。
每个节点上运行着kubelet、容器运行时等组件。然后,需要解释节点在调度中的作用,即调度器选择节点来运行Pod的过程。接着,用户的问题可能涉及节点资源不足、标签不匹配、污点等原因导致Pod无法分配,我需要详细说明这些因素。用户可能需要了解如何检查节点的状态和配置,比如使用kubectl命令查看节点信息,检查资源使用情况,标签和污点设置。这有助于他们诊断调度问题。还要提到节点状态的条件,如Ready、MemoryPressure等,这些状态会影响调度决策。

浙公网安备 33010602011771号