Kubernetes 1.17: SIG-CLI の変更内容

## はじめに

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

- https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.17.md

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

- `kubectl api-resources --sort-by` フラグ: 値が空でない場合に指定したフィールドを使ってリストを並び替える。name または kind のどちらかを指定できる。
- `kubectl logs --insecure-skip-tls-verify-backend` フラグ: ログの取得をリクエストした kubelet の TLS サーバ証明書の検証を省略する。kubelet が配信する証明書の有効期限が切れている場合に有用だが、攻撃者が不正なログコンテンツを提供することが理論的には可能になる。
- `kubectl logs --prefix` フラグ: 各行の先頭に Pod 名とコンテナ名を付与する

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

- `kubectl convert`（v1.17 で削除予定だったが削除されておらず）
- `kubectl get --export` フラグ（v1.18 で削除予定）

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

- ありません

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

## What's New (新情報)

SIG-CLI に関する大きな変更はありません。

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

SIG-CLI に関する事項はありません。

## Deprecations and Removals (廃止および削除）

SIG-CLI に関する機能の廃止および削除はありません。

## CLI の改善                                                                                                                                                                                                                               

- `kubectl api-resources` コマンドは `name` または `kind` によりリソースをソートする`--sort-by` フラグをサポートしました ([#81971](https://github.com/kubernetes/kubernetes/pull/81971), [laddng](https://github.com/laddng))
- `kubectl logs` コマンドは、取得元（Pod 名とコンテナ名）に関する情報を各行の先頭に追加する `--prefix` フラグをサポートしました ([#76471](https://github.com/kubernetes/kubernetes/pull/76471), [m1kola](https://github.com/m1kola))

## その他の主な変更

- `kubectl get endpointslice` の出力が修正されました ([#82603](https://github.com/kubernetes/kubernetes/pull/82603), [robscott](https://github.com/robscott))
  - :memo: 1.16 では get/list の出力に `NAME` と `AGE` のカラムしか含まれていなかったのを、`ADDRESS TYPE`, `PORTS`, `ENDPOINTS` を含むように修正されました
- `kubectl delete` で誤ったリソースを使った場合に正しいエラーメッセージが出力されるようになりました ([#83825](https://github.com/kubernetes/kubernetes/pull/83825), [zhouya0](https://github.com/zhouya0))
  - :memo: この変更で存在しないリソースを指定した場合に正しく `error: the server doesn't have a resource type "unknown"` ("unknown" リソースタイプは存在しません) と出力されるように修正されました
- kubectl コマンドに誤ったフラグを指定した場合に、ヘルプメッセージ全体ではなく `--help` を実行するようにという TIP を表示するだけになりました ([#82423](https://github.com/kubernetes/kubernetes/pull/82423), [sallyom](https://github.com/sallyom))
  - :memo: [66572](https://github.com/kubernetes/kubernetes/issues/66572) によると、ヘルプメッセージが大きすぎてものによっては2ページ以上となり冗長で、エラーメッセージが直接確認できないという課題からの変更のようです
- `kubectl apply` のようなコマンドで不正なスキームのアノテーションが指定されていた場合に、これまではアノテーション全体を何ごともないように廃棄するのではなくエラーを返すようになりました。 ([#83552](https://github.com/kubernetes/kubernetes/pull/83552), [liggitt](https://github.com/liggitt))
  - :memo: アノテーションの値は文字列しか受け付けませんが、そこに数字や `on/off/yes/no` などが指定されている場合は何ごともなかったかのようにアノテーション全体を除いてオブジェクトが作成されてしまっていたようです
- StatefulSet に対して `kubectl rollout history` を実行したときに存在しない 0 リビジョンがリストされる問題が修正されました ([#82643](https://github.com/kubernetes/kubernetes/pull/82643), [ZP-AlwaysWin](https://github.com/ZP-AlwaysWin))
  - :memo: 表示上だけの問題だったようです
- ドキュメントに存在するすでに使用されてない kustomize サブコマンドへの参照が修正されました ([#82535](https://github.com/kubernetes/kubernetes/pull/82535), [demobox](https://github.com/demobox))
  - :memo: [The kubectl book](https://kubectl.docs.kubernetes.io/) で `kustomize edit set imagetag` となっていたところが `set image` に修正したというものです
- `kubectl set resources/subject` で結果に変更がなかった場合にエラーを返すことがなくなりました ([#85490](https://github.com/kubernetes/kubernetes/pull/85490), [sallyom](https://github.com/sallyom))
  - :memo: 同じ変更を2回実行した場合に、2回目の結果に変更がない場合にこれまでは「変更がない」というエラーが返っていましたが、今後は成功（終了コード 0）となるように変更されました。コマンドがべき等性を持つようになったと言えますね。
- kubectl の `--resource-version` フラグは他のクライアントと対象のオブジェクトの更新で競合しているときであっても `label/annotate/set selector` コマンドで正しく動作するようになりました ([#85285](https://github.com/kubernetes/kubernetes/pull/85285), [liggitt](https://github.com/liggitt))
- `--certificate-authority` フラグは kubeconfig ファイルの skip-TLS または CA データの設定を正しく上書きするようになりました ([#83547](https://github.com/kubernetes/kubernetes/pull/83547), [liggitt](https://github.com/liggitt))

## 所感

v1.17 では SIG-CLI に関して特に大きな変更はなく、細かな改善が中心となりました。