k8s从入门到实战(七):deployment介绍及体验 |
您所在的位置:网站首页 › k8s是干啥的 › k8s从入门到实战(七):deployment介绍及体验 |
介绍
假设现在我们写了一个订单服务,由于访问量很高 只部署一台肯定不够,我希望k8s帮我启动好几个pod, 我们用kubectl run可能得运行100次, 基于deployment,你可以告诉k8s副本数量,k8s就会自动帮你完成,其实不止是副本数量,一旦你的pod被deployment管理,deployment将会赋予它更多的能力,比如自愈,扩缩容,滚动更新等 自愈能力我们使用原来的方式创建一个pod kubectl run mynginx --image=nginx 复制代码使用deployment方式创建一个pod kubectl create deployment mytomcat --image=tomcat:8.5.68 复制代码当我们删除使用kubectl run方式创建的pod时,发现一删就真的删掉了 [root@k8s-master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE mynginx 1/1 Running 0 112s mytomcat-6f5f895f4f-7jqlr 1/1 Running 0 47s nfs-client-provisioner-6c8cdddb58-kh555 1/1 Running 8 7d [root@k8s-master ~]# [root@k8s-master ~]# [root@k8s-master ~]# kubectl delete pod mynginx pod "mynginx" deleted [root@k8s-master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE mytomcat-6f5f895f4f-7jqlr 1/1 Running 0 2m4s nfs-client-provisioner-6c8cdddb58-kh555 1/1 Running 8 7d 复制代码当我们删deployment创建的pod时,发现他又会自动帮我们创建一个 [root@k8s-master ~]# kubectl delete pod mytomcat-6f5f895f4f-7jqlr pod "mytomcat-6f5f895f4f-7jqlr" deleted [root@k8s-master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE mytomcat-6f5f895f4f-s4zr7 1/1 Running 0 15s nfs-client-provisioner-6c8cdddb58-kh555 1/1 Running 8 7d 复制代码这个删除可以当成是你node节点宕机的情况,我们把这个称为k8s的自愈能力 这时候你又确实想删除怎么办,我们先试用下面命令查出deployment [root@k8s-master ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE mytomcat 1/1 1 1 13m nfs-client-provisioner 1/1 1 1 7d 复制代码使用删除deployment命令 [root@k8s-master ~]# kubectl delete deploy mytomcat deployment.apps "mytomcat" deleted 复制代码这时候再查看就没有了 [root@k8s-master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE nfs-client-provisioner-6c8cdddb58-kh555 1/1 Running 8 7d 复制代码 多副本假设现在业务量上来,我们需要同时针对一个服务部署多个实例,可以使用--replicas,比如我们使用下面3个命令创建3个副本 kubectl create deployment my-dep --image=nginx --replicas=3 复制代码可以看到创建了一个deployment,3/3指期望创建3个,3个可用 [root@k8s-master ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE my-dep 3/3 3 3 2m4s nfs-client-provisioner 1/1 1 1 7d 复制代码 扩缩容我们可以基于k8s实现手动扩缩容和动态扩缩容(根据系统负载) 手动扩缩容 使用kubectl scale命令 kubectl scale --replicas=5 deployment/my-dep 复制代码查看 [root@k8s-master ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE my-dep 3/5 5 3 15m nfs-client-provisioner 1/1 1 1 7d 复制代码缩容 [root@k8s-node2 ~]# kubectl scale --replicas=2 deployment/my-dep deployment.apps/my-dep scaled 复制代码查看 [root@k8s-node2 ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE my-dep 2/2 2 2 17m nfs-client-provisioner 1/1 1 1 7d 复制代码除了使用kubectl scale,还可以使用下面方式 kubectl edit deploy my-dep 复制代码这时候会以yaml格式打开,我们编辑这个replicas的值
我们看到目前的pod都在这个node1节点 [root@k8s-master ~]# kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-dep-5b7868d854-9ljtd 1/1 Running 0 3m5s 10.244.36.105 k8s-node1 my-dep-5b7868d854-fh5bf 1/1 Running 0 3m5s 10.244.36.96 k8s-node1 my-dep-5b7868d854-l74rf 1/1 Running 0 3m5s 10.244.36.106 k8s-node1 my-dep-5b7868d854-r2dpl 1/1 Running 0 22m 10.244.36.109 k8s-node1 my-dep-5b7868d854-xsqzp 1/1 Running 0 22m 10.244.36.120 k8s-node1 nfs-client-provisioner-6c8cdddb58-kh555 1/1 Running 8 7d 10.244.36.110 k8s-node1 复制代码我们尝试把node1节点关掉,看下他是否会自动转移,重新拉起正常运行呢 这时候我们需要等待一段时间,因为node节点挂掉会有一个阈值k8s才能感知 [root@k8s-master ~]# kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-dep-5b7868d854-694hk 1/1 Running 0 6m15s 10.244.169.191 k8s-node2 my-dep-5b7868d854-dq8h8 1/1 Running 0 6m15s 10.244.169.190 k8s-node2 my-dep-5b7868d854-vmlrz 1/1 Running 0 6m15s 10.244.169.151 k8s-node2 nfs-client-provisioner-6c8cdddb58-t7wmd 1/1 Running 0 22m 10.244.169.170 k8s-node2 复制代码 滚动更新我们看下之前部署的my-dep使用了nginx最新版的镜像
可以使用-w看到有一个逐步替换的过程,最后使用了我们指定的1.16.1版本 加入我们发现我们滚动更新的版本有问题,就需要执行版本回退 #历史记录 kubectl rollout history deployment/my-dep #查看某个历史详情 kubectl rollout history deployment/my-dep --revision=2 #回滚(回到上次) kubectl rollout undo deployment/my-dep #回滚(回到指定版本) kubectl rollout undo deployment/my-dep --to-revision=2 复制代码 其他除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job 等 类型资源。我们都称为 工作负载。有状态应用使用 StatefulSet 部署,无状态应用使用 Deployment 部署 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |