kubernetes

Kubernetes 1.12: API Changes


はじめに

このエントリは、Kubernetes 1.12 の CHANGELOG から API Changes についてまとめています。翻訳に合わせて補足を追記しています。その他の内容は次のリンク先を参照してください。


Kubernetes 1.12: API Changes



  • kubeadm コマンドにおいて alpha phase kubelet config annotate-cri phrase コマンドがサポートされました。(#68449, @fabriziopandini)




    :pencil: 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 を異なるファイルシステム上にセットアップするために便利でしょう。(:pencil: 便利そう!) (#54935, @anguslees)


  • kubeadm config images pull 時に指定する --cri-socket-path フラグが他のサブコマンドとの一貫性確保のために --cri-socket へリネームされました。


  • kubeadm にて ControlPlaneEndpoint の設定が API から ClusterConfiguration へと移動しました。(#67830, @fabriziopandini)



  • kubeadmInitConfiguration が InitConfiguration および ClusterConfiguration の二つの構造体に分割されました。(#67441, @rosti)




    :pencil: Note
    InitConfiguration がリファクタリングされて、kube-proxycontroller-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.ValidatingWebhookConfigurationadmissionregistration.k8s.io/v1beta1.MutatingWebhookConfiguration に その Webhook がサーバサイドの dry-run をサポートしているかどうかを示す新しいフィールド(SideEffects) が追加されました。もし、dry-run をサポートしていない Webhook が呼ばれるリソースに対するリクエストがあった場合、サーバは 400: Bad Request を返し、リクエストを拒否します。また、admission.k8s.io/v1beta1.AdmissionReview に対しても、dry-run に対応している Webhook であるかを確認するために同じように新しくフィールドが追加されました。(#66936, @jennybuckley)



  • CRIRunPodSandboxRequest において sandobox を実行する際にランタイムの設定を選択するために利用できる runtime_hundler field がサポートされました。(アルファ機能) (#67518, @tallclair)




    :pencil: Note
    io.kubernetes.cri-o.TrustedSandbox アノテーションによる、trusted なのか、untrusted なのか、というバイナリーな選択肢から、RuntimeClass へと置き換わる第一歩のようです、


  • status サブリソースが有効化された際に、CRD バリデーションスキーマのルートにさらにいくつかのフィールドが許されるようになりました。(#65357, @nikhita)


  • kubelet における --docker-disable-shared-pid フラグは削除されました。Pod 内の PID namespace の共用は個々の PodShareProcessNamespace オプションを利用してください。(#66506, @verb)



  • kube-dns で利用されている dnsmasq--dns-loop-detect オプションが追加されました。(#67302, @dixudx)




    :pencil: Note
    cluster/addons/dns 内と kubeadm, kubemark で利用されているマニフェストの dnsmasq の引数に --dns-loop-detect を渡すようにした、というだけのようです。



  • kube-addon-manager において追加の --prune-whitelist リソースをサポートしました。(#67743, @Random-Liu)




    :pencil: Note
    addon-manageraddonmanager.kubernetes.io/mode というラベルと、kubectl apply --prune --label=$LABEL という仕組みを使ってリソースの管理を行っているのですが、デフォルトで prune されないリソースが存在し、addon 管理上問題となっていました。この修正で prune されるべきリソースがちゃんと prune されるようになったようです。



  • Resource Quota ScopeSelectors がベータに昇格し、デフォルトで有効化されます。(#67077, @vikaschoudhary16)




    :pencil: Note
    ResourceQuotascopeSelector というフィールドが追加され、プライオリティクラスごとに Quota を設定できる機能のようです。



  • OpenAPI spec とドキュメントに DELETE リクエスト時の 202 Accepted レスポンスが反映されました。この変更はエラーパスに依存しているいくつかのクライエントに影響を与える可能性があります。(#63418, @roycaihw)




    :pencil: Note
    kube-apiserver はそもそも非同期の DELETE オペレーション時に 202 Accepted を返していたのですが、それが OpenAPI の spec に反映されていなかった問題を修正した、ということらしいですが、その OpenAPI spec から生成された各種言語のクライアントが非同期オペレーションをサポートしていない場合があるようです。


  • アルファ機能であった Initializer アドミッションプラグインはデフォルトとして今後有効化されることはありません。これは、アルファ API としてデフォルトとしてオフにせよというポリシー通りの振る舞いです。(#66039, @liggitt)



  • kube-scheduler に API レベルでバリデーションが追加されました。(#66799, @noqcks)




    :pencil: Note
    kube-scheduler の設定ファイルのバリデーションが入った、ということらしいです。


  • PodDisruptionBudget における DisruptedPods フィールドが必須項目からオプション項目になりました。