パーシステントボリュームの使い方・作り方コンテナFacebookTwitterLinePocketはじめまして、事業推進本部SE部の市川です。普段はセールスエンジニアとして、IDCFクラウドなどサービスのご提案や導入支援を行っています。今回はIDCFクラウドコンテナサービスでのパーシステントボリュームの利用方法、さらにはNFSをパーシステントボリュームとして利用する方法をご紹介します。www.idcf.jpコンテナ導入時の永続データの扱いについて昨今、コンテナ技術を利用して商用サービスのシステム構築を行う企業が増えてきています。当社でも、パブリッククラウドサービス「IDCFクラウド」の基盤の一部にコンテナ技術を採用しています。今後も自社サービスの開発サイクルの高速化を目指し、コンテナ技術を導入する企業が増えていくと思われます。コンテナ技術を利用する場合、コンテナ内に保存したファイルは、そのコンテナが削除されたとき一緒に消えてしまいます。このため、サーバ上で中間処理を行ったデータやログなど、動的なデータを永続化させるためにはコンテナ外に保存する必要があります。コンテナ化しつつも永続データをファイルシステムに保存したい!そんなときに使えるのがパーシステントボリュームです。Kubernetesにおける、Pod(≒コンテナ)にマウントすることのできる外部の永続化領域です。Claim(以下PVCと略します)を使ってPod作成時にマウントすることができます。マウントされたPodが削除されてもPVは削除されないので、PVにデータを置いておくことで、コンテナが削除されたときにもデータを消失しないようにできます。簡単なPVとPVCの作成方法コンテナサービスでIDCFクラウドにKubernetesクラスターを作った場合、簡単に動的なPV作成を行えます。この手順についてはIDCFクラウドコンテナご利用ガイドの22ページ~を参照ください。実はこの動作の裏では、コンテナサービスからAPIでIDCFクラウドを操作しています。API操作により、要求された容量の仮想マシン用ディスクをノード(=仮想マシン)にアタッチし、Kubernetesがこの仮想マシン用ディスクをPVとして扱っているのです。このPV作成方法はとても簡単ですが、仮想マシン用ディスクをベースとすることから、容量の上限が有ることや他のノードから参照できないことなどの制限があります*1。NFSの構築と冗長化まずは仮想マシンでNFSサーバーを構築します。当記事作成時の検証用環境では以下手順でNFSの構築および冗長化を行いました。(本題ではないので詳細説明は割愛します。)NFSサーバーを下記通り2つ作成OSイメージにCentOSを選択し仮想マシンを作成nfs-utilsをインストールし有効化ストレージ容量が不足した場合に拡張できるよう、ディスクに関してはLVMを利用し論理ボリューム化2つのNFSサーバーを冗長化rsyncとlsyncを用いデータを同期keepalivedを利用し、冗長化2つのサーバで共有するVIPは下記FAQの一つ目の方法で採番しました。www.faq.idcf.jpこれでNFSサーバー構築および冗長化ができました。次にコンテナサービスによって作成したKubernetesクラスターで、NFSをPV化します。Kubernetesクラスターの作成に関しては以下の記事も参考にしてください。以下3ステップでNFSをPVとして利用できます。対象のクラスター内にて、上メニュー「ストレージ」→「永続ボリューム」にて「ボリュームを追加」。必要項目を入力し「保存」。登録が完了するとAvailableとしてリストされますが、この時点では接続性は確認されていません。上メニュー「リソース」→「ワークロード」にて、「ボリューム」タブを選び「ボリュームを追加」。「既存の永続ボリュームを使用」を選択し、「永続ボリューム」にさきほど登録したNFSを選択。複数ノードから利用する場合は、「複数ノード読み取り/書き込み」にもチェックし、「作成」。Boundとしてリストされますが、この時点でも接続性は確認されていません。対象のプロジェクトに移り、上メニュー「リソース」→「ワークロード」にて「デプロイ」。ここで、「ボリューム」の項目にて「既存の永続ボリューム(要求)を使用」を選択。「永続ボリューム要求」では先ほど作成したNFSのボリュームを選択。「マウントポイント」はコンテナ上でのNFSのマウント先を指定します。「起動」デプロイします。シェル上からNFSマウントできていることが確認できます。以上で、コンテナ上からNFSをマウントできました。最後に、冗長化したNFSのマスター側で障害が発生したときに自動的に接続が切り替わるか、PV上のファイルを読み書きできるかどうか、簡単に以下の手順で試験をしましょう。NFSマスター機の仮想マシンをクラウドコンソールから強制停止(擬似的な障害を発生させる)NFSはkeepalivedによりスレーブがマスターに昇格しますコンテナのシェル上から、ファイルの読み込み/書き込みが問題なくできることを確認また、読み込み/書き込み先はマスターに昇格した方のNFSに対して行われていることを確認この切り替わりは数秒で完了しましたこのように、コンテナサービスや稼働しているコンテナ上で特別な操作は不要で、NFSサーバーとの接続が自動で切り替わることが確認できました。最後にサービス開発速度の向上を目指し、コンテナ技術を利用するシーンが今後ますます増えてくるかと思います。一方で既存システムのコンテナ化やKubernetesの利用に対しまだまだハードルを感じていらっしゃる企業様が多いのではないでしょうか。UIにより簡単に行なえます。コンテナ化、Kubernetes化の第一歩にコンテナサービスをご利用を検討いただけましたら幸いです。当テックブログでは、今後も当社コンテナサービスを利用したシステムのコンテナ化に役立つ記事をお送りしてまいりますのでご期待ください。*1:仮想マシンディスクをベースとしたPVの制限事項IDCFクラウドでは一つの仮想マシン用ディスクは最大1000GBまでという容量制限があります。このため、1000GBよりも大きい容量のPVはこの方法では作れません。仮想マシン用ディスクはアタッチされた仮想マシンからしか参照できないため、この方法で作成されたPVは仮想マシン用ディスクがアタッチされたノード上に存在するPodからしかマウントできません。このため例えば複数のノード上でPodを作りそれらで一つのPVを共有するというような使い方は出来ません他にも一つの仮想マシンには13個までしかボリュームをアタッチできないため、ノードにつき作成できるPVの数は同じく最大13個までとなります。複数のエンドユーザーごとにPodを作成しそれぞれのPodでPVを一つずつ使う、といった構成をとる場合、ノード一つに付き13ユーザまでしか収容できない計算になります。要件上1000GB以上の容量のPVが必要な場合や、あるいはどうしても複数Podで一つのPVを共有したいという場合、本記事でご紹介した方法でPVを作成することで実現ができます。モニタリング機能と永続ストレージについてこんにちは。(1)こんにちは、藤城(@tafujish)です。触ってみた初めまして、こんにちは。Inc.▲はてなブログをはじめよう!blog-idcfさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。