有没有办法安排 pods 与持久卷声明具有亲和力?

Is there a way to schedule pods to have affinity with a persistent volume claim?

我有一组我想要的 Kubernetes cronjobs 运行。 Persistent Volume Claim 是 ReadWriteOnce。将有一个作业更新卷上的数据,而其他作业将读取数据。 pvc 一次只能绑定到一个节点,但我的理解(这可能是错误的)是其他 pods 可以只读方式挂载它,前提是它们被安排在正确的节点上。 (显然只有一个pod可以挂载它read/write。)

我看到我可以使用 podAffinity 在同一个节点上安排两个 pods,但是有没有办法对 select 附加了 pvc 的节点使用亲和力?或者在 GKE 中有可能做到这一点吗?我的声明如下所示:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-persistent-volume
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
  storageClassName: standard

您应该能够使用带有标签的 Pod Affinity 并将 topologyKey 设置为 kubernetes.io/hostname 来执行此操作。您的关联节看起来像:

affinity:
  podAffinity: 
    requiredDuringSchedulingIgnoredDuringExecution: 
    - labelSelector:
        matchExpressions:
        - key: app 
          operator: In 
          values:
          - mycronjob 
      topologyKey: kubernetes.io/hostname

这将在同一节点上安排标签为 app=mycronjob 的作业。