我想调用pod内部的一个带有pre-delete钩子的脚本。使用kubernetes钩子,这些脚本看起来像是在实际的pod内部执行的,但是据我所知,在helm中,这些脚本是在一个单独的pod中运行的,所以它们将无法与pod中运行的任何进程交互。有没有办法像kubernetes对helm那样调用pod内部的脚本来删除?
eqqqjvef1#
Helm没有这个功能。Helm hook总是在安装/升级/删除生命周期的某个特定点创建一个新资源,这通常是一个Job;这意味着新Job将创建一个新Pod。Helm不能执行kubectl exec或以其他方式运行命令。一般来说,“在容器中运行命令”不是典型的工作流程,您应该设计您的应用程序和部署以避免这种情况。举个例子,在Kubernetes中,您可以非常轻松地运行Deployment的多个副本,并且您通常会希望运行多个副本,只是为了基本的冗余。现在,如果您的shutdown hook需要在Pod中运行命令,它会执行哪一个,另外两个会发生什么?如果不在乎哪一个,那么启动一个专用的Job来进行清理也应该可以。如果每个Pod都需要运行它,那么在应用程序中放置一个shutdown hook将更加可靠,即使在非Kubernetes的上下文中也可以工作。
kubectl exec
1条答案
按热度按时间eqqqjvef1#
Helm没有这个功能。Helm hook总是在安装/升级/删除生命周期的某个特定点创建一个新资源,这通常是一个Job;这意味着新Job将创建一个新Pod。Helm不能执行
kubectl exec
或以其他方式运行命令。一般来说,“在容器中运行命令”不是典型的工作流程,您应该设计您的应用程序和部署以避免这种情况。举个例子,在Kubernetes中,您可以非常轻松地运行Deployment的多个副本,并且您通常会希望运行多个副本,只是为了基本的冗余。现在,如果您的shutdown hook需要在Pod中运行命令,它会执行哪一个,另外两个会发生什么?如果不在乎哪一个,那么启动一个专用的Job来进行清理也应该可以。如果每个Pod都需要运行它,那么在应用程序中放置一个shutdown hook将更加可靠,即使在非Kubernetes的上下文中也可以工作。