72

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

  1. API 服务器
  2. 用户界面服务器
  3. Redis 缓存
  4. 定时器/计划任务服务器

从技术上讲,以上 4 个都属于独立扩展的独立 pod。

我的问题是:

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

3 回答 3

67

Pagids 的答案具有大部分基础知识。Deployments您应该为您的场景创建 4 个。每个部署都会创建一个ReplicaSet调度和监督PODs.Deployment

每个Deployment人很可能还需要Service在其前面进行访问。我通常创建一个单独的 yaml 文件,其中包含 aDeployment和对应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

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

  • APOD不是可扩展单元。调度 POD 的ADeployment是。
  • ADeployment表示一组 POD 一起完成一个单一的目的。
  • 您可以Deployments在集群的虚拟网络中同时进行许多工作。
  • 要访问Deployment可能包含许多PODs在不同节点上运行的服务,您必须创建一个服务。
  • 部署旨在包含无状态服务。如果您需要存储您需要创建的状态StatefulSet(例如,用于数据库服务)。
于 2017-04-05T01:58:19.797 回答
21

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

为了回答你的问题...

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

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

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

于 2017-04-04T21:00:50.620 回答
0

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

于 2021-06-16T00:49:24.973 回答