1. 简介
控制Pod,使用Pod拥有多副本,自愈,扩缩容等能力。
2. 自愈能力
# 比较方式一:创建 kubectl run mynginx --image=nginx # 方式二:deployment创建,自愈能力 kubectl create deployment mytomcat --image=tomcat:8.5.68
# 方式一创建的删除了就永久删除了,deployment删除(模拟宕机),会生成新的一个,自愈能力! kubectl delete pod mynginx kubectl delete pod mytomcat-6f5f895f4f-stm2q
真正删除,使用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个并发。
- 应用部署在多个机器(鸡蛋不放在一个篮子里🤣)
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个副本
4.2 扩容成5个副本
# 扩容 kubectl scale deploy/my-dep --replicas=5 # 缩容 kubectl scale deploy/my-dep --replicas=2
# 相当于执行以下命令,修改参数 kubectl edit deploy my-dep
可视化界面扩缩容
5. 自愈&故障转移
- 当Pod出现问题,deployment保证副本数量
# 监控 watch -n 1 kubectl get pod # 监控,-w是K8S中打印出状态变化过程 kubectl get pod -w
6. 滚动更新
应用更新,不停机更新。
# 查看之前Pod使用的镜像 kubectl get deploy my-dep -oyaml
滚动更新
# 更新镜像,--record记录下更新 kubectl set image deploy/my-dep nginx=nginx:1.16.1 --record
# 执行上述命令,监控显示如图 kubectl get pod -w
启动新的,杀死老的。
# 相当于执行以下命令,修改参数 kubectl edit deploy my-dep
7. 版本回退
# 查看历史记录 kubectl rollout history deploy/my-dep # 回滚 kubectl rollout undo deploy/my-dep --to-revision=1
相当于滚动更新,启动新的,杀死老的。
# 监控 root@docker01:/home# kubectl get pod -w
# 查看镜像 kubectl get deploy/my-dep -oyaml|grep image
- 最后一次部署时
nginx:1.16.1
,已经回退为nignx
总结
1️⃣Deployment:无状态应用部署,比如微服务,提供多副本等功能。
2️⃣StatefulSet:有状态应用部署,比如redis,提供稳定的存储、网络等功能。
3️⃣DaemonSet:守护型应用,比如日志手机组件,在每个机器都运行一份。
4️⃣Job/CronJob:定时任务部署,比如垃圾清理组件,可以在指定时间运行。