这篇“k8s入门之deployment怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“k8s入门之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 podNAME READY STATUS RESTARTS AGEmynginx 1/1 Running 0 112smytomcat-6f5f895f4f-7jqlr 1/1 Running 0 47snfs-client-provisioner-6c8cdddb58-kh655 1/1 Running 8 7d[root@k8s-master ~]#[root@k8s-master ~]#[root@k8s-master ~]# kubectl delete pod mynginxpod "mynginx" deleted[root@k8s-master ~]# kubectl get podNAME READY STATUS RESTARTS AGEmytomcat-6f5f895f4f-7jqlr 1/1 Running 0 2m4snfs-client-provisioner-6c8cdddb58-kh655 1/1 Running 8 7d
当我们删deployment创建的pod时,发现他又会自动帮我们创建一个
[root@k8s-master ~]# kubectl delete pod mytomcat-6f5f895f4f-7jqlrpod "mytomcat-6f5f895f4f-7jqlr" deleted[root@k8s-master ~]# kubectl get podNAME READY STATUS RESTARTS AGEmytomcat-6f5f895f4f-s4zr7 1/1 Running 0 15snfs-client-provisioner-6c8cdddb58-kh655 1/1 Running 8 7d
这个删除可以当成是你node节点宕机的情况,我们把这个称为k8s的自愈能力
这时候你又确实想删除怎么办,我们先试用下面命令查出deployment
[root@k8s-master ~]# kubectl get deployNAME READY UP-TO-DATE AVAILABLE AGEmytomcat 1/1 1 1 13mnfs-client-provisioner 1/1 1 1 7d
使用删除deployment命令
[root@k8s-master ~]# kubectl delete deploy mytomcat deployment.apps "mytomcat" deleted
这时候再查看就没有了
[root@k8s-master ~]# kubectl get podNAME READY STATUS RESTARTS AGEnfs-client-provisioner-6c8cdddb58-kh655 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 deployNAME READY UP-TO-DATE AVAILABLE AGEmy-dep 3/3 3 3 2m4snfs-client-provisioner 1/1 1 1 7d
扩缩容
我们可以基于k8s实现手动扩缩容和动态扩缩容(根据系统负载) 手动扩缩容
使用kubectl scale命令
kubectl scale --replicas=5 deployment/my-dep
查看
[root@k8s-master ~]# kubectl get deployNAME READY UP-TO-DATE AVAILABLE AGEmy-dep 3/5 5 3 15mnfs-client-provisioner 1/1 1 1 7d
缩容
[root@k8s-node2 ~]# kubectl scale --replicas=2 deployment/my-depdeployment.apps/my-dep scaled
查看
[root@k8s-node2 ~]# kubectl get deployNAME READY UP-TO-DATE AVAILABLE AGEmy-dep 2/2 2 2 17mnfs-client-provisioner 1/1 1 1 7d
除了使用kubectl scale,还可以使用下面方式
kubectl edit deploy my-dep
这时候会以yaml格式打开,我们编辑这个replicas的值
保存后退出,这时候发现又变成了5份
[root@k8s-node2 ~]# kubectl get deployNAME READY UP-TO-DATE AVAILABLE AGEmy-dep 2/5 5 2 19mnfs-client-provisioner 1/1 1 1 7d
故障转移
我们看到目前的pod都在这个node1节点
[root@k8s-master ~]# kubectl get pod -owideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESmy-dep-5b7868d854-9ljtd 1/1 Running 0 3m5s 10.244.36.105 k8s-node1 <none> <none>my-dep-5b7868d854-fh6bf 1/1 Running 0 3m5s 10.244.36.96 k8s-node1 <none> <none>my-dep-5b7868d854-l74rf 1/1 Running 0 3m5s 10.244.36.106 k8s-node1 <none> <none>my-dep-5b7868d854-r2dpl 1/1 Running 0 22m 10.244.36.109 k8s-node1 <none> <none>my-dep-5b7868d854-xsqzp 1/1 Running 0 22m 10.244.36.120 k8s-node1 <none> <none>nfs-client-provisioner-6c8cdddb58-kh655 1/1 Running 8 7d 10.244.36.110 k8s-node1 <none> <none>
我们尝试把node1节点关掉,看下他是否会自动转移,重新拉起正常运行呢
这时候我们需要等待一段时间,因为node节点挂掉会有一个阈值k8s才能感知
[root@k8s-master ~]# kubectl get pod -owideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESmy-dep-5b7868d854-694hk 1/1 Running 0 6m15s 10.244.169.191 k8s-node2 <none> <none>my-dep-5b7868d854-dq8h8 1/1 Running 0 6m15s 10.244.169.190 k8s-node2 <none> <none>my-dep-5b7868d854-vmlrz 1/1 Running 0 6m15s 10.244.169.151 k8s-node2 <none> <none>nfs-client-provisioner-6c8cdddb58-t7wmd 1/1 Running 0 22m 10.244.169.170 k8s-node2 <none> <none>
滚动更新
我们看下之前部署的my-dep使用了nginx最新版的镜像
命令如下
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record//查看滚动状态kubectl rollout status deployment/my-dep
可以使用-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 部署。
以上就是关于“k8s入门之deployment怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。