簡體   English   中英

如何將使用持久卷聲明的 Kubernetes 部署擴展到 2 個 Pod?

[英]How to scale a Kubernetes deployment which uses a Persistent Volume Claim to 2 Pods?

我有一個需要存儲持久數據的 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 做我想做的事?

您應該為此使用StatefulSet 這適用於具有持久數據的 pod,這些數據應該能夠在 pod 重啟后繼續存在。 副本具有一定的順序並以這種方式命名(my-app-0,my-app-1,...)。 它們按此順序停止和重新啟動,並將在重新啟動/更新后安裝相同的卷。

使用StatefulSet ,您可以使用volumeClaimTemplates通過創建新 pod 來動態創建新的PersistentVolumes 因此,每次創建 pod 時,您的存儲 class 都會配置一個卷。

來自文檔:

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

每個 pod 都應該有自己的持久空間(但具有相同的路徑名),因此不會與其他 pod 混淆。

因此,請改用StatefulSet 大多數事情都會以相同的方式工作,除了每個 Pod 將獲得自己獨特的 Persistent Volume。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM