このエントリは、Kubernetes v1.9 CHANGELOG からBefore Upgradingの内容をまとめています。その他の項目は下記リンク先を参照してください。
- Kubernetes v1.9: 主な変更点 (Major Themes)
- Kubernetes v1.9: Before Upgrading
- Kubernetes v1.9: 既知の問題 (Known Issues)
- Kubernetes v1.9: 廃止予定の機能
kubernetes1.9 Before Upgrading
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md#before-upgrading
を翻訳し、個人的に調べたことも織り交ぜて記載しています。
1.9に上げる前にetcdのデータをバックアップしておくことが望ましいです。
kubernetsを何で管理しているかによりますが、その方法によっては1.9にバージョンアップする際にetcdを3.0から3.1にバージョンアップされるかもしれません。
そしてetcdはダウングレードをサポートしていないため、元に戻したい場合はバックアップから復旧するしか方法がありません。
API Machinery
- admission controll webhook を呼ぶときに使われていた admission APIが
admission.v1alpha1
からadmission.v1beta1
に移動しました。必ずアップグレードの前に存在する全てのwebhookを削除してください。 この変更は後方非互換です。 - admissionregistration APIの一部である admission webhook configurations APIが
v1beta1
になりました。必ずアップグレードの前に存在する全てwebhook configurationを削除してください。 -
ValidatingAdmissionWebhook
が追加されました。これは以前GenericAdmissionWebhook
という名前だったものです。kube-apiserverの--admission-control
フラグにこれを設定することでこの機能を有効にできます。 - kube-apiserverの
--portal-net
--service-node-ports
は廃止になりました。これは以前から予告されていた廃止です。今後は``--service-cluster-ip-range
`--service-node-port-range` を使うようにしてください。
メモ: External Admission Webhooks
WebHookを使ってadmission controlをカスタマイズできるようになっている。
この仕組みではリクエストを変更することはできない。そういうことがしたい場合はPluginやinitializerを使うようにとのこと。
ValidatingAdmissionWebhookはこれを実現するAdmissionControlのプラグイン。admission webhook configurations API
とは externalAdmissionHookConfiguration
のことかと思われる。このリソースで、externalAdmissionWebhookの情報を登録する。複数登録がある場合は平行に実行され、どれか一つでも否認である場合はリクエストは失敗する。このとき失敗した理由は初めに失敗したexternal admission webhookのものが帰ることに注意。またexternal admission webhookの呼び出しが失敗した場合はそれは無視される(externalAdmissionWebhookの評価対象から外れる)。
この挙動はFailurePolicy
で変更することができる。
Auth
- PodSecurtyPolicyのallowPriviledgeEscalationフィールドのデフォルト値が誤っていて、意図せず許可されなくなってしまうバグを修正しました。1.8.0でPodSecurityPolicyを定義しかつallowPriviledgeEscalationをfalseに設定している場合は、アップグレード後にPodSecurityPolicyを再度適用してください。
- alpha版だったGCP KMSとの統合は削除されます。アップグレード前に、データを復号(あるいは別のプロバイダ向けに再度暗号化)してください。これは将来的にKMSをプラグイン形式で提供できるようにする予定があるために実施するものです。(https://github.com/kubernetes/kubernetes/issues/51965 )
メモ: PodSecurtyPolicy 何故こんなことになったか
allowPriviledgeEscalationは1.8.0の時点ではデフォルト値がfalseとなっていました。しかし、これではこのオプションが存在しないバージョンとの互換性が取れなくなるため、1.8.1でデフォルトをtrueに変更しました。
一方、1.8.0ではallowPriviledgeEscalationに明示的にfalseが指定してある場合も、シリアライズの段階で無指定と同様の扱いをしていました。1.8.0時点ではデフォルト値がfalseだったため、これで問題なく動いていました。
しかし1.8.1でデフォルト値がtrueとなったため、このように1.8.0で明示的にfalseを指定した場合、manifest上はfalseであるにもかかわらず、上記シリアライズで無指定として扱われるため、デフォルトのtrueとして扱われるようになります。これはが非互換であるということです。
CLI
- OpenAPIを使うようになったため、Swagger1.2のバリデーションはkubectlから削除されました。
--use-openapi
と--schema-cache-dir
も削除されました。- OpenAPIはSwaggerの新しい名称です。
Cluster Lifecycle
-
kubeadm join
時に-discovery-token-ca-cert-hash
か--discovery-token-unsafe-skip-ca-verification
のいづれかを指定する必要があります。 - kubeletの引数である
--cloud-provider
がデフォルトでauto-detect
の挙動をする機能は廃止されました。-
--cloud-provider=auto-detect
を指定することができますが、この挙動も将来廃止予定です。 - 1.9以降では明示的に指定することを推奨します。ドキュメントを参照してください。 https://kubernetes.io/docs/getting-started-guides/scratch/#cloud-providers
- 何があった? cloud-providor独自のコードをcoreから外したいようだ。その際はcloud-providorごとにコントローラが別れるはずで auto-detectのような機能は不要になるとのことから、削除をしようとしている
-
- kubeadmの
--skip-preflight-checks
は廃止予定となります。- 代わりに
--ignore-preflight-errors
を指定してください。例えば--ignore-preflight-errors=all
などと指定ができます。個別のチェックごとに無視するかどうか指定できるようになりました。
- 代わりに
- APIサーバのexternal host address をcloud provider APIで取得している場合は、明示的に
--external-hostname
を指定するようにしてください。この機能は廃止予定です。- kube-apiserverにあるcloudproviderに依存する処理を排除する一環
Multicluster
- Kubernetes Federationの開発は https://github.com/kubernetes/kubernetes/blob/master/github.com/kubernetes/federation に移動しました。FederationはKubernetesのリリースとは独立して行います。
- Federationサーバはhyperkubeに含まれなくなります
Node
- 1.7で廃止予定とされていましたが、kubeletの
--network-plugin-dir
は削除されました。代わりに--cni-bin-dir
を使ってください - kubeletの
--cloud-provider
のデフォルトがauto-detect
ではなくなりました。明示的にcloud-providerを指定してください。
Network
- NetworkPolicyリソースが networking.k8s.io/v1 になりました。1.9にアップグレードした後で、全てのNetworkPolicyをv1に移行してください。
- kube-proxyの設定が
componentconfig/v1alpha1
からkubeproxy.config.k8s.io/v1alpha1
に変わりました。コマンドラインフラグではなく、ファイルで設定している場合はapiVersionを変更してください。 - nodeに
alpha.service-controller.kubernetes.io/exclude-balancer
アノテーションを追加することでServiceNodeExclusionを試すことができます。- このアノテーションがあるnodeはServiceのtype=LoadBalancerのLBと接続されないようになります。
Scheduling
- Taint Key
unreachable
はGAとなりました。 - Taint Key
notReady
はnot-ready
となりGAとなりました。 - 下記Taint Keyの変更は自動的に更新されますが、それに対するTolerationは手動で更新する必要があります。
-
node.alpha.kubernetes.io/notReady
tonode.kubernetes.io/not-ready
node.alpha.kubernetes.io/unreachable to node.kubernetes.io/unreachable
-
- taint
node.kubernetes.io/memory-pressure
がPodTolerationRestrictionのホワイトリストの影響を受けないバグを修正しました。PodTolerationRestrictionを有効にした状態でnode.kubernetes.io/memory-pressure
を利用する場合はホワイトリストに加えてください。 - kube-schedulerの設定のリファクタリングをしました。
- kube-schedulerは
--config
によりファイルからの設定読み込みをサポートしました。他の大半のフラグは廃止予定となります。
- kube-schedulerは
Storage
- [alpha] LocalPersistentVolumesが VolumeSchedulingを要求するようになりました。これは非互換の変更のため、以下の対応が必要です
- kube-scheduler, kube-controller-managerのVolumeScheduling feature gateを有効にしなければなりません
- NoVolumeNodeConflictという条件は削除されました。独自スケジューラの場合はこの影響を考慮してください。
- CheckVolumeNodeConflictという条件は削除されました。独自スケジューラの場合はこの影響を考慮してください。
メモ: LocalPersistentVolumeとは
PVCのインターフェースで、ローカルストレージを扱えるようにするものです。PVにnode affinityを含めることで、正しいnodeにpodを配置できるようにします。
OpenStack
- LbaasV1のサポートをやめて、LbaasV2のみのサポートとなりました。