kubernetesシリーズの『Volume』


1、k 8 sのVolume公式サイトを知る:https://kubernetes.io/docs/concepts/storage/volumes/
kubernetesのVolumeはコンテナに外部ストレージをマウントする能力を提供し、Podはボリュームソース(spec.volume)とマウントポイント(spec.containers.volumeMounts)の良兄情報を設定してから対応するVolumeを使用することができる.
volumeは使用によって以下の3種類に分けることができます.
VolumeローカルおよびネットワークデータボリュームPersistent Volume永続データボリュームPersistent Volume動的供給データボリュームローカルデータボリューム:emptrDir、hostPathネットワークデータボリューム:NFS
2、emptyDir(空のディレクトリ)kubectl explain pod.spec.volumes.emptyDir指定emptyDirストレージボリューム
Mediumはメディアタイプdisk Memoryの2種類のsizeLimitを指定する現在のリソース使用状況kubectl explain pod.spec.containers.volumeMountsは、マウントするストレージボリュームを指定します.
mountPathマウントそのパスnameマウントされたvolumes名readOnlyがsubPathを読み取り専用マウントするかどうかサブパスをマウントして空のボリュームを作成し、Podのコンテナにマウントするかどうかを指定します.Podはこのボリュームを削除しても削除されません.適用シーン:Podのコンテナ間のデータ共有で、2つのコンテナを作成し、1つの書き込み、1つの読み取りで、データが共有されているかどうかをテストできます.
[root@k8s-master-128 ~]# mkdir volume && cd volume/[root@k8s-master-128 volume]# vim empty.yaml apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers:
  • name:write image:centos command:[「bash」,「-c」,「for i in{1...100};do echo$i>/data/hello;sleep 1;done]]volumeMounts:次のデータボリューム名に基づいてdataというデータボリュームを使用し、/dataの下にマウント
  • name: data mountPath:/data

  • name:read image:centos command:[「bash」,「-c」,「tail-f/data/hello」]volumeMounts:次のデータボリューム名に従ってdataというデータボリュームを使用し、/dataの下にマウント
  • name: data mountPath:/data


  • データ・ボリューム・ソースの定義
    volumes:
    データボリューム名の定義
  • name:data emptyDir:{}このように、2つのコンテナは、dataというデータボリュームを/dataディレクトリの下に
  • マウントします.
    作成:
    [root@k8s-master-128 volume]# kubectl create -f empty.yaml pod/my-pod created [root@k8s-master-128 volume]#kubectl get pods my-pod NAME READY STATUS RESTARTS AGE my-pod 2/2 Running 1 3 m 4 s検出:
    [root@k8s-master-128 volume]#kubectl logs-fmy-pod read 1 2 3私たちは1秒おきに書き込むので、印刷されたデータを見続けることができます.
    3、hostPath(ローカルマウント)kubectl explain pod.spec.volumes.hostPath
    path指定ホストのパスtype DirectoryOrCreateホスト上に存在しないこのディレクトリを作成するDirectory存在しなければならないマウントディレクトリFileOrCreateホスト上にマウントファイルが存在しない場合は、File存在しなければならないファイルマウントノードファイルシステム上のファイルまたはディレクトリをPod内のキャパシタを作成します.適用シーン:Pod内のコンテナはホストファイルにアクセスする必要があります
    [root@k8s-master-128 volume]# cat hostpath.yaml apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers:
  • name: busybox image: busybox args:
  • /bin/sh
  • -c
  • sleep 36000


  • マウントポイント
    volumeMounts:
    - name: data
      mountPath: /data
    

    volumes:
  • name:data#マウントソース、シンクホストの/tmpディレクトリhostPath:path:/tmp type:Directory作成:
  • [root@k8s-master-128 volume]# kubectl create -f hostpath.yaml pod/hostpath-pod created [root@k8s-master-128 volume]#kubectl get pods hostpath-pod-o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES hostpath-pod 1/1 Running 0 97 s 172.7.4.3 172.16.194.129-o wideパラメータを使用してhostpath-podが172.16.194.129というノードの/tmpディレクトリがコンテナにマウントされているかどうかを確認します.
    まず、172.16.194.129の/tmpディレクトリに存在するファイルを表示します.
    [root@k8s-node-129~]#ls-lha/tmp/総用量0 drwxrwxrwt.8 root root 172 5月23:25.dr-xr-xr-x.17 root root 2244月26 01:10...drwxrwxrwt.2 root root 6 4月26 01:06.font-unix drwxrwxrwt. 2 root root 6 4月26 01:06.ICE-unix drwx------3 root root 17 5月23 10:40 systemd-private-e 3 f 8 a 01 e 9 f 24475 b 9544 ebb 9406 fe 01-chronyd.service-vzW5qS drwxrwxrwt. 2 root root 6 4月26 01:06.Test-unix drwxrwxrwt. 2 root root 6 4月26 01:06.X11-unix drwxrwxrwt. 2 root root 6 4月26 01:06.XIM-unixは、Podにアクセスして表示します.
    [root@k8s-master-128 volume]#kubectl exec-it hostpath-pod/bin/sh/#ls#マウントされたdataディレクトリbin data dev etc home proc root sys tmp usr var/#ls-lha data/total 0 drwxrwxrwt 8 root root 172 May 23 12:26.drwxr-xr-x 1 root root 41 May 23 12:10 … drwxrwxrwt 2 root root 6 Apr 25 17:06 .ICE-unix drwxrwxrwt 2 root root 6 Apr 25 17:06 .Test-unix drwxrwxrwt 2 root root 6 Apr 25 17:06 .X11-unix drwxrwxrwt 2 root root 6 Apr 25 17:06 .XIM-unix drwxrwxrwt 2 root root 6 Apr 25 17:06 .font-unix drwx------ 3 root root 17 May 23 02:40 systemd-private-e3f8a01e9f24475b9544ebbb9406fe01-chronyd.Services-vzW 5 qS/#上の情報は、Pod内のコンテナの/dataマウントディレクトリが172.16.194.129の/tmpディレクトリと一致し、マウントに成功したことを証明しています.もちろん、ノードのマウントディレクトリも同期するファイルを作成してみてください.
    4、NFS(ファイル共有ストレージ、ネットワークボリューム)kubectl explain pod.spec.volumes.nfs
    pathソースディレクトリreadOnlyがデフォルトfalse server NFSサービスアドレスを読み取り専用かどうかNFSをインストールします:(nfsサービスを使用する必要があります.ノードごとにインストールする必要があります)
    $yum install-y nfs-utilsサービス側に172.16.194.130を設定し、/opt/container_を構成します.Data/共有ディレクトリが出てきて、読み書き権限があります
    [root@k8s-node-130 ~]# cat/etc/exports/opt/container_Data 172.16.194.0/24(rw,no_root_squash)その後、サービスを開始する
    $systemctl start rpcbind$systemctl start nfsクライアントノードで共有ディレクトリを表示します.
    [root@k8s-node-129 ~]# showmount -e k8s-node-130 Export list for k8s-node-130:/opt/container_Data 172.16.194.0/24共有ディレクトリ情報が表示されると、NFS構成が完了したことを示し、次にPodを作成して使用します.
    [root@k8s-master-128 volume]# vim nfs.yaml apiVersion:apps/v 1 beta 1 kind:Deployment metadata:name:nginx-deployment spec:replicas:2 selector:matchLabels:app:nginx template:metadata:labels:app:nginx spec:containers:-name:nginx image:nginx#有効データボリュームの名前はwwwroot、nginxのhtmlディレクトリにマウントされたvolumeMounts:-name:wwwroot mountPath:/usr/share/nginx/html ports:-containerPort:80#定義データボリューム名wwwroot、タイプnfs volumes:-name:wwwroot nfs:server:172.16.194.130 path:/opt/container_data作成:
    [root@k8s-master-128 volume]# kubectl create -f nfs.yaml deployment.apps/nginx-deployment created [root@k8s-master-128 volume]# kubectl get deploy|grep nginx- nginx-deployment 0/2 2 0 12s [root@k8s-master-128 volume]#kubectl get pods|grep nginx-deploy nginx-deployment-668 db 478 c 9-fj 9 np 1/1 Running 0 61 s nginx-deployment-668 db 478 c 9-wsc 5 n 1/1 Running 0 61 sマウントポイントのファイルを表示する:
    [root@k8s-node-130 container_data]# echo “hello world” >index.html [root@k8s-node-130 container_data]#ls-lh総用量4.0 K-rw-r-r--1 root root 12 5月23:54 index.htmlはPodのコンテナに入り、/usr/share/nginx/htmlマウントファイルデータを表示します.
    [root@k8s-master-128 volume]# kubectl exec -it nginx-deployment-668db478c9-wsc5n bash root@nginx-deployment-668db478c9-wsc5n:/# ls -lh/usr/share/nginx/html/total 4.0K -rw-r–r-- 1 root root 12 May 23 12:54 index.html root@nginx-deployment-668db478c9-wsc5n:/# cat/usr/share/nginx/html/index.html hello worldアクセステスト:コンテナのIPアドレスを見つけます
    $kubectl get pods-o wide|grep nginx-deploy Nodeでテスト:
    [root@k8s-node-129~]#curl 172.7.34.7 hello worldこれで、NFSマウントサイトのルートディレクトリを使用して完了し、今後同様のニーズが採用される.