• 郑小鹿
    2022-08-01 来自北京
    问题回答 1、如果把 Deployment 里的 replicas 字段设置成 0 会有什么效果?有什么意义呢? 做了下实验,效果如下: $ kubectl get po -n nginx-deploy No resources found in default namespace. $ kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 0/0 0 0 意义:关闭服务的同时,又可以保留服务的配置,下次想要重新部署的时候只需要修改deployment就可以快速上线。 2、你觉得 Deployment 能够应用在哪些场景里?有没有什么缺点或者不足呢? 使用场景:用在部署无状态服务,部署升级,对服务的扩缩容;多个Deployment 可以实现金丝雀发布 不足:Deployment把所有pod都认为是一样的服务,前后没有顺序,没有依赖关系,同时认为所有部署节点也是一样的,不会做特殊处理等 疑问:Deployment变更副本数时,是先删除pod,然后再重建pod,如果服务启停时间比较长,会出现什么问题不?

    作者回复: 回答的很好。 这个其实是后面要讲的滚动更新,Deployment会保证任何时候都会有足够数量的pod处于可用状态,保证应用正常对外提供服务。

    共 6 条评论
    31
  • 岁月长
    2022-09-15 来自北京
    回答问题1: 之前在公司的时候,有时候会把服务下线,这个时候就会把 replicas 字段改为 0,观察一段时间没问题后在把配置删除,如果有报错也方便马上恢复

    作者回复: great。

    
    25
  • YueShi
    2022-08-02 来自北京
    懂后恍然大悟,不懂时举步维艰,学习的快乐大抵如此

    作者回复: nice

    
    22
  • dst
    2022-08-01 来自北京
    回答一下问题2,deploy是只能用在应用是无状态的场景下,对于有状态的应用它就无能为力了,需要使用其他的api

    作者回复: good

    共 2 条评论
    8
  • 朱雯
    2022-08-02 来自北京
    老师,我想线创建一个pod,然后直接使用ngx-aadep来管理老的pod,这样的方式不行吗,你课程里说,pod不属于deployment。那我就单独创建,但是显示我语法错误。 cat ngx-aadep.yaml kind: Deployment metadata: creationTimestamp: null labels: app: ngx-aa name: ngx-aa spec: replicas: 1 selector: matchLabels: app: ngx-aa cat ngx-aapod.yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: ngx-aa app: ngx-aa name: ngx-aa spec: containers: - image: nginx:alpine name: ngx-aa

    作者回复: Pod是由Deployment模板创建出来的,它受Deployment管控,单独创建Pod无法纳入Deployment的管理,因为Kubernetes就是这么规定的运行机制。 “pod不属于deployment”这个说法可能带来了一些误解,这个实际上是相对于Job来说的,不是强绑定关系。

    
    7
  • nc_ops
    2022-09-28 来自北京
    对这句话有个疑问,“kubectl scale 是命令式操作,扩容和缩容只是临时的措施,如果应用需要长时间保持一个确定的 Pod 数量,最好还是编辑 Deployment 的 YAML 文件” 我刚实验通过kubectl scale去扩容pod数量,然后通过kubectl delete去删除一个pod,立马又会新生成一个pod,所以通过kubectl scale也是能保持一个确定的pod数量的吧?通过yaml文件去改变副本的好处准确来说应该是让整个生产环境里只有一份配置的描述,避免当kubectl scale执行后,实际deployment规格与yaml文件里不一致,避免让运维引发混淆

    作者回复: 是的,就是这个意思。kubectl scale使用后会让Deployment的状态和YAML 不一致,所以说是临时的。

    
    5
  • 摊牌
    2022-08-18 来自上海
    我有个疑惑,如果像部署redis, etcd等集群模式,比如3个pod, 对应的集群里应该会有个master,像这种有状态的服务,如果采用deployment模式部署会有影响吗,还是单独部署3个pod, 望大家指点

    作者回复: 不能用Deployment,应该用StatefulSet,高级篇会讲。

    
    4
  • 朱雯
    2022-08-02 来自北京
    1. 设置为0,就是pod没了,deployment还有,看同学们回答是保留配置,这个不错。 2. 管理无状态服务,什么叫有状态,什么叫无状态,我不太理解。 另外,我刚刚突发奇想,deployment只留一个头加上select配置,然后里面的pod对象单独取出来,建立一个文件,pod可以建立,但是deloyment无法建立,但是提示我是语法错误,其实我不太理解。既然这两服务是独立了,我为啥不能这么做呢

    作者回复: 后面讲StatefulSet的时候就可以理解了。 Pod YAML 只能创建一个对象,而Deployment里的pod定义是一个“模板”,可以创建出任意多个对象。而且Kubernetes就是规定要这么使用Deployment,不这样做当然就报错了。

    
    4
  • 一只鱼
    2023-07-11 来自广东
    按照文章中的说法,一层一层嵌套:deployment 管理 pod , pod 管理 containers 那谁来管理 deployment 呢,如果 deployment 出错了怎么办?

    作者回复: deployment由kubernetes来管理,也就是控制面里的controller。

    
    3
  • 郑小鹿
    2022-08-01 来自北京
    「 下属字段“matchLabels”定义了 Pod 对象应该携带的 label,它必须和“template”里 Pod 定义的“labels”完全相同 」 老师这个应该是指某个标签的内容完全一样吧。selector.matchLabels”是“template.matadata”中“labels”的子集。

    作者回复: 是完全一样,不是子集,可以自己改一下试试。

    共 3 条评论
    3