![](/img/trans.png)
[英]Google Cloud Kubernetes Persistent Volume Claim error in deployment Yaml
[英]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.