Kubernetes 1.14: SIG Windows の変更内容

はじめに
---------

この記事では、Kubernetes 1.14.0の[CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md)のうち、SIG-Windows関連の変更について紹介します。

SIG-Windowsって?
-----------------

SIG-Windows(Windows Special Interest Group)は、Windowsなワーカーノードと、Windows serverなコンテナのスケジューリングに関するKubernetesのワーキンググループです。

[community/sig\-windows at master · kubernetes/community](https://github.com/kubernetes/community/tree/master/sig-windows)

Kubernetes 1.14では、Windowsワーカノード/コンテナのサポートが実装開始から3年の時を経てついにStable版に昇格しました。([#116](https://github.com/kubernetes/enhancements/issues/116))このようなタイミングもあり、様々なメディアで取り沙汰されるなどSIG-Windowsにとっては今回のリリースは特筆すべきもののようです。

- [Kubernetes 1\.14がリリース、Windowsコンテナサポートが安定版に到達：永続ローカルボリュームもGA \- ＠IT](https://www.atmarkit.co.jp/ait/articles/1903/26/news072.html)
- [KubernetesがWindowsコンテナを正式サポート。サーバの内蔵ストレージを使うPersistent Local Volumesも正式版に。Kubernetes 1\.14リリース － Publickey](https://www.publickey1.jp/blog/19/kuberneteswindowspersistent_local_volumeskubernetes_114.html)

IISやSQL Serverなど、Windows上で動作させたいワークロードを持つ企業は多く有ると思いますし、そうした企業がkubernetesを利用してLinuxとWindowsのワーカーノードを同じようにオーケストレーションできるようになっていくというのは、かなりのインパクトがあるのではないでしょうか。

筆者は普段Windows Serverを運用しているわけではないのですが、最近の状況の理解のため、今回のchangelogを読んで雰囲気を把握してみることにしました。

1.14 What's New
----------------

version 1.14では以下の要件がサポートされるようになったようです。

* Azure-CNI, OVN-Kuberentes, Flannelを使用してのコンテナネットワーキング
* Windows Server 2019をワーカーノードおよびコンテナとして利用可能に
* Windows-basedなコンテナをpodで動かす場合にサポートされるオプションがLinuxコンテナ並に充実する内容になりました。詳細はWindows node supportに関する[KEP(Kubernetes Enhancement Proposals)](https://github.com/kubernetes/enhancements/blob/master/keps/sig-windows/20190103-windows-node-support.md)を見てみてください 

[CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md)のトピックのうち、次の内容にはSIG-Windows関連のものは含まれていませんでした。

* Known Issues
* Urgent Upgrade Notes（重大なアップグレードに関する通達）
* Deprecations(廃止予定の機能)
* Notable Features

Detailed Bug Fixes And Changes(細かなバグフィックスや変更)
-----------------

WindowsコンテナでGroup Managed Service Accounts (GMSA)の利用がサポートされました([kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-windows/20181221-windows-group-managed-service-accounts-for-container-identity.md))。GMSAとは自動化されたパスワード管理やSPN(service principal name)管理が統合されたActive Directoryアカウントのことで、アプリケーション間のアクセス制御がコンテナレベルでも利用できるようになったようです。

:memo: KEPで想定されている[ユーザーストーリー](https://github.com/kubernetes/enhancements/blob/master/keps/sig-windows/20181221-windows-group-managed-service-accounts-for-container-identity.md#user-stories)を見ると、WebアプリケーションコンテナとMS SQL Serverコンテナ間接続の認証認可にGMSAを利用する例が詳細に記述されています。

- SMBファイルシステムのマウント時の挙動が改善されました ([#73661](https://github.com/kubernetes/kubernetes/pull/73661), [@andyzhangx](https://github.com/andyzhangx), [#75087](https://github.com/kubernetes/kubernetes/pull/75087), [@andyzhangx](https://github.com/andyzhangx))

- Windowsノード/コンテナのネットワーク使用量が取得できるようになりました ([#74788](https://github.com/kubernetes/kubernetes/pull/74788), [@feiskyer](https://github.com/feiskyer))

- Windows GMSA credentialsをKubeletからDockerに渡せるような処理が追加されました ([#73726](https://github.com/kubernetes/kubernetes/pull/73726), [@wk8](https://github.com/wk8))

- Windowsノード上に配置したkube-proxyでOverlay modeとWindows ServerのDSRモードが利用可能になりました。そのためのオプションが`network-name`, `source-vip`, and `enable-dsr`. ([#70896](https://github.com/kubernetes/kubernetes/pull/70896), [@ksubrmnn](https://github.com/ksubrmnn))として追加されています
  - :memo: 今までWindowsノードで動かすkube-proxyはL2ブリッジなネットワーキングしかサポートされていませんでしたが、Host Networking Service(HNS)を使用したオーバレイネットワークが構成できるようになったようです。
  - 参考: [Windows Container Networking \| Microsoft Docs](https://docs.microsoft.com/en-us/virtualization/windowscontainers/container-networking/architecture#container-network-management-with-host-network-service)

- Kuberenetesコンポーネントをwindowsサービスとして動かした場合に、graceful shutdownが正しく行われるようになりました ([#73292](https://github.com/kubernetes/kubernetes/pull/73292), [@steffengy](https://github.com/steffengy))

- vSphere cloud providerがWindows上で動作するVMのUUIDを正しく取得できない問題が修正されました ([#71147](https://github.com/kubernetes/kubernetes/pull/71147), [@benmoss](https://github.com/benmoss))

- Kubelet: CRIのメトリクスである`usageNanoCores`がwindowsでも取得できるようになりました。 ([#73659](https://github.com/kubernetes/kubernetes/pull/73659), [@feiskyer](https://github.com/feiskyer))
  - :memo: `usageNanoCores`は`kubectl top`やHPA/VPAに利用されているメトリクスです

- GCEでk8sクラスタを構築するスクリプトがwindowsノードにも対応しました。([#73442](https://github.com/kubernetes/kubernetes/pull/73442), [@pjh](https://github.com/pjh))

- Kubernetesに同梱されている構築ツールのkubeadmはCoreDNSのデプロイ処理も含んでいますが、CoreDNSは現状Linuxでの動作のみサポートしている関係で、デプロイの際にwindows serverノードを避けて配置するような設定が追加されています。([#69940](https://github.com/kubernetes/kubernetes/pull/69940), [@MarcPow](https://github.com/MarcPow))
  -  :memo: kubeadmを使う場合は、ワーカーノードはwindowsだけで構成するのではダメで、linuxノードも一緒に動かさなければいけないということになりますね。

Reference
-----------

- [enhancements/20190103\-windows\-node\-support](https://github.com/kubernetes/enhancements/blob/9a898ce1c4665f767ffef5f7581811e0c6a71ef7/keps/sig-windows/20190103-windows-node-support.md): Windowsワーカーノードの実装に関するKEP