🌟

kubesprayとラズパイでおうちKubernetes

2025/01/20に公開

はじめに

kubesprayとラズパイを使って、おうち Kubernetes クラスターを構築する方法を紹介します。
構成は Control Plane が 1 台、Worker Node が 2 台の合計 3 台で構築します。

写真

この記事で紹介するソースコードは以下のリポジトリにあります。

https://github.com/CASL0/ansible

材料

配線が煩雑になるのが嫌だったので、PoE で給電することにしました。

名前 単価 個数 備考
Raspberry Pi 4 Model B 8GB 16,800 円 3
アクリルケース付き PoE HAT 3,599 円 3
TP-Link TL-SG105PE 6,667 円 1 PoE 給電に対応
microSD カード 64GB 980 円 3
HDMI (メス) - micro HDMI (オス) 変換アダプタ 970 円 1 OS の初期化・ssh の設定用

OS のインストール

Raspberry Pi Imager を使って OS をインストールします。

以下リンクの Raspberry Pi Imager の公式サイトにアクセスし、Raspberry Pi Imager をインストールしてください。
https://www.raspberrypi.com/software/

この記事では Ubuntu24.04 をインストールします。
[Other general-purpose OS]>[Ubuntu]>[Ubuntu Server 24.04.1 LTS (64-bit)]と遷移して、OS を選択してください。

構築

kubespray は Ansible の collection です。変数を使ってインストールする内容をカスタマイズすることができます。
また、helm や ingress 等の addon も一緒にインストールできます。

構成

インストールする内容は以下の通りです。

  • Kubernetes:v1.30.4
  • CNI:flannel
  • addon:
    • helm
    • metrics_server
    • cert_manager
    • metallb
    • ingress_nginx

Playbook にするとこうなります。

---
- name: Install Kubernetes
  ansible.builtin.import_playbook: kubernetes_sigs.kubespray.cluster
  vars:
    kube_version: v1.30.4
    kube_network_plugin: flannel
    kubeconfig_localhost: true
    kubectl_localhost: true
    helm_enabled: true
    metrics_server_enabled: true
    cert_manager_enabled: true
    kube_proxy_strict_arp: true
    metallb_enabled: true
    metallb_speaker_enabled: true
    metallb_namespace: metallb-system
    metallb_config:
      address_pools:
        primary:
          ip_range:
            - 192.168.0.100-192.168.0.200 # ご自身の環境で読み替えてください
          auto_assign: true
      layer2:
        - primary
    ingress_nginx_enabled: true
    ingress_nginx_namespace: ingress-nginx

実行

以下のリポジトリを clone してください。

git clone https://github.com/CASL0/ansible.git

inventories/hostsの IP アドレスをご自身の環境に合わせて修正してください。

以下のコマンドで Kubernetes クラスターを構築します。

python -m venv .env
source .env/bin/activate
pip install -r requirements.txt
ansible-galaxy install -r requirements.yml
ansible-playbook playbooks/mycluster.yml -b

成功するとコマンドを実行したマシン(Control node)に kubeconfig(admin.conf) と kubectl がダウンロードされます。

以下のコマンドで Kubernetes の API を実行することができます。

cd inventories/artifacts
./kubectl.sh get nodes

各 Node の STATUS が Ready になっていることを確認してください。

NAME          STATUS   ROLES           AGE   VERSION
192.168.0.5   Ready    control-plane   2h   v1.30.4
192.168.0.6   Ready    <none>          2h   v1.30.4
192.168.0.7   Ready    <none>          2h   v1.30.4
GitHubで編集を提案

Discussion