Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 在服务帐户之前创建头盔预安装作业_Kubernetes_Kubernetes Helm - Fatal编程技术网

Kubernetes 在服务帐户之前创建头盔预安装作业

Kubernetes 在服务帐户之前创建头盔预安装作业,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,作为我的应用程序helm chart的一部分,我有一项运行数据库迁移的工作。我已经用hook helm.sh/hook注释了这个作业:预安装、预升级,以确保在部署应用程序之前运行迁移。我希望使用与我的应用程序部署使用的相同的服务帐户和配置映射,但是在执行作业时尚未创建这些资源,导致以下错误: 警告失败创建8s作业控制器错误创建:pods db迁移-被禁止:查找服务帐户时出错开发平台/平台:未找到serviceaccount平台 根据helm安装,应在作业之前创建服务帐户和配置映射。作为预安装运行

作为我的应用程序helm chart的一部分,我有一项运行数据库迁移的工作。我已经用hook helm.sh/hook注释了这个作业:预安装、预升级,以确保在部署应用程序之前运行迁移。我希望使用与我的应用程序部署使用的相同的服务帐户和配置映射,但是在执行作业时尚未创建这些资源,导致以下错误:

警告失败创建8s作业控制器错误创建:pods db迁移-被禁止:查找服务帐户时出错开发平台/平台:未找到serviceaccount平台

根据helm安装,应在作业之前创建服务帐户和配置映射。作为预安装运行作业时,行为是否无效


是的,根据官方文档,预安装挂钩:

在呈现模板之后,但在Kubernetes中创建任何资源之前执行


我建议将迁移作为init容器迁移到主应用程序的pod。这样,重用现有的configmaps和服务帐户就变得微不足道了。在pods容器启动之前,Init容器需要运行到完成。这样,您还可以确保在启动应用程序之前迁移数据库。有关init容器的官方文档,请参阅。

是的,从官方文档中,预安装挂钩:

在呈现模板之后,但在Kubernetes中创建任何资源之前执行


我建议将迁移作为init容器迁移到主应用程序的pod。这样,重用现有的configmaps和服务帐户就变得微不足道了。在pods容器启动之前,Init容器需要运行到完成。这样,您还可以确保在启动应用程序之前迁移数据库。有关init容器的官方文档,请参阅。

头盔挂钩不限于作业

您可以在预安装阶段使用与作业相同的helm hook注释创建serviceaccount和configmap

注意:如果在预安装阶段后需要可用的serviceaccount和configmap,请不要将“helm.sh/hook删除策略”设置为“hook successed”

例如:

apiVersion: v1
  kind: ServiceAccount
  metadata:
    name: my-sa    
    annotations:
      helm.sh/hook: pre-install
      helm.sh/hook-delete-policy: before-hook-creation
      helm.sh/hook-weight: "-10"

舵钩不限于工作

您可以在预安装阶段使用与作业相同的helm hook注释创建serviceaccount和configmap

注意:如果在预安装阶段后需要可用的serviceaccount和configmap,请不要将“helm.sh/hook删除策略”设置为“hook successed”

例如:

apiVersion: v1
  kind: ServiceAccount
  metadata:
    name: my-sa    
    annotations:
      helm.sh/hook: pre-install
      helm.sh/hook-delete-policy: before-hook-creation
      helm.sh/hook-weight: "-10"
当我使用Helm钩子运行ServiceAccount创建时(如前一个示例中所示),会有点混淆此错误:

错误:ServiceAccount demo-33-service-account无效:元数据。标签:无效值:-10:有效标签必须是空字符串或由字母数字字符“-”、“u”或“.”组成,并且必须以字母数字字符开头和结尾,例如“MyValue”或“my_value”或“12345”,用于验证的正则表达式是“[a-Za-z0-9][a-Za-z0-9]”*?[A-Za-z0-9]?'

这是因为头盔。sh/钩重:-10

我还尝试对ServiceAccount仅使用正权重0,对作业仅使用正权重10,但运气不好-作业在ServiceAccount创建和阻塞之前启动。当我手动删除阻塞的作业时,由挂钩创建的ServiceAccount成功。我想这是因为挂钩在呈现模板之后,但在K中创建任何资源之前执行优步网见

也许安装后的hook for Job会起到解救作用,但我使用initContainers为迁移作业解决了这个问题,谢谢@winston。

当我使用Helm hooks创建ServiceAccount时,就像前面的示例一样,这个错误让人有点困惑:

错误:ServiceAccount demo-33-service-account无效:元数据。标签:无效值:-10:有效标签必须是空字符串或由字母数字字符“-”、“u”或“.”组成,并且必须以字母数字字符开头和结尾,例如“MyValue”或“my_value”或“12345”,用于验证的正则表达式是“[a-Za-z0-9][a-Za-z0-9]”*?[A-Za-z0-9]?'

这是因为头盔。sh/钩重:-10

我还尝试对ServiceAccount仅使用正权重0,对作业仅使用正权重10,但运气不好-作业在ServiceAccount创建和阻塞之前启动。当我手动删除阻塞的作业时,由挂钩创建的ServiceAccount成功。我想这是因为挂钩在呈现模板之后,但在K中创建任何资源之前执行优步网见


也许作业的安装后钩子会起到解救作用,但我在迁移作业中使用initContainers解决了这个问题,谢谢@winston。

谢谢@winston。由于部署的每个pod都运行Init容器,我偏离了这种方法。如果超过ne吊舱正在创建中
d同时?如果我继续执行预安装钩子路径,看起来我必须以不同的方法传递数据库配置,可能需要创建作业自己的配置映射,该映射从与applicationHey@JamesDowning相同的值文件中提取!这一切都取决于你正在部署的应用程序。理想情况下,运行迁移的容器应该在这样做时锁定数据库,而pod的其他副本则等待迁移完成。然而,这需要一个特别健壮的应用程序,它并不总是可行的。初始化作业的另一种方法是,还可以部署一个普通的、带有helm的旧作业来运行迁移,并让初始化作业检查所述迁移作业是否已经完成,有点像这样:谢谢@winston。由于部署的每个pod都运行Init容器,所以我偏离了这种方法。如果同时创建多个pod,在执行数据库迁移时,这难道不会导致问题吗?如果我继续执行预安装钩子路径,看起来我必须以不同的方法传递数据库配置,可能需要创建作业自己的配置映射,该映射从与applicationHey@JamesDowning相同的值文件中提取!这一切都取决于你正在部署的应用程序。理想情况下,运行迁移的容器应该在这样做时锁定数据库,而pod的其他副本则等待迁移完成。然而,这需要一个特别健壮的应用程序,它并不总是可行的。init作业的另一种方法是部署一个普通的旧作业,该作业带有运行迁移的helm,并具有检查所述迁移作业是否已完成的init作业,有点像这样:这正是我最终实现的方法。但是,您能否澄清一下,没有设置钩子删除策略。巧合的是,我为作业所需的confimap和secrets文件设置了helm.sh/hook-delete-policy:hook successed,它似乎可以工作,我只希望configmap和secrets可用于作业,一旦作业完成,它们就可以被删除。是的,如果在预安装阶段后没有使用configmap和serviceccount,您可以将删除策略设置为hook successed。它将适用于您的工作,但不会在以后使用。这正是我最终实现的方法。但是,您能否澄清一下,没有设置钩子删除策略。巧合的是,我为作业所需的confimap和secrets文件设置了helm.sh/hook-delete-policy:hook successed,它似乎可以工作,我只希望configmap和secrets可用于作业,一旦作业完成,它们就可以被删除。是的,如果在预安装阶段后没有使用configmap和serviceccount,您可以将删除策略设置为hook successed。它将适用于您的工作,但不适用于以后的工作。