kubernetes kubectl run已弃用-正在寻找替代方案

v6ylcynt  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(9)|浏览(150)

我使用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命令吗?

ttisahbt

ttisahbt1#

作为问题的作者,让我解释一下这个弃用背后的意图。就像Brendan在his answer中解释的那样,kubectl run本身并没有被弃用,只是所有的生成器,除了为你创建Pod的那个。
这种变化的原因有两个方面:

  1. kubectl run命令的绝大多数输入参数对于新手和老用户来说都是压倒性的。要弄清楚调用的结果并不容易。您需要考虑几个传递的选项以及服务器版本。
    1.考虑到可能性矩阵的增长速度超过了我们的处理速度,它背后的代码也是一团乱麻。
    这就是为什么我们试图让人们远离使用kubectl run进行日常工作流,并说服他们使用显式kubectl create命令更简单。最后,我们希望让使用Docker或任何其他容器引擎的新手在运行容器时,在使用Kubernetes时有相同的体验,其中kubectl run只会在集群中运行Pod。
    很抱歉最初的混乱,我希望这将澄清事情。
    更新(2020/01/10):从https://github.com/kubernetes/kubernetes/pull/87077kubectl run开始,将只创建Pod。所有生成器将被完全删除。
tcomlyy6

tcomlyy62#

您可以用途:

kubectl run --generator=run-pod/v1 --image=busybox busybox --dry-run --env=foo=bar

字符串
这并没有被反对。

rlcwz9us

rlcwz9us3#

kubectl run默认会创建一个Deployment
其完整的命令是:

kubectl run --generator=deployment/apps.v1 <deployment_name> --image=<image_to_use_in_the_container_of_the_deployment's_pod>

字符串
因此,执行run命令时将创建的kubernetes资源由--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或声明式apply -f,后者指向具有相应资源定义的kubernetesyml文件,如

kubernetes apply -f <yaml_file_with_my_deployment.yml>

dzjeubhm

dzjeubhm4#

我注意到运行以下命令时没有指定generator参数:

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的回答,听起来他们现在推荐的是“创建”而不是“运行”。

mv1qrgav

mv1qrgav5#

要运行pod,这个简单的命令就足够了:

kubectl run --restart=Never <name> --image=<image>

字符串
查看https://www.k8s-school.fr/resources/blog/1-kubectl-run-deprecated/#pod获取更多信息。

vxf3dgd4

vxf3dgd46#

当您运行

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之外的所有--generator都被弃用。
见下表

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文件。

li9yvcax

li9yvcax7#

如果你的问题是按照一本旧书做一些kubectl练习,你可以使用一个弃用的kubectl客户端来运行kubectl run命令,然后运行常规命令。
kubectl 1.17支持run参数。
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.17.md#client-binaries

pjngdqdw

pjngdqdw8#

正如许多人回答的那样……
run只用于创建pod。在questioners上下文中(由于调试原因,临时容器(即pod)),此命令完全正常。
只需运行pod和--expose;放入一些--env变量;在完成后使用--tty--rm
在这种情况下,run没有被弃用,在所有其他情况下,如部署,DaemonSet,StatefulSet等,它是-有一个很好的理由-它太迫切了!

kx1ctssn

kx1ctssn9#

就像消息所说的,你应该使用kubectl create

相关问题