kubernetes - 为 statefulset 中的每个副本分配单独的存储

kubernetes - 为 statefulset 中的每个副本分配单独的存储

我正在集群中运行一个 statefulset,并尝试分配每个副本(总共 3 个)以分配它们自己的 PVC。不幸的是,我只能提供一个名称作为 claimName。如何确保每个启动 pod 都抓取它自己的 pvc?我使用的 pod 目前称为 test,pvc 也是如此。因此,当我启动容器时,我有一个名为 test-0、test-1 和 test-2 的 pod。我的 PCV 称为 claim-0、claim-1 和 claim-2。我有什么选项可以告诉 pod test-0 抓取 claim-0 pvc,pod-1 抓取 claim-1,等等?感谢您的意见。

答案1

如果 StatefulSet 中的每个 pod 都需要其关闭的 PV,则应使用部分创建 StatefulSet volumeClaimTemplates,如下所示文档

对于 StatefulSet 中定义的每个 VolumeClaimTemplate 条目,每个 Pod 都会收到一个 PersistentVolumeClaim。在上面的 nginx 示例中,每个 Pod 都会收到一个具有 my-storage-class 存储类和 1 Gib 预置存储的单个 PersistentVolume。如果未指定 StorageClass,则将使用默认 StorageClass。当 Pod 被(重新)调度到节点上时,其 volumeMounts 会挂载与其 PersistentVolume Claims 关联的 PersistentVolumes。请注意,当 Pod 或 StatefulSet 被删除时,与 Pod 的 PersistentVolume Claims 关联的 PersistentVolumes 不会被删除。这必须手动完成。

因此如果你创建一个这样的 StatefulSet:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: example
spec:
  replicas: 3
  template:
    spec:
      containers:
        - name: whoami
          image: docker.io/containous/whoami:latest
          ports:
            - name: http
              containerPort: 80
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi

然后你就会得到三个 pod:

$ kubectl get pods
NAME                   READY   STATUS    RESTARTS   AGE
example-0              1/1     Running   0          78s
example-1              1/1     Running   0          73s
example-2              1/1     Running   0          68s

还有三张 PVC:

$ kubectl get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-example-0   Bound    pvc-b31c564d-65fb-43ef-af5d-64faeaae6897   1Gi        RWO            standard       53s
data-example-1   Bound    pvc-28f83158-d10d-450b-a723-954fc113eb92   1Gi        RWO            standard       48s
data-example-2   Bound    pvc-55ae7f94-7ea9-4690-9e27-01e8a09cc3da   1Gi        RWO            standard       43s

每个都链接到一个特定的 pod。

相关内容