各種Volumeについて

kubernetes

ConfigMapとは

ConfigMapは環境変数などをkey valueペアとして保存するリソース。
今回最後に作成するlaravelの.envファイルなどはココで定義します。

Secretとは

Base64でエンコードして、key valueペアとして保存するリソース。

Base64なのでEncryption(暗号化)とは違い誰でもDecodeできる。

例えば、

$ echo {何かのbase64文字列} | base64 -D

こんな感じでコマンド一つで簡単に元の平文に戻せます。
因みに上記のdecodeコマンドはkubernetesでは結構よく使うので覚えておくといいかも。

ここでは例えば、docker-hubのprivateイメージなどをkubernetes上でpullする場合、認証情報がないとpullできないので、それらの認証情報などを設定します。

PersistentVolume

persistentは持続的という意味。
俗に永続ボリュームと呼ばれ、コンテナが書くデータをPod内のVolumeではなく、クラスターワイドのNode上に存在するVolume(永続ボリューム)に保存することで、Podが消えてもデータはクラスター上に残る。

図の様に、まずクラスターワイドな領域にここでは100GBの容量を確保しPersistentVolumeとして抽象化。

そして、その領域から5GBの容量だけPersistentVolumeClaimとして確保し抽象化。

そしてそれを各Podがマウントすることで、いくらPodを量産してもマウントしている先のVolumeは共通化できるわけです。

こいつの使い道はデータベースなどの永続データになります。

ただし、私はあまり本番環境でのデータベース運用ではこの方法を取らず、AWSのRDSのVPCとkubernetesClusterのVPCをPeer接続するなどして、DBに関してはRDSにお任せしちゃいます。

RDSを使う理由は、

  1. Version管理が楽
  2. 冗長化が楽
  3. Master Slave 構造とか勝手にやってくれる
  4. スナップショットとかもやってくれてバックアップが安心

などが挙げられます。

まとめ

Volumeのセクションについては、実際のアプリケーションを構築する流れとセットでハンズオンしたほうがイメージしやすいと思います。

次の記事では、実際にLaravelのスケルトンプロジェクトをKubernetes上にデプロイすることで、DBなどのPodとの通信連携やvolumeについてまとめます。

タイトルとURLをコピーしました