如何配置Kubernetes Multi-Pod部署

时间:2017-04-04 20:23:02

标签: deployment kubernetes containers google-kubernetes-engine kubernetes-pod

我想通过k8s Deployment对象管理我的部署来部署应用程序集群。文档让我非常困惑。我的基本布局具有以下独立扩展的组件:

  1. API服务器
  2. UI服务器
  3. Redis缓存
  4. 定时器/预定任务服务器
  5. 从技术上讲,以上所有4个都属于独立缩放的独立窗格。

    我的问题是:

    1. 我是否需要创建pod.yml个文件,然后以deployment.yml文件的形式引用它们,或者部署文件是否也可以嵌入pod定义?
    2. K8s文档似乎暗示spec的{​​{1}}部分等同于定义一个 pod。那是对的吗?如果我想以声明方式描述多pod部署,该怎么办?我是否需要多个deployment.yml文件?

3 个答案:

答案 0 :(得分:27)

Pagids的答案有大部分基础知识。您应该为您的方案创建4 Deployments。每个部署都将创建一个ReplicaSet,用于安排和监督PODs的{​​{1}}集合。

每个Deployment很可能还需要在其前面Deployment才能进行访问。我通常创建一个yaml文件,其中包含Service和相应的Deployment。以下是我使用的Service的示例:

nginx.yaml

这里有一些额外的信息需要澄清:

  • apiVersion: v1 kind: Service metadata: annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" name: nginx labels: app: nginx spec: type: NodePort ports: - port: 80 name: nginx targetPort: 80 nodePort: 32756 selector: app: nginx --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginxdeployment spec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginxcontainer image: nginx:latest imagePullPolicy: Always ports: - containerPort: 80 不是可扩展单位。计划POD的POD是。
  • Deployment意味着代表一组POD一起完成一个目的。
  • 您可以在群集的虚拟网络中同时使用许多Deployment
  • 要访问可能包含在不同节点上运行的许多Deployments的{​​{1}},您必须创建服务。
  • 部署旨在包含无状态服务。如果您需要存储状态,则需要创建Deployment(例如,用于数据库服务)。

答案 1 :(得分:12)

您可以对API reference使用Kubernetes Deployment,并且您会发现spec - > template字段的类型为PodTemplateSpec }以及相关的评论(模板描述了将要创建的pod。)它会回答你的问题。当然可以在Deployment user guide中找到更长的描述。

回答你的问题......

1)PodsDeployment管理,并且单独定义它们并不合理,因为它们是由部署按需创建的。请记住,可能有更多相同pod类型的副本。

2)对于列表中的每个应用程序,您必须定义一个Deployment - 这对于差异副本计数和应用程序推出也很有意义。

3)您还没有问过但相关的 - 以及单独的Deployments您的每个应用程序还需要一个专用的Service所以其他人可以访问它。

答案 2 :(得分:0)

附加信息:
API server 使用部署
UI服务器使用部署
Redis缓存使用statefulset
定时器/计划任务服务器可能使用 statefulset(如果您的服务有一些状态)