Kubernetes 1.18: アップグレード時の注意事項

# はじめに

このエントリは、[Kubernetes 1.18 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1180) からアップグレード時に確認すべき内容をまとめています。
具体的には以下の項目を翻訳し、適宜補足やコメントを追加しています。

- Urgent Upgrade Notes
- Known Issues

その他の内容は [Kubernetes 1.18 の変更点まとめ](https://qiita.com/watawuwu/items/521d1364b71b863b406c)を参照ください。

このエントリでは補足などの追加のコメントは :pencil: のあとに追加するようにしています。

## アップグレード時に確認すべき注意事項

### kube-apiserver:
- Kubernetes 1.17 以前では `--encryption-provider-config` で指定する設定ファイルの `cacheSize` パラメータは指定がないまたは0を設定した場合デフォルト値が設定され 1000 が設定されていましたが、 Kubernetes 1.18 以降はエラーとなるようになりました。また 1.18 からキャッシュを無効にすることもできるようになり、その場合は負の値を設定してください。
    - :pencil: etcd の暗号化機能を利用する際に設定するファイルの話です。
- certificatesigningrequests/approval APIのコンシューマはCSRsに指定されたsignerに対するapproveの権限を持つ必要があります。
新しく追加された `signerName` フィールドおよび必要な権限については https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/#authorization を参照してください。(#88246, @munnerz) [SIG API Machinery, Apps, Auth, CLI, Node and Testing]
  - :pencil: 詳しくは https://qiita.com/hiyosi/items/c95e430916c1755cffaf#kube-apiserver を参照して下さい
- 次の機能は無条件に有効になり、対応する `--feature-gates` フラグが削除されました： `PodPriority`、 `TaintNodesByCondition`、`ResourceQuotaScopeSelectors` および `ScheduleDaemonSetPods` ([#86210](https://github.com/kubernetes/kubernetes/pull/86210), [@draveness](https://github.com/draveness)) [SIG Apps and Scheduling]

### kubelet:
- `--enable-cadvisor-endpoints` はデフォルトで無効になりました。もし cAdvisor v1 JSON API にアクセスが必要な場合は明示的に kubelet のフラグで有効にして下さい。このフラグは 1.15 で廃止予定となり、1.19 で削除される予定です。([#87440](https://github.com/kubernetes/kubernetes/pull/87440), [@dims](https://github.com/dims)) [SIG Instrumentation, Node and Testing]
- CSIMigrationOpenStack がベータに昇格しました。（OpenStack Cinder CSI Driver のインストールが必要なためデフォルトでは無効となっています）in-tree の AWS OpenStack Cinder driver `kubernetes.io/cinder` は 1.16 で廃止予定となり、1.20 で削除される予定です。ユーザーは、CSIMigration + CSIMigrationOpenStack機能を有効にし、OpenStack Cinder CSIドライバー （https://github.com/kubernetes-sigs/cloud-provider-openstack ）をインストールして、その時点での既存のポッドおよびPVCオブジェクトの中断を回避する必要があります。ユーザーは、OpenStack Cinder CSI Driverを新しいボリュームに直接使用する必要があります。
 ([#85637](https://github.com/kubernetes/kubernetes/pull/85637), [@dims](https://github.com/dims)) [SIG Cloud Provider]
  - :pencil: AWS OpenStack Cinder driver が何を示しているのかわからないのでわかる方がいたら教えて下さい。

### kubectl:

- `kubectl` と k8s.io/client-go は、`http://localhost:8080` のサーバアドレスをデフォルトとして使用しなくなりました。もしこのようなレガシーなクラスタを所有している場合は、サーバのセキュリティを確保することを**強く**推奨します。サーバのセキュリティを確保できない場合は、`$KUBERNETES_MASTER` 環境変数に `http://localhost:8080` を設定することで、サーバアドレスのデフォルト設定を引き続き使用できます。`kubectl` のユーザは、`--server` フラグまたは `--kubeconfig` か `$KUBECONFIG` で指定した kubeconfig ファイルのなかで、サーバアドレスを指定することもできます。([#86173](https://github.com/kubernetes/kubernetes/pull/86173), [soltysh](https://github.com/soltysh)) [SIG API Machinery, CLI and Testing]
- `kubectl run` は、以前から非推奨だったジェネレータと Pods の作成に関連しないフラグを削除しました。`kubectl run` コマンドは Pods を作成するだけになりました。Pods 以外のオブジェクトを作成するには、特定の `kubectl create` サブコマンドを参照してください。 ([#87077](https://github.com/kubernetes/kubernetes/pull/87077), [soltysh](https://github.com/soltysh)) [SIG Architecture, CLI and Testing]
- 廃止予定だった `kubectl rolling-update` コマンドが削除されました。 ([#88057](https://github.com/kubernetes/kubernetes/pull/88057), [julianvmodesto](https://github.com/julianvmodesto)) [SIG Architecture, CLI and Testing]

:pencil: 詳細は https://qiita.com/superbrothers/items/eef275853b0c2d14e95c#deprecations-and-removals-%E5%BB%83%E6%AD%A2%E3%81%8A%E3%82%88%E3%81%B3%E5%89%8A%E9%99%A4 を参照下さい。

### client-go:

- 生成された `clientset`、`dynamic/metadata/scale` クライアントのメソッドは第一引数に `context.Context` をとるようになりました。また、Create、Update、Patchメソッドはそれぞれ引数にCreateOptions、UpdateOptions、PatchOptionsをとります。Delete及びDeleteCollectionメソッドはDeleteOptionsを参照ではなく値として受け付けるようになりました。
以前のインタフェースで生成されたclientsetは、新しいAPIへの逐次的な移行を可能にするために、新しい「非推奨」パッケージで追加されました。非推奨パッケージは1.21のリリース時に削除されます。この移行をサポートするためのツールは http://sigs.k8s.io/clientgofix で提供されています。
  - :pencil: 詳細は https://qiita.com/Ladicle/items/bbe2a62aba85d083283d#client-go を参照してください。

- 次のメトリクスが削除されました。対応するメトリクスに変更して下さい:
  - v1.14.0 から利用可能なメトリクス:
      - `rest_client_request_latency_seconds` -> `rest_client_request_duration_seconds`
      - `scheduler_scheduling_latency_seconds` -> `scheduler_scheduling_duration_seconds `
      - `docker_operations` -> `docker_operations_total`
      - `docker_operations_latency_microseconds` -> `docker_operations_duration_seconds`
      - `docker_operations_errors` -> `docker_operations_errors_total`
      - `docker_operations_timeout` -> `docker_operations_timeout_total`
      - `network_plugin_operations_latency_microseconds` -> `network_plugin_operations_duration_seconds`
      - `kubelet_pod_worker_latency_microseconds` -> `kubelet_pod_worker_duration_seconds`
      - `kubelet_pod_start_latency_microseconds` -> `kubelet_pod_start_duration_seconds`
      - `kubelet_cgroup_manager_latency_microseconds` -> `kubelet_cgroup_manager_duration_seconds`
      - `kubelet_pod_worker_start_latency_microseconds` -> `kubelet_pod_worker_start_duration_seconds`
      - `kubelet_pleg_relist_latency_microseconds` -> `kubelet_pleg_relist_duration_seconds`
      - `kubelet_pleg_relist_interval_microseconds` -> `kubelet_pleg_relist_interval_seconds`
      - `kubelet_eviction_stats_age_microseconds` -> `kubelet_eviction_stats_age_seconds`
      - `kubelet_runtime_operations` -> `kubelet_runtime_operations_total`
      - `kubelet_runtime_operations_latency_microseconds` -> `kubelet_runtime_operations_duration_seconds`
      - `kubelet_runtime_operations_errors` -> `kubelet_runtime_operations_errors_total`
      - `kubelet_device_plugin_registration_count` -> `kubelet_device_plugin_registration_total`
      - `kubelet_device_plugin_alloc_latency_microseconds` -> `kubelet_device_plugin_alloc_duration_seconds`
      - `scheduler_e2e_scheduling_latency_microseconds` -> `scheduler_e2e_scheduling_duration_seconds`
      - `scheduler_scheduling_algorithm_latency_microseconds` -> `scheduler_scheduling_algorithm_duration_seconds`
      - `scheduler_scheduling_algorithm_predicate_evaluation` -> `scheduler_scheduling_algorithm_predicate_evaluation_seconds`
      - `scheduler_scheduling_algorithm_priority_evaluation` -> `scheduler_scheduling_algorithm_priority_evaluation_seconds`
      - `scheduler_scheduling_algorithm_preemption_evaluation` -> `scheduler_scheduling_algorithm_preemption_evaluation_seconds`
      - `scheduler_binding_latency_microseconds` -> `scheduler_binding_duration_seconds`
      - `kubeproxy_sync_proxy_rules_latency_microseconds` -> `kubeproxy_sync_proxy_rules_duration_seconds`
      - `apiserver_request_latencies` -> `apiserver_request_duration_seconds`
      - `apiserver_dropped_requests` -> `apiserver_dropped_requests_total`
      - `etcd_request_latencies_summary` -> `etcd_request_duration_seconds`
      - `apiserver_storage_transformation_latencies_microseconds ` -> `apiserver_storage_transformation_duration_seconds`
      - `apiserver_storage_data_key_generation_latencies_microseconds` -> `apiserver_storage_data_key_generation_duration_seconds`
      - `apiserver_request_count` -> `apiserver_request_total`
      - `apiserver_request_latencies_summary`
  - v1.15.0 から利用可能なメトリクス:
      - `apiserver_storage_transformation_failures_total` -> `apiserver_storage_transformation_operations_total` ([#76496](https://github.com/kubernetes/kubernetes/pull/76496), [@danielqsj](https://github.com/danielqsj)) [SIG API Machinery, Cluster Lifecycle, Instrumentation, Network, Node and Scheduling]

## 既知の問題点(Known Issues)

問題点は報告されていません。