在 Kubernetes 的集群中组织 Pod 的常用方法是什么?
我有一个 Jenkins 构建服务器、Docker 注册表、Git 存储库和其他我想在 Google Container Engine 中运行的开发工具。我是否为它们中的每一个创建一个集群?或者可以在每个节点上调度多个 pod?
所以我的问题是:您会创建一个包含所有这些服务的集群还是多个集群?同样的问题适用于生产、质量保证等环境。我是为每个环境创建一个集群还是将它们放在同一个集群中?
在 Kubernetes 的集群中组织 Pod 的常用方法是什么?
我有一个 Jenkins 构建服务器、Docker 注册表、Git 存储库和其他我想在 Google Container Engine 中运行的开发工具。我是否为它们中的每一个创建一个集群?或者可以在每个节点上调度多个 pod?
所以我的问题是:您会创建一个包含所有这些服务的集群还是多个集群?同样的问题适用于生产、质量保证等环境。我是为每个环境创建一个集群还是将它们放在同一个集群中?
要回答您的第一个问题,可以在每个节点上安排多个 pod。
Google Container Engine / Kubernetes 最好的部分之一是它非常灵活,因此您可以以最适合您的方式构建您的服务。对于您的特定用例,我认为单个集群是有意义的,因为您要运行的所有应用程序都密切相关。您需要考虑一下为您的集群选择合适的大小(包括 VM 的数量和每个 VM 的大小)以适应您的整个工作负载。
您可以尝试为 QA 和 Prod 工作负载创建单个集群,也可以将它们拆分到多个集群中。在 Kubernetes 对 QoS(用于调度 pod)有更好的支持之前,保持 QA 环境独立(并且规模可能更适度)可能更有意义。
通常,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 将具有您想要的带有标签的节点。