Kubernetes 1.11: SIG-CLI Updates

## はじめに

Kubernetes v1.11 その他の主な変更点から SIG CLI の変更についてまとめています。

- https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md#sig-cli-1

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

- `kubectl wait`: 指定したリソースが特定のコンディションになるまで待つ
- `kubectl api-resources`: 利用できるリソースタイプ一覧を出力する

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

- `kubectl rolling-update`

その他オプションの追加、削除などの変更は、https://github.com/superbrothers/kubectl-docs/compare/v1.10.0...v1.11.0 で確認できます。

## SIG-CLI その他の主な変更点

### kubectl `-o go-template` の中で `base64decode` 関数が利用できるようになりました

:memo: Secret オブジェクトはデータが全て base64 エンコードされて記録されています。取得したのちに `base64 -d` でデコードするなどで行われていましたが、外部コマンドを利用することなくデコードできるようになりました。地味に便利な改善です。

```
$ kubectl get secret SECRET -o go-template='{{ .data.KEY | base64decode }}'
```

* You can now use the `base64decode` function in kubectl go templates to decode base64-encoded data, such as `kubectl get secret SECRET -o go-template='{{ .data.KEY | base64decode }}'`. ([#60755](https://github.com/kubernetes/kubernetes/pull/60755), [@glb](https://github.com/glb))

### `kubectl config view --minify` コマンドで `--context` フラグを利用して出力するコンテキストを出力できるようになりました

:memo: `kubectl config view --minify` は kubeconfig の中から現在のコンテキストの設定のみを出力するコマンドでしたが、`--context` フラグを利用して出力するコンテキストを指定できるようになりました。

```
$ kubectl config view --minify --context minikube
```

* The global flag "context" now gets applied to `kubectl config view --minify`. In previous versions, this command was only available for `current-context`. Now it will be easier for users to view other non current contexts when minifying. ([#64608](https://github.com/kubernetes/kubernetes/pull/64608), [@dixudx](https://github.com/dixudx))

### 削除や特定の状況に指定したリソースがなることを待つことができる `kubectl wait` コマンドが追加されました

:memo: CD などにおいては、次の e2e テストのステージを実行するためにコンテナイメージが実行されるまで待ちたい要望が以前からあり、これまではスクリプトなどでやってきましたが、ついに kubectl にその機能が追加されました。デフォルトでは30秒間特定のリソースが指定した状態になるまで待つことができます。

```
$ kubectl run nginx --replicas=5 --image=nginx && kubectl wait deploy/nginx --for condition=available
deployment.apps/nginx created
deployment.extensions/nginx condition met
```

* `kubectl wait` is a new command that allows waiting for one or more resources to be deleted or to reach a specific condition. It adds a `kubectl wait --for=[delete|condition=condition-name] resource/string` command. ([#64034](https://github.com/kubernetes/kubernetes/pull/64034), [@deads2k](https://github.com/deads2k))

### API リソースの一覧を出力する `kubectl api-resources` コマンドが追加されました

:memo: これまで API versions を取得する `kubectl api-versions` コマンドはありましたが、API リソースの一覧を出力するのは面倒でした。`kubectl api-resources` コマンドは apiserver から動的に API リソースの一覧を取得して出力します。`-o wide` オプションを利用すると、各リソースで対応している Verbs も出力されます。

* You can now use `kubectl api-resources` to discover resources. ([#42873](https://github.com/kubernetes/kubernetes/pull/42873),  [@xilabao](https://github.com/xilabao))

### `--all`, `-l`, `--field-selector` などの対象を選択した `kubectl delete` の利用で、"not found" エラーを無視するように変更されました

これまで、`--all`, `-l`. `--field-selector` などの対象を選択した `kubectl delete` の実行は対象が見つからなかったとき "not found" エラーとなっていましたが、これが無視され成功するように変更されました。ただし、特定のリソースを指定して実行したときに、対象のリソースが見つからなかった場合はエラーになることに注意してください。

* When using `kubectl delete` with selection criteria, the defaults to is now to ignore "not found" errors. Note that this does not apply when deleting a speciic resource. ([#63490](https://github.com/kubernetes/kubernetes/pull/63490), [@deads2k](https://github.com/deads2k))

### その他

* `kubectl patch` now supports `--dry-run`. ([#60675](https://github.com/kubernetes/kubernetes/pull/60675), [@timoreimann](https://github.com/timoreimann))
* The global flag `--match-server-version` is now global.  `kubectl version` will respect it. ([#63613](https://github.com/kubernetes/kubernetes/pull/63613), [@deads2k](https://github.com/deads2k))
* kubectl will list all allowed print formats when an invalid format is passed. ([#64371](https://github.com/kubernetes/kubernetes/pull/64371), [@CaoShuFeng](https://github.com/CaoShuFeng))
* `kubectl apply --prune` supports CronJob resources.  ([#62991](https://github.com/kubernetes/kubernetes/pull/62991), [@tomoe](https://github.com/tomoe))
* The `--dry-run` flag has been enabled for `kubectl auth reconcile` ([#64458](https://github.com/kubernetes/kubernetes/pull/64458), [@mrogers950](https://github.com/mrogers950))
* `kubectl auth reconcile` only works with rbac.v1; all the core helpers have been switched over to use the external types. ([#63967](https://github.com/kubernetes/kubernetes/pull/63967), [@deads2k](https://github.com/deads2k))
* kubectl and client-go now detect duplicated names for user, cluster and context when loading kubeconfig and report this condition as an error.  ([#60464](https://github.com/kubernetes/kubernetes/pull/60464), [@roycaihw](https://github.com/roycaihw))
* Added 'UpdateStrategyType' and 'RollingUpdateStrategy' to 'kubectl describe sts' command output. ([#63844](https://github.com/kubernetes/kubernetes/pull/63844), [@tossmilestone](https://github.com/tossmilestone))
* Initial Korean translation for kubectl has been added. ([#62040](https://github.com/kubernetes/kubernetes/pull/62040), [@ianychoi](https://github.com/ianychoi))
* `kubectl cp` now supports completion.
([#60371](https://github.com/kubernetes/kubernetes/pull/60371), [@superbrothers](https://github.com/superbrothers))
* The shortcuts that were moved server-side in at least 1.9 have been removed from being hardcoded in kubectl. This means that the client-based restmappers have been moved to client-go, where everyone who needs them can have access. ([#63507](https://github.com/kubernetes/kubernetes/pull/63507), [@deads2k](https://github.com/deads2k))
* `kubectl create [secret | configmap] --from-file` now works on Windows with fully-qualified paths ([#63439](https://github.com/kubernetes/kubernetes/pull/63439), [@liggitt](https://github.com/liggitt))
* Portability across systems has been increased by the use of `/usr/bin/env` in all script shebangs. ([#62657](https://github.com/kubernetes/kubernetes/pull/62657), [@matthyx](https://github.com/matthyx))
* You can now display requests/limits of extended resources in node allocated resources. ([#46079](https://github.com/kubernetes/kubernetes/pull/46079), [@xiangpengzhao](https://github.com/xiangpengzhao))
* The `--remove-extra-subjects` and `--remove-extra-permissions` flags have been enabled for `kubectl auth reconcile` ([#64541](https://github.com/kubernetes/kubernetes/pull/64541), [@mrogers950](https://github.com/mrogers950))
* kubectl now has improved compatibility with older servers when creating/updating API objects ([#61949](https://github.com/kubernetes/kubernetes/pull/61949), [@liggitt](https://github.com/liggitt))
* `kubectl apply` view/edit-last-applied now supports completion. ([#60499](https://github.com/kubernetes/kubernetes/pull/60499), [@superbrothers](https://github.com/superbrothers))