自宅にKubernetesクラスター『おうちKubernetes』を作ってみた
2020年08月24日 月曜日
CONTENTS
こんにちは、IIJの韮塚(にらづか)です。
私は名古屋支社の技術部に所属しており、普段はインフラ中心のSI業務と開発向け社内ツールの管理業務をしています。
みなさん、Kubernetesは触っていますか?
いま世の中ではKubernetesが急速に普及しつつあります。
大手クラウドベンダーは独自にカスタマイズしたKubernetesをサービスとして提供しており、多くのWebサービスがその基盤を利用して稼働しています。
中にはYahoo!やサイボウズのように、自社内で独自にカスタマイズしたKubernetesを持っており、その上で自社サービス提供するような会社も多く存在します。
IIJでも「IKE(IIJ Kubernetes Engine)」という名前でKubernetesサービスが社内向けに提供されており、IIJの社内ツールなどに利用されています。
私も昨年からDockerのクジラアイコンに魅了され、Kubernetesを触り始めました。(IIJアドベントカレンダー2019)
そんなKubernetesを自宅でも触れるように、Raspberry Piを使ってKubernetesクラスターを組んでみましたので、素材集めから完成までの流れをこの記事で紹介しようと思います。
このように自宅でKubernetesクラスターを作ることを「おうちKubernetes」という名前でご存知の方もいらっしゃるとは思いますが、弊社のマスコットキャラクターのバリーくんとの2ショットを交えて紹介していますので、どうかお付き合いいただければと思います。
※ 本記事ではKubernetes自体の説明は省略しています。
背景
今や一家に一台Kubernetesクラスターの時代だから
- GCP1)の無料利用枠$300を使ってGKE2)を動かしていたがGCLB3)の放置が原因でわずか2か月足らずで無料枠が消失した……
- 他のクラウドベンダーの無料枠に手を出すのもいいけど、また構成を一から作らないといけない……
- IKEは会社にいないと触れない……
☞だったら無料でいくらでも使えるKubernetesクラスターを自分で作ればいいじゃないか!!!!
素材
そうと決まれば素材集め。
だいたいAmazonで揃えられます。
項番 | 品名 | 個数 | 値段 (円/個) |
備考 |
---|---|---|---|---|
1 | Raspberry Pi 4 Model B/4GB | 3 | 6,820 | これだけ正規代理店で購入(あとはAmazon)。最近8GBでたよね |
2 | Raspberry Pi 用 ラックケース | 1 | 2,549 | 多段になっているとかっこいいよね |
3 | Smsung EVO Plus 32GB microSDHC | 3 | 990 | 正直64GBにしておけばよかった |
4 | Smraza Raspberry Pi 4電源ケーブル | 3 | 1,129 | 電源ケーブルに電源スイッチが付属していると便利だよね USBハブだと給電不足になる可能性があったので分けました |
5 | TP-Link TL-SG105E スイッチ | 1 | 2,500 | 途中まで家にあったスイッチ使ってたけれど壊れたので買いました |
6 | 色んな長さのLANケーブル | ∞ | 家に落ちてた | Amazonだと買い合わせ対象商品になりがち |
7 | MicroHDMI HDMI変換ケーブル | 1 | 999 | Raspberry Pi 4からMicroHDMIになった。許せない |
合計 | 32,965 | 一回作れば一生使えるので実質タダ |
2,3日あれば全部届きます。
思い立ってから2,3日で自宅にKubernetesクラスターが組めるなんていい時代ですね!
Raspberry Piは全部で3台用意しましたが、それぞれ役割については後で説明します。
バリーくんと素材たち
Raspberry Pi 4 × 3台
構築(物理)
組み立ては3,4時間ほどで終わり、さほど手間取りませんでした。PC自作が出来ればたぶんできるレベルです。
(ラックケースに付属している説明書はとても大雑把なので、先人たちのブログを見ながら雰囲気で組み立てました……)
Raspberry Pi 4を買ってからレビューなどを見て気が付いたのですが、Raspberry Pi 4はRaspberry Pi 3と比べて発熱が大きく、熱対策をしないと著しく性能が低下するそうです。
なのでRaspberry Pi 4は熱対策に冷却ファンか大きめのヒートシンクを取り付ける必要があるのですが、幸いラックケースにヒートシンクとファンがセットで付属していたので事なきを得ました……。
(ファンとかつけるんだったらラズパイであるメリットがどんどんなくなっていく気がする……?)
バリーくんと組み立てたラズパイ(机が汚い)
後にこのスイッチが壊れるとは……
構築(論理)
大きく「サーバ構築」と「Kubernetes構築」の2つに分けて実施しました。
SSHの設定したり、ユーザ・グループ作ったり、基本的な設定を行いました。
特にこれといって変わったことはしません。
ちなみにOSはRaspbian(32bit)を使いました。
(OSインストールに今年出たRaspberry Pi Imagerを使ってみましたが、かなり楽でした)
Kubernetesクラスターは主に、コンテナの起動ホストとなる「Worker Node」、クラスター内のWorker Nodeを管理する「Master Node」の2つから構成されています。
今回は3台あるサーバの内1台をMaster Node、2台をWorker Nodeとして割り当てていきます。
細かいコマンドは書きませんがやったこととしては以下の通りです。
-
- 全Nodeに行ったこと
-
- Master Nodeに行ったこと
-
- クラスター初期化
- Flannel導入7)
- Worker Nodeのクラスター参加トークン発行
-
- Worker Nodeに行ったこと
-
- クラスター参加トークンを使ってでクラスター参加
- 参加完了
結果
無事Kubernetesクラスターが組めました!!!!
ちなみに「n7s」は「niranetes」の略です。本名から文字りました。
毎日元気に休まず稼働しています。(日々、障害を監視・アラートしてくれるバリーくんと一緒ですね!?)
稼働中のn7s
withバリーくん
今後やりたいこと
直近ではKubernetesディストリビューションとしての環境を整えることを目標としており、PrometheusとGrafanaでクラスター内メトリクスの監視環境を作ったり、Elasticsearchを使ったログ収集環境を作っていきたいと考えています。(Raspberry Piのスペックでどこまで出来るかなぁ……)
他にもCKAの勉強やアプリケーション開発/実装の練習にも役立てていきたいと思っています!!
制作の参考にさせていただいたサイト
- おうちKubernetes周り
- kubeadm
脚注
- ^GCP(Google Cloud Platform):Googleが提供するクラウドサービスのこと
- ^GKE(Google Kubernetes Engine):GCP上で動くGoogleのマネージドKubernetesサービスのこと
- ^GCLB(Google Cloud Load Balancing):GCPにある機能の1つ。主に負荷分散を行う
- ^kubeadm:クラスターを起動するコマンドのこと
- ^kubectl:クラスターにアクセスするコマンドのこと
- ^kubelet:クラスター内で実行されるコンポーネント
- ^Flannel:クラスター内のPod間ネットワークを実現するツール。非常にシンプルで実装が簡単なので今回採用した