Kubernetes 1.13: SIG CLI の変更内容

## はじめに

本記事では、Kubernetes 1.13 の CHANGELOG から SIG-CLI の取り組みについてまとめています。

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

**新たに追加されたコマンド**

- `kubectl diff`: 現在のオンラインの設定(クラスタに保存されているオブジェクト)とファイルまたは標準入力で指定された設定の差分を出力する

**廃止予定のコマンド**

- `kubectl convert`

**削除されたコマンド**

- `kubectl run-container`
- `kubectl alpha`

その他、オプションの追加、削除は https://github.com/superbrothers/kubectl-docs/compare/v1.12.0...v1.13.0 を参照してください。

## アップグレード前に確認すべき内容

> 廃止予定となっていた `kubectl run-container` コマンドが完全に削除されました。代わりに `kubectl run` コマンドを使用してください。

- [Remove deprecated kubectl command aliases 'run\-container' by Pingan2017 · Pull Request \#70728 · kubernetes/kubernetes](https://github.com/kubernetes/kubernetes/pull/70728)

## 廃止予定の機能

> `kubectl convert` コマンドは廃止予定となりました。将来のリリースで削除される予定です。

:memo: `kubectl convert` コマンドは、Kubernetes の内部 API に依存しており、kubectl は内部 API への依存を取り除かなければならないとのことで廃止されることになったようです。では代わりにどうするかというと、1つの方法は `kubectl apply` したのちに好きなバージョンで `kubectl get` する。もう1つの方法は kubectl plugin を作るのもいいねとのこと。

- [kubectl convert: add deprecation warning for 1\.13 by seans3 · Pull Request \#70820 · kubernetes/kubernetes](https://github.com/kubernetes/kubernetes/pull/70820)

## SIG CLI の主な取り組み

> v1.13 のリリースで SIG CLI は主にサーバサイドプリンティングとその kubectl サポート、[サーバサイドドライラン機能をベースとした `kubectl diff` コマンド](https://kubernetes.io/docs/concepts/overview/object-management-kubectl/#how-to-create-objects)の仕上げといった過去のリリースから取り組んできた機能の安定性に注力しました。また、メインリポジトリ[^0]からの離脱に備えて kubectl のコードの分離を続けています。最後に、コミュニティからの素晴らしいサポートとフィードバックにより、[新しいプラグイン機構](https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/)をベータに昇格しました。

:memo: 新しいプラグイン機構のつかいかたは、[kubectl のプラグイン機能 kubectl plugin を使おう！](https://qiita.com/superbrothers/items/b4a0aab0575ca6d65739) で解説しています。

## SIG CLI の主な変更点

### [#70436](https://github.com/kubernetes/kubernetes/pull/70436): `kubectl apply` で deployment strategy が切り替えられるように

:memo: これまで Deployment オブジェクトの `spec.strategy` フィールドを明示的にクリアしなければ `rollingUpdate` から `recreate` に変更することができなかったようです。この変更によって切り替えられるようになりました。

## [#70443](https://github.com/kubernetes/kubernetes/pull/70443): `kubectl plugin list` がいつも同じ順序でプラグインのパスを出力するように

:memo: それに加えてプラグインにエラーを見つけた場合、それらを一度に全て出力するようになりました。以前はエラーが見つかるとその時点で出力してコマンドが終了してしまいました。

## [#70311](https://github.com/kubernetes/kubernetes/pull/70311): `kubectl get --continue-on-error` がエラーが見つかっても終了しないように

:memo: `kubectl get --continue-on-error` コマンドはエラーが見つかっても終了しないことが期待されていたところ、そのような挙動になっていなかったようです。

## [#70740](https://github.com/kubernetes/kubernetes/pull/70740): `kubectl get` が結果が空かつソートを指定したときにランタイムエラーにならないように

## [#68655](https://github.com/kubernetes/kubernetes/pull/68655): `kubectl cordon/uncordon/drain` が複数のノードを指定可能に

:memo: これまで `kubectl cordon/uncordon/drain` コマンドは1つのノードしか指定できませんでした。この変更で一度のコマンドで複数のノードを対象にできるようになりました。べんりですね。

```
$ kubectl cordon node01 node02 node03
```

## [#70699](https://github.com/kubernetes/kubernetes/pull/70699): admin/edit/view のユーザが `kubectl rollout` の実行に失敗する問題を修正

:memo: controllerrevisions の read access の権限が admin/edit/view ロールに追加されていなかったことで、`kubectl rollout` コマンドの実行に失敗していたようです。

## [#70039](https://github.com/kubernetes/kubernetes/pull/70039): `kubectl rollout undo` は存在しない revision にロールバックしようとするとエラーになるように

:memo: この変更に加えて、`kubectl rollout undo` は廃止予定の `extensions/v1beta1` の rollback API を利用しなくなりました。この変更によりロールバックしても Event が作成されなくなるようです。

## [#71006](https://github.com/kubernetes/kubernetes/pull/71006): `kubecl run` でデフォルトで作成される Deployments が `apps/v1` に

## [#65189](https://github.com/kubernetes/kubernetes/pull/65189): `kubectl cp` がリモートパスとしてパスショートカット (`../`) をサポート

## [#69344](https://github.com/kubernetes/kubernetes/pull/69344): `kubectl apply --prune` の dry-run 時の出力を修正

:memo: `kubectl apply` コマンドを `--prune` オプションありで実行するときに `--dry-run` オプションありとなしで表示される内容が異なっていたようで、`--dry-run` オプションのありなしに関わらず同じ内容が出力されるように修正されました。

## [#69389](https://github.com/kubernetes/kubernetes/pull/69389): `kubectl wait` が watch のエラーを対処するように

[^0]: https://github.com/kubernetes/kubernetes