k8s入门实战deployment使用详解

 更新时间:2023年03月07日 10:24:22   作者:key915  
这篇文章主要为大家介绍了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的值

保存后退出,这时候发现又变成了5份

[root@k8s-node2 ~]# kubectl get deploy
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep                   2/5     5            2           19m
nfs-client-provisioner   1/1     1            1           7d

故障转移

我们看到目前的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   <none>           <none>
my-dep-5b7868d854-fh5bf                   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-kh555   1/1     Running   8          7d     10.244.36.110   k8s-node1   <none>           <none>

我们尝试把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   <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使用详解的详细内容,更多关于k8s deployment使用的资料请关注脚本之家其它相关文章!

相关文章

  • k8s集群部署过程

    k8s集群部署过程

    本文详细介绍了如何部署Kubernetes集群,包括安装Docker、配置阿里云YUM软件源、安装kubeadm、kubelet和kubectl,以及部署Kubernetes、安装Pod网络插件和将节点加入集群的过程,感兴趣的朋友一起看看吧
    2025-03-03
  • k8s证书有效期时间修改的方法详解

    k8s证书有效期时间修改的方法详解

    K8S集群有证书的概念,之前一直是使用默认的,默认都是1年和10年的,1年有效期这显然对于生产环境是不合适的,下面这篇文章主要给大家介绍了关于k8s证书有效期时间修改的相关资料,需要的朋友可以参考下
    2022-08-08
  • 详解kubernetes pod的编排和生命周期

    详解kubernetes pod的编排和生命周期

    这篇文章主要介绍了kubernetes pod的编排和生命周期的相关资料,帮助大家更好的理解和学习使用K8S,感兴趣的朋友可以了解下
    2021-04-04
  • Kubernetes调度管理优先级和抢占机制详解

    Kubernetes调度管理优先级和抢占机制详解

    这篇文章主要为大家介绍了Kubernetes调度管理优先级和抢占机制详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • k8s部署Ingress并创建规则的详细介绍

    k8s部署Ingress并创建规则的详细介绍

    这篇文章主要介绍了k8s部署Ingress并创建规则,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • k8s中如何实现pod自动扩缩容详解

    k8s中如何实现pod自动扩缩容详解

    在实际生产系统中,经常会遇到某个服务需要扩容的场景,可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景,下面这篇文章主要给大家介绍了关于k8s中如何实现pod自动扩缩容的相关资料,需要的朋友可以参考下
    2022-08-08
  • Containerd容器运行yum安装与二进制安装

    Containerd容器运行yum安装与二进制安装

    这篇文章主要为大家介绍了Containerd容器运行yum安装与二进制安装,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • K8S安装及配置教程

    K8S安装及配置教程

    这篇文章主要介绍了K8S安装及配置教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-03-03
  • kubernetes k8s 存储动态挂载配置详解

    kubernetes k8s 存储动态挂载配置详解

    这篇文章主要为大家介绍了kubernetes k8s 存储动态挂载配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • k8s编排之StatefulSet知识点详解二

    k8s编排之StatefulSet知识点详解二

    这篇文章主要为大家介绍了k8s编排之StatefulSet知识点的部分详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论