【问题标题】:Organization of pods in cluster in Google Container Engine在 Google Container Engine 中集群中的 Pod 组织
【发布时间】:2015-02-12 22:57:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: java jakarta-ee docker kubernetes google-kubernetes-engine


    【解决方案1】:

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

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

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

    【讨论】:

    • 我明白了,就像我预期的那样。是的,将 QA 和生产保持在不同的集群上是有意义的,因为它们可能需要不同的资源。 “构建工具”可以留在同一个集群上。
    【解决方案2】:

    通常,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 将具有您想要的带有标签的节点。

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 2015-01-10
      • 1970-01-01
      • 2015-07-02
      • 2018-12-25
      • 2014-12-31
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      相关资源
      最近更新 更多