【问题标题】:Use ephemeral volumes in K8S cluster在 K8S 集群中使用临时卷
【发布时间】:2020-01-06 04:22:33
【问题描述】:

我有一个使用 Kube-spray 创建的 k8s 集群。使用 Rook 支持卷配置。到目前为止,我一直在使用持久卷。

使用 helm chart 部署应用程序。为了测试目的,helm 版本会多次升级。我希望每次升级图表时 pod 都使用新卷。我不希望 pod 在 helm 升级后使用旧数据。

我怎样才能做到这一点?如何使用临时卷?

在执行 helm 升级之前已尝试删除 PV。

【问题讨论】:

  • 你在部署什么舵图?
  • 这是一个部署我们自己的应用程序的图表。例如,我们可以考虑 postgres 图表。为 postgres 设置临时卷应该怎么做?

标签: kubernetes volume kubernetes-rook


【解决方案1】:

helm upgrade 将尽可能多地保留现有基础设施。如果您已经有一个名为 myapp-pvc 的 PersistentVolumeClaim,并且您运行 helm upgrade,它将注意到 PVC 已经存在,并保持原样。我认为这发生在 Helm 层,但即使 Helm 向 Kubernetes 上传了相同的 PVC 描述,它仍然不会导致任何变化。

直接的方法是运行 helm del --purge 现有安装,等待 PVC 完全清理干净,然后重新运行 helm install

另一种可能的方法是在 PVC 名称中编码一些唯一或随机值。诀窍是,您需要在同一图表安装中的所有使用中使用相同的值,但如果升级图表,则需要不同。您可以使用chart metadata 的组合来提供此功能

{{- define "myapp.pvc.name" -}}
{{ .Release.Name }}-{{ .Chart.Name }}-pvc
{{- if .Values.destroyPersistentState -}}
-{{ .Release.Revision }}
{{- end -}}
{{- end -}}

【讨论】:

  • emtpyDir 也会在每次容器重启时清除。也许安装前/安装后的作业可以清理 pvc?
  • @Matt emptyDirs 在容器重启时不会被清除。当 pod 被移除时,emptyDirs 会被销毁。
  • 抱歉...是的 pod 停止/启动
【解决方案2】:

我们可以尝试临时卷的一个技巧是:

  1. 使用 emptyDir 卷而不是 pv 或 pvc 安装图表。
  2. 使用该部署运行测试。这会改变卷的内容。
  3. 删除使用 emptyDir 卷的 pod。这也将删除当前的卷数据。 Pod 将自动重新创建。
  4. 发送helm upgrade

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 2018-08-23
    • 2018-10-18
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多