k8s(7)Deployment(部署)与ReplicaSet(副本集)

简介: Deployment(部署)与ReplicaSet(副本集)

Deployment(部署)与ReplicaSet(副本集)

Deployments

kubernetes Deployment 详解 更新/回滚/缩放/暂停/恢复部署操作_还是那片西瓜吗的博客-CSDN博客_k8s停止deployment

Deployment是对ReplicaSet和Pod更高级的抽象。

它使Pod拥有多副本,自愈,扩缩容、滚动升级等能力。

ReplicaSet(副本集)是一个Pod的集合

它可以设置运行Pod的数量,确保任何时间都有指定数量的 Pod 副本在运行。

通常我们不直接使用ReplicaSet,而是在Deployment中声明。

#创建deployment,部署3个运行nginx的Pod
kubectl create deployment nginx-deployment --image=nginx:1.22 --replicas=3
#查看deployment
kubectl get deploy
#查看replicaSet
kubectl get rs 
#删除deployment
kubectl delete deploy nginx-deployment
#将副本数量调整为5
kubectl scale deployment/nginx-deployment --replicas=5
kubectl get deploy
#自动缩放
kubectl autoscale deployment/nginx-auto --min=3 --max=10 --cpu-percent=75 
#查看自动缩放
kubectl get hpa
#删除自动缩放
kubectl delete hpa nginx-deployment
#查看版本和Pod
kubectl get deployment/nginx-deployment -owide
kubectl get pods
#更新容器镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.23
#滚动更新
kubectl rollout status deployment/nginx-deployment
#查看过程
kubectl get rs --watch
#查看历史版本
kubectl rollout history deployment/nginx-deployment
#查看指定版本的信息
kubectl rollout history deployment/nginx-deployment --revision=2
#回滚到历史版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2

创建

[root@k8s ~]# kubectl create deployment nginx-deploy --image=nginx:1.22 --replicas=3
deployment.apps/nginx-deploy created
[root@k8s ~]# kubectl get deploy
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   3/3     3            3           7s
[root@k8s ~]# kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
nginx-deploy-855866bb46-dvx8s   1/1     Running   0          15s
nginx-deploy-855866bb46-nvg4n   1/1     Running   0          15s
nginx-deploy-855866bb46-ndl2z   1/1     Running   0          15s
[root@k8s ~]# kubectl get rs
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-855866bb46   3         3         3       23s

自愈

删除最后一个pod--ndl2z,发现自动生成一个新的6m6s2

[root@k8s ~]# kubectl delete pod nginx-deploy-855866bb46-ndl2z
pod "nginx-deploy-855866bb46-ndl2z" deleted
[root@k8s ~]# kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
nginx-deploy-855866bb46-dvx8s   1/1     Running   0          65s
nginx-deploy-855866bb46-nvg4n   1/1     Running   0          65s
nginx-deploy-855866bb46-6m6s2   1/1     Running   0          4s

扩容

开两个终端,一个动态查看ReplicaSet,另一个修改replicas。

下面是修改前,replicas=3

[root@k8s ~]# kubectl get rs --watch
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-855866bb46   3         3         3       85s

增加修改

[root@k8s ~]# kubectl scale deploy nginx-deploy --replicas=5
deployment.apps/nginx-deploy scaled
查看之前的终端
[root@k8s ~]# kubectl get rs --watch
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-855866bb46   3         3         3       85s
nginx-deploy-855866bb46   5         3         3       4m54s
nginx-deploy-855866bb46   5         3         3       4m54s
nginx-deploy-855866bb46   5         5         3       4m54s
nginx-deploy-855866bb46   5         5         4       4m56s
nginx-deploy-855866bb46   5         5         5       4m56s
[root@k8s ~]# kubectl scale deploy nginx-deploy --replicas=3
deployment.apps/nginx-deploy scaled
查看之前的终端
[root@k8s ~]# kubectl get rs --watch
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-855866bb46   3         3         3       85s
nginx-deploy-855866bb46   5         3         3       4m54s
nginx-deploy-855866bb46   5         3         3       4m54s
nginx-deploy-855866bb46   5         5         3       4m54s
nginx-deploy-855866bb46   5         5         4       4m56s
nginx-deploy-855866bb46   5         5         5       4m56s
nginx-deploy-855866bb46   3         5         5       6m6s
nginx-deploy-855866bb46   3         5         5       6m7s
nginx-deploy-855866bb46   3         3         3       6m7s

自动缩放

自动缩放通过增加和减少副本的数量,以保持所有 Pod 的平均 CPU 利用率不超过 75%。

自动伸缩需要声明Pod的资源限制,同时使用Metrics Server 服务(K3s默认已安装)

#自动缩放
kubectl autoscale deployment/nginx-auto --min=3 --max=10 --cpu-percent=75 
#查看自动缩放
kubectl get hpa
#删除自动缩放
kubectl delete hpa nginx-deployment

滚动更新

还是两个终端,

原终端动态查看副本集

[root@k8s ~]# kubectl get rs --watch
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-855866bb46   3         3         3       3m34s

新建终端,首先查看nginx版本是1.22

[root@k8s ~]# kubectl get deploy -owide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES       SELECTOR
nginx-deploy   3/3     3            3           24m   nginx        nginx:1.22   app=nginx-deploy

我们要实现1.22->1.23

[root@k8s ~]# kubectl set image deployment/nginx-deploy nginx=nginx:1.23
deployment.apps/nginx-deploy image updated

查看副本集变化

[root@k8s ~]# kubectl get rs --watch
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-855866bb46   3         3         3       3m34s
nginx-deploy-7c9c6446b7   1         0         0       0s
nginx-deploy-7c9c6446b7   1         0         0       0s
nginx-deploy-7c9c6446b7   1         1         0       0s
nginx-deploy-7c9c6446b7   1         1         1       1s
nginx-deploy-855866bb46   2         3         3       3m55s
nginx-deploy-7c9c6446b7   2         1         1       1s
nginx-deploy-855866bb46   2         3         3       3m55s
nginx-deploy-7c9c6446b7   2         1         1       1s
nginx-deploy-855866bb46   2         2         2       3m55s
nginx-deploy-7c9c6446b7   2         2         1       1s
nginx-deploy-7c9c6446b7   2         2         2       2s
nginx-deploy-855866bb46   1         2         2       3m56s
nginx-deploy-7c9c6446b7   3         2         2       2s
nginx-deploy-855866bb46   1         2         2       3m56s
nginx-deploy-7c9c6446b7   3         2         2       2s
nginx-deploy-855866bb46   1         1         1       3m56s
nginx-deploy-7c9c6446b7   3         3         2       2s
nginx-deploy-7c9c6446b7   3         3         3       4s
nginx-deploy-855866bb46   0         1         1       3m58s
nginx-deploy-855866bb46   0         1         1       3m58s
nginx-deploy-855866bb46   0         0         0       3m58s

删除,只有未执行的副本集可以删除,执行的删除会自动重建

先查看副本集
[root@k8s ~]# kubectl get rs 
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-7c9c6446b7   3         3         3       55s
nginx-deploy-855866bb46   0         0         0       4m49s
删除两个
[root@k8s ~]# kubectl delete rs nginx-deploy-7c9c6446b7
replicaset.apps "nginx-deploy-7c9c6446b7" deleted
[root@k8s ~]# kubectl delete rs nginx-deploy-855866bb46
replicaset.apps "nginx-deploy-855866bb46" deleted
发现7c的重新搭建了,85的删除后就消失
[root@k8s ~]# kubectl get rs --watch
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-855866bb46   0         0         0       5m40s
nginx-deploy-7c9c6446b7   3         3         3       24s
nginx-deploy-7c9c6446b7   3         3         3       28s
nginx-deploy-7c9c6446b7   3         0         0       0s
nginx-deploy-7c9c6446b7   3         0         0       0s
nginx-deploy-7c9c6446b7   3         3         0       0s
nginx-deploy-7c9c6446b7   3         3         1       1s
nginx-deploy-7c9c6446b7   3         3         2       1s
nginx-deploy-7c9c6446b7   3         3         3       2s
nginx-deploy-855866bb46   0         0         0       5m59s
[root@k8s ~]# kubectl get rs 
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-7c9c6446b7   3         3         3       4m44s
[root@k8s ~]# kubectl get rs --watch
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-7c9c6446b7   3         3         3       4m47s

版本回滚

#查看历史版本
kubectl rollout history deployment/nginx-deploy
#查看指定版本的信息
kubectl rollout history deployment/nginx-deploy --revision=2
#回滚到历史版本
kubectl rollout undo deployment/nginx-deploy --to-revision=2

当版本变为1.23后,我们又想回退到1.22,找到对应的历史版本rollout undo即可

[root@k8s ~]# kubectl rollout history deployment/nginx-deploy
deployment.apps/nginx-deploy 
REVISION  CHANGE-CAUSE
9         <none>
10        <none>
[root@k8s ~]# kubectl rollout undo deployment/nginx-deploy --to-revision=9
deployment.apps/nginx-deploy rolled back
[root@k8s ~]# kubectl get rs -owide
NAME                      DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES       SELECTOR
nginx-deploy-7c9c6446b7   3         3         3       23m   nginx        nginx:1.23   app=nginx-deploy,pod-template-hash=7c9c6446b7
nginx-deploy-855866bb46   0         0         0       11m   nginx        nginx:1.22   app=nginx-deploy,pod-template-hash=855866bb46
[root@k8s ~]# kubectl get rs --watch
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-7c9c6446b7   3         3         3       23m
nginx-deploy-855866bb46   0         0         0       12m
nginx-deploy-855866bb46   0         0         0       12m
nginx-deploy-855866bb46   1         0         0       12m
nginx-deploy-855866bb46   1         0         0       12m
nginx-deploy-855866bb46   1         1         0       12m
nginx-deploy-855866bb46   1         1         1       12m
nginx-deploy-7c9c6446b7   2         3         3       24m
nginx-deploy-7c9c6446b7   2         3         3       24m
nginx-deploy-855866bb46   2         1         1       12m
nginx-deploy-7c9c6446b7   2         2         2       24m
nginx-deploy-855866bb46   2         1         1       12m
nginx-deploy-855866bb46   2         2         1       12m
nginx-deploy-855866bb46   2         2         2       12m
nginx-deploy-7c9c6446b7   1         2         2       24m
nginx-deploy-855866bb46   3         2         2       12m
nginx-deploy-7c9c6446b7   1         2         2       24m
nginx-deploy-855866bb46   3         2         2       12m
nginx-deploy-7c9c6446b7   1         1         1       24m
nginx-deploy-855866bb46   3         3         2       12m
nginx-deploy-855866bb46   3         3         3       12m
nginx-deploy-7c9c6446b7   0         1         1       24m
nginx-deploy-7c9c6446b7   0         1         1       24m
nginx-deploy-7c9c6446b7   0         0         0       24m
^C[root@k8s ~]# kubectl get rs -owide
NAME                      DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES       SELECTOR
nginx-deploy-855866bb46   3         3         3       12m   nginx        nginx:1.22   app=nginx-deploy,pod-template-hash=855866bb46
nginx-deploy-7c9c6446b7   0         0         0       24m   nginx        nginx:1.23   app=nginx-deploy,pod-template-hash=7c9c6446b7
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
7月前
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
389 0
|
6月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
7月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
685 33
|
7月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
395 19
|
7月前
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。
|
8月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
354 12
|
8月前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
439 5
|
8月前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
199 3
|
8月前
|
边缘计算 调度 对象存储
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
145 0
|
8月前
|
存储 Kubernetes 对象存储
部署 DeepSeek 但 GPU 不足,ACK One 注册集群助力解决 IDC GPU 资源不足
部署 DeepSeek 但 GPU 不足,ACK One 注册集群助力解决 IDC GPU 资源不足

热门文章

最新文章

推荐镜像

更多