什么是Deployment?
1.为什么会有Deployment?
没有认识Deloyment之前,我们都是直接使用kubectl创建pod,这样创建的pod有个问题,如果我想实现高可用,总不能到每一台机器上都创建一遍吧?为了解决这个问题,Deployment应运而生,我们只用创建一个Depolyment,指定副本数量,K8s就会自动创建pod分散到不同的机器上。另外,使用Deployment创建的pod拥有自愈能力和扩缩容能力,哪怕你手动删除了一个pod,K8s也会快速帮你再创建一个相同的pod。
2.多副本常用命令
命令创建Deployment
kubectl create deployment my-dep --image=nginx --replicas=3
#查看Deployment
kubectl get deploy
#查看deployment的yaml
kubectl get deploy my-dep -oyaml
yaml创建Deployment
apiVersion: apps/v1 kind: Deployment metadata: labels: app: my-dep name: my-dep spec: replicas: 3 selector: matchLabels: app: my-dep template: metadata: labels: app: my-dep spec: containers: - image: nginx name: nginx
3.扩缩容
方式一:使用命令,通过改变副本数来控制是扩容还是缩容
kubectl scale --replicas=5 deployment/my-dep
方式二:通过编辑配置文件
kubectl edit deployment/my-dep
#找到replicas,把数量修改一下,wq保存即可。
4.自愈能力
假如我部署了一个Deployment,分别分散在node1,node2,node3上,此时,如果在node1上的节点由于内存泄漏或者人为误停了pod或者容器,这时候K8s就会感知到,K8s就会尝试重启,此时重启成功后pod的ip和节点都不变,还是原来的pod,这就是K8s的自愈能力。
5.故障转移能力
假如我部署了一个Deployment,分别分散在node1,node2,node3上,此时,如果在node1上的节点宕机了,造成服务器不可用,这时候单靠自愈能力肯定恢复不了了,这时候K8s就会等5分钟(可以自己设置阈值,默认5分钟),把原来的pod删除掉,在新的节点启动一个新的pod。
6.滚动更新
当更新应用的时候,假如原来有三个节点,那么,先启动新的pod,新的起来了,杀掉一个老的pod,再启动新的,杀掉老的pod,依次循环。
#查看deployment的yaml中的镜像
kubectl get deploy my-dep -oyaml|grep image
#查看pod的状态变更过程
kubectl get pod -w
#滚动更新
kubectl set image deploy/my-dep nginx=nginx:1.16.1 --record
7.历史版本回退
假如当前版本有问题,K8s可以回退到之前的指定版本。
#查看deployment的历史版本 kubectl rollout history deployment/my-dep
#回退到指定版本
kubectl rollout undo deploy/my-dep --to-version=1
标签:kubectl,dep,deployment,---,Deployment,pod,K8,my From: https://www.cnblogs.com/hujunwei/p/16905657.html