Kubernetes 1.11: 主な変更点 (Major Themes) Part.2

## はじめに

このエントリは、[Kubernetes 1.11 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md) から 主な変更点 (Major Themes) の Part.1 で触れられていなかった部分についてまとめています。翻訳に合わせて補足を追記しています。その他の内容は次のリンク先を参照してください。

- [Kubernetes 1.11: 主な変更点 (Major Themes) Part.1](https://qiita.com/watawuwu/items/405fc3161e52d4a4b46e)
- Kubernetes 1.11: 主な変更点 (Major Themes) Part.2
- [Kubernetes 1.11: Urgent Upgrade Notes と 既知の問題 (Known Issues)](https://qiita.com/shmurata/items/cffbcde7ec38c07e7d74)
- [Kubernetes 1.11: Before Upgrading](https://qiita.com/shmurata/items/a65e083cd91d42b241e7)
- [Kubernetes 1.11: 廃止予定の機能 (Deprecations) と 新機能 (New alpha features)](https://qiita.com/takuhiro/items/02dece392971d8cad158)


## Kubernetes 1.11 Major Themes

### SIG Cluster Lifecycle

SIG Cluster Lifecycle は `kubeadm` の設定ファイルのメンテナンスに関連した新しいコマンドを含む `kubeadm` の使いやすさの改善にフォーカスしました。それに伴い API バージョンは `v1alpha2` となりました。これらのコマンドは新しいバージョンの設定への移行や設定のデフォルト値の表示 ([#63969](https://github.com/kubernetes/kubernetes/pull/63969), @luxas)、クラスターのブートストラップ時に必要なコンテナイメージの一覧と取得を取り扱います ([#63833](https://github.com/kubernetes/kubernetes/pull/63833), @chuckha)([#63450](https://github.com/kubernetes/kubernetes/pull/63450), @chuckha)。

その他の注目すべき変更は以下の通りです。

-   CoreDNS が kube-dns に代わりデフォルトの DNS プロバイダとなりました。([#63509](https://github.com/kubernetes/kubernetes/pull/63509), @detiber)
-   パブリックインターネットへの接続が無いユーザのための使いやすさが改善されました。
    <blockquote><div>:pencil: **Note**</div> ブートストラップ時に必要なコンテナイメージの一覧を `kubeadm config images list` で知ることができます。</blockquote>
-   Docker 以外の CRI ランタイムを利用しているユーザのための使いやすさが改善されました。([#64836](https://github.com/kubernetes/kubernetes/pull/64836), @chuckha) 
    <blockquote><div>:pencil: **Note**</div> `kubeadm` の `rpm` と `deb` パッケージに `cri-tools` が含まれるようになりました。</blockquote>
-   `kubeadm` による systemd の drop-in ファイルの修正を避けるために、kubelet の structured configuration をサポートしました。
-   アップグレード時のプロセスに関するたくさんの改善とバグフィックス。

### SIG Network

SIG Network の今リリースにおける主なマイルストーンは、IPVS-based ロードバランシングと CoreDNS が GA になったことです。

IPVS は in-cluster ロードバランシングにおける iptables を利用した以前の方法とは異なる、カーネル内のハッシュテーブルを利用した方法です。また、CoreDNS はサービスディスカバリにおける kube-dns の後任です。

### SIG Node

SIG Node はいくつかの機能とキートピックにおける段階的な改善を行いました。

ノードオブジェクトの管理を簡易化する `Dynamic kubelet config` がベータになり、デフォルトで有効化されます。また CRI で動くように設定されている Kubelet はログローテーション機能が利用できるようになり([#58823](https://github.com/kubernetes/kubernetes/issues/58823), @yujuhong)、本リリースでベータとなりました。

> :pencil: **Note**
> コンテナが出力する Kubernetes のノードにおけるログをどう取り扱うかについては、[Evaluation of container logging solutions](https://docs.google.com/document/d/1oQe8dFiLln7cGyrRdholMsgogliOtpAzq6-K3068Ncg/edit#heading=h.tqzh23ejpszb) にてドキュメント化 (注[^1]) されており、それによるとログのローテションは kubelet がその責務を負うこととなっているようです。

コンテナランタイムに依存しない、運用者のための、プロダクション環境でのノードのデバッグや調査に利用できる一貫したツールを提供するための `cri-tools` プロジェクトが GA となりました。

プラットフォームに依存するものとしては、SIG Windows によって Windows サポートの改善とリソースマネージメントの改善がなされました。また、特に、Linux における `sysctl` のサポートがベータになりました。

> :pencil: **Note**
> `sysctl` サポートについては公式ドキュメントの 「[Using sysctls in a Kubernetes Cluster](https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/)」にあります。これまでは、カーネルパラメータを変更しなければならないアプリケーションなどでは [initContainers で初期化処理を行ったりする必要](https://github.com/pires/kubernetes-elasticsearch-cluster/blob/6.3.0/es-master.yaml#L17-L22)　がありましたが、これからは `securityContext` の設定で済むようになります。`initContainers` で設定したカーネルパラメータなどはノードの再起動時に再度実行されなかったりして設定が消えてしまうなど問題があったのですが、これで解消されると嬉しい。

### SIG OpenStack

SIG OpenStack は広範囲なシナリオとユースケースをカバーする11の受け入れテストなど、テスト環境を構築中です。1.11 リリースサイクルでは、この環境からの [テストグリッド](https://k8s-testgrid.appspot.com) へのレポートは、OpenStack Cloud Provider を Kubernetes リリースの gating job へと認定しました。

> :pencil: **Note**
> [sig-release-1.11-blocking](https://k8s-testgrid.appspot.com/sig-release-1.11-blocking) に Conformance OpenStack テストが含まれたことを指すと思われるが、なぜか [1.10 時点で既に含まれている](https://k8s-testgrid.appspot.com/sig-release-1.10-blocking)ように見える…。

新しい機能としては、Keystone と Kubernetes RBAC の改善された統合および、OpenStack Cloud Provider 全体のコードベースにまたがる安定性や互換性の改善が含まれます。

### SIG Storage

SIG Storage は前のバージョンにおいて導入した二つの機能をそれぞれ GA/ベータ に昇格させました。また、新しく三つの機能をアルファとして導入しました。

Pod が PV をまだ利用している際の PVC の削除や、PVC にまだ結びついている PV の削除を防ぐための StorageProtection 機能が GA となりました。そして Pod の再起動後にボリュームサイズを増やすことを可能にする volume resizing がベータとなりデフォルトで有効化されます。

アルファ機能として導入された三つの機能は以下の通りです。

-   Pod の再起動を伴わないボリュームのオンラインリサイズ機能。
-   AWS EBS と GCE PD ボリュームがノードにおける接続されたボリュームの最大数の上限を増やすことが可能になりました。([#64154](https://github.com/kubernetes/kubernetes/pull/64154), @gnufied)
-   Subpath volume のディレクトリが Downward API による環境変数で作成することが可能になりました。([#49388](https://github.com/kubernetes/kubernetes/pull/49388), @kevtaylor)

> :pencil: **Note** [#64154](https://github.com/kubernetes/kubernetes/pull/64154)
> 詳しい説明は公式ドキュメントの 「[Dynamic volume limits](https://kubernetes.io/docs/concepts/storage/storage-limits/#dynamic-volume-limits)」に書かれているが、簡単にいうと、今まで固定値しか取ることのできなかった、ボリュームのノードへの接続数を、ノードタイプやストレージタイプごとに設定可能とする機能。より詳しい仕様は、[現在レビュー中のドキュメント](https://github.com/kubernetes/community/pull/2051/files)を参照のこと。

> :pencil: **Note** [#49388](https://github.com/kubernetes/kubernetes/pull/49388)
> Downward API による環境変数が Subpath volume のディレクトリ名として使えるようになったため、例えば以下のような指定ができるようになりました。

```yaml:subpath-volume.yaml
        env:
        - name: NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        volumeMounts:
        - mountPath: /var/log/mysql
          name: logs
          subPath: $(NAME)
      volumes:
      - name: logs
        hostPath:
          path: /mnt/log-repo
```

> 例えば NFS などの共有ファイルシステムを利用している際に Pod ごとにディレクトリを分けたい、などのユースケースで利用できます。

[^1]: ドキュメントにアクセスするためには、[Google Groups の kubernetes-dev](https://groups.google.com/forum/#!forum/kubernetes-dev) に参加する必要があります。