夏休みということもあり、週末にKubernetes(以降k8s)環境を構築して遊んでました。
k8sというのは、Googleが開発した、コンテナの運用自動化を実現するためのOSSフレームワークです。
最近は、Azureがk8sを利用できる環境を提供したり、RedHatがk8sの強化版(?)であるOpenShiftを提供していたりと、コンテナ界隈では注目されているプロダクトになってきています。
一般的にk8sの検証環境といえば、シングルノードでお手軽に構築できるMinikubeがありますが、今回はマルチノード構成のk8s環境を構築してみました。
マルチノード構成でなければ利用できない機能があったり、ワーカーノード間のコンテナ間通信がどのように実現されているかを、後々検証してみたかったのがその理由です :-)
構成としては、マスタノード1つにワーカーノード2つの3ノード構成で構築してみました。
この構築の際、複数のノードに対してパッケージインストールやら設定ファイル変更を、sshで入って行うのは面倒だし、設定ミスをしてしまうので、ついでにAnsible環境も作ってしましました。
※備えあれば患いなしです :-)
Ansible環境を構築する際、どうせなら、普段の仕事で使っているLC4RT環境を使えるようにしてしまおうと思い、LC4RT環境も作ってしまいましたw
LC4RTというのは、"Literate Computing for Reproducible Infrastructure"の略で、ざっくり言ってしまうと「Jupyter NotebookとAnsibleを使って、実行可能な運用や環境構築の手順書を実現しよう」というものです。
LC4RTについての詳しい話は、以下のリンク先の資料を読んでみてください。
Jupyter notebook を用いた文芸的インフラ運用のススメ
Literate Automation(文芸的自動化)についての考察
で、 LC4RT環境を構築したのち、こんな感じでもくもくとk8s環境を構築してました。
LC4RTを使ったk8s環境構築の手順メモ |
このように、実行したコマンドと実行結果のエビデンスが残っていれば、あとから同じようにk8s環境の構築が可能になります :-)
Ansibleを使って環境構築を行っているので、同じ構成のノードを複数構築するのも簡単になります。ワーカーノードは、この方法を使って構築したので、かなり楽に構築できました :-)
パッケージのインストール |
パッケージのインストールも、Ansibleのyumモジュールを使って一気にインストール出来て、インストール結果も、上の図の黄色い文字の部分のように残されるので、あとから実行結果を確認したりできるので重宝しています。
Pythonコードと組み合わせることもできたりします |
あと、上の図のようにPythonコードの中からAnsibleを実行することができるので、playbookでは実現が難しい繰り返し処理とかも、簡単にできたりします :-)
そんな感じで、とりあえずマルチノード構成のk8s環境が出来上がりました :-)
k8sは、コンテナを制御したり、仮想ネットワークを実現するいくつかのモジュールで構成されているので、こうやって自分で環境構築を行うことでモジュールの動きを理解し、k8sの仕組みを深く理解することができるようになると思います。
とりあえずk8sの検証環境ができたので、Podを作ってみたり、ReplicaSetの振る舞いを検証してみたいな...と思っています。
※Helmのことも少し調べてみたい...
それでは :-)