概要
以下の構成でraspiでk3sクラスタを構築しその上にairflowをデプロイしたのでメモ
前提知識
- k3s
- 概要:
K3s は、その小 さなシングルバイナリ、ネイティブ ARM サポート、および本番環境に適した高可用性アーキテクチャに より、エッジシステムでクラスターを自動初期化および維持する理想的な Kubernetes ディストリビュー ションです。(公式サイト参照) - 採用理由:
k8sをkubeadmなどを利用してインストールするよりも簡便にインストールできるため今回こちらを採用
- 概要:
- airflow
- 概要:
Apache Airflowは、データエンジニアリングパイプライン用のオープンソースのワークフロー管理プラットフォームである。2014年10月[1]にAirbnbで開発が始まり、ますます複雑化する社内のワークフローを管理するためのソリューション
(wikipedia参照) - 採用理由:
業務で触るため...+自宅のnature remoなどのデータを溜め込んでみたいと思っておりバッチ処理をさせるため
- 概要:
- longhorn
- 概要:
Longhornは複数のサーバ内のストレージをソフトウェアで束ね、仮想的に巨大なストレージを構成。ユーザーはその仮想的なストレージに対してボリュームサイズやIOPS性能、レプリカ数などを指定し、仮想マシンやコンテナにマウントして利用を開始することができます。
(public-keyサイト参照) - 採用理由:
k3sではデフォルトだとlocal-pathのストレージを使用する形になっているが、それだと冗長性に難があるので分散ストレージを採用
- 概要:
構成
- サーバー
- raspi4×4
- OS
- raspberry Pi OS (32-bit)
- k8sクラスタ
- k3s:v1.24.14+k3s1
1.raspiのセットアップ
1-1 OSのインストール
Raspberry pi imagerを使いRaspberry Pi OS (32-bit)
をインストール
1-2 apt upgradeを実行
sudo apt upgrade
1-3 cgroupの有効化
sudo vi /boot/cmdline.txt
/boot/cmdline.txt に cgroup_memory=1 cgroup_enable=memory
を追加
2.k3sのインストール
2-1 control-planeへのk3sインストール
公式サイトのインストール手順をもとにcontrol-planeをインストール
※longhornがk8sのv1.2.5に1.2.5に対応していないためk3sもそれ以前のバージョンを指定している
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.24.14+k3s1 sh -
2-2 worker-nodeへのk3sインストール
同じく公式サイトのインストール手順を元にworker-nodeをインストール
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.24.14+k3s1 K3S_URL=https://{Controll-Planeのip}:6443 K3S_TOKEN={TOKEN} sh -
3.helmのインストール
公式サイトのスクリプトからのインストール方法を選択
https://helm.sh/ja/docs/intro/install/
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
4.longhornのインストール
4-1.longhornのインストール
下記のコマンドでlonghornをインストールする
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.3.0/deploy/longhorn.yaml
4-2 longhornをデフォルトStorageClassに設定
こちらの記事を参考にデフォルトのStorageClassを変更
5.airflowのインストール
control-planeにて下記のコマンドを実行。
公式サイトのhelmを使用。執筆時点で最新のv1.9.0をインストール
helm repo add apache-airflow https://airflow.apache.org
helm upgrade --install airflow apache-airflow/airflow --namespace airflow --create-namespace
6. uiへのアクセス
control-planeで以下のコマンドを実行し、同一NWの端末からブラウザでhttp://{control-planeのip}:8080へアクセス。
kubectl port-forward svc/airflow-webserver 8080:8080 --address="0.0.0.0" -n airflow