KubernetesNotes7:Deployment部署应用

KubernetesNotes7:Deployment部署应用

Created
Nov 21, 2021 12:09 PM
Last Edited
Last updated December 3, 2021
Tags

1. 简介

控制Pod,使用Pod拥有多副本,自愈,扩缩容等能力。
 

2. 自愈能力

# 比较方式一:创建 kubectl run mynginx --image=nginx # 方式二:deployment创建,自愈能力 kubectl create deployment mytomcat --image=tomcat:8.5.68
notion image
# 方式一创建的删除了就永久删除了,deployment删除(模拟宕机),会生成新的一个,自愈能力! kubectl delete pod mynginx kubectl delete pod mytomcat-6f5f895f4f-stm2q
notion image
 
真正删除,使用deploy删除。
root@docker01:/home# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE mytomcat 1/1 1 1 8m27s root@docker01:/home# kubectl delete deploy mytomcat deployment.apps "mytomcat" deleted root@docker01:/home#

3. 多副本能力

3.1 命令创建

# 部署3个副本 kubectl create deployment my-dep --image=nginx --replicas=3

3.2 可视化界面创建

可视化界面创建5个副本,如果一个nginx是100个并发,总共5*100个并发。
notion image
 
  • 应用部署在多个机器(鸡蛋不放在一个篮子里🤣)
root@docker01:/home# kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-dep-01-686cfb7bf-4g6xz 1/1 Running 0 2m58s 192.168.244.68 docker04 <none> <none> my-dep-01-686cfb7bf-84tmf 1/1 Running 0 2m58s 192.168.243.139 docker03 <none> <none> my-dep-01-686cfb7bf-dgx8k 1/1 Running 0 2m58s 192.168.244.69 docker04 <none> <none> my-dep-01-686cfb7bf-rq8mb 1/1 Running 0 2m58s 192.168.244.67 docker04 <none> <none> my-dep-01-686cfb7bf-t8xwt 1/1 Running 0 2m58s 192.168.180.2 docker02 <none> <none> my-dep-5b7868d854-5vq9f 1/1 Running 0 5m15s 192.168.243.138 docker03 <none> <none> my-dep-5b7868d854-dl9xm 1/1 Running 0 5m15s 192.168.244.66 docker04 <none> <none> my-dep-5b7868d854-mdf6r 1/1 Running 0 5m15s 192.168.243.137 docker03 <none> <none> root@docker01:/home#

3.3 配置文件创建

apiVersion: apps/v1 kind: Deployment metadata: name: my-dep labels: app: my-dep # namespace: default spec: replicas: 3 selector: matchLabels: app: my-dep template: metadata: labels: app: my-dep spec: containers: - image: nginx name: nginx
 
 

4. 扩缩容

4.1 准备

启动3个副本
notion image

4.2 扩容成5个副本

# 扩容 kubectl scale deploy/my-dep --replicas=5 # 缩容 kubectl scale deploy/my-dep --replicas=2
notion image
# 相当于执行以下命令,修改参数 kubectl edit deploy my-dep
notion image
可视化界面扩缩容
notion image
 

5. 自愈&故障转移

  • 当Pod出现问题,deployment保证副本数量
# 监控 watch -n 1 kubectl get pod # 监控,-w是K8S中打印出状态变化过程 kubectl get pod -w
 

6. 滚动更新

应用更新,不停机更新。
# 查看之前Pod使用的镜像 kubectl get deploy my-dep -oyaml
notion image
 
滚动更新
# 更新镜像,--record记录下更新 kubectl set image deploy/my-dep nginx=nginx:1.16.1 --record
 
# 执行上述命令,监控显示如图 kubectl get pod -w
notion image
启动新的,杀死老的。
notion image
notion image
# 相当于执行以下命令,修改参数 kubectl edit deploy my-dep

7. 版本回退

# 查看历史记录 kubectl rollout history deploy/my-dep # 回滚 kubectl rollout undo deploy/my-dep --to-revision=1
notion image
相当于滚动更新,启动新的,杀死老的。
# 监控 root@docker01:/home# kubectl get pod -w
notion image
# 查看镜像 kubectl get deploy/my-dep -oyaml|grep image
notion image
  • 最后一次部署时nginx:1.16.1 ,已经回退为nignx
 

总结

notion image
1️⃣Deployment:无状态应用部署,比如微服务,提供多副本等功能。
2️⃣StatefulSet:有状态应用部署,比如redis,提供稳定的存储、网络等功能。
3️⃣DaemonSet:守护型应用,比如日志手机组件,在每个机器都运行一份。
4️⃣Job/CronJob:定时任务部署,比如垃圾清理组件,可以在指定时间运行。