Kubernetesでは、2つの一般的なタイプのVolume深さの実践
5550 ワード
一.背景
ストレージ・リソースは、すべてのコンピューティング・リソースにおいて非常に重要な役割を果たしており、ほとんどのビジネス・シーンでは、さまざまなストレージ・リソースが使用される可能性があります.Kubernetesでは、システムはVolumeを介してクラスタ内のコンテナに対して動的または静的にストレージリソースを提供する.通常,容器またはPodのライフサイクルは短く,容器が破棄されると容器内部のデータも同時に消去されると考えられる.保存容器のデータを永続化するために,KubernetesはVolumeを導入し,Dockerに似たVolume(Docker also has a concept of volumes, though it is somewhat looser and less managed. In Docker, a volume is simply a directory on disk or in another Container. Lifetimes are not managed and until very recently there were only local-disk-backed volumes. Docker now provides volume drivers, but the functionality is very limited for now).このVolumeがあるPodにマウントされた後、このPodの中のすべての容器がこのVolumeを使用することができます.Kubernetesが現在サポートしているvolumeタイプは、文末の公式資料を参照することができます.
二.2つのVolumeの使用例
2.1 emptyDir
emptyDir:emptyDirは最も基本的なVolumeタイプです.各emptyDir Volumeは、Pod内のすべてのコンテナで共有できるホスト上の空のディレクトリです.それは容器にとって永続的であり,Podにとってはそうではない.コンテナの削除は影響しません.Pod全体を削除すると削除され、そのライフサイクルはマウントされたPodと一致します.簡単に言えば、emptyDirタイプのVolumeはPodがノードに割り当てられたときに作成され、Kubernetesはノードホストに自動的にディレクトリを割り当てるので、ノードホスト上の対応するディレクトリファイルを指定する必要はありません.このディレクトリの初期内容は空で、Podがノードから削除されるとemptyDirのデータは永続的に削除されます.EmptyDirは、一時ディレクトリ、マルチコンテナ共有ディレクトリなど、永続的に保持する必要のないデータに主に使用されます.実例を通して理解すると、Pod gyslのyamlは以下の通りである.
Pod gyslを作成し、関連情報を表示します.
この例では、gysl-01とgysl-02の2つのコンテナを含むgyslというPodを作成し、この2つのコンテナにはgysl-volumeというemptyDirが同時にマウントされ、gysl-01のマウントポイントは/gysl-01、gysl-02のマウントポイントはgysl-02、コンテナgysl-01はtestを作成する.gyslのファイルは、「This is a test file.」コンテナgysl-02にgysl-01で作成したファイルの内容が正常に表示されました.
2.2 hostPath
hostPath:hostPathの主な役割は、ホストのファイルまたはディレクトリをPodのコンテナにマウントして使用することであり、コンテナがより良好なパフォーマンスでデータを格納できるようにすることです.次に、Pod gysl-hostpathを例にhostPathに関する概念を理解します.YAMLファイルは以下の通りです.
Node k 8 s-n 1の/rootディレクトリの下に、次のファイルとディレクトリを作成します.
2つのファイルの内容は次のとおりです.
ディレクトリgysl-dirの内容は次のとおりです.
Node k 8 s-n 1にラベルを指定します.applyこのPod:
この例では、gysl-02というhostPathファイルをコンテナのファイル/etc/gysl-test-01にマウントし、gysl-01というhostPathファイルをコンテナのファイル/etc/gysl-test-02にマウントし、gysl-dirというhostPathディレクトリを/gysl-test-dirの下にマウントしました.logsコマンドにより、目標が達成されたことがわかります.
このマウント方式は、ノードに障害が発生しない限り、emptyDirよりも永続的である.ただし、いくつかのプロファイル/バイナリファイルをマウントする以外は、このようなマウント方式は一般的に採用されません.このようなマウント操作は、Podファイルとノードホストファイルの結合を増加させ、統一管理に不利であるためです.
三.まとめ
3.1 volumeの構成過程において、特定のマウント経路に関する必要性は一定の規則に従って構成される.たとえば、ファイルまたはディレクトリには絶対パスを書く必要があります.ルールに従って構成しないと、次のエラーが発生します.
3.2 emptyDirとhostPathは比較的一般的な2種類のvolumeであり、使用時には状況に応じて構成する必要がある.他のタイプのvolumeは、上記の2つのタイプと公式ドキュメントを参照して構成できます.関連する公式ドキュメントは文末に表示されます.
四.関連資料
5.1 Volumes基本概念
5.2 KubernetesがサポートするVolumeタイプ
5.3記事に関するYAMLファイル
ストレージ・リソースは、すべてのコンピューティング・リソースにおいて非常に重要な役割を果たしており、ほとんどのビジネス・シーンでは、さまざまなストレージ・リソースが使用される可能性があります.Kubernetesでは、システムはVolumeを介してクラスタ内のコンテナに対して動的または静的にストレージリソースを提供する.通常,容器またはPodのライフサイクルは短く,容器が破棄されると容器内部のデータも同時に消去されると考えられる.保存容器のデータを永続化するために,KubernetesはVolumeを導入し,Dockerに似たVolume(Docker also has a concept of volumes, though it is somewhat looser and less managed. In Docker, a volume is simply a directory on disk or in another Container. Lifetimes are not managed and until very recently there were only local-disk-backed volumes. Docker now provides volume drivers, but the functionality is very limited for now).このVolumeがあるPodにマウントされた後、このPodの中のすべての容器がこのVolumeを使用することができます.Kubernetesが現在サポートしているvolumeタイプは、文末の公式資料を参照することができます.
二.2つのVolumeの使用例
2.1 emptyDir
emptyDir:emptyDirは最も基本的なVolumeタイプです.各emptyDir Volumeは、Pod内のすべてのコンテナで共有できるホスト上の空のディレクトリです.それは容器にとって永続的であり,Podにとってはそうではない.コンテナの削除は影響しません.Pod全体を削除すると削除され、そのライフサイクルはマウントされたPodと一致します.簡単に言えば、emptyDirタイプのVolumeはPodがノードに割り当てられたときに作成され、Kubernetesはノードホストに自動的にディレクトリを割り当てるので、ノードホスト上の対応するディレクトリファイルを指定する必要はありません.このディレクトリの初期内容は空で、Podがノードから削除されるとemptyDirのデータは永続的に削除されます.EmptyDirは、一時ディレクトリ、マルチコンテナ共有ディレクトリなど、永続的に保持する必要のないデータに主に使用されます.実例を通して理解すると、Pod gyslのyamlは以下の通りである.
apiVersion: v1
kind: Pod
metadata:
name: gysl
spec:
containers:
- image: busybox
name: gysl-01
volumeMounts:
- mountPath: /gysl-01
name: gysl-volume
args:
- /bin/sh
- -c
- echo "This is a test file.">/gysl-01/test.gysl;sleep 20000
- image: busybox
name: gysl-02
volumeMounts:
- mountPath: /gysl-02
name: gysl-volume
args:
- /bin/sh
- -c
- cat /gysl-02/test.gysl;sleep 20000
volumes:
- name: gysl-volume
emptyDir: {}
Pod gyslを作成し、関連情報を表示します.
[root@k8s-m k8s-volumes]# kubectl apply -f emptyDir.yaml
pod/gysl created
[root@k8s-m k8s-volumes]# kubectl get pod
NAME READY STATUS RESTARTS AGE
gysl 2/2 Running 0 10m
[root@k8s-m k8s-volumes]# kubectl logs gysl gysl-02
This is a test file.
この例では、gysl-01とgysl-02の2つのコンテナを含むgyslというPodを作成し、この2つのコンテナにはgysl-volumeというemptyDirが同時にマウントされ、gysl-01のマウントポイントは/gysl-01、gysl-02のマウントポイントはgysl-02、コンテナgysl-01はtestを作成する.gyslのファイルは、「This is a test file.」コンテナgysl-02にgysl-01で作成したファイルの内容が正常に表示されました.
2.2 hostPath
hostPath:hostPathの主な役割は、ホストのファイルまたはディレクトリをPodのコンテナにマウントして使用することであり、コンテナがより良好なパフォーマンスでデータを格納できるようにすることです.次に、Pod gysl-hostpathを例にhostPathに関する概念を理解します.YAMLファイルは以下の通りです.
apiVersion: v1
kind: Pod
metadata:
name: gysl-hostpath
spec:
nodeSelector:
role: test
containers:
- image: ubuntu:18.04
name: gysl-hostpath-container
volumeMounts:
- mountPath: /etc/gysl-test-01
name: gysl-02
- mountPath: /etc/gysl-test-02
name: gysl-01
- mountPath: /gysl-test-dir
name: gysl-dir
args:
- /bin/bash
- -c
- cat /etc/gysl-test-01 /etc/gysl-test-02;ls -l /gysl-test-dir;sleep 3600
volumes:
- hostPath:
path: /root/gysl-01
name: gysl-01
- hostPath:
path: /root/gysl-02
name: gysl-02
- hostPath:
path: /root/gysl-dir
name: gysl-dir
Node k 8 s-n 1の/rootディレクトリの下に、次のファイルとディレクトリを作成します.
[root@k8s-n1 ~]# ll
8
-rw-r--r-- 1 root root 16 11 21 20:31 gysl-01
-rw-r--r-- 1 root root 16 11 21 20:31 gysl-02
drwxr-xr-x 2 root root 51 11 21 20:32 gysl-dir
2つのファイルの内容は次のとおりです.
[root@k8s-n1 ~]# cat gysl-01
This is gysl-01
[root@k8s-n1 ~]# cat gysl-02
This is gysl-02
ディレクトリgysl-dirの内容は次のとおりです.
[root@k8s-n1 ~]# ll gysl-dir/
12
-rw-r--r-- 1 root root 16 11 21 20:32 gysl-01
-rw-r--r-- 1 root root 16 11 21 20:32 gysl-02
-rw-r--r-- 1 root root 16 11 21 20:32 gysl-03
Node k 8 s-n 1にラベルを指定します.applyこのPod:
[root@k8s-m k8s-Volumes]# kubectl label node k8s-n1 role=test
node/k8s-n1 labeled
[root@k8s-m k8s-Volumes]# kubectl apply -f hostPath.yaml
pod/gysl-hostpath created
[root@k8s-m k8s-Volumes]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
gysl-hostpath 1/1 Running 0 17s 10.244.1.177 k8s-n1
[root@k8s-m k8s-Volumes]# kubectl logs gysl-hostpath
This is gysl-02
This is gysl-01
total 12
-rw-r--r-- 1 root root 16 Nov 21 12:32 gysl-01
-rw-r--r-- 1 root root 16 Nov 21 12:32 gysl-02
-rw-r--r-- 1 root root 16 Nov 21 12:32 gysl-03
この例では、gysl-02というhostPathファイルをコンテナのファイル/etc/gysl-test-01にマウントし、gysl-01というhostPathファイルをコンテナのファイル/etc/gysl-test-02にマウントし、gysl-dirというhostPathディレクトリを/gysl-test-dirの下にマウントしました.logsコマンドにより、目標が達成されたことがわかります.
このマウント方式は、ノードに障害が発生しない限り、emptyDirよりも永続的である.ただし、いくつかのプロファイル/バイナリファイルをマウントする以外は、このようなマウント方式は一般的に採用されません.このようなマウント操作は、Podファイルとノードホストファイルの結合を増加させ、統一管理に不利であるためです.
三.まとめ
3.1 volumeの構成過程において、特定のマウント経路に関する必要性は一定の規則に従って構成される.たとえば、ファイルまたはディレクトリには絶対パスを書く必要があります.ルールに従って構成しないと、次のエラーが発生します.
Warning Failed 8s (x3 over 20s) kubelet, k8s-n1 Error: Error response from daemon: create ~/gysl: "~/gysl-dir" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path
3.2 emptyDirとhostPathは比較的一般的な2種類のvolumeであり、使用時には状況に応じて構成する必要がある.他のタイプのvolumeは、上記の2つのタイプと公式ドキュメントを参照して構成できます.関連する公式ドキュメントは文末に表示されます.
四.関連資料
5.1 Volumes基本概念
5.2 KubernetesがサポートするVolumeタイプ
5.3記事に関するYAMLファイル