kubectl run已被弃用 - 寻找替代方案

pee*_*z80 31 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
Run Code Online (Sandbox Code Playgroud)

发出kubectl此消息时,请回复此消息:

kubectl run --generator=deployment/apps.v1beta1已弃用,将在以后的版本中删除.请改用kubectl create.

任何想法如何替换此运行命令?

sol*_*ysh 31

作为问题的作者,让我解释一下这种弃用背后的意图.就像Brendan在他的回答中解释的那样,kubectl run本身并没有被弃用,只有所有的发生器,除了为你创建Pod的那个.

这种变化的原因有两个:

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

  2. 考虑到可能性矩阵的增长速度超过了我们的处理速度,它背后的代码也是一团糟.

这就是为什么我们试图让人们不再使用kubectl run他们的日常工作流程,并说服他们使用显式kubectl create命令更简单.最后,我们希望让使用docker或任何其他容器引擎的新手在运行容器的情况下与Kubernetes一起获得相同的体验,kubectl run只需在群集中运行Pod.

对不起最初的困惑,我希望这会让事情变得清晰起来.

  • 我认为@karthiks 所说的问题是询问如何将 run 命令替换为具有相同效果但不会生成弃用警告的命令。当然,我知道我们应该“使用 kubectl create”,但是您能否通过示例向我们展示具体如何操作,而不仅仅是解释为什么会出现警告?我怀疑我们大多数人并不真正关心它为什么被替换,只是想知道如何做您希望我们现在做的事情。 (3认同)
  • 在不使用外部 json/yaml 文件的情况下将有问题的 `kubectl run` 命令转换为 `kubectl create` 命令会更有意义。介意将其作为答案的一部分吗? (2认同)
  • 但是好像没有`kubectl create pod`? (2认同)

Bre*_*rns 18

您可以使用:

kubectl run --generator=run-pod/v1 --image=busybox busybox --dry-run --env=foo=bar
Run Code Online (Sandbox Code Playgroud)

哪个没有被弃用.

  • 根据 v1.15,除 pod 之外的所有生成器均已弃用。请参阅 https://kubernetes.io/docs/reference/kubectl/conventions/ (2认同)

pka*_*mol 8

kubectl run默认情况下,将创建一个Deployment

完整的命令是:

kubectl run --generator=deployment/apps.v1 <deployment_name> --image=<image_to_use_in_the_container_of_the_deployment's_pod>
Run Code Online (Sandbox Code Playgroud)

因此,kubernetes在执行run命令时将创建的资源由--generator标志的值定义。

弃用消息提示的含义(也已通过@soltysh提供的答案加以澄清)是,将删除特定的做法。

因此,在将来的kubernetes版本中,该run命令将默认(且作为唯一选项)创建pod(而不是部署),即,该命令的完整扩展将变为:

kubectl run --generator=run-pod/v1 <pod_name> --image=<image_of_the_container_of_the_pod>
Run Code Online (Sandbox Code Playgroud)

如果您要创建任何其他kubernetes资源类型,则无法通过run命令来进行创建,因此您将不得不诉诸显式命令式create或声明式apply -f,后者指向kubernetes yml具有相应资源定义的文件,如

kubernetes apply -f <yaml_file_with_my_deployment.yml>
Run Code Online (Sandbox Code Playgroud)


jer*_*ean 6

我注意到在不指定生成器参数的情况下运行以下命令:

kubectl run <name> --image=<image>
Run Code Online (Sandbox Code Playgroud)

它返回此错误:

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.
Run Code Online (Sandbox Code Playgroud)

此消息非常令人困惑的是,您从未首先指定 --generator 参数。但是,这里的要点是按照错误消息的指示明确指定生成器,如下所示:

kubectl run --generator=run-pod/v1 <name> --image=<image>
Run Code Online (Sandbox Code Playgroud)

然后它应该成功运行。(他们应该刚刚将生成器默认为 run-pod/v1 以避免这种混淆和/或只是鼓励使用 create)。

但是,根据@soltysh 的回答,听起来他们现在建议使用“创建”而不是“运行”。


Nic*_*ter -1

就像消息所说,你应该使用kubectl create. 只需定义一个最小的 pod yaml定义和使用kubectl create -f mypod.yml