更多副本中的 Kubernetes pod - 反亲和规则
Kubernetes pod in more replicas - anti affinity rule
我有一个关于 K8S pod 反亲和规则的问题。我有什么,我需要什么。
我有跨2个数据中心的K8S集群。例如,每个 DC 中有 5 个节点。我有一个 Pod 部署,它在所有 10 个节点上运行 10 个副本。每个节点是 1 个 Pod 副本。
如果一个 DC 崩溃,我想设置规则,不要将 5 个副本从崩溃的 DC 迁移到运行状况良好的 DC。
我发现,可以通过 "Anti-affinity" 规则来完成,但我找不到这种情况的任何示例。你有例子吗?
看看 DaemonSet。它将在每个节点上部署一个副本。
如果一个 DC 崩溃,则 pods 将不会重新部署到另一个 DC。
来自文档
https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
您需要在部署中设置一个选择器并在 anti-affinity 部分指明要匹配的值是什么并使 anti-affinity 为真:
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-cache
spec:
selector:
matchLabels:
app: store
replicas: 3
template:
metadata:
labels:
app: store
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- store
topologyKey: "kubernetes.io/hostname"
containers:
- name: redis-server
image: redis:3.2-alpine
你可以看到它正在使用一个标签选择器来尝试找到键 app
和值 store
这意味着如果一个节点已经有一个带有该标签和值的 pod,kubernetes 将申请 anti-affinity.
我有一个关于 K8S pod 反亲和规则的问题。我有什么,我需要什么。
我有跨2个数据中心的K8S集群。例如,每个 DC 中有 5 个节点。我有一个 Pod 部署,它在所有 10 个节点上运行 10 个副本。每个节点是 1 个 Pod 副本。 如果一个 DC 崩溃,我想设置规则,不要将 5 个副本从崩溃的 DC 迁移到运行状况良好的 DC。
我发现,可以通过 "Anti-affinity" 规则来完成,但我找不到这种情况的任何示例。你有例子吗?
看看 DaemonSet。它将在每个节点上部署一个副本。 如果一个 DC 崩溃,则 pods 将不会重新部署到另一个 DC。
来自文档 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
您需要在部署中设置一个选择器并在 anti-affinity 部分指明要匹配的值是什么并使 anti-affinity 为真:
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-cache
spec:
selector:
matchLabels:
app: store
replicas: 3
template:
metadata:
labels:
app: store
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- store
topologyKey: "kubernetes.io/hostname"
containers:
- name: redis-server
image: redis:3.2-alpine
你可以看到它正在使用一个标签选择器来尝试找到键 app
和值 store
这意味着如果一个节点已经有一个带有该标签和值的 pod,kubernetes 将申请 anti-affinity.