在Kubernetes中组织群集中的pod的常用方法是什么?
我有一个Jenkins构建服务器,Docker注册表,Git存储库以及我想在Google Container Engine中运行的其他开发工具。我为每个群集创建一个群集吗?或者可以在每个节点上安排多个pod?
所以我的问题是:您是否会创建一个包含所有这些服务或多个群集的群集? 同样的问题适用于生产,qa等环境。我是为每个环境创建一个集群还是将它们放在同一个集群中?
答案 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将具有您想要的带有标签的节点。