在Google容器引擎中组合群集中的pod

时间:2014-12-14 20:57:46

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

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

我有一个Jenkins构建服务器,Docker注册表,Git存储库以及我想在Google Container Engine中运行的其他开发工具。我为每个群集创建一个群集吗?或者可以在每个节点上安排多个pod?

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

2 个答案:

答案 0 :(得分:1)

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

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

您可以尝试为QA和Prod工作负载创建单个群集,也可以跨群集分割它们。在Kubernetes更好地支持QoS(用于调度pod)之前,将QA环境保持分离(并且可能更适度地调整大小)可能更有意义。

答案 1 :(得分: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。

nano task6pod.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将具有您想要的带有标签的节点。