【问题标题】:How to replace the in-memory storage with persistent storage using kustomize如何使用 kustomize 将内存中的存储替换为持久存储
【发布时间】:2021-03-24 14:03:05
【问题描述】:

我正在尝试使用kustomizeGrafana 部署的内存存储替换为persistent storage。我要做的是删除in-memory storage,然后映射persistent storage。但是当我部署它时,它给了我一个错误。

错误

部署“grafana”无效:spec.template.spec.containers[0].volumeMounts[1].name:未找到:“grafana-storage”

自定义版本

{Version:kustomize/v4.0.5 GitCommit:9e8e7a7fe99ec9fbf801463e8607928322fc5245 BuildDate:2021-03-08T20:53:03Z GoOs:linux GoArch:amd64}

kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- https://github.com/prometheus-operator/kube-prometheus
- grafana-pvc.yaml
patchesStrategicMerge:
- grafana-patch.yaml

grafana-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana-storage
  namespace: monitoring
  labels:
    billingType: "hourly"
    region: sng01
    zone: sng01
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
  storageClassName: ibmc-file-bronze

grafana-patch.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: grafana
  name: grafana
  namespace: monitoring
spec:
  template:
    spec:
      volumes:
        # use persistent storage for storing users instead of in-memory storage
        - $patch: delete  <---- trying to remove the previous volume
          name: grafana-storage
        - name: grafana-storage
          persistentVolumeClaim:
            claimName: grafana-storage
      containers:
        - name: grafana
          volumeMounts:
            - name: grafana-storage
              mountPath: /var/lib/grafana

请帮忙。

【问题讨论】:

    标签: kubernetes kubernetes-pvc kustomize


    【解决方案1】:

    $patch: delete 似乎没有像我预期的那样工作。

    最好在 kustomize github 上打开一个问题:https://github.com/kubernetes-sigs/kustomize/issues 并询问开发人员。


    虽然这是我尝试过的补丁,但它似乎可以工作:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: grafana
      name: grafana
      namespace: monitoring
    spec:
      template:
        spec:
          volumes:
            - name: grafana-storage
              emptyDir: null
              persistentVolumeClaim:
                claimName: grafana-storage
          containers:
            - name: grafana
              volumeMounts:
                - name: grafana-storage
                  mountPath: /var/lib/grafana
    

    基于https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/add-new-patchStrategy-to-clear-fields-not-present-in-patch.md

    理论上,以下内容也应该有效:

    spec:
      volumes:
        - $retainKeys:
          - name
          - persistentVolumeClaim
          name: grafana-storage
          persistentVolumeClaim:
            claimName: grafana-storage
    

    但实际上并非如此,我认为这是因为 kustomize 有自己的战略合并实现(与 k8s 不同)。

    【讨论】:

    • 非常感谢您的帮助。我尝试了您在Deployment 中提到的方式,效果很好。非常感谢。删除了$patch: delete 部分。
    • 仅供参考:我已将建议的问题提交给 kustomize 人:#3981,让我们看看。
    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多