如何配置Kubernetes Multi-Pod部署

Raj*_*Raj 41 deployment containers kubernetes google-kubernetes-engine kubernetes-pod

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

  1. API服务器
  2. UI服务器
  3. Redis缓存
  4. 定时器/预定任务服务器

从技术上讲,以上所有4个属于独立缩放的独立窗格.

我的问题是:

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

Osw*_*ann 40

Pagids答案有大部分基础知识.您应该Deployments为您的方案创建4 .每个部署将创建一个ReplicaSet用于调度和监督收集PODsDeployment.

每个Deployment人很可能也需要Service在它前面进行访问.我通常会创建一个yaml文件,其中包含a 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
Run Code Online (Sandbox Code Playgroud)

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

  • A POD不是可扩展的单元.一个Deployment是安排荚是.
  • A Deployment意味着代表一起完成单一目的的单个POD组.
  • 您可以Deployments在群集的虚拟网络中协同工作.
  • 要访问Deployment可能包含许多PODs在不同节点上运行的节点,您必须创建服务.
  • 部署旨在包含无状态服务.如果需要存储需要创建的状态StatefulSet(例如,用于数据库服务).

  • `port:80`表示如果您将服务作为实体来处理,例如通过其名称或服务IP的DNS条目,端口80将转发到提供实际服务的PODS.`nodePort:32xxx`表示如果您通过负载均衡器或节点IP从外部寻址集群节点,则端口32xxx将转发到提供实际服务的PODS. (5认同)
  • 我对在同一服务中使用`port:80`和`nodePort:32756`感到困惑。您能否解释为什么两者都需要? (2认同)
  • 我认为部署的重点是监视一组Pod?我不明白为什么我需要为每个吊舱创建一个部署。 (2认同)

pag*_*gid 14

您可以使用Kubernetes API参考进行部署,您会发现spec- > template字段的类型PodTemplateSpec以及相关注释(模板描述了将要创建的pod).它会回答您的问题.当然可以在部署用户指南中找到更长的描述.

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

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

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

3)你没有问过但它是相关的 - 除了Deployments你的每个应用程序之外还需要一个专用的,Service所以其他人可以访问它.

  • 谢谢@pagid。需要明确的是,虽然 `spec` -> `template` 确实是一个 `PodTemplateSpec`,但它仍然是 *单个 * pod 的规范。是对的吗? (2认同)
  • “这仍然是单个吊舱的规格。对吗?” 是的,单个 pod 模板规范可能会导致实例化多个 pod。 (2认同)