web-dev-qa-db-ja.com

kubectl runは非推奨です-代替手段を探しています

環境パラメーターでkubectl runを使用して、一時的なDockerコンテナーを作成しています(例:デバッグのための転送)。数週間以来、kubectlkubectl 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を使用してください。

この実行コマンドを置き換える方法はありますか?

25
peez80

この問題の著者として、この廃止の背後にある意図を少し説明させてください。 Brendanが his answer で説明しているように、kubectl run自体は非推奨ではなく、Podを作成するジェネレーターを除くすべてのジェネレーターのみが非推奨ではありません。

この変更の理由は2つあります。

  1. kubectl runコマンドの入力パラメーターの大部分は、新しいタイマーや古いタイマーにとって圧倒的です。呼び出しの結果がどうなるかを理解するのはそれほど簡単ではありません。サーバーのバージョンだけでなく、いくつかの渡されたオプションを考慮する必要があります。

  2. その背後にあるコードは、可能性のマトリックスが私たちが処理できるよりも速く成長していることを考えると、維持するのが面倒です。

だからこそ、毎日のワークフローにkubectl runを使用することから人々を遠ざけ、明示的なkubectl createコマンドを使用する方が簡単であると納得させようとしているのです。最後に、kubectl runがクラスター内でPodを実行するだけのKubernetesと同じエクスペリエンスを得るために、dockerまたは他のコンテナーエンジンを使用してコンテナーを実行する新規ユーザーを作成します。

最初の混乱でごめんなさい。これで問題が解決することを願っています。

23
soltysh

次を使用できます:

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

廃止されていません。

15
Brendan Burns

kubectl runはデフォルトで、Deploymentを作成します。

完全に拡張されたコマンドは次のとおりです。

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オプションとして)create pods(およびデプロイメントではない)、つまりコマンドは完全に拡張されると次のようになります。

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>
5
pkaramol

メッセージが言ったように、kubectl createを使用する必要があります。最小限のポッドyaml definition を定義し、kubectl create -f mypod.ymlを使用するだけです

0

ジェネレーターパラメーターを指定せずに次のコマンドを実行していることに気付きました。

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にデフォルト設定するか、作成の使用を推奨する必要があります)。

ただし、@ soltyshの回答に基づいて、「実行」よりも「作成」を推奨しているように聞こえます。

0
jersey bean