はじめに
このエントリは、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-criphrase コマンドがサポートされました。(#68449, @fabriziopandini)`kubeadm init` 時に config から渡された CRI Socket の情報を `kubeadm upgrades` 時に利用できるよう、`Node` のアノテーションに保存する、という Phase のようです。
**Note** -
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)`InitConfiguration` がリファクタリングされて、`kube-proxy` や `controller-manager` の設定のような cluster-wide な設定が `ClusterConfiguration` という設定カテゴリに整理され、Init 時のマスターノードの設定から分割された、ということのようです。
**Note** -
RuntimeClassAPI がアルファ機能として追加されました。この機能を利用する際にはRuntimeClassfeature gate を有効化してください。RuntimeClassAPI リソースは、クラスタ内のコンテナを実行するために利用する、異なるランタイムのクラスを定義することできます。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_hundlerfield がサポートされました。(アルファ機能) (#67518, @tallclair)`io.kubernetes.cri-o.TrustedSandbox` アノテーションによる、`trusted` なのか、`untrusted` なのか、というバイナリーな選択肢から、`RuntimeClass` へと置き換わる第一歩のようです、
**Note** -
statusサブリソースが有効化された際に、CRD バリデーションスキーマのルートにさらにいくつかのフィールドが許されるようになりました。(#65357, @nikhita) -
kubeletにおける--docker-disable-shared-pidフラグは削除されました。Pod 内の PID namespace の共用は個々のPodのShareProcessNamespaceオプションを利用してください。(#66506, @verb) -
kube-dnsで利用されているdnsmasqに--dns-loop-detectオプションが追加されました。(#67302, @dixudx)[cluster/addons/dns](https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns) 内と `kubeadm`, `kubemark` で利用されているマニフェストの `dnsmasq` の引数に `--dns-loop-detect` を渡すようにした、というだけのようです。
**Note** -
kube-addon-managerにおいて追加の--prune-whitelistリソースをサポートしました。(#67743, @Random-Liu)`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 されるようになったようです。
**Note** -
Resource Quota ScopeSelectors がベータに昇格し、デフォルトで有効化されます。(#67077, @vikaschoudhary16)
`ResourceQuota` に `scopeSelector` というフィールドが追加され、プライオリティクラスごとに Quota を設定できる機能のようです。
**Note** -
OpenAPI spec とドキュメントに
DELETEリクエスト時の202 Acceptedレスポンスが反映されました。この変更はエラーパスに依存しているいくつかのクライエントに影響を与える可能性があります。(#63418, @roycaihw)`kube-apiserver` はそもそも非同期の `DELETE` オペレーション時に 202 Accepted を返していたのですが、それが OpenAPI の spec に反映されていなかった問題を修正した、ということらしいですが、その OpenAPI spec から生成された各種言語のクライアントが非同期オペレーションをサポートしていない場合があるようです。
**Note** -
アルファ機能であった
Initializerアドミッションプラグインはデフォルトとして今後有効化されることはありません。これは、アルファ API としてデフォルトとしてオフにせよというポリシー通りの振る舞いです。(#66039, @liggitt) -
kube-schedulerに API レベルでバリデーションが追加されました。(#66799, @noqcks)`kube-scheduler` の設定ファイルのバリデーションが入った、ということらしいです。
**Note** -
PodDisruptionBudgetにおけるDisruptedPodsフィールドが必須項目からオプション項目になりました。