自宅Kubernetesクラスタ作成体験談

numa
·

自宅KubernetesクラスタをRaspberry Piで作ることになった経緯や、振り返り、今後の展望について書き記していきます。

↑作成したクラスタ

作ることになった経緯

大雑把にいうと、以下のような流れで作成を決めました

  1. データ指向アプリケーションデザインを読み、とても興味をそそられ、インフラ領域に興味が湧く

  2. クラウドサービスへの興味が出て、それを使って何か作ろうかと思ったが、マシンが見えないのが寂しい。また、マネージド〇〇は便利すぎて仕組みの理解ができないのではと感じる

  3. 調べる中、現在のクラウド技術はKubernetesの存在感が大きいと知り、Kubernetesについて調べる

  4. Kubernetesの学習意欲が湧く。Kubernetesの仕組み等を理解することは、現在の自分の興味分野であるクラウド、分散システム、仮想化技術、ネットワーク分野について理解することにつながると感じたため学習を決める

  5. 自由にKubernetesを学べる環境を作るため、自宅Kubernetesクラスタを作成することを決める

どのようにして学んだか

まずKubernetesの概要を一通り把握し、専門用語をある程度理解することに注力しました。

その学習に特に役立ったと思う学習リソースについてはZennにまとめました。

そうして概要を徐々に把握してきた頃に、kubernetes the hard wayというコンテンツを見つけました。しかしそれはGCPを使用するもので、学習するたびにお金がかかるのは精神的に良くないと思い、もう少し調べていくと、2020年にCyberAgentさんが開催した”おうちKubernetesインターン”というイベントのブログを見つけました。これは自分にぴったりだと感じたので、それを真似する形でクラスタの構築を進めました。

苦労した点

最初は全ての専門用語の輪郭が見えず、YouTubeや書籍の説明を咀嚼できない期間があり、それが少し辛く感じました。全ての学習はそういうところから始まり、学習するうちに体が用語に慣れていくというのは今までの経験からわかっていたので、ひたすら時間をかけて学び続けました。そのおかげで計画通り体が慣れました。

また、CyberAgentさんのリポジトリを見ながら進めたのですが、それは2020年に開催されたということもあり一部古い情報もあったため、そのままやっても動かないということがあり、少し苦労しました。今後同じくラズパイでkubernetes the hard wayを行いたい人の役に立てるよう、まだ執筆途中ですが、その辺りを修正して構築する手順を書いた記事をzennに投稿しています。

ただ、そのデバッグ作業を通してネットワークやLinux, SSL/TLSについて学べたのは、実際に手を動かしたことによる恩恵を受けているなと思い、やってよかったなと感じました。

嬉しかった点

当たり前ですが、Kubernetesについて基礎的な知識を得ることができたのは嬉しい点です。ある程度知識がついたおかげで英語の情報にもあたることができるようになりましたし、クラウド技術の最先端に触れられているというのが、何か心から湧き上がるものを感じます。

また、高校までほとんどコンピュータを触ったことがなく、高校の頃から自宅サーバを運用しているという同年代の友達に対してコンプレックスを感じていました。ですが、今回ラズパイでKubernetesクラスタを作成していく中で、そのようなコンプレックスが薄まったのを感じていて、心が軽くなりました。

さらに、苦労した点にも書きましたが、副次的にネットワークやLinuxについての知識が増えたのはとても良かったと感じます。

今後の展望

Kubernetesについての知識が増えるにつれ、これからもっと学ぶべきだと感じるトピックと、Kubernetesを用いて行いたいことが色々と出てきたので、それに取り組んでいきます。それぞれを以下に記すと、

学ぶべきだと思うことは

  • Kubernetesの各コンポーネントの役割。特にCNI, kube-proxy

  • まだ触れていないKubernetesの要素(ClusterAPI, Jobなど)

  • Linuxへのさらなる理解

    • 何をするにしてもLinuxへの理解は役に立つと感じるため

  • コンピュータアーキテクチャとオペレーティングシステムについての理解

    • Kubernetesを用いて高度にアプリケーション等を運用するには、コンピュータが何をやっているのか、何をできるのかということを知っておく必要があると感じるため

これから取り組みたいことは

  • 分散システムに適したアプリケーションを構築し、Kubernetesクラスタにデプロイ

  • Prometheus, Grafanaを用いた監視、アラートなど

  • ArgoCDなどのツールを用いてmanifestをGitOpsの手法で管理する

  • Kubernetesを用いた大規模データの分散処理(HDFS, Sparkなど)

  • Kubernetesを用いた機械学習パイプラインの構築(MLFlow, Kubeflow, Airflowなど)

があります。

これらは機械学習基盤をKubernetesで構築する、いわゆるMLOpsを行うという目標で学んでいけば全て学習できるはずなので、ひとまずそれを目標にやっていこうかなと思っています。そのために少々焦りつつ、落ち着いてコンピュータアーキテクチャ等の基礎からじっくり学んでいこうと思っています。

@numa
学生