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

Pau*_*lMB 2 docker kubernetes kubectl

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

1

 image: paunin/postgresql-cluster-pgsql
      lifecycle:
        postStart:
          exec:
            command: [/bin/cp /var/lib/postgres/data /tmpdatavolume/]
Run Code Online (Sandbox Code Playgroud)

2

image: paunin/postgresql-cluster-pgsql
      lifecycle:
        postStart:
          exec:
            command: 
              - "cp"
              - "/var/lib/postgres/data"
              - "/tmpdatavolume/"
Run Code Online (Sandbox Code Playgroud)

3

image: paunin/postgresql-cluster-pgsql
      lifecycle:
        postStart:
          exec:
            command: ["/bin/cp "]
            args: ["/var/lib/postgres/data","/tmpdatavolume/"]
Run Code Online (Sandbox Code Playgroud)

在选项 1 和 2 上,我收到相同的错误(来自 kubectl get events

Killing container with docker id f436e40f5df2: PostStart handler: Error ex
ecuting in Docker Container: -1
Run Code Online (Sandbox Code Playgroud)

在选项 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 
Run Code Online (Sandbox Code Playgroud)

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

jan*_*kuo 5

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

您的选项 1 不起作用,应该给您您看到的错误,而应该是["/bin/cp","/var/lib/postgres/data","/tmpdatavolume/"]。选项 2 也是指定它的正确方法。您可以kubectl exec进入您的 Pod 并输入这些命令以查看生成的错误消息吗?做类似的事情kubectl exec <pod-name> -i -t -- bash -il

选项 3 中显示的错误消息意味着您没有将有效的配置传递给 API 服务器。要了解 API 定义,请参阅v1.Lifecycle并单击几下进入其子字段后,您会发现args在下面无效lifecycle.postStart.exec

或者,您可以使用 找到那些 API 定义kubectl explain,例如kubectl explain pods.spec.containers.lifecycle.postStart.exec在这种情况下。