「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
各種標準仕様 †
CRI(Container Runtime Interface) †
コンテナ・オーケストレーション・ツールとコンテナランタイムの間のI/Fの標準仕様
- kubeletとが通信するためのインターフェースを規定
- 2016年12月にKubernetes 1.5のαリリースでAPIが実装された。
- これにより、コンテナランタイムをコンパチできるようになった。
- OpenShiftは、CRI-O をv4.0からデフォルトに採用する予定。
OCI(Open Container Initiative) †
- 「コンテナ」のフォーマット・ランタイムの標準化
を目的として設立されたイニシアチブ(組織)である。
- Linux Foundationプロジェクトの1つ。
Runtime Specification †
コンテナランタイムの標準仕様
- Linuxコンテナの標準仕様
- Default Filesystem
- Namespace
- cgropus
- など
- Linuxコンテナ以外の標準仕様
- Solaris
- Windows
- Virtual Machine
Image Format Specification †
コンテナイメージの標準仕様
- Image Manifest
- Image Index
- Image Layout
- Filesystem Layout
- Image Configuration
Distribution Specification †
コンテナイメージ配布の標準仕様
※ 仕様の策定が止まっている?
CSI(Container Storage Interface) †
概要 †
コンテナ・オーケストレーション・ツールとストレージの間のI/Fの標準仕様
- 外部ストレージを開発するベンダーが独立に
ストレージ側の機能追加や修正を行えることを目指す。
機能 †
代表的な機能
- 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-provisoner
PersistentVolumeClaim?オブジェクトを監視し、
ボリューム作成や削除の命令を行う。
- CSI driverとは
- コントローラ・ドライバとノード・ドライバ、製品個別CSPを実装。
- 機能:アタッチ・デタッチ、プロビジョン、マウント、ワークフローアロケーション
ストレージ・ベンダー側 †
コンテナ・オーケストレーション・ツールの
問い合わせに対応3つのサービスを実装する必要がある。
- Identity Service
Capability/Health/その他メタデータなどの問い合わせを行う機能を実装。
- Controller Service
ボリュームやスナップショットの作成・削除・一覧表示を行う機能を実装。
- Node Service
ボリュームをマウントする際に呼び出される機能を実装。
CNI(Container Network Interface) †
概要と動作原理 †
- コンテナがネットワークに接続するI/Fの標準仕様とリファレンス・プラグインを提供
- CNCF(Cloud Native Computing Foundation)にホストされたプロジェクトの一つ。
- 動作原理
- JSONフォーマットのネットワーク設定が標準入力とする。
- ネットワーク設定が環境変数としてプラグインへ渡される。
- ブラグインが渡された情報に基づいて命令を実行する。
サポートすべきオペレーション †
渡されるネットワーク設定 †
- cniVersion
CNI Specificationのバージョン
- args
コンテナランタイムより与えられる追加情報
- name servers
DNSネームサーバのリスト
代表的なプラグイン †
CSI †
- CSI以前は、in-treeか、out-of-tree(FlexVolume?)のVolume Pluginがあった。
- 以下のようなストレージを使用できるよう、個別のプラグインが開発される。
- 高速なローカル・ストレージ(Ceph)
- ワーカ・ノードのローカル・ストレージをK8sのPersistentVolume?として扱う。
- NVMe SSDの性能を活かして、高IOPSが必要なミドルウェアのストレージとして利用する。
- 可用性はミドルウェアのレプリケーションで担保する。
- 高可用ネットワークストレージ
- ネットワーク経由で利用可能なストレージをK8sのPersistentVolume?として扱う
- ステートフルなアプリケーションの永続化ボリュームとして利用
- 大容量な分散オブジェクトストレージ
- ネットワーク経由で利用可能なストレージをAmazon S3互換のAPI経由で扱う
- 文書、画像、動画などの大容量データを保存
TopoLVM †
Cybozuが自社DCでKubernetesを運用するために作成した、
K8sのPodが高速なローカル・ストレージを有効に利用するCSI。
Rook †
- 既存のストレージ機能を持つソフトウェアをK8sと統合することを目的とする。
- 例えば、分散ストレージを実現するCephなどと組み合わせて使用する。
, etc. †
CNI †
kubenet †
ノードにIPアドレスを割り当てて、配下のポッドにはNAT変換でアクセス。
Weave Net †
1つのポッドにつき1つのIPアドレスを提供するシンプルなネットワーク。
Azure CNI †
AKSもなにやら、専用のCNIを持っているというようなことを言っていた。
- kubenetと選択できる。
- Azure仮想ネットワークのサブネットからIPアドレスが割り当てる。
- 配下のポッドの最大数に合わせてIPアドレスを事前予約する。
Flannel †
L2 over L3ネットワーキング (デフォルトではVXLAN) で、Pod間の到達性を確保。
Calico †
- BGPによるピュアL3ネットワーキングで、Pod間の到達性を確保。
- Kubernetes Network Policyに対応しているCNI
Canal †
CalicoをKubernetes Network Policy機能のみで動作させ、Flannelと統合するCNI
Kube-Router †
1つのgoバイナリでKubernetesのネットワークまわりを全部処理する。
- Kubernetes Network Policyの実装に加えてServiceの実装置き換えもできる
- ノード内はFlannelのようにブリッジ
- ノード間はBGPを使ったルーティング
Romana †
L3の仮想ネットワーク + Kubernetes Network Policy制御
NSX-T †
- マルチ・クラウドおよびマルチ・ハイパーバイザー環境向けの
ネットワーク仮想化とセキュリティのプラットフォーム
- 異種のエンドポイントやテクノロジ・スタックを持つ
新興のアプリケーション・フレームワークやアーキテクチャに焦点
- NSX-T Container Plug-in(NCP)
コンテナベースのCaaS/PaaSプラットフォームとの統合を提供
Coil †
Cybozuが自社DCでKubernetesを運用するために作成したCNI。
, etc. †
参考 †
Wikipedia †
Qiita †