コンテナ関連コミュニティの動向 (2017年8月・9月)

気になっているニュースを適当に書き連ねてみた．

- 2017年6月・7月号 https://qiita.com/AkihiroSuda/items/dc60347f1ad79a747fa2
- 2017年4月・5月号 http://qiita.com/AkihiroSuda/items/e4785014c6c50496f11b
- 2017年3月号 http://qiita.com/AkihiroSuda/items/746328a8ee59301807b6
- Docker 1.13号 http://qiita.com/AkihiroSuda/items/d762b8cdc1d704f8efdf
- Docker 1.12号 http://qiita.com/AkihiroSuda/items/ba3e118389e0a550c000

- - -
Mesosphere社，Rancher社のいずれとも，Kubernetesに重きをおいた製品を出してきた．

Docker社は，未だKubernetes関連の製品は発表していないが，Kubernetesに関するOSSの取り組みは活発に実施しているように見える．

## Docker・Moby 関連
### Docker 17.09

https://github.com/docker/docker-ce/releases/tag/v17.09.0-ce

17.07のリリースが8/30までずれこんだため，17.08は無し．

9/27にリリースされた17.09では，さほど大きい変更はなされなかった．

ただし，`aufs.ko` が読み込まれている場合でも，AUFSよりOverlay2を優先して使うようになった．https://github.com/moby/moby/pull/34430

(なったと言うか，私がした．もしデグレしたら `{"storage-driver": "aufs"}` を `/etc/docker/daemon.json`に書いてください．)

ちなみにOverlay2は `CONFIG_OVERLAY_FS_REDIRECT_DIR=y` なカーネルではまともに動かないが，17.10で修正見込み．https://github.com/moby/moby/pull/34342


### LinuxKitがKubernetesをサポート

※LinuxKit: Docker社などが中心となって開発しているコンテナホスト専用OS

https://www.slideshare.net/Docker/linuxkit-the-first-five-months-by-justin-cormack-riyaz-faizullabhoy-docker (スライド9枚目)

https://github.com/linuxkit/linuxkit/tree/master/projects/kubernetes

Kubernetes関連のコード自体は以前からlinuxkit/linuxkitリポジトリに入っていたが，より正式な位置に格上げされる．(リポジトリはlinuxkit/linuxkitから分かれるかもしれない． https://github.com/linuxkit/linuxkit/issues/2463)

CRI-containerdにも対応している．

Docker社が今後，Kubernetesとどう関わっていくつもりなのかは，DockerCon EU(10月@コペンハーゲン)で発表があるかもしれない．

### 新コマンド: `docker trust` (Notary統合)

https://github.com/docker/cli/pull/472

`docker trust sign foo/bar:baz`コマンドを実行するだけで，イメージへの署名・pushを簡単に実施できるようになった．

Docker 17.10から利用可能となる見込み．

### Multi-platform image

https://blog.docker.com/2017/09/docker-official-images-now-multi-platform/

従来は例えばgolangのAMD64版イメージ(`golang`)，S390X版イメージ(`s390x/golang`)，Windows版イメージ(`golang:nanoserver`)は別々に分かれていたが，今後は単一の`golang`イメージに統一される．
もちろん，実行されるバイナリは，プラットフォームによって異なる．


### Moby Technical Steering Committee発足準備

※Moby: Dockerの上流となっているcommunity-drivenなプロジェクト． 大まかには，Docker : Moby Project ≒ RHEL : Fedora と考えてよい．

https://github.com/moby/tsc

Moby, containerd, LinuxKitなどの関連プロジェクト間の連絡を支援する組織として，Moby Technical Steering Committeeが10月中に発足する見込み．

従来，Docker社CTOのSolomon Hykesが務めてきた，BDFL ([Benevolent Dictator for Life, 「優しい終身の独裁者」](https://ja.wikipedia.org/wiki/%E5%84%AA%E3%81%97%E3%81%84%E7%B5%82%E8%BA%AB%E3%81%AE%E7%8B%AC%E8%A3%81%E8%80%85))のポストは廃止される．

### BuildKitのDockerfile対応

※ BuildKit: 中間言語(LLB)のDAGを用いる，高速な次世代 `docker build`

https://github.com/moby/buildkit/pull/106

中間言語(LLB)に加え，Dockerfileのビルドも可能になった．
DockerfileはLLBのDAGにコンパイルされ，並列実行される．

Dockerfileフロントエンドに固有の部分は，コンテナイメージとして分離されているので，Dockerfile以外の高級言語の実装も容易．

将来的には，Kubernetesなどを用いた分散ビルドも対応予定．
単にランダムなホストにロードバランスするのではなく，どのホストがどのグラフ頂点のキャッシュを持っているかなどの情報も勘案したスケジューリングが可能となる予定．


## Kubernetes関連

### Kubernetes 1.8

http://blog.kubernetes.io/2017/09/kubernetes-18-security-workloads-and.html

RBAC正式サポート，TLSのローテーションなどセキュリティ関連の改善が重要そう．

### Pivotal Container Service (PKS)

https://content.pivotal.io/announcements/introducing-pivotal-container-service-pks-the-simple-way-to-bring-kubernetes-to-enterprise-customers

GKE互換のクラスタを，オンプレミスや，GCP以外のクラウドにも簡単に構築できる．

## Rancher関連

### Rancher 2.0 alpha

http://rancher.com/announcing-rancher-2-0/
https://rancher.com/docs/rancher/v2.0/en/faq/

Rancher 1.Xは，Cattle, Kubernetes, Docker Swarm, Mesosを比較的対等に扱っていたように思えるが，Rancher 2.0ではKubernetesが中心に据えられるようになった．
Rancher 2.0では，CattleはKubernetesのフロントエンドとして動作する．


### system-docker 削除中

https://github.com/rancher/os/pull/2079

system servicesはcontainerdを用いて動くようになる．

## Mesos・Mesosphere関連

### DC/OSがKubernetesをサポート

https://mesosphere.com/blog/kubernetes-dcos/

## OpenFaaS (旧alexellis/faas)

### alexellis/faas -> openfaas/faas

https://github.com/openfaas/faas/pull/220
https://www.openfaas.com/

最近流行っている気がする．

## ランタイム関連

### containerd

https://www.slideshare.net/Docker/kubernetes-cri-containerd-integration-by-lantao-liu-google

Dockerではなくcontainerdをランタイムとして，Kubernetesを実行できるようになった．

今のところ，containerdはβ版，CRI-containerd (containerdとKubernetesの中間モジュール)はα版．

### CRI-O

https://github.com/kubernetes-incubator/cri-o

containerdに類似する代替ランタイムであるCRI-OはRC版に達した．

2018年は，containerdとCRI-Oの競争が話題になりそう．

CRIランタイムとして使う分には，containerdもCRI-Oもあまり違いはない．

containerdは，CRIよりも細分化された独自APIを持っており，また，下位ランタイムやスナップショッタなどのプラグインを簡単に差し替えできるように設計されているため，CRI-Oよりもユースケースが広い．


### NVIDIA container runtime

https://github.com/NVIDIA/nvidia-container-runtime

runcの代替ランタイムとして，DockerやKubernetesから使うことができる．

`nvidia-docker`より簡単に使えるようになりそう．

## 自分自身のこと

Moby (Docker)，BuildKitに加えて，containerdのメンテナにしてもらった．

https://github.com/containerd/containerd/pull/1515