【デジタルアライアンス ソリューション事業部 ハタケヤマ】
昨今コンテナ技術が普及し、どんどん運用で使われています。また、その進化もめまぐるしいと感じています。最近特に注目して勉強したのがkubernetesです。
既に運用で巨大なクラスタが稼働しているケースも見聞きしていて、技術的には実運用は十分行われていて、それをどんどん発展・応用していく段階にきているように感じています。
そこで、kubernetesを勉強する意味でも、またインフラの勉強をする意味でも、ここはやってみないと思いまして、実際に社内で個人の開発環境として使える環境を作ってみました。
使用する環境要件は以下となります。
【環境要件】
◆OS
・Windows10 Pro(x64)
◆ソフトウェア
・Docker for Windows
・Ubuntu 18.04 LTS
◆設定ファイル一式
Github
※設定ファイルが多いためGithubへアップしました。社内の情報は公開できないので、社内の設定等は仮の値に置き換えました。sslの鍵もブランクのファイルに置き換えているため、この鍵では正常に動作しません。使用される場合は個人の環境で適切なものを入れてください。
【やってみての感想】
かなり勉強になりました。kubernetesのyamlによる設定や環境のデバッグは慣れるまで大変でしたが、慣れれば好きなようにいじくり回せるようになりました。また、インフラの挙動もとても勉強となりました。nginx→Apache→php-fpmと連携する部分や、php-fpm→postfixとメール送信するところ。また、php-fpmからDBアクセスする部分など、各サーバ同士の連携で色々とつまづきポイントがありましたが、なんとか全てクリアして設定ファイルにまとめることが出来ました。
特に大変だったのは、postgreSQLの永続ボリュームの使用でした。永続ボリュームはdocker for windowsのkubernetesなので、hostPath(Windosのパス)を指定する必要があります。それは問題なく行えたのですが、NTFSの為パーミッションが設定できません(rootの777固定となる)。postgreSQLはrootでは起動できない為、root以外のユーザで起動となります。ところがDB保存先を永続ボリュームとすると、rootの777となっており、権限エラーとなります。回避した方法は、ループバックデバイスを使用しました。isoファイルや仮想OSの仮想ディスクファイル等、ファイルをディスクと見立ててボリュームとして使う技術ですね。Dockerは通常ループバックデバイスは使用禁止となっていますので、yamlでループバックデバイスの使用が許可されるオプション「securityContext: privileged: true」を指定しました。ここに行き着くまでに相当苦労しました・・・Windowsはまだまだlinuxコンテナを使いづらい環境ですね。WSL2に期待です。
あと、メールも地味に苦労しました。postfixで簡単にメールサーバを立てられるのですが、phpからメール送信するにはphpが動作するサーバでsendmailが使えないといけません。ところがphpのコンテナにsendmailやpostfix入れようものなら、systemctlでサービス起動することをDockerは禁止されているため動かせません。どうしたものか・・・と悩んで調べたら、ssmtpという優れものを見つけてそれを試すといけました。ssmtpはsendmail互換のメール送信コマンドを提供してくれるものです。デーモンとして起動していなくても、単発でメール送信時にコマンドを呼び出して動作するので、phpのコンテナからでも問題なく動作してくれました。
コンテナ技術は便利ですが、制約が様々あるので躓きポイントが結構あります。
ですが、一度完成してノウハウがたまると、同じ環境を何度でもどこでもすぐに展開できるのでとても使い勝手はいいです。
今後更に運用を意識して、他のツールと連携したり、CI/CDに組み込んだりできたら面白そうだなと考えています。