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を使う理由は、
- Version管理が楽
- 冗長化が楽
- Master Slave 構造とか勝手にやってくれる
- スナップショットとかもやってくれてバックアップが安心
などが挙げられます。
まとめ
Volumeのセクションについては、実際のアプリケーションを構築する流れとセットでハンズオンしたほうがイメージしやすいと思います。
次の記事では、実際にLaravelのスケルトンプロジェクトをKubernetes上にデプロイすることで、DBなどのPodとの通信連携やvolumeについてまとめます。