以下是 Kubernetes 的核心概念详解,涵盖 Pod、Service、Deployment 和 Node,以及它们之间的关系和实际应用场景:
• 最小部署单元:Pod 是 Kubernetes 中可创建和管理的最小计算单元,包含一个或多个共享资源的容器。
• 共享环境:
• 网络:同一 Pod 内的容器共享 IP 地址和端口空间,可通过 localhost
互相通信。
• 存储:Pod 可挂载共享存储卷(Volume),供容器间共享数据。
• 紧密耦合的容器组:例如,主容器 + Sidecar 容器(日志收集、代理)。
• 临时任务:如一次性批处理作业。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx
image: nginx:1.23
ports:
- containerPort: 80
- name: logger
image: busybox
command: ["sh", "-c", "tail -f /dev/null"]
• Pending:创建中(调度或下载镜像)。
• Running:至少一个容器运行中。
• Succeeded/Failed:所有容器退出(成功或失败)。
• Pod 的控制器:用于管理 Pod 副本集(ReplicaSet),确保指定数量的 Pod 始终运行。
• 核心功能:
• 滚动更新(Rolling Update):逐步替换旧 Pod,实现零停机部署。
• 回滚(Rollback):快速恢复到历史版本。
• 扩缩容(Scaling):手动或自动调整 Pod 副本数。
• Deployment 管理 ReplicaSet,ReplicaSet 管理 Pod。
• 每次更新 Deployment 会生成新的 ReplicaSet,旧 ReplicaSet 保留以便回滚。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: nginx
image: nginx:1.23
ports:
- containerPort: 80
kubectl scale deployment my-deployment --replicas=5 # 扩缩容
kubectl rollout status deployment/my-deployment # 查看更新状态
kubectl rollout undo deployment/my-deployment # 回滚
• 访问 Pod 的抽象层:为动态变化的 Pod 提供稳定的访问端点(IP/DNS)。
• 核心功能:
• 负载均衡:将流量分发到多个 Pod。
• 服务发现:通过 DNS 名称访问服务,避免依赖 Pod IP。
类型 | 用途 | 示例场景 |
---|---|---|
ClusterIP | 内部服务通信(默认类型) | 微服务间调用 |
NodePort | 通过节点端口暴露服务 | 开发测试环境 |
LoadBalancer | 通过云平台负载均衡器暴露服务 | 生产环境对外服务 |
Headless | 直接获取 Pod IP(无 ClusterIP) | StatefulSet 或 DNS 发现 |
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ClusterIP
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
• 工作节点:集群中的物理机或虚拟机,负责运行 Pod。
• 核心组件:
• kubelet:管理 Pod 生命周期,与 API Server 通信。
• kube-proxy:维护网络规则,实现 Service 流量转发。
• 容器运行时:如 Docker、containerd,负责运行容器。
• Ready:节点健康,可接收新 Pod。
• NotReady:节点故障,Pod 将被重新调度。
kubectl get nodes
kubectl describe node <node-name> # 查看节点详细信息(资源、事件)
用户
↓
Deployment(定义 Pod 模板和副本数)
↓ 控制
ReplicaSet(确保 Pod 数量)
↓ 管理
Pod(运行容器)
↓ 通过标签关联
Service(提供访问入口)
↓
Node(运行 Pod 的物理机/虚拟机)
• 前端:Deployment 运行前端 Pod,Service 类型为 LoadBalancer。
• 后端:Deployment 运行 API Pod,Service 类型为 ClusterIP。
• 数据库:StatefulSet 运行数据库 Pod,Headless Service 提供 DNS 发现。
概念 | 核心作用 | 关键特点 |
---|---|---|
Pod | 最小部署单元,运行容器 | 共享网络/存储,临时性 |
Deployment | 管理 Pod 副本,支持滚动更新和回滚 | 声明式更新,控制器模式 |
Service | 提供稳定的访问端点,负载均衡 | 屏蔽 Pod 动态性,服务发现 |
Node | 运行 Pod 的物理资源 | 包含 kubelet、kube-proxy 等组件 |
理解这些概念是掌握 Kubernetes 的基础,它们共同构建了容器化应用的高效部署、管理和访问体系。