无法重用现有的持久卷(GlusterFS)

时间:2020-04-14 00:35:22

标签: kubernetes glusterfs

说明: 无法将新的PVC绑定到已经包含先前运行数据(并且已使用gluster存储类动态创建)的现有PV。

  • 安装了一个头盔版本,该版本创建了PVC,并从GlusterStorage类动态生成了PV。
  • 但是,由于某些原因,我们需要降低版本(helm del)并重新安装(helm install)。但是,要使用现有的PV而不是创建新的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,但这不适用于当前版本的Storage类。当我将endpoint: "heketi-storage-endpoints"添加到Storage类参数时,在创建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?

1 个答案:

答案 0 :(得分:3)

我想向您建议一种不同的方法。您可以添加

您可以在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的可配置参数,它们在安装舵图时实现了一个选项来标记是或否。

persistence.annotations."helm.sh/resource-policy"

您还可以包括一个可配置的参数,以将要重用的PVC名称设置为here

在本示例中,您可以在安装图表期间设置persistence.existingClaim=mysql-pvc

因此,混合所有内容后,您可以在运行头盔安装时获得如下所示的内容:

helm install --namespace myapp --set existingClaim=mysql-pvc stable/myapp