環境パラメーターで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を使用してください。
この実行コマンドを置き換える方法はありますか?
この問題の著者として、この廃止の背後にある意図を少し説明させてください。 Brendanが his answer で説明しているように、kubectl run
自体は非推奨ではなく、Podを作成するジェネレーターを除くすべてのジェネレーターのみが非推奨ではありません。
この変更の理由は2つあります。
kubectl run
コマンドの入力パラメーターの大部分は、新しいタイマーや古いタイマーにとって圧倒的です。呼び出しの結果がどうなるかを理解するのはそれほど簡単ではありません。サーバーのバージョンだけでなく、いくつかの渡されたオプションを考慮する必要があります。
その背後にあるコードは、可能性のマトリックスが私たちが処理できるよりも速く成長していることを考えると、維持するのが面倒です。
だからこそ、毎日のワークフローにkubectl run
を使用することから人々を遠ざけ、明示的なkubectl create
コマンドを使用する方が簡単であると納得させようとしているのです。最後に、kubectl run
がクラスター内でPodを実行するだけのKubernetesと同じエクスペリエンスを得るために、dockerまたは他のコンテナーエンジンを使用してコンテナーを実行する新規ユーザーを作成します。
最初の混乱でごめんなさい。これで問題が解決することを願っています。
次を使用できます:
kubectl run --generator=run-pod/v1 --image=busybox busybox --dry-run --env=foo=bar
廃止されていません。
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
に頼らなければなりません。後で、対応するリソース定義を持つkubernetes
yml
ファイルを指すように、
kubernetes apply -f <yaml_file_with_my_deployment.yml>
メッセージが言ったように、kubectl create
を使用する必要があります。最小限のポッドyaml definition を定義し、kubectl create -f mypod.yml
を使用するだけです
ジェネレーターパラメーターを指定せずに次のコマンドを実行していることに気付きました。
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の回答に基づいて、「実行」よりも「作成」を推奨しているように聞こえます。