Kubernetes v1.8: Before Upgrading

このエントリは、[Kubernetes v1.8 CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#v180) から Before Upgrading の内容をまとめています。その他の項目は下記リンク先を参照してください。

- [Kubernetes v1.8: 主な変更点 (Major Themes)](https://qiita.com/superbrothers/items/5a6a34c5eb919ce872aa)
- [Kubernetes v1.8: Before Upgrading](https://qiita.com/tkusumi/items/0962220a0700cb1f6eb3)
- [Kubernetes v1.8: 既知の問題 (Known Issues)](https://qiita.com/superbrothers/items/fe1e878cc1eb6d9faa96)
- [Kubernetes v1.8: Deprecations](https://qiita.com/tkusumi/items/43fd62c1da931443943a)

---

### ノードの swap が有効な場合、kubelet が起動しないようになった
ノードで swap が有効な場合 kubelet が起動しないようになりました。swap を有効にして起動したい場合は、`--fail-swap-on=false` フラグを付加する必要があります。`--experimental-fail-swap-on` は deprecated になり、将来のリリースで削除される予定です。

Swap を無効にする理由は [Kubelet needs to allow configuration of container memory-swap #7294](https://github.com/kubernetes/kubernetes/issues/7294) という issue で議論されているようです。swap を無効にすることである Pod がメモリを消費しすぎて、他の Pod のメモリが swap して遅くなる、といった状況が避けられるようです。

### `autoscaling/v2alpha1` API が `autoscaling/v2beta1` になった

`autoscaling/v2alpha1` API が `autoscaling/v2beta1` になりました。API の形式には変更はありません。Horizontal Pod Autoscaler の変更にはメモリやカスタムメトリクスによるオートスケールのサポートなどが含まれています。

### Metrics API のアップデート

Metrics API が `v1alpha1` から `v1beta1` になり `custom-metrics.metrics.k8s.io` が `custom.metrics.k8s.io` に、 `metrics` が `metrics.k8s.io` にリネームされました。もしカスタムメトリクスのアダプターをデプロイしている場合は、新しい API バージョンをサポートしているか確認する必要があります。また Heapster を aggregated API server モードでデプロイしている場合は、新しい API バージョンをサポートするため Heapster をアップグレードする必要があります。

### Advanced auditing の仕様変更
Advanced auditing が `v1beta1` になりデフォルトの監査メカニズムになりました。新しいバージョンでは以下の変更が入っています。

- `AdvancedAudit` 機能を明示的にオフ (`--feature-gates=AdvancedAudit=false`)  にしない限り `--audit-policy-file` オプションが必須になりました。
- Advanced auditing が有効な場合、ログファイルのデフォルトは JSON 形式になりました。
- `--audit-policy-file` オプションは `Policy` のバージョンを表すため `kind`, `apiVersion` のフィールドが必須になりました。
- webhook と ログ・ファイルの出力形式が、v1beta1 event 形式になりました。
- 詳細は [Advanced audit](https://kubernetes.io/docs/tasks/debug-application-cluster/audit/#advanced-audit) をご覧ください


### TPR の削除
depcreated だった `ThirdPartyResource` (TPR) が削除されました。TPR のデータを失わないためには、[CustomResourceDefinition への移行が必要です](https://kubernetes.io/docs/tasks/access-kubernetes-api/migrate-third-party-resource/)

### kube-controller-manager の deprecated だったフラグが削除
`kube-controller-manager` の deprecated だった以下のフラグが削除されました。

- `replication-controller-lookup-cache-size`
- `replicaset-lookup-cache-size`
- `daemonset-lookup-cache-size`

### StatefulSets の `pod.alpha.kubernetes.io/initialized` アノテーションが無視されるようになった
StatefulSets で deprecated だった `pod.alpha.kubernetes.io/initialized` アノテーションが無視されるようになりました。

### CronJob のオブジェクトがデフォルトで有効になった
CronJob のオブジェクトは v1beta1 になりデフォルトで有効になりました。CronJob v2alpha1 はまだ有効ですが、こちらは明示的に有効にする必要があります。現在の CronJob のオブジェクトは `batch/v1beta1.CronJob` に移行することを推奨します。deprecated なバージョンを指定した場合  Resource Not Found のエラーが発生する可能性があるので注意してください。このエラーは新しいコントローラーがローリングアップデート時に新しいバージョンを参照することによって起こります。

- https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/

### batch/v2alpha1.ScheduledJob  が削除された
`batch/v2alpha1.ScheduledJob` は削除されました。`batch/v1beta.CronJob` に移行してください。

### 古い API グループがデフォルトで無効になった
- `rbac/v1alpha1`, `settings/v1alpha1`, `scheduling/v1alpha1` の API はデフォルトで無効になりました。

### RBAC: `system:node` ロール は `system:nodes` グループとして扱われることがなくなった
- `system:node` ロールは `system:nodes` グループとして自動的に扱われることはなくなりました。Node の認可には `Node` Authorization モードを利用してください。引き続き `system:node` ロール を `system:nodes` グループのメンバーとして扱いたい場合は、ClusterRoleBinding を設定する必要があります。