gpt4 book ai didi

docker - Kubernetes Pod 分布

转载 作者:行者123 更新时间:2023-12-02 11:35:35 25 4
gpt4 key购买 nike

过去几年我经常使用 Docker,但对于 Kubernetes 来说我还是个新手。我从今天开始,与我以前使用 Docker swarm 的方式相比,我正在努力思考 Pod 概念的实用性。

假设我有一个包含 7 台功能强大的机器的集群,并且有以下堆栈:

  • 我想要三个 Cassandra 副本,每个副本都在专用计算机中运行 (3/7)
  • 我想要两个 Kafka 副本,每个副本都在专用机器上运行 (5/7)
  • 我想要一个在自己的计算机上运行的 MyProducer 副本,从网络接收消息并将其推送到 Kafka (6/7)
  • 我想要 3 个 MyConsumer 副本全部在最后一台机器 (7/7) 上运行,它们从 Kafka 中提取并插入到 Cassandra 中。

使用 docker swarm,我曾经使用节点标签来处理容器分发,例如我会将三台机器和 Cassandra 容器配置标记为 C_HOST,将 2 台机器和 Kafka 配置标记为 K_HOST,... swarm 部署将正确放置每个容器。

我有以下问题:

  • 与我之前的方法相比,Kubernetes Pod 是否有任何优势(例如简单性)?我知道我仍然需要配置标签,如果是这样,我看不到上诉。

  • 配置这些 Pod 的正确方法是什么?是 1 个用于 Cassandra 副本的 pod、1 个用于 Kafka 副本的 pod、1 个用于 MyConsumer 副本的 pod 和 1 个用于 MyProducer 的 pod?

最佳答案

使用 Pod 反关联性,您可以确保 Pod 不与具有特定标签的其他 Pod 共置。

假设您有一个标签“app”,其值为“cassandra”、“kafka”、“my- Producer”和“my-consumer”。

由于您希望 cassandra、kafka 和 my- Producer 单独位于专用节点上,因此您只需为所有现有标签配置反关联性即可:

(有关完整架构,请参阅 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/)

  podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- cassandra
- kafka
- my-producer
- my-consumer

这适用于“Pod”资源,因此您可以在 Pod 模板的部署中定义它(您还可以在其中定义副本数量)。

由于您希望 my-consumer 的三个实例在同一节点上运行(或者实际上,您不关心它们在哪里运行,因为现在只剩下一个节点),因此您不需要定义任何有关亲和性或反亲和性:

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-consumer
namespace: default
labels:
app: my-consumer
spec:
selector:
matchLabels:
app: my-consumer
replicas: 3 # here you set the number of replicas that should run
template: # this is the pod template
metadata:
labels:
app: my-consumer # now this is the label you can set an anti-affinity to
spec:
containers:
- image: ${IMAGE}
name: my-consumer
# affinity:
# now here below this you'd put the affinity-settings from above
# for the other deployments

关于docker - Kubernetes Pod 分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54944755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com