32
23

More than 1 year has passed since last update.

Kubernetes 1.18: SIG-CLI の変更内容

Last updated at Posted at 2020-03-31

はじめに

ここでは、Kubernetes 1.18 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。

新たに追加されたコマンドとフラグ

  • kubectl alpha debug: 実行中の Pod にデバッグコンテナをアタッチする。
  • --tls-server-name フラグ(全コマンド共通): サーバ証明書の検証に使用するサーバ名。指定されていない場合は、ホスト名が使われる。
  • kubectl drain --disable-eviction フラグ: eviction(退去)がサポートされていたとしても、drain が delete を使用するように強制する。これは、PodDisruptionBudgets のチェックをバイパスするため、注意して使用すること。

変更があったコマンドとフラグ

  • kubectl delete --force フラグ: true の場合、API からリソースを直ちに削除し、猶予付き削除(graceful deletion)を無視します。一部のリソースでは不整合やデータの損失が発生する可能性がある。
    • :pencil: --force フラグの動作に変更はありませんが、これまで --grace-period=0 とともに指定する必要がありましたが、それが不要になったという変更です
  • kubectl create/patch/apply コマンドなどの --dry-run string フラグ: "none" または "server"、"client" でなければならない。クライアントストレテジ(戦略)の場合は、サーバに送信せずに送信されるであろうオブジェクトのみを表示する。サーバストレテジの場合は、リソースを永続化せずにサーバに対してリクエストを送信する(デフォルトは "none")

廃止予定のコマンドとフラグ

  • kubectl convert(v1.17 で削除予定だったが引き続き削除されておらず)
  • kubectl get --export フラグ(v1.18 で削除予定だったが削除されておらず)

削除されたコマンドとフラグ

  • kubectl rolling-update

そのほか、細かい変更は、 https://github.com/superbrothers/kubectl-docs/compare/v1.17.0...v1.18.0 で参照できます。

What's New (新情報)

kubectl debug コマンド

SIG CLI はかなり長い間デバッグユーティリティの必要性について議論してきました。エフェメラルコンテナ の開発により、kubectl exec の上に構築されたツールで開発者をサポートする方法が明らかになりました。kubectl debug コマンド の追加は、開発者がクラスタ内で簡単に Pod をデバッグできることを可能にします。このコマンドを使用すると Pod の隣で動作する一時的なコンテナを作成できるだけでなく、インタラクティブなトラブルシュートのためにコンソールにアタッチすることもできます。

:pencil: 1.16 でもアルファとしてアナウンスされていましたが、一部の機能の実装が未完でした。まだ一部残っているもののほぼ完了ということでおそらく再度アナウンスされたということだと思われます。1.16 時点での機能については Kubernetes 1.16 アルファ機能を先取り!
エフェメラルコンテナ - Speaker DeckKubernetes 1.16: Ephemeral Containers (alpha) - Qiita にまとめていますので参照してください。1.16 からの主な変更は次のとおりです。

  • kubectl alpha debug としてエフェメラルコンテナを Pod に追加するコマンドが追加された
    • 1.16 では kubectl プラグインとして提供されていましたが、kubectl 自体に追加されました。
    • 1.16 からの変更として、エフェメラルコンテナとして実行するコンテナのイメージがデフォルトで busybox だったのに変わって設定されなくなりました。docker.io を参照できない環境もあることを考慮するとデフォルトを設定しておくよりも常に明示的にイメージを指定させたほうがよいという判断でしょうか。
  • CRI と kubelet が namespace targeting mode をサポートした

なお、エフェメラルコンテナはアルファレベルの機能のため、使用するには FeatureGates EphemeralContainers を明示的に有効にする必要があります。

Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)

ありません。

Deprecations and Removals (廃止および削除)

  • kubectl と k8s.io/client-go は、http://localhost:8080 のサーバアドレスをデフォルトとして使用しなくなりました。もしこのようなレガシーなクラスタを所有している場合は、サーバのセキュリティを確保することを強く推奨します。サーバのセキュリティを確保できない場合は、$KUBERNETES_MASTER 環境変数に http://localhost:8080 を設定することで、サーバアドレスのデフォルト設定を引き続き使用できます。kubectl のユーザは、--server フラグまたは --kubeconfig$KUBECONFIG で指定した kubeconfig ファイルのなかで、サーバアドレスを指定することもできます。(#86173, soltysh) [SIG API Machinery, CLI and Testing]
  • kubectl run は、以前から非推奨だったジェネレータと Pods の作成に関連しないフラグを削除しました。kubectl run コマンドは Pods を作成するだけになりました。Pods 以外のオブジェクトを作成するには、特定の kubectl create サブコマンドを参照してください。 (#87077, soltysh) [SIG Architecture, CLI and Testing]
    • :pencil: 以前からアナウンスされていたとおり、kubectl run での Deployment 等の作成が削除されました。多くの書籍やドキュメントで多用されているので、今後困惑する読者が増えそうです。
  • 廃止予定だった kubectl rolling-update コマンドが削除されました。 (#88057, julianvmodesto) [SIG Architecture, CLI and Testing]

Changes by Kind(種類別の変更)

  • --dry-run フラグの boolean と unset の値は廃止予定となり、将来のバージョンでは server|client|none のいずれかの値が必須になります。 (#87580, julianvmodesto) [SIG CLI]
    • :pencil: Server-side Apply のサポートに伴う変更です
    • :pencil: これまでの同様の動作を期待する場合は --dry-run=client に変更する必要があります
  • kubectl apply --server-dry-run フラグは廃止予定となり、--dry-run=server に置き換えられました。 (#87580, julianvmodesto) [SIG CLI]
    • :pencil: 上と同様です

Feature(機能追加)

  • kubectl exec コマンドの呼び出し時に --filename フラグを使ってリソースを指定できるようになりました。 (#88460, soltysh) [SIG CLI and Testing]
    • :pencil: -f --filename オプションを使いマニフェストファイルに定義されたオブジェクトに対して kubectl exec が使えるようになりました。ただし、複数のオブジェクトがマニフェストファイルに含まれている場合(--- を使用して)、エラーになるのでどの程度使えるシーンがあるのか謎です。
    • :pencil: 合わせてコンテナ内で実行するコマンドの指定はダッシュ(--)で区切ることが推奨されるメッセージが出力されるようになりました。全く関係のない変更だと思うんですが、なぜ混ぜ込まれているのか。
  • kubectl/drain: disable-eviction オプションが追加されました。eviction(退去)がサポートされていたとしても drain が delete を使うように強制します。これは、PodDisruptionBudgets をバイパスするため、注意して使用してください。 (#85571, michaelgugino) [SIG CLI]
    • :pencil: モチベーションとしては PodDisruptionBudgets のよって Pod の退去が進まなくなることが分かっている場合に、evict の代わりに delete を使いたいことがあるということのようです。基本的には使わないほうがよいでしょう。
    • :pencil: evict の代わりに delete を使うというのは、PodDisruptionBudgets が機能するのは Pod の削除(delete)ではなく、退去(evict)に対してだからです。詳しくは Kubernetes: 複数の Node を安全に停止する (kubectl drain + PodDisruptionBudget) - Qiita を参照ください。
  • kubectl/drain: skip-wait-for-delete-timeout オプションが追加されました。Pod の DeletionTimestamp が N 秒より古い場合に、Pod の待機をスキップします。スキップするための秒は 0 より大きな値でなければなりません。 (#85577, michaelgugino) [SIG CLI]
    • :pencil: ローカルボリュームを持つ Pod などで DeletionTimestamp(Pod が削除されるであろう日時で、Pod の削除命令から GracePeriodSeconds を足した日時。詳しくは https://qiita.com/superbrothers/items/3ac78daba3560ea406b2 を参照ください。) を過ぎても削除されない場合があり、drain の実行がブロックされてしまう問題があるそうで、--skip-wait-for-delete-timeout フラグを使用すると、DeletionTimestamp から N 秒より経過した Pod を待つことをスキップするようになります。
  • kubectl --dry-run フラグはクライアントサイドとサーバサイドのドライラン戦略(dry-run strategies)をサポートするために client または servernone を受け入れるようになりました。--dry-run フラグの boolean と unset の値は廃止予定となり、将来のバージョンでは client | server | none の値が必須になります。 (#87580, julianvmodesto) [SIG CLI]
  • kubectl delete/taint/replace コマンドに --dry-run=server|client が追加されました (#88292, julianvmodesto) [SIG CLI and Testing]
  • kubectl--force フラグを使用してオブジェクトを削除する際に、--grace-period=0 も合わせて使用する必要がなくなりました。 (#87776, brianpursley) [SIG CLI]
    • :pencil: これまでは --force フラグの使用は --grace-period=0 を併用する必要がありましたが、それが不要になったようです。
  • kubectlkubectl alpha debug コマンドが追加されました。このコマンドはデバッグを目的に実行中の Pod に対してエフェメラルコンテナをアタッチできます。 (#88004, verb) [SIG CLI]

そのほか (バグまたはクリーンアップ、 Flake <- どう訳せばよいのか。小さな変更?)

  • kubectl describe statefulsets.apps がパーティションのローリングアップデートで壊れた値を表示する問題を修正しました。 (#85846, phil9909) [SIG CLI]
  • cluster のダンプ情報に init containers のログが追加されました (#88324, zhouya0) [SIG CLI]
  • kubectl create コマンドの --generator フラグが廃止予定になりました (#88655, soltysh) [SIG CLI]
  • kubectl port-forward が Service の名前付きポートで正常に動作しないバグが修正されました (#85511, oke-py) [SIG CLI]
  • kubectl annotate が local=true が設定された場合にエラーとなるバグが修正されました (#86952, zhouya0) [SIG CLI]
  • kubectl create deployment でイメージ名に _ または . が含まれている場合にエラーになるバグが修正されました (#86636, zhouya0) [SIG CLI]
  • kubectl drain が DaemonSets やその他のオブジェクトを無視するバグを修正しました。 (#87361, zhouya0) [SIG CLI]
    • :pencil: kubectl drain は本来 DaemonSets やローカルボリュームを使用する Pods が退避対象に含まれていると警告のメッセージを出力するのですが、それが出力されていないというバグで動作自体に問題はないようです。
  • kubectl describe で CSI PersistentVolume を対象とした場合に FSType を含むように修正されました。 (#85293, huffmanca) [SIG CLI and Storage]
  • kubectl cluster-info dump --output-directory=xxx は、出力形式に応じた拡張子を持つファイルを生成するようになりました。 (#82070, olivierlemasle) [SIG CLI]
  • kubectl describe <type>kubectl top pod は、出力する結果がない場合に、"No resources found" または "No resources found in <namespace> namespace" とメッセージを出力するようになりました (#87527, brianpursley) [SIG CLI]
  • kubectl drain node --dry-run は、退去または削除される Pods をリストするようになりました (#82660, sallyom) [SIG CLI]
    • :pencil: 地味に便利そうです。
  • kubectl set resourceskubectl set subject は、リソースに変化のない値を渡した場合にエラーを返さないようになりました。 (#85490, sallyom) [SIG CLI]
  • kubelet と kubeadm で pause イメージが 3.2 にアップグレードされました (#88173, BenTheElder) [SIG CLI, Cluster Lifecycle, Node and Testing]
    • :pencil: CLI と関係ないような :thinking:
  • kubectl apply -f <file> --prune -n <namespace> は、ファイルでネームスペースが定義されていない全てのリソースをCLI で指定されたネームスペースで prune するようになりました (#85613, MartinKaburu) [SIG CLI]
  • kubectl create clusterrolebindingrbac.authorization.k8s.io/v1 オブジェクトを作成するようになりました (#85889, oke-py) [SIG CLI]
  • kubectl diff は、差分があるときにのみ 1 を返し、kubectl がエラーの場合は 1 以上を返すようになりました。または、"exit status code1" のメッセージはミュートされました。 (#87437, apelisse) [SIG CLI and Testing]

所感

1.16 で追加されたエフェメラルコンテナ、kubectl debug の機能セットがついに揃ってきました。namespace targeting mode
がサポートされたことで、Share Process Namespace を有効にしておく必要がなくなったのが便利です。ベータになるにはもう少しかかりそうですが、非常に楽しみな機能です。

32
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
23