Kubernetes:如何配置一组 pods 部署在同一节点上?
Kubernetes: How to config a group of pods to be deployed on the same node?
用例是这样的:
所以我们有几个 pods 使用相同的 persistentVolumeClaim
,accessMode
设置为 ReadWriteOnce
(因为 [=15 的存储 class =] 仅支持 ReadWriteOnce
).
来自 https://kubernetes.io/docs/concepts/storage/persistent-volumes/、
ReadWriteOnce -- the volume can be mounted as read-write by a single node
所以这些pods应该部署在同一个节点上才能访问PVC(否则会失败)。
请问有什么方法可以配置部署yaml文件,让他们部署在同一个节点上吗?或者有什么办法可以解决这个问题?
Chin 已经提到 inter-pod affinity 这是一个有效的解决方案,但我想再提一个解决方案,可能有点争议但在相同情况下仍然有效。
如果您必须将所有容器 运行 放在一个节点上,您可以将所有这些容器放在一个 pod 中,它们将始终在一起,最重要的是,您可以挂载持久卷没有任何麻烦。请记住,过度使用被认为是不好的做法;总是喜欢每个 pod 一个容器而不是每个 pod 多个容器,尽管你的用例可能不符合该规则,但我很难说,因为我对这些一无所知 pods.
的内容
根据Chin建议的pod间亲和性解决方案,我能够解决问题:
以下是我的Deployment
yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-go
namespace: stage
labels:
app: test-go
spec:
replicas: 1
selector:
matchLabels:
app: test-go
template:
metadata:
labels:
app: test-go
service: git
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: service
operator: In
values:
- git
topologyKey: kubernetes.io/hostname
containers:
- name: test-go
image: registry.gitlab.com/xxxxxxx/test-go
imagePullSecrets:
- name: registry-pull-secret
在Deployment
yaml文件中,在pod模板中设置一个标签spec.template.metadata.labels
,然后根据添加的标签添加podAffinity
配置,设置topologyKey
为kubernetes.io/hostname
这样 pods 将部署在同一节点上。
用例是这样的:
所以我们有几个 pods 使用相同的 persistentVolumeClaim
,accessMode
设置为 ReadWriteOnce
(因为 [=15 的存储 class =] 仅支持 ReadWriteOnce
).
来自 https://kubernetes.io/docs/concepts/storage/persistent-volumes/、
ReadWriteOnce -- the volume can be mounted as read-write by a single node
所以这些pods应该部署在同一个节点上才能访问PVC(否则会失败)。
请问有什么方法可以配置部署yaml文件,让他们部署在同一个节点上吗?或者有什么办法可以解决这个问题?
Chin 已经提到 inter-pod affinity 这是一个有效的解决方案,但我想再提一个解决方案,可能有点争议但在相同情况下仍然有效。
如果您必须将所有容器 运行 放在一个节点上,您可以将所有这些容器放在一个 pod 中,它们将始终在一起,最重要的是,您可以挂载持久卷没有任何麻烦。请记住,过度使用被认为是不好的做法;总是喜欢每个 pod 一个容器而不是每个 pod 多个容器,尽管你的用例可能不符合该规则,但我很难说,因为我对这些一无所知 pods.
的内容根据Chin建议的pod间亲和性解决方案,我能够解决问题:
以下是我的Deployment
yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-go
namespace: stage
labels:
app: test-go
spec:
replicas: 1
selector:
matchLabels:
app: test-go
template:
metadata:
labels:
app: test-go
service: git
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: service
operator: In
values:
- git
topologyKey: kubernetes.io/hostname
containers:
- name: test-go
image: registry.gitlab.com/xxxxxxx/test-go
imagePullSecrets:
- name: registry-pull-secret
在Deployment
yaml文件中,在pod模板中设置一个标签spec.template.metadata.labels
,然后根据添加的标签添加podAffinity
配置,设置topologyKey
为kubernetes.io/hostname
这样 pods 将部署在同一节点上。