kubernetesを触りたい時、AWSやGCPは無料枠が少なく月額料金も案外高いため、自宅に余っているWindowsPCにkubernetesを導入した。そこに開発中のアプリケーションをデプロイしたりhelmパッケージでファイル共有サーバーなどを導入できるようにした。
はじめに
自宅の余っているデスクトップやノートパソコンにkubernetes環境を導入し、イントラ内で開発中のアプリケーションをデプロイしたりワンコマンドでファイル共有やバッチ処理、性能監視などのサービスを立ち上げる。
TL;DR
Windows上にWSL2でUbuntuをインストール。次にkubernetesを構築するためにminikubeとパッケージ管理のためにhelmを導入。Ingress-ControllerでL7レベルでリバースプロキシにより各ポッドのサービスへルーティングしてサービスを外部へ公開。
- WSL2でUbuntuを導入、Dockerのインストール
- minikubeの導入
- kubectlの導入
- kubectlでminikubeへアクセスできるか確認
- Helmを導入
- クラスタ内のサービスへルーティング
実現できたこと
自宅で余っているWindows PCにkubernetesを構築し、開発中のアプリのデプロイやファイル共有サーバーなどのHelmパッケージを導入。
helmで導入したパッケージ例
- minio: ファイル共有
S3と互換性のあるminioを導入。ネットワーク内のPC間のファイル共有サーバーに。ブラウザやコマンドラインからアクセス可能。 - airflow: バッチ処理
定期実行したい処理(朝スケジュールを確認してslackへ送るなど)の実行、機械学習などの重たい処理の実行 - harbor: イメージリポジトリ
自宅でdocker imageをbuildして他のサーバーからも参照したい時に、Docker Hubへインターネット経由でアップロードすると容量も大きく時間もかかるため、自宅のイントラにイメージリポジトリを設置。
(その他)
Keycloak: 共通のアカウント認証、gitlab: イントラのgitリポジトリ、Prometheus+grafana: サーバーの性能監視 など
Windows PCにkubernetes環境を構築
1. WSL2でUbuntu20.04を導入、Dockerのインストール
- Windows docsを参考にWSL2でUbuntuを導入
- Dockerをインストール(以下を実行)
sudo apt-get update -y && sudo apt-get upgrade -y
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update && sudo apt install docker-ce
2. minikubeの導入
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/
3. kubectlの導入
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
4. kubectlでminikubeへアクセスできるか確認
sudo service docker start
minikube start --vm-driver=docker
kubectl get node
5. Helmを導入
Helmはkubernetes上へサービスを展開することができるコマンドで、1コマンドでサービスが立ち上がる。
curl -O https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
bash ./get-helm-3
6. クラスタ内のサービスへルーティング
Kubernetesはマイクロサービスアーキテクチャと相性が良く、Kubernetes上でさまざまなサービスを疎結合で作成し、それらをAPIなどを経由して連携させることが可能。
minikube addons enable ingress