![](/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.