「[[.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