5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【2021年4月版】Kubernetes ナビ その4: コンテナ関連

Last updated at Posted at 2021-04-06

Kubernetes ナビ

本シリーズでは kubernetes クラスタを構成する様々なコンポーネント・技術をざっとご紹介しております。

今回はその4となります。

Kubernetes のコンテナ関連のオプションについてざっくり

コンテナ関連のオプションには以下の2つに分かれます。相変わらず勝手にまとめてしまってます。すいません。。。

  • CRI(Container Runtime Interface) … もともと Docker 専用で開発されていたコンテナ実行箇所を標準化・規格化したものでいくつかの実装が出てきています。
  • コンテナ用OS … コンテナ内で動作するのに最適化された Linux ディストリです。必要最低限のパッケージのみを含む、もしくは必要最低限で動くように調整されたものです。

今回、"コンポーネント"ではなく"オプション"としたのは k8s のディストリやクラウドサービスによって対応するCRI、使えるにコンテナ選択肢が少ないからです。自由度が低いので"コンポーネント"ではなく"オプション"としています。
すっぴんの k8s では当然、ほとんど自由にカスタマイズが可能です。といってもセットアップ大変ですが・・・

それでは以下、コンテナ関連のオプションについてご紹介いたします。

コンテナランタイム

コンテナランタイムの概要については以下の記事が素晴らしかったのでご紹介いたします&是非ご参照ください。

要は K8s → CRI → OCI → コンテナ というAPIチェーンでOCI準拠のコンテナランタイムも(CRIに準拠してなくても)、CRI → OCIcontainerd-shim を噛ませば動作可能、ということでより選択肢が広がってしまっている状況です。
ただし、CRI は K8s からの呼び出し専用 API であるのに対し、OCI より一般的なコンテナ技術の規格になりますのでこの記事では k8s から見てCRI準拠であるかどうかが主たる基準になりますが、より一般的には OCI の準拠が汎用的であるということになります。

CRIとOCIのレイヤの違いは containerd のサイトにある以下のイメージが分かりやすい?かと思います。

kubeletから呼ばれる CRI を受けて Containerdが動作し、さらに下の層には containerd-shim の点線の層があると思います。これらが OCI の低レベルランタイムのレイヤです。

1. Docker

言わずと知れたコンテナ技術のパイオニア、Dockerです。
ただしCRI準拠ではないため、k8s v.1.11 あたりからはデフォルトのコンテナランタイムではなくなっています。

このDockerはパイオニアなだけあって、低レベルのコンテナ制御からボリューム、ネットワーク、イメージの管理、イメージのリポジトリ管理などなど全部盛りのプロダクトです。コンテナを動かすだけなら大きすぎなのでここから containerd がスピンアウトしました。

2. CRI-O

CNCF 傘下の CRI 実装プロジェクトです。

CRI-O は CRIだけでなく OCI にも準拠しているので単体でもコンテナを起動できます。

3. Containerd

Dockerのコア部分だけを取り出して CRI 対応したのが Containerd らしいですがこれによって Docker は要らんよ、ということでしょう。
ただし汎用的な"組み込みDocker"?になったことでよりパワフルなライブラリに生まれ変わったと思います。

4. gVisor

こちらは Google社製の OCI 準拠のコンテナランタイムです。k8sと動かすには containerd shim が必要です。

k8s上で gVisor を動かす記事がありましたのでご紹介いたします。

5. Firecracker

AWS 御謹製のコンテナランタイムです。lambdaやfargateでコンテナを動かしているのはこちらのランタイムとなります。
KVMベースで高速、軽量なコンテナだそうです。

Firecracker をコンテナランタイムとする K8s ディストリを見つけてしまいました。

6. Kata Containers

Hypervisor に Proxy するタイプのコンテナランタイムです。エミュレーターのQEMU や Rust製ハイパーバイザー Cloud-Hypervisor、上記の Firecracker への統合が可能な模様です。

なかなかの変態構成ですね。。。

ちなみに k8s で katacontainer を動かす手順が公式に案内されておりましたのでリンクを貼っておきます。

7. LXD

上記とは毛色が違いますが、LXD は Canonical社メインで開発されているコンテナ技術です。
Microk8s, k3s など限られたディストリですが、LXD 上で動作可能なようです。

コンテナ用OS

さてコンテナを動かす側のレイヤでお腹いっぱいな感じがしますが、コンテナの中もいろいろ最適化が進んできております。

1. Fedora CoreOS

Fedora CoreOS はいろいろ紆余曲折のあって Fedora 傘下の CoreOS という昔の名前で出ています。最古参のコンテナ用OSです。

今は RPM + Systemd の Fedora スタイルとなっております。

2. Container-Optimized OS

Google 社御謹製、ChromiumOS ベースのコンテナOSです。当然ですが、GKEではデフォルトのOSイメージです。こちらは Dockerを叩くのに最善のコンテナOSとなっております。コンテナの中に何かを入れて実行するコンテナではないので注意です。こんがらがりますね~。。。

3. Bottlerocket

Amazon 社御謹製のコンテナ用OSで、ほぼ AWS EKS、ECS 専用です。 githubにも上がっておりますので自前でのパッケージ作成も可能なのでしょうか。。

4. Flatcar

Flatcar はいろいろ悶着のあった CoreOS Container Linux の商用サポートを続けるディストリです。
旧来の CoreOS が"生きている"のは Flatcar の方です。

ついでに同社の k8s ディストリを発見してしまいました。

掘れば掘るほど出てくるなぁ。。。

雑感

やはりコンテナ関連になるとグッと変態度が上がってしまいますね。とはいえコンテナ技術は k8s の中核ですので触れないわけにはいきません。

今の k8s をいったんまとめることで現時点までのコンテナ技術の歩みを超速でふりかえるようなシリーズとなりました。k8s はコンテナ技術とクラウド技術のハイブリッドなので本当に敷居が高いですが、k8s を俯瞰することでコンテナ技術とクラウド技術のコアな仕組みに触れられる貴重な教材です。

今後も引き続き、kubernetes に注目です。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?