1

在 Kubernetes 的集群中组织 Pod 的常用方法是什么?

我有一个 Jenkins 构建服务器、Docker 注册表、Git 存储库和其他我想在 Google Container Engine 中运行的开发工具。我是否为它们中的每一个创建一个集群?或者可以在每个节点上调度多个 pod?

所以我的问题是:您会创建一个包含所有这些服务的集群还是多个集群?同样的问题适用于生产、质量保证等环境。我是为每个环境创建一个集群还是将它们放在同一个集群中?

4

2 回答 2

1

要回答您的第一个问题,可以在每个节点上安排多个 pod。

Google Container Engine / Kubernetes 最好的部分之一是它非常灵活,因此您可以以最适合您的方式构建您的服务。对于您的特定用例,我认为单个集群是有意义的,因为您要运行的所有应用程序都密切相关。您需要考虑一下为您的集群选择合适的大小(包括 VM 的数量和每个 VM 的大小)以适应您的整个工作负载。

您可以尝试为 QA 和 Prod 工作负载创建单个集群,也可以将它们拆分到多个集群中。在 Kubernetes 对 QoS(用于调度 pod)有更好的支持之前,保持 QA 环境独立(并且规模可能更适度)可能更有意义。

于 2014-12-16T05:56:00.530 回答
1

通常,Pod 由集群上的不同节点托管,具体取决于 Pod 所需的资源,并且运行中的 Pod 可能不会使节点过载。此外,集群中的单个节点可以托管多个 Pod。

具体到这个问题,当谈到所有的开发工具时,这里的所有 pod 都应该托管在一个节点上,因为它们都必须相互通信。当不同环境出现问题时,明智的做法是将它们托管在不同节点但相同的集群上。

Kubernetes 为我们提供了额外的优势,即选择我们希望在其上运行 Pod 的节点。在这种情况下,NodeSelector 概念可以派上用场。

kubectl get nodes

kubectl get pods

标记集群中的任何节点:

kubectl label nodes  gke-cluster1-default-pool-4db7fabf-zzx9 disktype=ccd

kubectl get nodes --show-labels

现在创建一个文件来创建一个 pod 并在该文件中提及 nodeSelector。

纳米任务6pod.yaml

apiVersion: v1
kind: Pod
metadata:
 name: pod6
 labels:
   env: test
spec:
  containers:
  - name: container6
    image: nginx
  nodeSelector:
   disktype: ccd

此文件中的 nodeSelector 与前面提到的节点标签的标签相同。

kubectl create -f task6pod.yaml

kubectl get pods -o wide

在此命令之后,您可以看到新创建的 pod 将具有您想要的带有标签的节点。

于 2019-02-07T13:00:13.360 回答