我使用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。
有什么想法可以取代这个run命令吗?
9条答案
按热度按时间ttisahbt1#
作为问题的作者,让我解释一下这个弃用背后的意图。就像Brendan在his answer中解释的那样,
kubectl run
本身并没有被弃用,只是所有的生成器,除了为你创建Pod的那个。这种变化的原因有两个方面:
kubectl run
命令的绝大多数输入参数对于新手和老用户来说都是压倒性的。要弄清楚调用的结果并不容易。您需要考虑几个传递的选项以及服务器版本。1.考虑到可能性矩阵的增长速度超过了我们的处理速度,它背后的代码也是一团乱麻。
这就是为什么我们试图让人们远离使用
kubectl run
进行日常工作流,并说服他们使用显式kubectl create
命令更简单。最后,我们希望让使用Docker或任何其他容器引擎的新手在运行容器时,在使用Kubernetes时有相同的体验,其中kubectl run
只会在集群中运行Pod。很抱歉最初的混乱,我希望这将澄清事情。
更新(2020/01/10):从https://github.com/kubernetes/kubernetes/pull/87077
kubectl run
开始,将只创建Pod。所有生成器将被完全删除。tcomlyy62#
您可以用途:
字符串
这并没有被反对。
rlcwz9us3#
kubectl run
默认会创建一个Deployment。其完整的命令是:
字符串
因此,执行
run
命令时将创建的kubernetes
资源由--generator
标志的值定义。弃用消息暗示(也由@soltysh提供的答案澄清)的是,特定的做法将被删除。
因此在未来的
kubernetes
版本中,run
命令将默认(并作为only选项)创建pod(而不是部署),即命令的完整扩展将变为:型
如果您想创建任何其他
kubernetes
资源类型,则无法通过run
命令实现,因此您必须采用显式命令create
或声明式apply -f
,后者指向具有相应资源定义的kubernetes
yml
文件,如型
dzjeubhm4#
我注意到运行以下命令时没有指定generator参数:
字符串
它返回以下错误:
型
这条消息令人困惑的地方在于,你从来没有在第一时间指定--generator参数。然而,这里的要点是按照错误消息的指示显式指定生成器,如下所示:
型
然后它应该成功运行。(他们应该将生成器默认为run-pod/v1以避免这种混淆和/或鼓励使用create)。
然而,根据@soltysh的回答,听起来他们现在推荐的是“创建”而不是“运行”。
mv1qrgav5#
要运行pod,这个简单的命令就足够了:
字符串
查看https://www.k8s-school.fr/resources/blog/1-kubectl-run-deprecated/#pod获取更多信息。
vxf3dgd46#
当您运行
字符串
你这是在含蓄地
型
它告诉Kubernetes它需要生成什么资源
使用
run
处理如此多的参数是非常困难的因此,从v1.15及更高版本开始,除了run-pod之外的所有--generator都被弃用。
见下表
型
解决方案是使用
create
或apply -f
。后者使用yml文件。li9yvcax7#
如果你的问题是按照一本旧书做一些kubectl练习,你可以使用一个弃用的kubectl客户端来运行kubectl run命令,然后运行常规命令。
kubectl 1.17支持run参数。
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.17.md#client-binaries
pjngdqdw8#
正如许多人回答的那样……
run
只用于创建pod。在questioners上下文中(由于调试原因,临时容器(即pod)),此命令完全正常。只需运行pod和
--expose
;放入一些--env
变量;在完成后使用--tty
或--rm
。在这种情况下,
run
没有被弃用,在所有其他情况下,如部署,DaemonSet,StatefulSet等,它是-有一个很好的理由-它太迫切了!kx1ctssn9#
就像消息所说的,你应该使用
kubectl create
。