DigitalOcean 上的 Kubernetes "shared" 持久卷

Kubernetes "shared" persistent volume on DigitalOcean

我有一个持久卷定义为

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ghost-cms-content
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: do-block-storage

部署定义为

---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: ghost-cms
spec:
  replicas: 4
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  selector:
    matchLabels:
      app: ghost-cms
      tier: frontend
  template:
    metadata:
      labels:
        app: ghost-cms
        tier: frontend
    spec:
      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: topology.kubernetes.io/region
          whenUnsatisfiable: ScheduleAnyway
          labelSelector:
            matchLabels:
              app: ghost-cms
              tier: frontend
      containers:
        - name: ghost-cms
          image: ghost:4.6-alpine
          imagePullPolicy: Always
          ports:
            - containerPort: 2368
          volumeMounts:
            - mountPath: /var/lib/ghost/content
              name: content
          env:
            - name: url
              value: https://ghost.site
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
      volumes:
        - name: content
          persistentVolumeClaim:
            claimName: ghost-cms-content

但每个副本似乎都有一个不与其余副本共享的唯一卷。例如,当我在其中一个 pods 的 /var/lib/ghost/content 中创建一个文本文件时,我在另一个 pods 的卷中看不到它。我做错了什么?

获得许可的 PVC

accessModes:
  - ReadWriteOnce

每个 pod 将获得一个卷或 PVC,因为它是可读写的。

如果你想跨副本保持共享卷,你可以使用 NFSaccessMode ReadWriteMany

 accessModes:
      - ReadWriteMany

阅读更多信息:https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes

示例:https://medium.com/asl19-developers/create-readwritemany-persistentvolumeclaims-on-your-kubernetes-cluster-3a8db51f98e3

您还可以使用 MinioGlusterFS 创建 NFS 或任何托管服务例如 GCP filestore 提供 NFS 并将其附加到 POD。

GKE 示例:https://medium.com/@Sushil_Kumar/readwritemany-persistent-volumes-in-google-kubernetes-engine-a0b93e203180