我试图在Kubernetes中运行一个交互式Pod(容器),它不创建作业或部署,并在完成后删除自己。
容器的目的是为我们的开发人员提供一种简单的方法来访问我们的数据库,该数据库没有公共 IP 地址。
目前,我们正在使用这个命令:
kubectl run -i --tty proxy-pgclient --image=private-registry.com/pgclient --restart=Never --env="PGPASSWORD=foobar" -- psql -h dbhost.local -p 5432 -U pg_admin -W postgres
这在您第一次运行它时有效,但是,在退出会话后,如果您尝试再次运行上述操作以再次连接到数据库,我们会得到:
Error from server: jobs.extensions "proxy-pgclient" already exists
强制开发人员删除作业:
kubectl delete job proxy-pgclient
然后才能运行命令并再次连接。
是否有任何方法可以在库伯内特斯中启动交互式容器(Pod),而无需创建作业或部署对象,并在交互式会话关闭时删除该容器?
在原始命令中添加“- rm”标志会导致作业(和Pod)在交互会话完成时被删除,这正是我想要的。然后,该命令变成:
kubectl run -i --tty --rm proxy-pgclient --image=private-registry.com/pgclient --restart=Never --env="PGPASSWORD=foobar" -- psql -h dbhost.local -p 5432 -U pg_admin -W postgres
没有一个简短的< code>kubectl命令可以完全满足您的需求。相反,您可以使用pod描述创建一个yaml/json文件,并运行< code > ku bectl create-f pod . YAML 。您的pod可以设置为永不重启,因此一旦退出就会终止。