不赞成使用kubectl run-寻找替代方案

时间:2018-10-19 10:40:03

标签: kubernetes kubectl

我正在使用带有环境参数的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。

有什么想法如何替换此运行命令吗?

7 个答案:

答案 0 :(得分:12)

作为问题的作者,让我解释一下此弃用背后的意图。就像布伦丹在his answer中解释的那样,kubectl run本身并没有被弃用,只有所有生成器,除了为您创建Pod的生成器。

此更改的原因有两个:

  1. kubectl run命令的绝大多数输入参数对于新手和旧计时器来说都是压倒性的。弄清楚调用的结果并不容易。您需要考虑几个传递的选项以及服务器版本。

  2. 考虑到可能性矩阵的增长速度超出我们的处理能力,因此其背后的代码也很混乱。

这就是为什么我们试图使人们不再使用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

解决方案是使用createapply -f。 后者使用yml文件。