Kubernetesの永続化 [PersistentVolume/PersistentVolumeClaim]

2019年4月19日

KubernetesにおいてPersistentVolumeおよびPersistentVolumeClaimはデータの永続化を担うリソースです。

 

リソースについての概略は下記ページをご覧下さい。

 

Kubernetesのマニフェスト(Manifest)ファイルでNginxを起動

 

単純にひとつのPodリソースによるマニフェストファイル内にてvolumes項目を記述し、データを永続化することもできます。下記マニフェストファイルではNginxのコンテナとマウントするホスト側のストレージを設定しています。pathに適切なローカルのパス(下記はMac環境を想定)を設定しデプロイするとそのパスのディレクトリが、Nginxの「/usr/share/nginx/html」とマウントされます。※hostPathの機能については後述しています。

 

ただしアプリケーションとしてのPodのライフサイクルとストレージは本来分けておくのがベストです。KubernetesではPersistentVolumeとPersistentVolumeClaimのリソースを利用すると、このNginxのコンテナとは別の独立したストレージの設計をおこなうことが可能となります。

 

大まかにPersistentVolume、PersistentVolumeClaimの関係性をまとめておきます。PersistentVolumeは、Podがデータを保存するストレージすなわち永続化領域を定義するリソースです。PersistentVolumeClaimは、永続化領域の要求を行うリソースです。PodはこのPersistentVolumeClaimを通して、最適な永続化領域が割り当てられます。

 

 

本記事ではKubernetesにおいてPodリソースによるNginxコンテナを起動し、そのコンテナに対しての永続化をおこないます。下記リンク先のマニフェストファイルを参照にして、適度な解説を加えていく形で進めていきます。

 

参照ページ

Configure a Pod to Use a PersistentVolume for Storage

 

開発環境
macOS Mojave バージョン 10.14
Docker Desktop Version 2.0.0.3 (31259)
Kubernetes: v1.10.11

 

まずはローカル上(Mac)に、これから起動させるNginxコンテナの領域とマウントさせるための適当なディレクトリと、その中にHTMLファイルを用意しておきます。

 

次にPersistentVolumeおよびPersistentVolumeClaim、そしてNginxのPodそれぞれのマニフェストファイルを作成していきます。最終的には下記のような構造になります。

 

PersistentVolumeリソースのマニフェストファイルです。1GBのストレージをホスト上(本記事ではMac)に定義しています。

6行目

PersistentVolumeClaimと接続するためのStorageClassの名前を設定しています。PersistentVolumeClaimのマニフェストファイル側にも同じ名前を記述します。

 

11、12行目

PersistentVolume Plugin(プラグイン)と呼ばれ、具体的なストレージ先を設定しています。今回はホストの領域をマウントするhostPathというプラグインを利用しています。pathには上記で作成したhtmlディレクトリまでをフルパスで記述しています。このディレクトリには、後に起動するNginxコンテナ内の公開ディレクトリである「/usr/share/nginx/html」とマウントさせます(後述)。

 

このhostPathは、基本的に本記事のようなシングルノードによるテスト時のみに利用します。他にもPluginは下記のような種類があり、それぞれの設定方法があります(本記事では説明しません)。

 

GCE Persistent Disk
AWS Elastic Block Store
NFS
iSCSI

 

例えばhostPathではなく、ストレージ先をネットワークファイルシステムとしてのNFSを利用する場合は下記のように記述します。

 

 

PersistentVolumeClaimリソースのマニフェストファイルです。

6行目

PersistentVolumeにも記述したStorageClassの名前を設定しています。

 

最後にNginxコンテナを起動させるPodリソースによるマニフェストファイルです。

10、11行目

claimNameにPersistentVolumeClaimリソースの名前であるtask-pv-claimを指定しています。

 

18行目

Nginxコンテナ内の公開ディレクトリ「/usr/share/nginx/html」をマウントさせています。

 

21行目〜

Serviceリソースによって「http://localhost:30000/」でブラウザからNginxにアクセスできるようにしています。上記で作成したindex.htmlの内容「Hello PersistentVolume !」が表示されるのが確認できます。Serviceリソースについては下記ページをご参照下さい。

 

関連ページ

Kubernetesのマニフェスト(Manifest)ファイルでNginxを起動

 

 

デプロイします。

 

Nginxへのコンテナへは以下コマンドで接続できます。

 

あらかじめ作成していたindex.htmlを確認します。

 

削除します。

 

 

 

参照文献・ページ


 

Configure a Pod to Use a PersistentVolume for Storage

 

Persistent Volumes

 

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー