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

yb3bgrhw  于 2023-01-25  发布在  Kubernetes
关注(0)|答案(3)|浏览(259)

我如何执行“helm install”命令并重新安装我在“templates”中定义的资源?我有一些已经存在的自定义资源,所以我想重新安装它们。可以通过helm命令中的参数来完成吗?

rjzwgtxy

rjzwgtxy1#

我认为你的主要问题是:
我有一些已经存在的自定义资源,所以我想重新安装它们。
这意味着删除,然后再次创建

简短回答

否..但可以通过变通方案完成

详细答案

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

  • 创建helm install
  • 更新helm upgrade
  • 删除helm delete

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

    • 1.两次连续升级**

如果图表设计为启用/禁用具有的资源的安装(例如:.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

因此,如果您是图表的构建者,您的任务就是使设计具有功能性。

    • 2.使用helmfile挂钩**

Helmfile是舵手中的舵手。
它在一个名为helmfile.yaml的文件中管理helm版本。
不仅如此,它还可以在安装/或/升级一个Helm版本之前/或/之后调用一些LOCAL命令,这个发生在之前或之后的调用叫做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" ]

现在您只需要运行helmfile apply
我知道CRD不是命名空间的,但是我把命名空间放在钩子中只是为了证明Helmfile可以给你作为变量发布的命名空间,而不需要重复你自己。

dy2hfwbg

dy2hfwbg2#

您可以使用helm upgrade来升级任何现有的已部署图表。
升级参数必须是版本和图表。图表参数可以是:图表引用(example/mariadb)、指向图表目录的path、打包的chart或完全限定的URL。对于图表引用,除非设置了--version标志,否则将指定最新版本。
要覆盖图表中的值,请使用--values标志并传递到文件中,或使用--set标志并从命令行传递配置。要强制使用字符串值,请使用--set-string。如果值很大,因此您既不想使用--values,也不想使用--set,请使用--set-file从文件中读取单个大值。
可以多次指定--values'/'-f标志。优先级将赋予最后一个(最右边)指定的文件。例如,如果mylvalues.yaml和override.yaml都包含名为“Test”的键,则override.yaml中设置的值将优先
例如

helm upgrade -f myvalues.yaml -f override.yaml redis ./redis
guykilcj

guykilcj3#

我遵循的更简单的方法是执行kubectl delete job db-migrate-job --ignore-not-found,特别是对于helm升级期间的预先存在的作业

相关问题