目录

一、K8s 控制器核心作用

二、ReplicaSet:Pod 副本的 “守护者”

1. 核心定义

2. 核心特性

3. 实战示例

三、Deployment:无状态应用的 “终极管理工具”

1. 核心定义

2. 核心能力与实战

(1)创建 Deployment

(2)滚动更新 Deployment

(3)版本回退

(4)弹性伸缩

(5)删除 Deployment

3. 典型用途

四、高频问答


一、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 中描述目标状态,控制器就会以可控的方式,将实际状态调整为期望状态。

更多推荐