2

我成功运行了 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 get events

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 

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

4

1 回答 1

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在这种情况下。

于 2016-06-30T23:48:20.927 回答