はじめに
このページではKubernetes 1.18のChangelogを基に、SIG APPSに関連する変更内容をまとめています。
SIG-APPSはKubernetesのワークロードの扱いなどの変更を主に扱っているため、他のSIGと関係する変更が多いです。ワークロードの取り扱いやバグについては、この文書を参照してもらうのが良いですが、機能の詳細などは今後公開されていく他のSIGのまとめの方が詳しいと思います。(人によってまとめ方も違うので、それぞれ見て欲しいです。)
この記事は Kubernetes 1.18の変更点 まとめ の一部です。他の変更点もみてみてください。
がついた文章は筆者の補足です。
※この記事は、Z Labの業務の一環として作成したものです。
Changes by Kind
Deprecation
kube-apiserver:
- 以下の廃止予定だったAPIはもう提供されなくなります
- 全ての
apps/v1beta1
,apps/v1beta2
のリソース。代わりにapps/v1
を使ってください -
extensions/v1beta1
以下のdaemonsets
,deployments
,replicasets
のリソース。 代わりにapps/v1
を使ってください -
extensions/v1beta1
以下の networkpolicies代わりに
networking.k8s.io/v1` を使ってください -
extensions/v1beta1
以下の podsecuritypolicies代わりに
policy/v1beta1` を使ってください
- 全ての
API Change
なし
New API types/varsions
- より良いIngress設定を実現する IngressClass リソースが追加されました。(#88509, @robscott) [SIG API Machinery, Apps, CLI, Network, Node and Testing]
New API fields:
- autoscaling/v2beta2 HorizontalPodAutoscaler に
spec.behavior
フィールドが追加されました。 これによりスケールの振る舞いを設定することができます。振る舞いの設定は スケールアップ、ダウンのそれぞれで指定することができます。ポリシーのリストとして安定性ウインドウを指定することができます。ポリシーは追加、削除されるPodの数の絶対値かパーセンテージを指定します。(#74525, @gliush) [SIG API Machinery, Apps, Autoscaling and CLI]- KEP: Configurable scale up/down velocity for HPAに仕様が記載されています。
-
pathType
というフィールドが追加され、これを使うことで リクエストに対してどのように指定されたパスをマッチさせるのかを示すことができます。値としてはExact
,Prefix
,ImplementationSpecific
が設定できます。(#88587, @cmluciano) [SIG Apps, Cluster Lifecycle and Network] - Alphaの機能である
AnyVolumeDataSource
を使うことで PersistentVolumeClaimの spec.dataSourceで独自のデータソースを指定することができます。 - Alphaの機能である
ServiceAppProtocol
を使うことで、 ServicePort, EndpointPortの定義にappProtocol
を指定できるようになります。 (#88503, @robscott) [SIG Apps and Network] - Alphaの機能である
ImmutableEphemeralVolumes
を使うことで Secret, ConfigMapオブジェクトのimmutable
フィールドを指定し、これらが不変であることを示すことができます。(#86377, @wojtek-t)- KEP: Immutable ephemeral volumes このフィールドを設定することでkubeletがConfigMap, Secretの変更を監視し、ファイルを書き換えるという仕事をする必要がなくなり、パフォーマンスが向上することが期待されます。
Other API changes:
なし
Configuration file changes:
kube-scheduler:
- Kube-schedulerが1より多くのスケジューリングプロファイルで動作できるようになりました。プロファイルの選択には
.spec.schedulerName
を用います。 (#88285, @alculquicondor) [SIG Apps, Scheduling and Testing]
kube-proxy:
- kube-controller-managerの 新しい
--endpointslice-updates-batch-period
フラグを使うことで Podの変化によって発生する endpointsliceの更新を削減することができます。 (#88745, @mborsz)
Features graduated to GA:
- TaintBasedEvictions がGAとなりました (#87487, @skilxn-go)
- Windows RunAsUserName がGAとなりました (#87790, @marosset) [SIG Apps and Windows]
Feature
なし
Other (Bug, Cleanup or Flake)
- APIサーバが1.16以上で、kubeletが1.15以下の場合 PodのステータスであるpodIP, NodeのSpecであるpodCIDRを更新できていなかった問題を修正しました。(#88505, @liggitt) [SIG Apps and Network]
- EndpointSliceがterminatingなPodのEndpointを含んでいた問題を修正しました。(#89056, @andrewsykim) [SIG Apps and Network]
- EndpointSlice controllerの競合問題を修正し、EndpointSliceの外部からの変更を扱えるようにしました。(#85703, @robscott) [SIG Apps and Network]
- EndpointSliceコントローラが共有オブジェクトを変更しようとするバグを修正しました。(#85368, @robscott) [SIG API Machinery, Apps and Network]
- NodeのEventの "involevedObject"の"apiVersion"が設定されていないバグを修正しました。(#87537, @uthark) [SIG Apps and Node]
- StatefulSetのconversionにより、同じマニフェストを何度もapplyすることができなかった問題を修正しました。(#87706, @liggitt) [SIG Apps and Testing]
- Nodeが追加され、provider IDを決める際にエラーとなってしまうと、それ以降 provider IDが設定されないバグを修正しました。 (#87043, @zjs) [SIG Apps and Cloud Provider]
- みなしごとなったControllerRevisionが再びStatefulSetのものにならないようにしました。(#86801, @likakuli), (#84984, @cofyc) [SIG Apps]
-
ControllerRevisionは、普段は目にすることはないですが、StatefulSetなどの変更履歴を管理するためのオブジェクトです。
deleteOptions.propagationPolicy=Orphan
の場合、StatefulSetが削除されると、StatefulSetが管理するControllerRevisionはOwnerがなくなり、みなしごとなることが期待されるのですが、バグにより再び削除しようとしているStatafulSetがOwnerとなってしまう状態だったようです。このみなしごを再び引き取ってしまうバグは2つの要因があったようで上記2つのPRによりそれぞれが修正されています。
-
ControllerRevisionは、普段は目にすることはないですが、StatefulSetなどの変更履歴を管理するためのオブジェクトです。
- CSR controllerが扱う署名の証明書と鍵を、api-serverで行っているのと同じようにディスクから再読み込みできるようにしました。 (#86816, @deads2k) [SIG API Machinery, Apps and Auth]
まとめ
過去のAPIVersionは使えなくなりapps/v1
が普通に使われるようになったことからも、Appsが担当しているワークロード周りのリソースの成熟を感じます。
新しい機能はネットワーク、ストレージなどとの連携がらみのものが多く、SIG-APPSの変更点から現在のKubernetesが力を入れている分野を俯瞰することができます。
既存のリソースは古いものに関してはバグもそれほどないように見えますが、StatefulSetなどはまだバグ修正が目立ちます。また、新機能追加やリファクタリングの影響で過去バージョンとの互換性が崩れてしまうことに対する修正も増えてきており、複雑化していくKubernetesのメンテナンスの難しさを感じました。