首页 > 解决方案 > 如何将使用 Persistent Volume Claim 的 Kubernetes 部署扩展到 2 个 Pod?

问题描述

我有一个需要存储持久数据的 Kubernetes 部署(确切地说是 apache 水槽)。它有一个 PVC 设置并绑定到一个路径,它可以正常工作。

当我通过 kubernetes 仪表板简单地增加部署规模时,它给了我一个错误,说多个 pod 正在尝试附加相同的持久卷。我的部署描述是这样的(我试图删除不相关的部分)

{
    "kind": "Deployment",
    "apiVersion": "extensions/v1beta1",
    "metadata": {
        "name": "myapp-deployment",    
        "labels": {
          "app": "myapp",
          "name": "myapp-master"
        },    
    "spec": {
    "replicas": 1,
    "selector": {
      "matchLabels": {
        "app": "myapp",
        "name": "myapp-master"
      }
    },
    "template": {
      "spec": {
        "volumes": [
          {
            "name": "myapp-data",
            "persistentVolumeClaim": {
              "claimName": "myapp-pvc"
            }
          }
        ],
        "containers": [
          {
            "name": "myapp",
            "resources": {},
            "volumeMounts": [
              {
                "name": "ingestor-data",
                "mountPath": "/data"
              }
            ]
          }
        ]
      }
    },...

每个 pod 都应该有自己的持久空间(但具有相同的路径名),因此不会与其他 pod 混淆。我尝试在上面的卷阵列中添加一个新卷,并在卷挂载阵列中添加一个卷挂载,但它不起作用(我猜这意味着“将两个卷绑定到一个容器”)

我应该改变什么来拥有 2 个具有单独持久卷的 pod?我应该改变什么来拥有 N 个 Pod 和 N 个 PVC,这样我就可以自由地向上和向下扩展部署?

注意:我在这里看到了一个类似的问题,它解释了 N 个 Pod 无法使用部署完成。是否可以只用 2 个 pod 做我想做的事?

标签: kubernetespersistent-volumespersistent-volume-claims

解决方案


你应该使用 a StatefulSet。这适用于具有持久数据的 pod,这些数据应该能够在 pod 重启后继续存在。副本具有一定的顺序并以这种方式命名(my-app-0,my-app-1,...)。它们按此顺序停止和重新启动,并将在重新启动/更新后安装相同的卷。

StatefulSet您可以使用 a通过创建新 podvolumeClaimTemplates来动态创建新的。PersistentVolumes因此,每次创建 pod 时,您的存储类都会配置一个卷。

来自文档:

volumeClaimTemplates 将使用 PersistentVolume Provisioner 提供的 PersistentVolumes 提供稳定的存储

volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "my-storage-class"
      resources:
        requests:
          storage: 1Gi

有关更多详细信息,请参阅文档: https ://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#components


推荐阅读