我正在使用带有环境参数的kubectl run
为我创建临时docker容器(例如,出于调试目的的一些转发)。
由于kubectl
数周以来一直在抱怨kubectl run
被弃用。不幸的是,我找不到合适的替代品。
这是旧命令:
$KUBECTL run -i -t --attach=false --image djfaze/port-forward --env="REMOTE_HOST=$REMOTE_HOST" --env="REMOTE_PORT=$REMOTE_PORT" $POD_NAME
发布此消息时,kubectl
抱怨此消息:
kubectl run --generator=deployment/apps.v1beta1
已弃用,并将在以后的版本中删除。改用kubectl create。
有什么想法如何替换此运行命令吗?
答案 0 :(得分:12)
作为问题的作者,让我解释一下此弃用背后的意图。就像布伦丹在his answer中解释的那样,kubectl run
本身并没有被弃用,只有所有生成器,除了为您创建Pod的生成器。
此更改的原因有两个:
kubectl run
命令的绝大多数输入参数对于新手和旧计时器来说都是压倒性的。弄清楚调用的结果并不容易。您需要考虑几个传递的选项以及服务器版本。
考虑到可能性矩阵的增长速度超出我们的处理能力,因此其背后的代码也很混乱。
这就是为什么我们试图使人们不再使用kubectl run
来进行日常工作流程,并说服他们相信使用显式kubectl create
命令更加简单。最后,我们希望使使用docker或任何其他容器引擎(在其中运行容器)的新手具有与Kubernetes相同的体验,其中kubectl run
仅在集群中运行Pod。
对于最初的困惑,我们深表歉意。我希望这能解决问题。
答案 1 :(得分:8)
您可以使用:
kubectl run --generator=run-pod/v1 --image=busybox busybox --dry-run --env=foo=bar
哪个不被弃用。
答案 2 :(得分:3)
我注意到运行以下命令时未指定生成器参数:
kubectl run <name> --image=<image>
它返回此错误:
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
此消息非常令人困惑的是,您从未首先指定--generator参数。但是,这里的要点是按照错误消息的指示明确指定生成器,如下所示:
kubectl run --generator=run-pod/v1 <name> --image=<image>
然后它将成功运行。 (他们应该刚刚将生成器默认设置为run-pod / v1以避免这种混淆和/或只是鼓励使用create)。
但是,基于@soltysh答案,听起来好像他们现在建议在“运行”之前建议“创建”。
答案 3 :(得分:2)
kubectl run
默认情况下,将创建一个部署。
完整的命令是:
kubectl run --generator=deployment/apps.v1 <deployment_name> --image=<image_to_use_in_the_container_of_the_deployment's_pod>
因此,将在执行kubernetes
命令时创建的run
资源由--generator
标志的值定义。
不赞成使用的消息所暗示的(并且也由@soltysh提供的答案加以澄清)是将删除特定的做法。
因此,在将来的kubernetes
版本中,run
命令将默认(并且作为 only 选项)创建 pod (而不是部署) ,即完整扩展的命令将变为:
kubectl run --generator=run-pod/v1 <pod_name> --image=<image_of_the_container_of_the_pod>
如果您要创建任何其他kubernetes
资源类型,则无法通过run
命令来创建,因此您将不得不使用显式命令性create
或声明性{{1} },稍后指向具有相应资源定义的apply -f
kubernetes
文件,如
yml
答案 4 :(得分:0)
就像消息中说的那样,您应该使用kubectl create
。只需定义一个最小的pod yaml definition并使用kubectl create -f mypod.yml
答案 5 :(得分:0)
要运行Pod,只需执行以下简单命令即可:
kubectl run --restart=Never <name> --image=<image>
检查https://www.k8s-school.fr/resources/blog/1-kubectl-run-deprecated/#pod以获得更多信息。
答案 6 :(得分:0)
跑步时
kubectl run <name> --image=<image> --port=<port>
您正在隐式运行
kubectl run --generator=deployment/apps.v1 run <name> --image=<image> --port=<port>
哪个告诉kubernetes需要生成什么资源
使用run
因此,从v1.15及更高版本开始,不推荐使用除run-pod之外的所有--generators。
请参阅下表
Pod v1 kubectl run --generator=run-pod/v1
ReplicationController (deprecated) v1 kubectl run --generator=run/v1
Deployment (deprecated) extensions/v1beta1 kubectl run --generator=deployment/v1beta1
Deployment (deprecated) apps/v1beta1 kubectl run --generator=deployment/apps.v1beta1
Job (deprecated) batch/v1 kubectl run --generator=job/v1
CronJob (deprecated) batch/v2alpha1 kubectl run --generator=cronjob/v2alpha1
CronJob (deprecated) batch/v1beta1 kubectl run --generator=cronjob/v1beta1
解决方案是使用create
或apply -f
。
后者使用yml文件。