はじめに
このエントリは、Kubernetes 1.12 の CHANGELOG から API Changes についてまとめています。翻訳に合わせて補足を追記しています。その他の内容は次のリンク先を参照してください。
- Kubernetes 1.12: 既知の問題 (Known Issues) と 廃止された機能および廃止予定の機能 (Deprecations and removals)
- Kubernetes 1.12: 主な変更点 (Major Themes)
- Kubernetes 1.12: Action Required
- Kubernetes 1.12: 新機能 (New Features)
- Kubernetes 1.12: API Changes
Kubernetes 1.12: API Changes
-
kubeadm
コマンドにおいてalpha phase kubelet config annotate-cri
phrase コマンドがサポートされました。(#68449, @fabriziopandini)**Note**`kubeadm init` 時に config から渡された CRI Socket の情報を `kubeadm upgrades` 時に利用できるよう、`Node` のアノテーションに保存する、という Phase のようです。 -
Windows 上の
kubeadm
において--cri-socket
のデフォルト値が--tcp://localhost:2375
になりました。(#67447, @benmoss) -
kubeadm
にて、実験的に--rootfs
フラグが実装されました。これを利用することでkubeadm
は (Kubernetes 設定のための) ファイル操作をする前にchroot
を行うようになります。この機能はたとえば docker から起動されたkubeadm
のように、 Kubernetes を異なるファイルシステム上にセットアップするために便利でしょう。( 便利そう!) (#54935, @anguslees) -
kubeadm config images pull
時に指定する--cri-socket-path
フラグが他のサブコマンドとの一貫性確保のために--cri-socket
へリネームされました。 -
kubeadm
にてControlPlaneEndpoint
の設定がAPI
からClusterConfiguration
へと移動しました。(#67830, @fabriziopandini) -
kubeadm
のInitConfiguration
がInitConfiguration
およびClusterConfiguration
の二つの構造体に分割されました。(#67441, @rosti)**Note**`InitConfiguration` がリファクタリングされて、`kube-proxy` や `controller-manager` の設定のような cluster-wide な設定が `ClusterConfiguration` という設定カテゴリに整理され、Init 時のマスターノードの設定から分割された、ということのようです。 -
RuntimeClass
API がアルファ機能として追加されました。この機能を利用する際にはRuntimeClass
feature gate を有効化してください。RuntimeClass
API リソースは、クラスタ内のコンテナを実行するために利用する、異なるランタイムのクラスを定義することできます。Pod
は、その定義内のRuntimeClassName
フィールドを通して、RuntimeClass
を選択することができます。(#67737, @tallclair) -
サーバサイドにおける dry-run の実行が、副作用 (side effect) や調整ループ (reconciliation mechanism) に依存する Admission webhook を実行してしまう問題を解決するために、
admissionregistration.k8s.io/v1beta1.ValidatingWebhookConfiguration
とadmissionregistration.k8s.io/v1beta1.MutatingWebhookConfiguration
に その Webhook がサーバサイドの dry-run をサポートしているかどうかを示す新しいフィールド(SideEffects
) が追加されました。もし、dry-run をサポートしていない Webhook が呼ばれるリソースに対するリクエストがあった場合、サーバは400: Bad Request
を返し、リクエストを拒否します。また、admission.k8s.io/v1beta1.AdmissionReview
に対しても、dry-run に対応している Webhook であるかを確認するために同じように新しくフィールドが追加されました。(#66936, @jennybuckley) -
CRI
のRunPodSandboxRequest
において sandobox を実行する際にランタイムの設定を選択するために利用できるruntime_hundler
field がサポートされました。(アルファ機能) (#67518, @tallclair)**Note**`io.kubernetes.cri-o.TrustedSandbox` アノテーションによる、`trusted` なのか、`untrusted` なのか、というバイナリーな選択肢から、`RuntimeClass` へと置き換わる第一歩のようです、 -
status
サブリソースが有効化された際に、CRD バリデーションスキーマのルートにさらにいくつかのフィールドが許されるようになりました。(#65357, @nikhita) -
kubelet
における--docker-disable-shared-pid
フラグは削除されました。Pod 内の PID namespace の共用は個々のPod
のShareProcessNamespace
オプションを利用してください。(#66506, @verb) -
kube-dns
で利用されているdnsmasq
に--dns-loop-detect
オプションが追加されました。(#67302, @dixudx)**Note**[cluster/addons/dns](https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns) 内と `kubeadm`, `kubemark` で利用されているマニフェストの `dnsmasq` の引数に `--dns-loop-detect` を渡すようにした、というだけのようです。 -
kube-addon-manager
において追加の--prune-whitelist
リソースをサポートしました。(#67743, @Random-Liu)**Note**`addon-manager` は `addonmanager.kubernetes.io/mode` というラベルと、`kubectl apply --prune --label=$LABEL` という[仕組み](https://kubernetes.io/docs/concepts/overview/object-management-kubectl/declarative-config/#alternative-kubectl-apply-f-directory-prune-l-your-label)を使って[リソースの管理を行っている](https://qiita.com/inajob/items/300805e895eec6535dd2)のですが、デフォルトで prune されないリソースが存在し、addon 管理上問題となっていました。この修正で prune されるべきリソースがちゃんと prune されるようになったようです。 -
Resource Quota ScopeSelectors がベータに昇格し、デフォルトで有効化されます。(#67077, @vikaschoudhary16)
**Note**`ResourceQuota` に `scopeSelector` というフィールドが追加され、プライオリティクラスごとに Quota を設定できる機能のようです。 -
OpenAPI spec とドキュメントに
DELETE
リクエスト時の202 Accepted
レスポンスが反映されました。この変更はエラーパスに依存しているいくつかのクライエントに影響を与える可能性があります。(#63418, @roycaihw)**Note**`kube-apiserver` はそもそも非同期の `DELETE` オペレーション時に 202 Accepted を返していたのですが、それが OpenAPI の spec に反映されていなかった問題を修正した、ということらしいですが、その OpenAPI spec から生成された各種言語のクライアントが非同期オペレーションをサポートしていない場合があるようです。 -
アルファ機能であった
Initializer
アドミッションプラグインはデフォルトとして今後有効化されることはありません。これは、アルファ API としてデフォルトとしてオフにせよというポリシー通りの振る舞いです。(#66039, @liggitt) -
kube-scheduler
に API レベルでバリデーションが追加されました。(#66799, @noqcks)**Note**`kube-scheduler` の設定ファイルのバリデーションが入った、ということらしいです。 -
PodDisruptionBudget
におけるDisruptedPods
フィールドが必須項目からオプション項目になりました。