尝试在kubernetes

时间:2016-06-30 22:41:34

标签: 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/]

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文件,因为我没有收到任何错误,因为我添加了这些新行

1 个答案:

答案 0 :(得分:3)

以下是您可能会觉得有用的document about lifecycle hooks

您的选项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,点击其子字段后,您会发现argslifecycle.postStart.exec下无效。

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