在kubernetes的生命周期标签下尝试使用命令时出现错误



我成功运行了kubernetes, gcloud和postgres,但我想在pod启动后做一些修改,我试图移动一些文件,所以我尝试了这3个选项

1

 image: paunin/postgresql-cluster-pgsql
      lifecycle:
        postStart:
          exec:
            command: [/bin/cp /var/lib/postgres/data /tmpdatavolume/]
2

image: paunin/postgresql-cluster-pgsql
      lifecycle:
        postStart:
          exec:
            command: 
              - "cp"
              - "/var/lib/postgres/data"
              - "/tmpdatavolume/"

3

image: paunin/postgresql-cluster-pgsql
      lifecycle:
        postStart:
          exec:
            command: ["/bin/cp "]
            args: ["/var/lib/postgres/data","/tmpdatavolume/"]

选项1和2,我得到相同的错误(从kubectl获取事件)

Killing container with docker id f436e40f5df2: PostStart handler: Error ex
ecuting in Docker Container: -1

选项3甚至不允许我上传yaml文件给我这个错误

error validating "postgres-master.yaml": error validating data: found invalid field args for v1.ExecAction; if you choose to ignore these errors, turn validation off with --validate=false 

任何帮助将不胜感激!谢谢。我只是粘贴了我的yaml文件的一部分,因为我没有得到任何错误,因为我添加了那些新行

这是关于生命周期钩子的文档,你可能会觉得有用。

你的选项1不会工作,应该给你你看到的错误,它应该是["/bin/cp","/var/lib/postgres/data","/tmpdatavolume/"]。选项2也是指定它的正确方法。您可以将kubectl exec放入您的pod并键入这些命令以查看生成的错误消息吗?如kubectl exec <pod-name> -i -t -- bash -il

选项3中显示的错误消息意味着您没有将有效的配置传递给API服务器。要了解API定义,请参见v1。生命周期和几次点击进入它的子字段后,你会发现argslifecycle.postStart.exec下无效。

或者,您可以使用kubectl explain找到这些API定义,例如本例中的kubectl explain pods.spec.containers.lifecycle.postStart.exec

最新更新