コンテナーとポッドに NFS ボリュームをマウントする

コンテナーに nfs をマウントする

実行中のコンテナ

docker ps | grep cmdb
docker inspect 17ecedc669e6 | grep -i merged
cd /var/lib/docker/overlay2/649696272be1e9073ed8afd085c77b31e3423e93ead825f172f476be46eab8da/merged
mkdir nfs1
mount -t nfs x.x.x.5:/backup/nfs nfs1
docker exec -it 17ecedc669e6 bash
ls /nfs1

実行時にマウントする

docker run --mount type=volume,source=/path/to/shared/directory,target=/mnt/nfs,volume-driver=local,volume-opt=type=nfs,volume-opt=device=IP_ADDRESS:/path/to/shared/directory,readonly mycontainer

ポッドにマウント

apiVersion: v1
kind: Pod
metadata:
  name: nfs-pod
spec:
  containers:
    - name: app-container
      image: your-image
      volumeMounts:
        - mountPath: /path/to/mount
          name: nfs-volume
  volumes:
    - name: nfs-volume
      nfs:
        server: nfs-server-ip
        path: /path/on/nfs/server

グラフドライバー

GraphDriver": {
    
    
            "Data": {
    
    
                "LowerDir": "/var/lib/docker/overlay2/b47eed97a959e733f2f5583d689a884d4d8c73f510872b0b1ba429140b8a8d49-init/diff:/var/lib/docker/overlay2/2fb3706abf15c0aef48416ff665012d38d6c7692a16245ac570d14d1df3a8c9e/diff:/var/lib/docker/overlay2/18f09190247c06ef5cb98494b5919f94cedd3a38a1a822dcbe319447a456825f/diff:/var/lib/docker/overlay2/e11e2abdfe4bd69b64f42b9f127be980e3cd1491ef70ea8e3bb9420b4a8ffeef/diff",
                "MergedDir": "/var/lib/docker/overlay2/b47eed97a959e733f2f5583d689a884d4d8c73f510872b0b1ba429140b8a8d49/merged",
                "UpperDir": "/var/lib/docker/overlay2/b47eed97a959e733f2f5583d689a884d4d8c73f510872b0b1ba429140b8a8d49/diff",
                "WorkDir": "/var/lib/docker/overlay2/b47eed97a959e733f2f5583d689a884d4d8c73f510872b0b1ba429140b8a8d49/work"
            },
            "Name": "overlay2"

このコードは、Docker の GraphDriver 構成の例です。GraphDriver は、Docker コンテナのストレージとファイル システムを管理するために使用されます。

  • 「データ」フィールドには 4 つのサブフィールドが含まれます。

    • 「LowerDir」: ミラー層の読み取り専用コンテンツを含む最下位のディレクトリ。
    • "MergedDir": イメージ レイヤーとコンテナ レイヤーのマージ結果が含まれるマージされたディレクトリ。
    • "UpperDir": コンテナの書き込み可能なコンテンツが含まれる上位ディレクトリ。
    • 「WorkDir」: 作業ディレクトリ。一時ファイルの操作に使用されます。
  • 「名前」フィールドは、使用するドライバーのタイプを指定します。ここでは「overlay2」です。Overlay2 は、Linux システム上で高いパフォーマンスと低いストレージ オーバーヘッドを提供する Docker ストレージ ドライバーです。

この例のパスはすべて、ホスト上の Docker が保存されるデフォルトの場所です。これらのパスは、コンテナのファイルシステムを管理し、コンテナへの変更が適切に記録および保存されるようにするために使用されます。

ユニオンファイルシステム

Docker は、Union File System (Union File System) を使用して、コンテナーのイメージ層をコンテナー層から分離します。このファイル システムは、次の 4 つのメイン ディレクトリで構成されます。

  1. LowerDir (下層ディレクトリ): 画像レイヤーの読み取り専用コンテンツが含まれます。イメージレイヤーにはオペレーティングシステムや基本的なアプリケーションなどが含まれており、複数のコンテナーで共有できます。複数のコンテナが同じイメージを実行する場合、それらは同じ基礎となるディレクトリを共有します。

  2. MergedDir (結合ディレクトリ): 下位ディレクトリと上位ディレクトリを結合した結果です。このディレクトリでは、下位ディレクトリと上位ディレクトリのファイルとディレクトリが 1 つのビューにマージされます。このようにして、コンテナーは、下位​​ディレクトリと上位ディレクトリ内のすべてのファイルとディレクトリを参照できるようになります。

  3. UpperDir (上位ディレクトリ): コンテナーの書き込み可能なコンテンツが含まれます。ファイルがコンテナに書き込まれると、これらの変更は上位ディレクトリに保存されます。これにより、コンテナーの再起動後も以前の変更が保持されます。上位レベルのディレクトリは各コンテナ インスタンスに関連付けられているため、上位レベルのディレクトリは異なるコンテナ間で独立しています。

  4. WorkDir (作業ディレクトリ): 一時ファイルの操作に使用されます。コンテナーは実行中に一時ファイルを作成する必要がある場合があります。これらのファイルは通常、作業ディレクトリにあります。このディレクトリの内容は、コンテナーの実行中に書き込み可能ですが、保存されません。

このユニオン ファイル システムの設計により、コンテナーが基礎となるイメージを共有できるようになり、コンテナーの書き込み可能なコンテンツを管理するための軽量かつ効率的な方法が提供されます。これにより、コンテナ間でファイルを共有し、ストレージスペースを節約し、一貫性と分離を実現できます。各コンテナーは独自の上位レベルのディレクトリを持つことができるため、各コンテナーは独自の状態と変更を維持できます。

名前空間のマウント

マウント ネームスペース(マウント ネームスペース) は、プロセスが独立したマウント環境で実行できるようにする Linux カーネルの分離メカニズムであり、ファイル システム マウント ポイントの独立したビューを提供します。この概念は、Linux コンテナー テクノロジによって最初に提案され、Linux 名前空間の一部になりました。

従来の Linux システムでは、すべてのプロセスが同じマウント名前空間を共有します。これは、ファイル システム上のプロセスの操作が他のプロセスのアクセスに影響を与え、システムが不安定になる可能性があることを意味します。Mount Namespace の導入によりこの問題は解決され、各プロセスが独自の独立したマウント名前空間を持つようになります。

Mount Namespace の作成と管理は、clone()システム コールを通じて実装されます。プロセスがclone()create new を呼び出すとき、CLONE_NEWNSフラグを指定して新しいマウント名前空間を作成できます。この新しい名前空間は親プロセスの既存のマウント ポイント情報を継承しますが、新しい名前空間で変更および追加することができます。

Mount Namespace を使用すると、プロセスは他のプロセスに影響を与えることなく、ファイル システム上で次の操作を実行できます。

  • ファイルシステムのマウントとアンマウント: プロセスは、他の名前空間のマウント ポイントに影響を与えることなく、指定されたディレクトリにファイル システムをプライベートまたは共有でマウントできます。
  • マウント情報の表示: プロセスは、マウントされたファイル システムのタイプ、ソース パス、ターゲット パスなど、現在のネームスペース内のマウント ポイント情報を取得できます。
  • マウント オプションの変更: プロセスは、読み取り専用アクセス許可の設定やオプションを更新するための再マウントなど、既存のマウント ポイントのマウント オプションを変更できます。

Mount Namespace のアプリケーション シナリオは、主にコンテナ化テクノロジ (Docker、LXC など) と、各コンテナまたは仮想マシンに分離されたファイル システム環境を提供する仮想化テクノロジです。この分離により、各プロセスが独自のマウント名前空間でファイル システムを安全に操作できるようになり、システムの柔軟性と信頼性が向上します。
名前空間をマウントする

lsns -t mnt

おすすめ

転載: blog.csdn.net/hezuijiudexiaobai/article/details/131742156