【K8s】K8s控制器——复制集和deployment

高效、可靠地管理多个相同的容器应用,实现应用的自动扩缩容、故障恢复和版本升级

1、复制集

如果某个 Pod 挂了(比如容器崩溃、节点宕机),ReplicaSet 会​​自动创建一个新的 Pod 替补​​,始终确保 Pod 数量 = 你定义的 replicas 值。

2、deployment

  • 通过管理 ReplicaSet 来间接控制 Pod​​(你一般不直接操作 ReplicaSet,而是通过 Deployment 来操作);

  • ​支持滚动更新(平滑升级镜像版本,不停机)​

  • ​支持回滚(升级失败时快速回到旧版本)​

  • ​支持扩缩容(一键调整 Pod 数量)​

  • ​支持版本历史记录(查看每次变更,方便审计和回退)​

#- 8.1 # 创建复制集

定义yaml文件,这是一种声明式编程

bash 复制代码
cat > rs.yml <<EOF
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
EOF

创建复制集

bash 复制代码
kubectl create -f rs.yml 

查看复制集

bash 复制代码
kubectl get replicasets.apps,pods -o wide

删除复制集

bash 复制代码
kubectl delete replicasets nginxrstest

#- 8.2 #创建deployment

cat > deployment.yml <<EOF

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

EOF

kubectl create -f deployment.yml

kubectl get deployments.apps,replicasets.apps,pods -l app=nginx

#- 8.3 # 升级

kubectl set image deployments/nginx-deployment nginx=nginx:1.16.1 --record

kubectl rollout status deployment/nginx-deployment

kubectl get deployments.apps,replicasets.apps,pods -l app=nginx

#- 8.4 # 回滚

kubectl set image deployments/nginx-deployment nginx=nginx:1.161 --record

kubectl rollout status deployment/nginx-deployment

kubectl rollout history deployments/nginx-deployment

kubectl rollout history deployment.v1.apps/nginx-deployment --revision=3

kubectl rollout undo deployments/nginx-deployment --to-revision=2

kubectl rollout status deployment/nginx-deployment

kubectl get deployments.apps,replicasets.apps,pods -l app=nginx

#- 8.5 # 扩容

kubectl scale deployments/nginx-deployment --replicas=5

kubectl get deployments.apps,replicasets.apps,pods -l app=nginx

kubectl delete deployments.apps nginx-deployment

kubectl get deployments.apps,replicasets.apps,pods -l app=nginx

相关推荐
江畔何人初1 天前
kubectl apply与kubectl create的区别
linux·运维·云原生
Ha_To1 天前
2026.1.28 docker安装
运维·docker·容器
北极熊~~1 天前
emqx持久化 Docker 容器中生成的数据并打包新镜像,迁移至新机器运行
运维·docker·容器
tomiatomia1 天前
MinIO docker 部署使用的几个坑
运维·docker·容器
ZIXEL子虔科技1 天前
重绘赛道:AI将如何定义国产CAD的下一代?
ai·云原生
x70x801 天前
# Docker 搭建 MySQL 8 主从复制(踩坑实录 + 完整验证)
mysql·docker·容器
qq_316837751 天前
docker 运行 cn_clip
运维·docker·容器
江湖有缘1 天前
轻量级知识协作平台搭建:Docker + MediaWiki入门教程
docker·容器·eureka
Genie cloud1 天前
在 Mac 上使用 Docker 安装宝塔并部署 LNMP 环境
macos·docker·容器·云计算
Suchadar1 天前
Docker常用命令
运维·docker·容器