我成功运行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文件,因为我没有收到任何错误,因为我添加了这些新行
答案 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,点击其子字段后,您会发现args
在lifecycle.postStart.exec
下无效。
或者,您可以使用kubectl explain
找到这些API定义,例如在这种情况下kubectl explain pods.spec.containers.lifecycle.postStart.exec
。