Kubernetes 1.10 Before Upgrading

# はじめに

このエントリは、[Kubernetes 1.10 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.10.md#v1100) からBefore Upgradingについてまとめています。翻訳に合わせて補足を追記しています。その他の内容は次のリンク先を参照してください。

- [Kubernetes 1.10: 主な変更点 (Major Themes)](https://qiita.com/inajob/items/1ecf4d5bacc820839af2)
- Kubernetes 1.10: Before Upgrading
- [Kubernetes 1.10: 既知の問題 (Known Issues) と廃止予定の機能 (Deprecations)](https://qiita.com/superbrothers/items/01872b8d05bd5dc70452)

# Before Upgrading
- 1.7.14, 1.8.9 1.9.4 からの PVCでsubpathをつかったnodeのアップグレードはサポートされていません。そのようなPodはまずdrainしてください。

- Dockerの最小サポートバージョンは1.11です。1.10以下を使っている場合は先にアップグレードしてください。([#57845](https://github.com/kubernetes/kubernetes/pull/57845), [yujuhong](https://github.com/yujuhong))

- CRIがv1alpha1からv1alpha2になりました。CRIを実装しているランタイムのバージョンアップが必要です。コンテナのnamespaceの指定方法がbooleanから列挙型に変更となりました。この変更は非互換です。containerdなどのCRIの実装は新しいAPIバージョン用にアップデートが必要です。([#58973](https://github.com/kubernetes/kubernetes/pull/58973), [verb](https://github.com/verb))

- GCEのCOS imageでのFlexvolumeプラグインのディレクトリが `/etc/srv/kubernetes/kubelet-plugins/volume/exec` から　`/home/kubernetes/flexvolume` に変更になりました。([#58171](https://github.com/kubernetes/kubernetes/pull/58171), [verult](https://github.com/verult))

- kubeletの設定ファイルのデフォルト値とコマンドラインでのデフォルト値が異なっています。設定ファイルを使うようにアップデートする場合は、デフォルト値の差分を確認してください。例えばauthz modeがコマンドラインで設定した場合はAlwaysAllowがデフォルトですが、設定ファイルの場合はWebhookとなります。 ([#59666](https://github.com/kubernetes/kubernetes/pull/59666), [mtaufen](https://github.com/mtaufen))

- [GCP kube-up.sh] kube-envの変数はKubeletのフラグに使われているものを除いては全て設定されなくなりました。kubeletの設定ファイルで設定するようにしてください。([#60020](https://github.com/kubernetes/kubernetes/pull/60020), [roberthbailey](https://github.com/roberthbailey))

- [kube-proxy] 設定をJSONやYAMLであたえる時の記載方法がKey-Valueの文字列からMap形式に変更になりました。

KubeProxyConfiguration Before:

```
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
**featureGates: "SupportIPVSProxyMode=true"**
```

KubeProxyConfiguration After:

```
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
**featureGates:**
**  SupportIPVSProxyMode: true**
```

([#57962](https://github.com/kubernetes/kubernetes/pull/57962), [xiangpengzhao](https://github.com/xiangpengzhao))

- `kubeconfig` API groupがalphaからbetaになり、名称が`kubelet.config.k8s.io`に変更になりました。`kubeconfig/v1alpha1`はもう使えないので`kubelet.config.k8s.io/v1beta1`に変更してください。([#53833](https://github.com/kubernetes/kubernetes/pull/53833), [mtaufen](https://github.com/mtaufen))

- [kube-apiserver] 実験的なものであった組み込みのKeystone password authenticatorは、拡張機能としての実装があるために削除されました。([#59492](https://github.com/kubernetes/kubernetes/pull/59492), [dims](https://github.com/dims))

- kube-proxy設定の中の`udpTimeoutMilliseconds`が`udpIdleTimeout`という名前に変更されました。設定ファイルを書き換えてください。([#57754](https://github.com/kubernetes/kubernetes/pull/57754), [ncdc](https://github.com/ncdc))

- kubeletの`--cloud-providor=auto-detect`機能が削除されました。適切なcloud providerを指定するようにしてください。([#56287](https://github.com/kubernetes/kubernetes/pull/56287), [stewart-yu](https://github.com/stewart-yu))

- [kube-apiserver] OpenID Connect authenticatorはGoogleのv3 token APIのtokenを受け付けなくなりました。 "https://www.googleapis.com/oauth2/v4/token" を利用するようにしてください。

- [kube-apiserver] ルートにある `/proxy` というパスは削除されました（v1.2から廃止予定となっていました）`/proxy` サブリソースを使うようにしてください。([#59884](https://github.com/kubernetes/kubernetes/pull/59884), [mikedanese](https://github.com/mikedanese))

- [kubelet]Evictionの閾値を0%か100%とした場合に無視するようにしました。([#59681](https://github.com/kubernetes/kubernetes/pull/59681), [mtaufen](https://github.com/mtaufen))

- [CustomResourceDefinition] OpenAPI v3のバリデーションスキーマのうち`$ref`を含むものが許可されなくなりました。 アップグレードの前にCRDの定義が`$ref`フィールドを含まないようにしてください。([#58438](https://github.com/kubernetes/kubernetes/pull/58438), [carlory](https://github.com/carlory))

- アップグレード前にnodes, persistentVolumeなどのクラスタスコープのオブジェクトのためのwebhookを確認してください。Webhookの実行が望ましくない場合は設定を削除・変更してください。([#58185](https://github.com/kubernetes/kubernetes/pull/58185), [caesarxuchao](https://github.com/caesarxuchao))
  - :pencil: AdmissionWebhookはバグによりクラスタスコープのリソースについては実施されていませんでした、修正によりクラスタスコープのリソースもAdmissionWebhookの対象となっています。

- kubectlのgcp auth pluginを使っているGoogle Service Account認証をしている場合は新たに"userinfo.email" scope を要求するようになりました。これによりClusterRoleBindings/RoleBindingsにemailでユーザを指定できるようになりました。(これは今まで数値のIDでしていた場合には破壊的な変更となります。この振る舞いを上書きするためにはKUBECONFIGファイルの`users[*].config.scopes`フィールドにカンマ区切りscopeを記載する必要があります。)これによりGoogle Service Account JSON keyを環境変数`GOOGLE_APPLICATION_CREDENTIALS`に設定し、kubeconfigファイルにGKEのmasterのIP+CA証明書の設定を記載しておくと、gcloud CLIを使わずに認証できるようになりました。([#58141](https://github.com/kubernetes/kubernetes/pull/58141), [ahmetb](https://github.com/ahmetb))

- kubectl port-forwardの廃止予定だった`-p <pod-name>`フラグは使えなくなりました。単にpod名を引数に書くことで同じことが実現できます。([#59705](https://github.com/kubernetes/kubernetes/pull/59705), [phsiao](https://github.com/phsiao))

- [kubelet] 廃止予定だった`--require-kubeconfig`フラグは削除されました。また`--require-kubeconfig=true`が指定され`--kubeconfig`が指定されていないときはデフォルト値が使われるようになっていましたが、その機能も削除されました。(([#58367](https://github.com/kubernetes/kubernetes/pull/58367), [zhangxiaoyu-zidif](https://github.com/zhangxiaoyu-zidif))

- [kube-apiserver] `--public-address-override`, `--address`, `--port`は削除されました。代わりにbind-address、insecure-bind-address、insecure-portを使ってください。ただし `--insecure-bind-address`, `--insecure-port`は廃止予定です。[#36604](https://github.com/kubernetes/kubernetes/pull/36604)([#59018](https://github.com/kubernetes/kubernetes/pull/59018), [hzxuzhonghu](https://github.com/hzxuzhonghu))

- [kubelet]アルファの`--init-config-dir`フラグは削除されました。`--config`フラグを使ってkubeletの設定ファイルを直接指定してください。([#57624](https://github.com/kubernetes/kubernetes/pull/57624), [mtaufen](https://github.com/mtaufen))

- 廃止予定だったメンテンスされていないsaltのサポートを終了しました。kuberneetes-salt.tar.gzは今後のリリースのtarballに含まれなくなります。([#58248](https://github.com/kubernetes/kubernetes/pull/58248), [mikedanese](https://github.com/mikedanese))

- 廃止予定だったGCEのためのスイッチである`-mode`は削除されました。([#61203](https://github.com/kubernetes/kubernetes/pull/61203))
  - (:pencil: これはkubernetes的に何かを廃止したものではなく、gcloudの廃止予定のスイッチを使わないようにしただけのようです。)

- 不適切に使用されている"manifest"という文言を削除しました。([#60314](https://github.com/kubernetes/kubernetes/pull/60314))

- [https://github.com/kubernetes/kubernetes/issues/49213](https://github.com/kubernetes/kubernetes/issues/49213) sig-cluster-lifecycleはデプロイの自動化をコアリポジトリの外で実施することを決め、段階的に廃止していくことを決めました。
    * Remove deprecated ContainerVM support from GCE kube-up.  ([#58247](https://github.com/kubernetes/kubernetes/pull/58247), [mikedanese](https://github.com/mikedanese))
    * Remove deprecated kube-push.sh functionality.  ([#58246](https://github.com/kubernetes/kubernetes/pull/58246), [mikedanese](https://github.com/mikedanese))
    * Remove deprecated container-linux support in gce kube-up.sh.  ([#58098](https://github.com/kubernetes/kubernetes/pull/58098), [mikedanese](https://github.com/mikedanese))
    * Remove deprecated and unmaintained photon-controller kube-up.sh.  ([#58096](https://github.com/kubernetes/kubernetes/pull/58096), [mikedanese](https://github.com/mikedanese))
    * Remove deprecated and unmaintained libvirt-coreos kube-up.sh.  ([#58023](https://github.com/kubernetes/kubernetes/pull/58023), [mikedanese](https://github.com/mikedanese))
    * Remove deprecated and unmaintained windows installer.  ([#58020](https://github.com/kubernetes/kubernetes/pull/58020), [mikedanese](https://github.com/mikedanese))
    * Remove deprecated and unmaintained openstack-heat kube-up.sh.  ([#58021](https://github.com/kubernetes/kubernetes/pull/58021), [mikedanese](https://github.com/mikedanese))
    * Remove deprecated vagrant kube-up.sh. ([#58118](https://github.com/kubernetes/kubernetes/pull/58118),[roberthbailey](https://github.com/roberthbailey))

- DaemonSetControllerとその統合テスト、e2eテストはapps/v1 APIを使うようになりました。必要に応じてスクリプトを更新する必要があります。([#59883](https://github.com/kubernetes/kubernetes/pull/59883), [kow3ns](https://github.com/kow3ns))

- MountPropagation機能がベータとなりました。その結果全てのボリュームはLinuxでは`rslave`としてマウントされます。Linux環境において全てのマウントツリーでこのデフォルトの挙動をするためには、sharebleとしてマークすべきです。（例えば `mount --make-rshared /`など）systemdで動作している全てのLinuxディストリビューションではすでにrootディレクトリがrsharedでマウントされているため、何もする必要がありません。systemdのないLinux環境の場合はブート時dockerが起動する前に`mount --make-rshared /`を実行することを勧めます。([jsafrane](https://github.com/jsafrane))