首页 文章

在kubernetes中,pod和部署之间有什么区别?

提问于
浏览
84

我一直用 type:deployment 创建pod但我看到一些文档使用了 type:pod ,更具体地说是the documentation for multi-container pods

apiVersion: v1
kind: Pod
metadata:
  name: ""
  labels:
    name: ""
  namespace: ""
  annotations: []
  generateName: ""
spec:
  ? "// See 'The spec schema' for details."
  : ~

但要创建pod我可以使用a deployment type

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ""
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: ""
    spec:
      containers:
        etc

我注意到pod文档说:

create命令可用于直接创建pod,也可以通过Deployment创建pod或pod . 强烈建议您使用部署来创建容器 . 它会监视失败的pod,并根据需要启动新的pod以维持指定的数量 . 如果您不希望部署监视您的pod(例如,您的pod正在编写非持久性数据,这些数据将无法在重新启动后继续存在,或者您的pod的生命非常短暂),则可以直接创建create命令 . 注意:我们建议使用“部署”来创建窗格 . 仅当您不想创建部署时,才应使用以下说明 .

但这提出了 kind:pod 有什么用处的问题?你能以某种方式参考部署中的pod吗?我没有看到任何方法 . 看起来你使用pod获得的是一些额外的元数据,但没有任何部署选项,如 replica 或重启策略 . 没有什么好处的pod也不能创建一个带有部署的多容器pod .

2 回答

  • 71

    Pod和Deployment都是Kubernetes API中的完整对象 . 部署通过ReplicaSets管理创建Pod . 它归结为部署将创建具有从模板中获取的规范的Pod . 您不太可能需要直接为 生产环境 用例创建Pod .

  • 99

    拉德克的答案非常好,但我想从我的经验中汲取经验,你几乎从不使用 kind pod ,因为这在实践中没有任何意义 .

    因为你需要一个 deployment 对象 - 或者像 replication controllerreplicaset 这样的其他Kubernetes API对象 - 需要保持 replicas (pods)活着(这就是使用kubernetes的重点) .

    您将在实践中用于典型应用的是:

    • Deployment object (您将指定您的应用容器/容器)将托管您的应用容器以及其他一些规格 .

    • Service object (就像分组对象一样,为具有特定标签的 pods 提供所谓的虚拟IP(群集IP) - 而 pods 基本上就是您使用前 deployment 对象部署的应用容器) .

    您需要拥有 service 对象,因为部署对象中的 pods 可以被杀死,按比例放大和缩小,并且您不能依赖它们的IP地址,因为它们不会持久化 .

    所以你需要一个像 service 这样的对象,它给那些 pods 一个稳定的IP .

    只是想给你一些关于 pods 的背景知识,所以你知道事情是如何协同工作的 .

    希望为你清除一些东西,不久前我在你的鞋子里:)

相关问题