「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Kubernetes]]

*目次 [#g57a4ed2]
#contents

*概要 [#fb781ad1]
-コンテナの標準仕様が色々策定されている。
-[[Docker]]、[[Kubernetes]]隆盛のバックグラウンド

*各種標準仕様 [#v5995e49]

**CRI(Container Runtime Interface) [#r82f49bd]
コンテナ・オーケストレーション・ツールとコンテナランタイムの間のI/Fの標準仕様

-kubeletとが通信するためのインターフェースを規定
-2016年12月にKubernetes 1.5のαリリースでAPIが実装された。
-これにより、コンテナランタイムをコンパチできるようになった。
-OpenShiftは、CRI-O をv4.0からデフォルトに採用する予定。

**OCI(Open Container Initiative) [#y9807a95]
-「コンテナ」のフォーマット・ランタイムの標準化~
を目的として設立されたイニシアチブ(組織)である。

-Linux Foundationプロジェクトの1つ。

***Runtime Specification [#q4dcab6d]
コンテナランタイムの標準仕様

-Linuxコンテナの標準仕様
--Default Filesystem
--Namespace
--cgropus
--など

-Linuxコンテナ以外の標準仕様
--Solaris
--Windows
--Virtual Machine

***Image Format Specification [#tc1bb7a5]
コンテナイメージの標準仕様

-Image Manifest
-Image Index
-Image Layout
-Filesystem Layout
-Image Configuration

***Distribution Specification [#ec6eed18]
コンテナイメージ配布の標準仕様

※ 仕様の策定が止まっている?

**CSI(Container Storage Interface) [#f78e2849]

***概要 [#qc560132]
コンテナ・オーケストレーション・ツールとストレージの間のI/Fの標準仕様

-2018年11月にv1.0に到達

-外部ストレージを開発するベンダーが独立に~
ストレージ側の機能追加や修正を行えることを目指す。

***機能 [#ha065a72]
代表的な機能

-Volume Expansion~
-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も配置先を指定できる。

***コンテナ・オーケストレーション・ツール側 [#ia2bd9c0]
3つのサイドカーコンテナを提供する必要がある。

CSIエンドポイントに対して

-external-attacher~
VolumeAttachmentオブジェクトを監視し、~
ボリュームをノードにアタッチする命令を行う。

-external-provisoner~
PersistentVolumeClaimオブジェクトを監視し、~
ボリューム作成や削除の命令を行う。

-driver-register

--CSI driverをkubeletに登録する。

--CSI driverとは
---コントローラ・ドライバとノード・ドライバ、製品個別CSPを実装。
---機能:アタッチ・デタッチ、プロビジョン、マウント、ワークフローアロケーション

***ストレージ・ベンダー側 [#ic2f2283]
コンテナ・オーケストレーション・ツールの~
問い合わせに対応3つのサービスを実装する必要がある。

-Identity Service~
Capability/Health/その他メタデータなどの問い合わせを行う機能を実装。

-Controller Service~
ボリュームやスナップショットの作成・削除・一覧表示を行う機能を実装。

-Node Service~
ボリュームをマウントする際に呼び出される機能を実装。

**CNI(Container Network Interface) [#j757b1a3]

***概要と動作原理 [#qcc9fe66]
-コンテナがネットワークに接続するI/Fの標準仕様とリファレンス・プラグインを提供
-CNCF(Cloud Native Computing Foundation)にホストされたプロジェクトの一つ。

-動作原理
--JSONフォーマットのネットワーク設定が標準入力とする。
--[[ネットワーク設定>#z3ad2228]]が環境変数としてプラグインへ渡される。
--ブラグインが渡された情報に基づいて命令を実行する。

***サポートすべきオペレーション [#z5dc2b4d]
-ADD~
コンテナをネットワークへ追加

-DEL~
コンテナをネットワークから削除

-CHECK~
コンテナのネットワークをチェック

-VERSION~
バージョンの確認

***渡されるネットワーク設定 [#z3ad2228]
-cniVersion~
CNI Specificationのバージョン

-name~
ネットワーク名

-type~
実行するプラグインのファイル名

-args~
コンテナランタイムより与えられる追加情報

-ipMasq~
IPマスカレードの設定

-ipam~
IPAM設定のための情報

--type~
実行するIPAMプラグインのファイル名

-dns~
DNS設定のための情報

--name servers~
DNSネームサーバのリスト

--domain~
ローカルドメインの指定

--search~
サーチドメインのリスト

--options~
リゾルバに渡すオプションのリスト

*代表的なプラグイン [#b336a93d]

**CSI [#d6359315]
-CSI以前は、in-treeか、out-of-tree(FlexVolume)のVolume Pluginがあった。

-以下のようなストレージを使用できるよう、個別のプラグインが開発される。

--高速なローカル・ストレージ(Ceph)
---ワーカ・ノードのローカル・ストレージをK8sのPersistentVolumeとして扱う。
---NVMe SSDの性能を活かして、高IOPSが必要なミドルウェアのストレージとして利用する。
---可用性はミドルウェアのレプリケーションで担保する。

--高可用ネットワークストレージ
---ネットワーク経由で利用可能なストレージをK8sのPersistentVolumeとして扱う
---ステートフルなアプリケーションの永続化ボリュームとして利用

--大容量な分散オブジェクトストレージ
---ネットワーク経由で利用可能なストレージをAmazon S3互換のAPI経由で扱う
---文書、画像、動画などの大容量データを保存

***TopoLVM [#yd14fed6]
Cybozuが自社DCでKubernetesを運用するために作成した、~
K8sのPodが高速なローカル・ストレージを有効に利用するCSI。

-[[LVM (Logical Volume Manager)>WindowsユーザがLinuxに乗り換える際に、知っておくとイイ情報集。#a786ed5c]]によるボリューム管理
-トポロジを考慮したダイナミック・プロビジョニング
-ノードの空き容量に応じたスケジューリング

***Rook [#j846d5f7]
-既存のストレージ機能を持つソフトウェアをK8sと統合することを目的とする。
-例えば、分散ストレージを実現するCephなどと組み合わせて使用する。

***, etc. [#d76985d0]

**CNI [#c0ceb169]

***kubenet [#ea382ca6]
ノードにIPアドレスを割り当てて、配下のポッドにはNAT変換でアクセス。

***Weave Net [#lf394ea8]
1つのポッドにつき1つのIPアドレスを提供するシンプルなネットワーク。

***Azure CNI [#pc39eb67]
[[AKSもなにやら、専用のCNIを持っているというようなことを言っていた。>https://techinfoofmicrosofttech.osscons.jp/index.php?AKS%E3%82%92%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%81%AB%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E3%83%86%E3%82%AF%E3%83%8B%E3%82%AB%E3%83%AB%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9#h6e5b109]]

-[[kubenet>#ea382ca6]]と選択できる。
-Azure仮想ネットワークのサブネットからIPアドレスが割り当てる。
-配下のポッドの最大数に合わせてIPアドレスを事前予約する。

***Flannel [#k95f8abb]
L2 over L3ネットワーキング (デフォルトではVXLAN) で、Pod間の到達性を確保。

***Calico [#s168d218]
-BGPによるピュアL3ネットワーキングで、Pod間の到達性を確保。
-Kubernetes Network Policyに対応しているCNI

***Canal [#i68a8f5a]
[[Calico>#s168d218]]をKubernetes Network Policy機能のみで動作させ、[[Flannel>#k95f8abb]]と統合するCNI

***Kube-Router [#h8e985ac]
1つのgoバイナリでKubernetesのネットワークまわりを全部処理する。
-Kubernetes Network Policyの実装に加えてServiceの実装置き換えもできる
-ノード内はFlannelのようにブリッジ
-ノード間はBGPを使ったルーティング

***Romana [#a11ced9e]
L3の仮想ネットワーク + Kubernetes Network Policy制御

***NSX-T [#n099abf0]
-マルチ・クラウドおよびマルチ・ハイパーバイザー環境向けの~
ネットワーク仮想化とセキュリティのプラットフォーム

-異種のエンドポイントやテクノロジ・スタックを持つ~
新興のアプリケーション・フレームワークやアーキテクチャに焦点

-NSX-T Container Plug-in(NCP)~
コンテナベースのCaaS/PaaSプラットフォームとの統合を提供

***Coil [#k549e9e6]
Cybozuが自社DCでKubernetesを運用するために作成したCNI。

***, etc. [#m1d82dbf]

*参考 [#vd63d359]

**Wikipedia [#q5c7597c]
-Open Container Initiative~
https://ja.wikipedia.org/wiki/Open_Container_Initiative

-Cloud Native Computing Foundation~
https://ja.wikipedia.org/wiki/Cloud_Native_Computing_Foundation

**Qiita [#c194e046]
-してみた件
--Docker・Kubernetes周辺の動向を整理してみた件~
https://qiita.com/mamomamo/items/e4e9e44d9f77cd72b70a
--コンテナの標準仕様について調査してみた件~
https://qiita.com/mamomamo/items/448a8edf6d4ccfc22bbd
--コンテナランタイムの動向を整理してみた件~
https://qiita.com/mamomamo/items/ed5db2ab1555078f8a24

-CNCF主要プロジェクト動向まとめ
--2019年1月~
https://qiita.com/zembutsu/items/57a1a6270491e8b2594f

-CNCF CNI プラグイン~
https://qiita.com/hichihara/items/54ff9aeff476bf463509

-Kubernetes のストレージについて調べる~
https://qiita.com/toshihirock/items/0c91bbedf0e144acf6fc

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS