如何配置 Kubernetes 多 Pod 部署
How to configure a Kubernetes Multi-Pod Deployment
我想通过 k8s 部署对象管理我的部署来部署应用程序集群。文档让我非常困惑。我的基本布局具有以下独立缩放的组件:
- API 服务器
- UI 服务器
- Redis 缓存
- Timer/Scheduled任务服务器
从技术上讲,以上所有 4 个都属于单独的 pods,它们是独立缩放的。
我的问题是:
- 我是否需要创建
pod.yml
文件然后以某种方式在 deployment.yml
文件中引用它们,或者部署文件是否也可以嵌入 pod 定义?
- K8s 文档似乎暗示
Deployment
的 spec
部分等同于定义 one pod。那是对的吗?如果我想声明性地描述多 pod 部署怎么办?我需要多个 deployment.yml 文件吗?
您可以使用 Kubernetes API reference for the Deployment and you'll find that the spec
->template
field is of type PodTemplateSpec
along with the related comment (Template describes the pods that will be created.) it answers you questions. A longer description can of course be found in the Deployment user guide。
回答您的问题...
1) Pods
由 Deployment
管理,单独定义它们没有意义,因为它们是由 Deployment 按需创建的。请记住,同一 pod 类型可能有更多副本。
2) 对于列表中的每个应用程序,您必须定义一个 Deployment
- 这在涉及不同副本计数和应用程序推出时也很有意义。
3) 你没有问过,但它是相关的 - 除了单独的 Deployments
你的每个应用程序还需要一个专用的 Service
所以其他人可以访问它。
Pagids 的回答包含大部分基础知识。您应该为您的方案创建 4 Deployments
。每个部署都将创建一个 ReplicaSet
,用于安排和监督 Deployment
的 PODs
集合。
每个 Deployment
很可能还需要在其前面加上 Service
才能访问。我通常会创建一个包含 Deployment
和相应 Service
的 yaml 文件。这是我使用的 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
这里有一些额外的信息需要澄清:
- A
POD
不是可缩放单元。安排 PODs 的 Deployment
是。
Deployment
表示一组 PODs 一起实现一个目的。
- 你可以有很多
Deployments
在集群的虚拟网络中一起工作。
- 要访问可能由不同节点上的许多
PODs
运行 组成的 Deployment
,您必须创建一个服务。
- 部署旨在包含无状态服务。如果您需要存储状态,则需要创建
StatefulSet
(例如,对于数据库服务)。
补充信息:
API 服务器使用部署
UI 服务器使用部署
Redis缓存使用statefulset
Timer/Scheduled 任务服务器可能使用有状态集(如果您的服务有一些状态)
我想通过 k8s 部署对象管理我的部署来部署应用程序集群。文档让我非常困惑。我的基本布局具有以下独立缩放的组件:
- API 服务器
- UI 服务器
- Redis 缓存
- Timer/Scheduled任务服务器
从技术上讲,以上所有 4 个都属于单独的 pods,它们是独立缩放的。
我的问题是:
- 我是否需要创建
pod.yml
文件然后以某种方式在deployment.yml
文件中引用它们,或者部署文件是否也可以嵌入 pod 定义? - K8s 文档似乎暗示
Deployment
的spec
部分等同于定义 one pod。那是对的吗?如果我想声明性地描述多 pod 部署怎么办?我需要多个 deployment.yml 文件吗?
您可以使用 Kubernetes API reference for the Deployment and you'll find that the spec
->template
field is of type PodTemplateSpec
along with the related comment (Template describes the pods that will be created.) it answers you questions. A longer description can of course be found in the Deployment user guide。
回答您的问题...
1) Pods
由 Deployment
管理,单独定义它们没有意义,因为它们是由 Deployment 按需创建的。请记住,同一 pod 类型可能有更多副本。
2) 对于列表中的每个应用程序,您必须定义一个 Deployment
- 这在涉及不同副本计数和应用程序推出时也很有意义。
3) 你没有问过,但它是相关的 - 除了单独的 Deployments
你的每个应用程序还需要一个专用的 Service
所以其他人可以访问它。
Pagids 的回答包含大部分基础知识。您应该为您的方案创建 4 Deployments
。每个部署都将创建一个 ReplicaSet
,用于安排和监督 Deployment
的 PODs
集合。
每个 Deployment
很可能还需要在其前面加上 Service
才能访问。我通常会创建一个包含 Deployment
和相应 Service
的 yaml 文件。这是我使用的 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
这里有一些额外的信息需要澄清:
- A
POD
不是可缩放单元。安排 PODs 的Deployment
是。 Deployment
表示一组 PODs 一起实现一个目的。- 你可以有很多
Deployments
在集群的虚拟网络中一起工作。 - 要访问可能由不同节点上的许多
PODs
运行 组成的Deployment
,您必须创建一个服务。 - 部署旨在包含无状态服务。如果您需要存储状态,则需要创建
StatefulSet
(例如,对于数据库服务)。
补充信息:
API 服务器使用部署
UI 服务器使用部署
Redis缓存使用statefulset
Timer/Scheduled 任务服务器可能使用有状态集(如果您的服务有一些状态)