kubernetes中最常用的资源对象Deployment
2023-03-14 22:49:05 时间
kubernetes deployment
简述kubernetes中replication controller以及deployment的使用.
replication controller
RC解决的问题如主机监控脚本、应用监控脚本、故障恢复脚本等
- 在大多数情况下,我们通过定义一个RC实现Pod的创建过程及副本数量的自动控制。
- RC里包括完整的Pod定义模版。
- RC通过Label Selector机制实现对Pod副本的自动控制。
- 通过改变RC里的Pod副本数量,可以实现Pod的扩容或缩容功能。
- 通过改变RC里的Pod模版中的镜像版本,可以实现Pod的滚动升级功能。
- 删除RC并不会影响通过该RC已创建好的Pod
Deployment
创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建过程。
创建deployment
kubectl apply -f example.yaml
检查Deployment的状态来看部署动作是否完成(Pod副本的数量是否达到预期的值)。
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k get deploy -n learning
NAME READY UP-TO-DATE AVAILABLE AGE
abcontainer 1/1 1 1 31d
dp-tomcat 1/1 1 1 2m38s
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k get pods -n learning -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
abcontainer-58c67cfb87-g4j8q 1/1 Running 0 25d 10.244.1.177 dev-k8s-02.example.com <none> <none>
dp-tomcat-7ddcfb68bf-cbvvx 1/1 Running 0 2m43s 10.244.4.119 dev-k8s-05.example.com <none> <none>
更新Deployment以创建新的Pod(比如镜像升级)。
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k set image deployment/dp-tomcat dp-tomcat=tomcat:8.5 -n learning
deployment.apps/dp-tomcat image updated
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k describe deploy dp-tomcat -n learning|grep -i Image
Image: tomcat:8.5
暴露deployment一个服务
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) kubectl expose deployment dp-tomcat --selector=app=dp-tomcat --name=tomcat-svc --port=8080 --target-port=8080 --protocol=TCP -n learning
service/tomcat-svc exposed
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k get svc -n learning NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql ClusterIP 10.102.156.115 <none> 3306/TCP 27d
tomcat-svc ClusterIP 10.105.21.78 <none> 8080/TCP 4s
如果当前Deployment不稳定,则回滚到一个早先的Deployment版本。
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) kubectl rollout history deploy/dp-tomcat -n learning
deployment.apps/dp-tomcat
REVISION CHANGE-CAUSE
1 <none>
2 <none>
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) kubectl rollout history deploy/dp-tomcat --revision=1 -n learning
deployment.apps/dp-tomcat with revision #1
Pod Template:
Labels: app=dp-tomcat
pod-template-hash=7ddcfb68bf
Containers:
dp-tomcat:
Image: tomcat:9.0
Port: 8080/TCP
Host Port: 0/TCP
Limits:
cpu: 500m
memory: 128Mi
Environment: <none>
Mounts: <none>
Volumes: <none>
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) kubectl rollout history deploy/dp-tomcat --revision=2 -n learning
deployment.apps/dp-tomcat with revision #2
Pod Template:
Labels: app=dp-tomcat
pod-template-hash=5b4465b6bf
Containers:
dp-tomcat:
Image: tomcat:8.5
Port: 8080/TCP
Host Port: 0/TCP
Limits:
cpu: 500m
memory: 128Mi
Environment: <none>
Mounts: <none>
Volumes: <none>
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k set image deployment/dp-tomcat dp-tomcat=tomcat:9.0 --record=true -n learning
deployment.apps/dp-tomcat image updated
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) kubectl rollout status deploy/dp-tomcat -n learning
Waiting for deployment "dp-tomcat" rollout to finish: 2 old replicas are pending termination...
Waiting for deployment "dp-tomcat" rollout to finish: 2 old replicas are pending termination...
Waiting for deployment "dp-tomcat" rollout to finish: 2 old replicas are pending termination...
Waiting for deployment "dp-tomcat" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "dp-tomcat" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "dp-tomcat" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "dp-tomcat" rollout to finish: 5 of 6 updated replicas are available...
deployment "dp-tomcat" successfully rolled out
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k rollout history deploy/dp-tomcat -n learning
deployment.apps/dp-tomcat
REVISION CHANGE-CAUSE
2 <none>
3 kubectl set image deployment/dp-tomcat dp-tomcat=tomcat:9.0 --record=true --namespace=learning
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k rollout status deploy/dp-tomcat -n learning
deployment "dp-tomcat" successfully rolled out
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k get pods -n learning -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
abcontainer-58c67cfb87-g4j8q 1/1 Running 0 25d 10.244.1.177 dev-k8s-02.example.com <none> <none>
dp-tomcat-5b4465b6bf-cj9jp 1/1 Running 0 29s 10.244.4.135 dev-k8s-05.example.com <none> <none>
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k rollout history deploy/dp-tomcat -n learning
deployment.apps/dp-tomcat
REVISION CHANGE-CAUSE
3 kubectl set image deployment/dp-tomcat dp-tomcat=tomcat:9.0 --record=true --namespace=learning
4 <none>
暂停Deployment以便于一次性修改多个PodTemplateSpec的配置项,之后再恢复Deployment,进行新的发布。
kubectl rollout pause deployment/dp-tomcat -n learning
kubectl set image deployment/dp-tomcat --replicas=10 -n learning
kubectl rollout resume deployment/dp-tomcat -n learning
扩展Deployment以应对高负载。
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) kubectl scale deploy dp-tomcat --replicas=4 -n learning;sleep 3
deployment.apps/dp-tomcat scaled
➜ deployment git:(master) ✗ (☸ kubernetes-admin@kubernetes:default) k get pods -n learning -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
abcontainer-58c67cfb87-g4j8q 1/1 Running 0 25d 10.244.1.177 dev-k8s-02.example.com <none> <none>
dp-tomcat-7ddcfb68bf-5j2bn 1/1 Running 0 12s 10.244.4.122 dev-k8s-05.example.com <none> <none>
dp-tomcat-7ddcfb68bf-98gsw 1/1 Running 0 13s 10.244.4.120 dev-k8s-05.example.com <none> <none>
dp-tomcat-7ddcfb68bf-cbvvx 1/1 Running 0 8m53s 10.244.4.119 dev-k8s-05.example.com <none> <none>
dp-tomcat-7ddcfb68bf-qjdt8 1/1 Running 0 12s 10.244.4.121 dev-k8s-05.example.com <none> <none>
查看Deployment的状态,以此作为发布是否成功的指标。
➜ ~ (☸ kubernetes-admin@kubernetes:default) kubectl rollout status deploy/dp-tomcat -n learning
deployment "dp-tomcat" successfully rolled out
➜ ~ (☸ kubernetes-admin@kubernetes:default) echo $?
0
kubectl rollout undo deployment/nginx-deployment --to-revision=2
清理不再需要的旧版本ReplicaSets。
➜ ~ (☸ kubernetes-admin@kubernetes:default) k get rs -n learning
NAME DESIRED CURRENT READY AGE
abcontainer-58c67cfb87 1 1 1 31d
dp-tomcat-5b4465b6bf 2 2 2 149m
dp-tomcat-7ddcfb68bf 0 0 0 165m
#会自动清理旧版本的rs
➜ ~ (☸ kubernetes-admin@kubernetes:default) kubectl rollout history deployment dp-tomcat -n learning
deployment.apps/dp-tomcat
REVISION CHANGE-CAUSE
9 kubectl set image deployment/dp-tomcat dp-tomcat=tomcat:8.5 --record=true --namespace=learning
10 kubectl set image deployment/dp-tomcat dp-tomcat=tomcat:9.0 --record=true --namespace=learning
相关文章
- 程序员不得不知道的 API 接口常识
- whereis 命令的解释与示例
- 适用于 Linux 的五大流媒体直播应用
- 探究Presto SQL引擎(4)-统计计数
- Linux 开发人员发布稳定内核的关键更新
- 探究Presto SQL引擎(2)-浅析Join
- Linux 下12个监视网络连接的 ss 命令示例
- Linux 中列出挂载驱动器的四个命令
- 在 Linux 中使用 netcat 命令扫描端口
- 苹果 Safari 浏览器技术预览版 161 发布:兼容 macOS 13/12,修复 Bug 并改进性能
- Go 语言使用 goroutine 运行闭包的“坑”
- 微软 Edge 浏览器 109 正式版发布:最后一个与 Windows 7/8.1 兼容的版本
- 如何快速调试RTC?你知道吗?
- 基于OpenHarmony的智能电磁(炮)
- 为何用户会强烈吐槽 Windows 11 的升级门槛?微软员工“感同身受”并发布虚拟机安装 Windows 11 教程
- 京东APP OpenHarmony 化的跨端开发探索
- 在 Bash shell 中使用花括号扩展 {..}
- OBS Studio 29 发布,但对 Linux 用户来说变化不大
- 大数据,大业务:网络面临的巨大挑战
- 2023 年五大数据科学发展趋势