Helm 重新安装已经存在的资源

Ric*_*ano 6 resources kubernetes kubernetes-helm

如何执行“helm install”命令并重新安装我在“模板”中定义的资源?我有一些已经存在的自定义资源,因此我想重新安装它们。可以通过 helm 命令中的参数来做到这一点吗?

Abd*_*UMI 7

我认为你的主要问题是:

我有一些已经存在的自定义资源,因此我想重新安装它们。

这意味着删除然后再次创建

简短回答

不..但可以通过解决方法来完成

详细解答

Helm 通过以下任一方式管理 Kubernetes 清单的发布:

  • 创造helm install
  • 更新中helm upgrade
  • 删除helm delete

但是,您可以按照以下方法之一重新创建资源:

1.连续两次升级

如果您的图表设计为启用/禁用带有( .eg: .Values.customResources.enabled)的资源安装,您可以执行以下操作:

helm -n namespace upgrade <helm-release> <chart> --set customResources.enabled=false

# Then another Run
helm -n namespace upgrade <helm-release> <chart> --set customResources.enabled=true

Run Code Online (Sandbox Code Playgroud)

因此,如果您是图表的构建者,您的任务就是使设计发挥作用。

2.使用helmfile钩子

Helmfile是头盔中的头盔。

它在一个名为 的单个文件中管理您的 helm 版本helmfile.yaml

不仅如此,它还可以在安装/或/升级 Helm 版本之前/或/之后调用一些本地命令。这个发生在之前或之后的调用被命名为hook

对于您的情况,您将需要预同步挂钩。

如果我们将您的 helm 版本组织为 Helmfile 定义,则应该是:

releases:
- name: <helm-release>
  chart: <chart>
  namespace: <namespace>
  hooks:
  - events: ["presync"]
    showlogs: true
    command: kubectl
    args: [ "-n", "{{`{{ .Release.Namespace }}`}}", "delete", "crd", "my-custom-resources" ]
Run Code Online (Sandbox Code Playgroud)

现在你只需要运行helmfile apply

我知道 CRD 没有命名空间,但我将命名空间放在钩子中只是为了证明 Helmfile 可以为您提供 release 的命名空间作为变量,而无需重复自己。


小智 6

您可以使用回滚到当前版本。
首先找到已安装的修订版:

helm list -n <namespace>
Run Code Online (Sandbox Code Playgroud)

然后你可以运行:

helm rollback <name> <revision_number> -n namespace
Run Code Online (Sandbox Code Playgroud)

这将重新安装/恢复最新安装的内容。请注意,您的复活将获得 +1 修订。


Arg*_*dhu 4

您可以使用它helm upgrade来升级任何现有的已部署图表并进行更改。

升级参数必须是版本和图表。图表参数可以是:图表引用 ( example/mariadb)、path图表目录、打包的chart或完全限定的 URL。对于图表参考,除非设置了该标志,否则将指定最新版本--version

要覆盖图表中的值,请使用--values标志并传入文件,或使用--set标志并从命令行传递配置,若要强制使用字符串值,请使用--set-string. 如果值很大,因此您不想使用--values--set,请使用--set-file从文件中读取单个大值。

您可以--values'/'-f多次指定该标志。优先级将赋予最后指定的(最右边的)文件。例如,如果 myvalues.yaml 和 override.yaml 都包含名为“Test”的键,则 override.yaml 中设置的值将优先

例如

helm upgrade -f myvalues.yaml -f override.yaml redis ./redis
Run Code Online (Sandbox Code Playgroud)