我正在开发一个用于处理 kubernetes 运行时微服务的应用程序。我实际上做了一些很酷的事情,比如将微服务从一个节点移动到另一个节点。问题是所有副本都在一起。
因此,想象一个微服务有两个副本,并且它在具有两个节点的命名空间上运行。
我想在每个节点设置一个副本。这可能吗?即使在 yaml 文件中,这可能吗? 我正在尝试做我自己的调度程序来做到这一点,但直到现在我还没有成功。
谢谢大家
我认为您正在寻找的是副本集的 NodeSelector。来自文档:
pod 间亲和性和反亲和性允许您根据已在节点上运行的 pod 上的标签(而不是基于节点上的标签)来限制您的 pod 可以调度哪些节点。
我找不到它的文档记录,但我最近在某处读到,当您在部署/副本集之前创建 kubernetes 服务时,副本将跨节点分布。
你应该使用 pod anti-affinify。 YAML 配置示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100 # Strong preference
podAffinityTerm:
topologyKey: kubernetes.io/hostname
labelSelector:
matchLabels:
app: my-app
...