-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_ContainerStandards
- 戻る(Kubernetes)
- コンテナの標準仕様が色々策定されている。
- Docker、Kubernetes隆盛のバックグラウンド。
コンテナ・オーケストレーション・ツールとコンテナランタイムの間のI/Fの標準仕様
- kubeletと通信するためのインターフェースを規定
- 2016年12月にKubernetes 1.5のαリリースでAPIが実装された。
- これにより、コンテナランタイムをコンパチできるようになった。
- OpenShiftは、CRI-O をv4.0からデフォルトに採用した。
-
「コンテナ」のフォーマット・ランタイムの標準化
を目的として設立されたイニシアチブ(組織)である。 -
Linux Foundationプロジェクトの1つ。
コンテナランタイムの標準仕様
-
Linuxコンテナの標準仕様
- Default Filesystem
- Namespace
- cgroups
- など
-
Linuxコンテナ以外の標準仕様
- Solaris
- Windows
- Virtual Machine
コンテナイメージの標準仕様
- Image Manifest
- Image Index
- Image Layout
- Filesystem Layout
- Image Configuration
コンテナイメージ配布の標準仕様
※ 仕様の策定が止まっている?
コンテナ・オーケストレーション・ツールとストレージの間のI/Fの標準仕様
-
2018年11月にv1.0に到達
-
外部ストレージを開発するベンダーが独立に
ストレージ側の機能追加や修正を行えることを目指す。
代表的な機能
-
Volume Expansion
Volumeのサイズ拡張-
.spec.resources.requests.storageの値を
変更することでPVC/PVのサイズを拡張する。 - 縮小はサポートしない。
-
-
Raw Block Volume
File SystemでフォーマットしていないVolume-
.spec.volumeModeにBlockを設定したPVCのManifestをデプロイ - File Systemはないので通常のVolumeのようにマウントされない。
-
-
Volume Cloning(GA)
Volumeのクローン(コピー)- 巨大なデータが格納されたVolumeをコピーする。
- 必ずクローン元のPVCより大きなサイズを指定する。
-
Volume Snapshot & Restore
VolumeのSnapshotとRestore- PVCではなく、VolumeSnapshotをデプロイしてスナップショットを取る。
- リストアは、PVCを作成する際に、VolumeSnapshotを指定することで行う。
-
Topology
AZなどのトポロジー指定- Availability Zoneを意識したPodの分散配置が可能に。
- PVC/PVで作成されるVolumeも配置先を指定できる。
3つのサイドカーコンテナを提供する必要がある。
CSIエンドポイントに対して
-
external-attacher
VolumeAttachmentオブジェクトを監視し、
ボリュームをノードにアタッチする命令を行う。 -
external-provisioner
PersistentVolumeClaimオブジェクトを監視し、
ボリューム作成や削除の命令を行う。 -
driver-register
-
CSI driverをkubeletに登録する。
-
CSI driverとは
- コントローラ・ドライバとノード・ドライバ、製品個別CSPを実装。
- 機能:アタッチ・デタッチ、プロビジョン、マウント、ワークフローアロケーション
-
コンテナ・オーケストレーション・ツールの
問い合わせに対応する3つのサービスを実装する必要がある。
-
Identity Service
Capability/Health/その他メタデータなどの問い合わせを行う機能を実装。 -
Controller Service
ボリュームやスナップショットの作成・削除・一覧表示を行う機能を実装。 -
Node Service
ボリュームをマウントする際に呼び出される機能を実装。
-
コンテナがネットワークに接続するI/Fの標準仕様とリファレンス・プラグインを提供
-
CNCF(Cloud Native Computing Foundation)にホストされたプロジェクトの一つ。
-
動作原理
- JSONフォーマットのネットワーク設定を標準入力とする。
- ネットワーク設定が環境変数としてプラグインへ渡される。
- プラグインが渡された情報に基づいて命令を実行する。
-
ADD
コンテナをネットワークへ追加 -
DEL
コンテナをネットワークから削除 -
CHECK
コンテナのネットワークをチェック -
VERSION
バージョンの確認
-
cniVersion
CNI Specificationのバージョン -
name
ネットワーク名 -
type
実行するプラグインのファイル名 -
args
コンテナランタイムより与えられる追加情報 -
ipMasq
IPマスカレードの設定 -
ipam
IPAM設定のための情報- type
実行するIPAMプラグインのファイル名
- type
-
dns
DNS設定のための情報-
nameservers
DNSネームサーバのリスト -
domain
ローカルドメインの指定 -
search
サーチドメインのリスト -
options
リゾルバに渡すオプションのリスト
-
-
CSI以前は、in-treeか、out-of-tree(FlexVolume)のVolume Pluginがあった。
-
以下のようなストレージを使用できるよう、個別のプラグインが開発される。
-
高速なローカル・ストレージ(Ceph)
- ワーカ・ノードのローカル・ストレージをK8sのPersistentVolumeとして扱う。
- NVMe SSDの性能を活かして、高IOPSが必要なミドルウェアのストレージとして利用する。
- 可用性はミドルウェアのレプリケーションで担保する。
-
高可用ネットワークストレージ
- ネットワーク経由で利用可能なストレージをK8sのPersistentVolumeとして扱う
- ステートフルなアプリケーションの永続化ボリュームとして利用
-
大容量な分散オブジェクトストレージ
- ネットワーク経由で利用可能なストレージをAmazon S3互換のAPI経由で扱う
- 文書、画像、動画などの大容量データを保存
-
Cybozuが自社DCでKubernetesを運用するために作成した、
K8sのPodが高速なローカル・ストレージを有効に利用するCSI。
- LVM (Logical Volume Manager)(WindowsユーザがLinuxに乗り換える際に、知っておくとイイ情報集。の該当節を参照)によるボリューム管理
- トポロジを考慮したダイナミック・プロビジョニング
- ノードの空き容量に応じたスケジューリング
- 既存のストレージ機能を持つソフトウェアをK8sと統合することを目的とする。
- 例えば、分散ストレージを実現するCephなどと組み合わせて使用する。
ノードにIPアドレスを割り当てて、配下のポッドにはNAT変換でアクセス。
1つのポッドにつき1つのIPアドレスを提供するシンプルなネットワーク。
AKSもなにやら、専用のCNIを持っているというようなことを言っていた
(AKSをセキュアに利用するためのテクニカルリファレンスの該当節を参照)。
- kubenetと選択できる。
- Azure仮想ネットワークのサブネットからIPアドレスが割り当てられる。
- 配下のポッドの最大数に合わせてIPアドレスを事前予約する。
L2 over L3ネットワーキング (デフォルトではVXLAN) で、Pod間の到達性を確保。
- BGPによるピュアL3ネットワーキングで、Pod間の到達性を確保。
- Kubernetes Network Policyに対応しているCNI
CalicoをKubernetes Network Policy機能のみで動作させ、Flannelと統合するCNI
1つのgoバイナリでKubernetesのネットワークまわりを全部処理する。
- Kubernetes Network Policyの実装に加えてServiceの実装置き換えもできる
- ノード内はFlannelのようにブリッジ
- ノード間はBGPを使ったルーティング
L3の仮想ネットワーク + Kubernetes Network Policy制御
-
マルチ・クラウドおよびマルチ・ハイパーバイザー環境向けの
ネットワーク仮想化とセキュリティのプラットフォーム -
異種のエンドポイントやテクノロジ・スタックを持つ
新興のアプリケーション・フレームワークやアーキテクチャに焦点 -
NSX-T Container Plug-in(NCP)
コンテナベースのCaaS/PaaSプラットフォームとの統合を提供
Cybozuが自社DCでKubernetesを運用するために作成したCNI。
-
Open Container Initiative
https://ja.wikipedia.org/wiki/Open_Container_Initiative -
Cloud Native Computing Foundation
https://ja.wikipedia.org/wiki/Cloud_Native_Computing_Foundation
-
してみた件
- Docker・Kubernetes周辺の動向を整理してみた件
https://qiita.com/mamomamo/items/e4e9e44d9f77cd72b70a - コンテナの標準仕様について調査してみた件
https://qiita.com/mamomamo/items/448a8edf6d4ccfc22bbd - コンテナランタイムの動向を整理してみた件
https://qiita.com/mamomamo/items/ed5db2ab1555078f8a24
- Docker・Kubernetes周辺の動向を整理してみた件
-
CNCF主要プロジェクト動向まとめ
-
CNCF CNI プラグイン
https://qiita.com/hichihara/items/54ff9aeff476bf463509 -
Kubernetes のストレージについて調べる
https://qiita.com/toshihirock/items/0c91bbedf0e144acf6fc
移行メモ
- 誤記を修正した。「cgropus」→「cgroups」、「external-provisoner」→ 「external-provisioner」、「ブラグイン」→「プラグイン」、 「name servers」→「nameservers」。
- 「kubeletとが通信するための」→「kubeletと通信するための」、 「問い合わせに対応3つのサービス」→「問い合わせに対応する3つのサービス」、 「JSONフォーマットのネットワーク設定が標準入力とする」→「〜を標準入力とする」、 「サブネットからIPアドレスが割り当てる」→「〜が割り当てられる」に修正した。
- 「OpenShiftは、CRI-O をv4.0からデフォルトに採用する予定。」は 実際に OpenShift 4.0 で採用済みのため「採用した。」に改めた。
- 「, etc.」という見出しが CSI / CNI の両方にあり、 GitHub Wiki では同名見出しのアンカが衝突するため、括弧で対象を補った。
- マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への URL リンクは、移行済みの AKSをセキュアに利用するためのテクニカルリファレンス に張り替えた。
Tags: 移行, コンテナ, 標準仕様, CRI, OCI, CSI, CNI, Kubernetes, Docker
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。