すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:hostPathボリュームの使用

最終更新日:Nov 10, 2024

hostPathボリュームは、ホストノードのファイルシステムからポッドにファイルまたはディレクトリをマウントします。 このトピックでは、hostPathボリュームをポッドにマウントする方法について説明します。

背景情報

Container Service For Kubernetes (ACK) が提供するhostPathボリュームのマウントソリューションの詳細については、「HostPath」をご参照ください。

ボリュームマウントモード

hostPathボリュームは、次のモードでマウントできます。

ボリュームマウントモード

説明

DirectoryOrCreate

このモードでは、指定したパスにコンテンツが見つからない場合、オンデマンドで空のディレクトリが作成されます。 作成されたディレクトリに対する権限は0755に設定されています。 ディレクトリは、kubeletと同じグループと所有権を持ちます。

ディレクトリ

したがって、指定したパスにディレクトリが存在する必要があります。

FileOrCreate

このモードでは、指定したパスにコンテンツが見つからない場合、空のファイルが作成されます。 作成したファイルの権限を0644に設定します。 ファイルはkubeletと同じグループと所有権を持ちます。

ファイル

このモードでは、指定したパスにファイルが存在する必要があります。

  • 次のテンプレートを使用して、hostPathボリュームをポッドに直接マウントします:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test
    spec:
      containers:
      - image: nginx:1.7.9
        name: test
        volumeMounts:
        - mountPath: /test
          name: test-volume
      volumes:
      - name: test-volume
        hostPath:
          path: /data
          type: DirectoryOrCreate
  • hostPathボリュームを永続ボリューム (PV) としてプロビジョニングすることもできます。 次に、永続ボリューム要求 (PVC) を作成して、PVをポッドにマウントできます。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: task-pv-volume
      labels:
        type: local
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/data"
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: hostpath
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
  • hostPathボリュームを実行中のポッドにマウントします。

    Kubernetesでは、ポッドの実行開始後、ポッドにマウントされているPVを変更することはできません。 実行中のポッドに外部ボリュームを動的にマウントする必要がある場合は、次の手順を実行します。

    説明
    • この方法は、Linuxが提供するマウント伝播機能を使用します。 hostPathボリュームをポッドにマウントするときは、mountPropagationフィールドをBidirectionalとして指定する必要があります。 これにより、ホストノード上のディレクトリがポッド内のコンテナに伝播されます。

    • ポッドは特権モードで実行されている必要があります。 これは、mountPropagationをBidirectionalに設定する場合に必要です。

    • ポッドは、ホストノードのファイルシステムのディレクトリでマウントする必要があります。 これにより、ポッド内で実行中のコンテナーは、このディレクトリへの後続のマウントをすべて受け取ることができます。

    次のテンプレートを使用して、hostPathボリュームがマウントされているNGINXアプリケーションを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-nas
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            command: ["sh", "-c"]
            args: ["sleep 10000"]
            securityContext:
              privileged: true
              capabilities:
                add: ["SYS_ADMIN"]
              allowPrivilegeEscalation: true
            volumeMounts:
              - name: dynamic-volume
                mountPropagation: "Bidirectional"
                mountPath: "/dynamic-volume"
          volumes:
            - name: dynamic-volume
              hostPath:
                path: /mnt/dynamic-volume
                type: DirectoryOrCreate
    説明
    • ホストノードのディレクトリ: /mnt/dynamic-volume

    • ポッド内のマウントパス: /dynamic-volume

    上記の構成では、ホストノードの /mnt/dynamic-volume/**** ディレクトリを対象とする外部マウントが、/mnt/dynamic-volumeディレクトリのhostPathボリュームでマウントされているポッドに伝達されます。 これにより、実行中のポッドに外部ボリュームを動的にマウントできます。