k8s学习-Deployment(部署)与ReplicaSet(副本集)

Deployment是对ReplicaSet和Pod更高级的抽象。(抽象指的是把复杂的系统或对象简化成更高层次、更易于理解的表示方式)

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

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

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

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

什么是抽象?

抽象:Deployment 将所有这些操作封装在一个更简单的接口中。你只需要告诉 Deployment “我要运行 3 个副本的这个版本”,K8s 就会帮你自动创建、管理、更新和恢复 Pod。你不需要关心底层的 ReplicaSet 如何管理 Pod,也不用担心如何滚动更新或回滚,这些细节都被 Deployment “抽象”掉了。

用生活中的例子来理解“抽象”:

  • 想象一下开车,“开车”这个行为可以被看作一个抽象。你只需要踩油门、刹车、打方向盘,而不用关心发动机、刹车系统等内部细节的运作方式——这些都是汽车制造商帮你“抽象”掉的,你只需要使用这些高层的功能就行。

总结

抽象的本质是简化和隐藏细节,只保留最核心、最有用的部分,让我们更方便地使用和理解系统或对象。这种抽象让复杂的系统变得更可控、更易于管理。

命令

创建deployment,部署3个运行nginx的Pod

#创建deployment,部署3个运行nginx的Pod
kubectl create deployment nginx-deployment --image=nginx:1.22 --replicas=3

查看deployment

#查看deployment READY=3三个副本已经准备就绪 deployment可简写为deploy
kubectl get deployment

再看下pod 三Running

kubectl get pod

但是并不是由deployment直接控制Pod,是deployment控制副本集(replicaset)从而去控制pod的数量

可以看下副本集 replicaset可简写为rs

#查询副本集 replicaset可简写为rs
kubectl get replicaset

通过上方可以看出pod和副本集的字符是对应的都是nginx-deployment-79b458c974(副本集)下面又有三个pod(lxkzq 、8sbnz、stj44 )

[root@k8s-master ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE 
nginx-deployment-79b458c974-lxkzq   1/1     Running   0          2m5s
nginx-deployment-79b458c974-8sbnz   1/1     Running   0          2m5s
nginx-deployment-79b458c974-stj44   1/1     Running   0          2m5s

测试自愈能力,将最后一个pod删除(stj44)

kubectl delete pod nginx-deployment-79b458c974-stj44 

然后再查看下pod 发现pod发生变化 为:nginx-deployment-79b458c974-dwv9n
(deployment使pod具备自愈能力)

缩放

deployment还具备缩放能力

手动缩放 并观察 另开一个终端使用k8s内置watch参数 可以看到副本数量为3

#将副本数量调整为5 并看下deployment
kubectl scale deployment/nginx-deployment --replicas=5
kubectl get deploy

第二行开始期望副本数量变为5 当前副本也到5 最后就绪到5个副本(相反也是指手动缩容)

自动缩放

自动缩放通过增加和减少副本的数量,以保持所有 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

滚动更新

#查看版本和Pod
kubectl get deployment/nginx-deployment -owide

查看到版本为nginx:1.22准备更新为1.23 更新前使用另外一个终端观察

更新容器镜像

#更新容器镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.23

watch观察到

创建新 ReplicaSet:Kubernetes 检测到新的镜像版本,创建了一个新的 ReplicaSet (nginx-deployment-5c87b6cf87)。

逐步替换 Pod:新的 ReplicaSet 开始逐步增加 Pod 数量,同时旧的 ReplicaSet (nginx-deployment-79b458c974) 逐步减少,保持期望的副本数。

完成更新:新 ReplicaSet 达到预期的 3 个副本,旧的 ReplicaSet 完全缩容到 0,滚动更新完成。

查看到现在的pod隶属与5c87b6cf87并非79b458c974

[root@k8s-master ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE  
nginx-deployment-5c87b6cf87-q7z4d   1/1     Running   0          8m48s
nginx-deployment-5c87b6cf87-cltqg   1/1     Running   0          8m20s
nginx-deployment-5c87b6cf87-tjjw9   1/1     Running   0          7m54s
[root@k8s-master ~]# 

版本回滚

#查看历史版本
kubectl rollout history deployment/nginx-deployment

查看到有两个版本 可以详细看下 增加–reversion=$即可(例如–revision=1)

当前副本集也为两个87为1.23

查看指定版本的信息,版本1为nginx:1.22 即回退1

#查看指定版本的信息
kubectl rollout history deployment/nginx-deployment --revision=1

回滚到历史版本

#回滚到历史版本
kubectl rollout undo deployment/nginx-deployment --to-revision=1

已回退为1.22

如果觉得本文对您有所帮助,可以支持下博主,一分也是缘
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇