Skip to content

DNET_ContainerStandards

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

コンテナの標準仕様

概要

  • コンテナの標準仕様が色々策定されている。
  • DockerKubernetes隆盛のバックグラウンド。

各種標準仕様

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
    • cgroups
    • など
  • Linuxコンテナ以外の標準仕様

    • Solaris
    • Windows
    • Virtual Machine

Image Format Specification

コンテナイメージの標準仕様

  • Image Manifest
  • Image Index
  • Image Layout
  • Filesystem Layout
  • Image Configuration

Distribution Specification

コンテナイメージ配布の標準仕様

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

CSI(Container Storage Interface)

概要(CSI)

コンテナ・オーケストレーション・ツールとストレージの間の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
    ボリュームをマウントする際に呼び出される機能を実装。

CNI(Container Network Interface)

概要と動作原理

  • コンテナがネットワークに接続するI/Fの標準仕様とリファレンス・プラグインを提供

  • CNCF(Cloud Native Computing Foundation)にホストされたプロジェクトの一つ。

  • 動作原理

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

サポートすべきオペレーション

  • ADD
    コンテナをネットワークへ追加

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

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

  • VERSION
    バージョンの確認

渡されるネットワーク設定

  • cniVersion
    CNI Specificationのバージョン

  • name
    ネットワーク名

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

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

  • ipMasq
    IPマスカレードの設定

  • ipam
    IPAM設定のための情報

    • type
      実行するIPAMプラグインのファイル名
  • dns
    DNS設定のための情報

    • nameservers
      DNSネームサーバのリスト

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

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

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

代表的なプラグイン

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.(CSI)

CNI

kubenet

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

Weave Net

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

Azure CNI

AKSもなにやら、専用のCNIを持っているというようなことを言っていた
AKSをセキュアに利用するためのテクニカルリファレンスの該当節を参照)。

  • 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.(CNI)

参考

Wikipedia

Qiita

移行メモ

  • 誤記を修正した。「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

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally