【Kubernetes】(六) 控制器1
目录
一、K8s 控制器核心作用
在 Kubernetes 中,控制器是集群的 “大脑”,核心作用是监控集群状态,将当前状态持续对齐到预设的期望状态(spec 字段)。每个控制器只负责管理某一类特定资源,通过闭环控制保证集群稳定。
二、ReplicaSet:Pod 副本的 “守护者”
1. 核心定义
ReplicaSet(简称 RS)是 K8s 中用于确保指定数量的 Pod 副本始终运行的控制器。它会持续监控 Pod 状态,在 Pod 故障、删除时自动重建,保证服务高可用。
2. 核心特性
基于标签选择器(selector)匹配 Pod,确保副本数与 replicas 配置一致。
仅保证副本数量,不提供滚动更新、版本回退等高级能力。
官方建议:生产环境不直接使用 RS,而是通过 Deployment 间接管理 RS。
3. 实战示例
创建副本的 nginx ReplicaSet:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginxrstest
labels:
app: nginxrstest
spec:
replicas: 3
selector:
matchLabels:
app: nginxrstest
template:
metadata:
labels:
app: nginxrstest
spec:
containers:
- name: nginx
image: nginx
ports:
- name: http
containerPort: 80
imagePullPolicy: IfNotPresent
执行创建与验证:
# 创建 RS
kubectl create -f rs.yml
# 查看 RS 状态
kubectl get replicasets
# 验证 Pod 可用性
curl <Pod IP>
# 删除 RS
kubectl delete replicasets nginxrstest
三、Deployment:无状态应用的 “终极管理工具”
1. 核心定义
Deployment 是更高级的无状态应用控制器,它通过管理 ReplicaSet 实现 Pod 全生命周期管理,提供声明式更新、滚动升级、版本回退、弹性伸缩等生产级能力,是部署无状态服务的标准方案。
2. 核心能力与实战
(1)创建 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
kubectl create -f deployment.yml
# 查看 Deployment/RS/Pod 层级关系
kubectl get deployments,rs,pods -l app=nginx
(2)滚动更新 Deployment
更新镜像版本,实现无停机升级:
kubectl set image deployments/nginx-deployment nginx=nginx:1.16.1
# 查看更新进度
kubectl rollout status deployment/nginx-deployment
更新原理:Deployment 会创建新的 ReplicaSet,逐步将新 RS 副本数扩容、旧 RS 副本数缩容,实现平滑过渡。
(3)版本回退
当更新出错时,快速回退到历史版本:
# 查看更新历史
kubectl rollout history deployments/nginx-deployment
# 回退到指定版本
kubectl rollout undo deployments/nginx-deployment --to-revision=2
(4)弹性伸缩
动态调整 Pod 副本数,应对业务负载变化:
# 扩容到5副本
kubectl scale deployments/nginx-deployment --replicas=5
# 缩容
kubectl scale deployments/nginx-deployment --replicas=3
(5)删除 Deployment
kubectl delete deployments.apps nginx-deployment
3. 典型用途
无状态服务(如 Nginx、API 服务)的部署与运维
滚动升级、灰度发布、版本回退
弹性扩缩容,适配业务流量波动
四、高频问答
Q:什么是控制器?
A:在 K8s 中,控制器就像是集群的大脑,通过监控集群的状态,确保当前状态与资源对象 spec 中定义的期望状态保持一致。
Q: 什么是 RS?主要用途是什么?
A:RS 用于控制 Pod 的副本数量,使其始终与预设值保持一致。K8s 官方建议使用 Deployment 代替 RS 管理副本,因为 Deployment 支持带有历史记录的声明式更新。
Q:什么是 Deployment?如何使用?
A:Deployment 为 Pod 和 ReplicaSet 提供声明式更新能力。我们只需要在 Deployment 中描述目标状态,控制器就会以可控的方式,将实际状态调整为期望状态。
更多推荐
所有评论(0)