我感觉deployment中的template定义基本可以代替pod定义,并且deployment可以一次性定义部署多个pod副本,如果是这样,为什么还需要有pod定义呢?工作时是否可以只用deployment不用pod定义?


deployment可以理解为由两部分组成,其中的template其实就是定义Pod,replicas定义需要的状态,Deployment Controller保证pod数量等一直满足需要的状态。

Pod是k8s的最小调度单位,一个Pod中可以有多个containers,彼此共享网路等,这是k8s的核心概念。Deployment,StatefulSet是Controller,保证Pod一直运行在你需要的状态。


就好像java中有了Integer类,它的功能要比int强大多了,但为什么还要有最基本的int类型?而且编写java程序的时候,基础类型反而是大量被应用,而类似于Integer等包装类在应用程度上要远远弱于基础类型。

其实道理很简单,就好像生活中既然有了大炮,为什么还要有苍蝇拍在世界上?大炮的破坏力完全可以满足苍蝇拍所制造的威力,但是为什么大家都买苍蝇拍打苍蝇而不买大炮呢?

Pod是k8s资源中最基础的单位,其他资源基本上都是围绕著Pod而展开,比如RC或者RS,这两种资源可以控制Pod的副本数,所以它们就比Pod高级一点,在定义它们的时候和Deployment一样,需要在template中定义Pod中的容器等内容,而Deployment是比RC或者RS更高级的一种资源,它不但可以控制Pod的副本数,同时还可以控制Pod的版本,所以这么高级的资源并不是时时刻刻都需要的,比如你就想暂时性的部署一个小程序,用完就不要了,那么你就没有必要使用RS或者RC,更没有必要去用Deploment。

中国有句俗话,叫杀鸡焉用牛刀,就是这个道理。


从开发者角度看,deployment顾明思意,既部署,对于完整的应用部署流程,除了运行代码(既pod)之外,需要考虑更新策略,副本数量,回滚,重启等步骤,而运行代码的方式有很多种,例如有一次性的也就是job,有定时执行的也就是crontabjob,有排号的也就是sts,为了复用运行代码的功能所以抽象为pod,从而进行复用。从用户角度看,我们操作时也会根据不同的代码副本进行查看,例如日志,资源占用都是实例级别的也需要这么一个抽象


日常使用 很少直接用pod

一半就 deployment ds ss 够用了。


pod 虽然是 k8s 的最小调度单元,但 pod 下还可以有多个 container


pod的类型分为两部分:

  • 自主式pod,即直接编写yaml定义pod资源
  • 控制器所控制的pod,通过Deployments,StatefulSets,Jobs等控制器控制

自主式pod不具备弹性扩容,故障恢复等高级的特性,而需要通过上层封装如Deployment控制器来实现,而控制器按照功能有多种,两者之间是嵌套调用的关系,不能替代,原因如下:

  • kubernetes调度的最小调度单元是pod
  • pod以template的形式被其他控制器所引用
  • 拆分后,单个pod副本异常时不会影响整体业务欢迎大家订阅我的专栏,一起交流k8s,云原生技术,

云计算技术专栏的全部内容 - 云+社区 - 腾讯云?

cloud.tencent.com


先有的pod再有的deployment呀,不能先吃第4个馒头


depkoyment也是调用pod来实现高级需求,但是pod就在那里你可以不用但是deployment statusful daemonsey 都要用,但是也没必要关掉万一你有奇葩需求需要自己调度pof呢


推荐阅读:
相关文章