无法重用现有的持久卷 (GlusterFS)
Unable to reuse existing Persistent Volume (GlusterFS)
描述:
无法将新 PVC 绑定到已包含先前 运行 数据的现有 PV(并且是使用 gluster 存储动态创建的 class)。
- 安装了一个 helm 版本,它创建了 PVC 并从 GlusterStorage 动态生成 PV class。
- 但是由于某些原因,我们需要关闭版本 (
helm del
) 并重新安装它 (helm install
)。但是,想要使用现有的 PV 而不是创建新的。
我尝试了一些事情:
- 按照此处的说明进行操作:https://github.com/kubernetes/kubernetes/issues/48609。但是,这对 GlusterFS 存储解决方案不起作用,因为在我尝试了所需的步骤后,它抱怨说:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling <unknown> default-scheduler error while running "VolumeBinding" filter plugin for pod "opensync-wifi-controller-opensync-mqtt-broker-fbbd69676-bmqqm": pod has unbound immediate PersistentVolumeClaims
Warning FailedScheduling <unknown> default-scheduler error while running "VolumeBinding" filter plugin for pod "opensync-wifi-controller-opensync-mqtt-broker-fbbd69676-bmqqm": pod has unbound immediate PersistentVolumeClaims
Normal Scheduled <unknown> default-scheduler Successfully assigned connectus/opensync-wifi-controller-opensync-mqtt-broker-fbbd69676-bmqqm to rahulk8node1-virtualbox
Warning FailedMount 31s (x7 over 62s) kubelet, rahulk8node1-virtualbox MountVolume.NewMounter initialization failed for volume "pvc-dc52b290-ae86-4cb3-aad0-f2c806a23114" : endpoints "glusterfs-dynamic-dc52b290-ae86-4cb3-aad0-f2c806a23114" not found
Warning FailedMount 30s (x7 over 62s) kubelet, rahulk8node1-virtualbox MountVolume.NewMounter initialization failed for volume "pvc-735baedf-323b-47bc-9383-952e6bc5ce3e" : endpoints "glusterfs-dynamic-735baedf-323b-47bc-9383-952e6bc5ce3e" not found
显然除了 PV,我们还需要持久化 gluster-dynamic-endpoints 和 glusterfs-dynamic-service。但是,这些是在 pod 命名空间中创建的,并且由于 命名空间作为 helm del
的一部分被删除 ,它还会删除这些端点和 svc。
我查看了与 GlusterFS 端点缺失相关的其他页面:https://github.com/openshift/origin/issues/6331 但这不适用于当前版本的存储 class。当我将 endpoint: "heketi-storage-endpoints"
添加到 Storage class 参数时,在创建 PVC 时出现以下错误:
Failed to provision volume with StorageClass "glusterfs-storage": invalid option "endpoint" for volume plugin kubernetes.io/glusterfs
此选项已于 2016 年删除 - 请参阅 https://github.com/gluster/gluster-kubernetes/issues/87。
是否可以使用新 PVC 中的现有 PV?
我想推荐一个不同的方法。
您可以在 PVC 上使用此注释,它会在删除时跳过删除资源。
helm.sh/resource-policy: "keep"
Here是一个例子:
{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: {{ template "bitcoind.fullname" . }}
annotations:
"helm.sh/resource-policy": keep
labels:
app: {{ template "bitcoind.name" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
spec:
accessModes:
- {{ .Values.persistence.accessMode | quote }}
resources:
requests:
storage: {{ .Values.persistence.size | quote }}
{{- if .Values.persistence.storageClass }}
{{- if (eq "-" .Values.persistence.storageClass) }}
storageClassName: ""
{{- else }}
storageClassName: "{{ .Values.persistence.storageClass }}"
{{- end }}
{{- end }}
{{- end }}
您还可以使用参数,如 here 所示,他们在您安装 helm chart 时实施了一个标记选项(是真还是假)。
persistence.annotations."helm.sh/resource-policy"
您还可以包含一个可配置的参数来设置您要重用的 pvc 的名称,如 here。
在此示例中,您可以在图表安装期间设置 persistence.existingClaim=mysql-pvc
。
所以当你 运行 你的 helm 安装时,你可以混合所有东西,看起来应该像这样:
helm install --namespace myapp --set existingClaim=mysql-pvc stable/myapp
描述: 无法将新 PVC 绑定到已包含先前 运行 数据的现有 PV(并且是使用 gluster 存储动态创建的 class)。
- 安装了一个 helm 版本,它创建了 PVC 并从 GlusterStorage 动态生成 PV class。
- 但是由于某些原因,我们需要关闭版本 (
helm del
) 并重新安装它 (helm install
)。但是,想要使用现有的 PV 而不是创建新的。
我尝试了一些事情: - 按照此处的说明进行操作:https://github.com/kubernetes/kubernetes/issues/48609。但是,这对 GlusterFS 存储解决方案不起作用,因为在我尝试了所需的步骤后,它抱怨说:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling <unknown> default-scheduler error while running "VolumeBinding" filter plugin for pod "opensync-wifi-controller-opensync-mqtt-broker-fbbd69676-bmqqm": pod has unbound immediate PersistentVolumeClaims
Warning FailedScheduling <unknown> default-scheduler error while running "VolumeBinding" filter plugin for pod "opensync-wifi-controller-opensync-mqtt-broker-fbbd69676-bmqqm": pod has unbound immediate PersistentVolumeClaims
Normal Scheduled <unknown> default-scheduler Successfully assigned connectus/opensync-wifi-controller-opensync-mqtt-broker-fbbd69676-bmqqm to rahulk8node1-virtualbox
Warning FailedMount 31s (x7 over 62s) kubelet, rahulk8node1-virtualbox MountVolume.NewMounter initialization failed for volume "pvc-dc52b290-ae86-4cb3-aad0-f2c806a23114" : endpoints "glusterfs-dynamic-dc52b290-ae86-4cb3-aad0-f2c806a23114" not found
Warning FailedMount 30s (x7 over 62s) kubelet, rahulk8node1-virtualbox MountVolume.NewMounter initialization failed for volume "pvc-735baedf-323b-47bc-9383-952e6bc5ce3e" : endpoints "glusterfs-dynamic-735baedf-323b-47bc-9383-952e6bc5ce3e" not found
显然除了 PV,我们还需要持久化 gluster-dynamic-endpoints 和 glusterfs-dynamic-service。但是,这些是在 pod 命名空间中创建的,并且由于 命名空间作为 helm del
的一部分被删除 ,它还会删除这些端点和 svc。
我查看了与 GlusterFS 端点缺失相关的其他页面:https://github.com/openshift/origin/issues/6331 但这不适用于当前版本的存储 class。当我将 endpoint: "heketi-storage-endpoints"
添加到 Storage class 参数时,在创建 PVC 时出现以下错误:
Failed to provision volume with StorageClass "glusterfs-storage": invalid option "endpoint" for volume plugin kubernetes.io/glusterfs
此选项已于 2016 年删除 - 请参阅 https://github.com/gluster/gluster-kubernetes/issues/87。
是否可以使用新 PVC 中的现有 PV?
我想推荐一个不同的方法。
您可以在 PVC 上使用此注释,它会在删除时跳过删除资源。
helm.sh/resource-policy: "keep"
Here是一个例子:
{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: {{ template "bitcoind.fullname" . }}
annotations:
"helm.sh/resource-policy": keep
labels:
app: {{ template "bitcoind.name" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
spec:
accessModes:
- {{ .Values.persistence.accessMode | quote }}
resources:
requests:
storage: {{ .Values.persistence.size | quote }}
{{- if .Values.persistence.storageClass }}
{{- if (eq "-" .Values.persistence.storageClass) }}
storageClassName: ""
{{- else }}
storageClassName: "{{ .Values.persistence.storageClass }}"
{{- end }}
{{- end }}
{{- end }}
您还可以使用参数,如 here 所示,他们在您安装 helm chart 时实施了一个标记选项(是真还是假)。
persistence.annotations."helm.sh/resource-policy"
您还可以包含一个可配置的参数来设置您要重用的 pvc 的名称,如 here。
在此示例中,您可以在图表安装期间设置 persistence.existingClaim=mysql-pvc
。
所以当你 运行 你的 helm 安装时,你可以混合所有东西,看起来应该像这样:
helm install --namespace myapp --set existingClaim=mysql-pvc stable/myapp