Skip to content

Instantly share code, notes, and snippets.

@kei-s16
Created February 10, 2021 11:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kei-s16/91cc87b127f38cfed28fe625ae8c9ba9 to your computer and use it in GitHub Desktop.
Save kei-s16/91cc87b127f38cfed28fe625ae8c9ba9 to your computer and use it in GitHub Desktop.

なにやったのか?

rpi4 * 3 で k8s クラスタを作る

構成

  • rpi 4 (4GB)
    • Arch Linux (ARM)

作業環境

Raspbianイメージ焼くところ

Windowsの世界

もろもろの雑用

Arch on WSL2

kei@Win-Desktop-wsl
OS: Arch Linux on Windows 10 x86_64
Kernel: 5.4.72-microsoft-standard-WSL2
Shell: zsh 5.8
CPU: AMD Ryzen 7 3800X (16) @ 3.892GHz
Memory: 279MiB / 12733MiB

ArchLinux for ARM64がんばるところ

Raspbian(32bit)

Kubernetesがんばるところ

ArchLinux ARM(64bit) on Raspberry Pi

作業手順

  1. 組み立てやってテンション上げる
  • けっこう辛かった
  • ネジ穴の精度よ……
  1. メインのLANにぶらさげるLANのセットアップ
  • 型落ちのやつ買っちゃった
  1. Raspbian を headlessで
  • イメージ焼くところは横着した
  • このあとめんどうなことやるからね
  1. ルータに有線で接続してssh - 新ユーザ作ってpiユーザ消す - パスワード→鍵認証はやらない(raspbianをこのあと使わないので)
  2. Raspbian 上 で ArchLinux ARM を焼く
# $はすべて sudo
$ fdisk /dev/sda
# いいかんじにパーティション切る

$ mkfs.vfat /dev/sda1
$ mkdir boot
$ mount /dev/sda1 boot

$ mkfs.ext4 /dev/sda2
$ mkdir root
$ mount /dev/sda2 root

# イメージ落とす
$ wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz

# ここから先はsuする
$ su
% bsdtar -xpf ArchLinuxARM-rpi-4-latest.tar.gz -C root
% sync

# 64bit かつ rpi4 なので
% sed -i 's/mmcblk0/mmcblk1/g' root/etc/fstab

% mv root/boot/* boot

# マウントしたらちゃんとアンマウントしようね
% umount boot root

# これを3セット (さらに別用途で+1セットやったのは秘密)
  1. 各マシンにホスト名ふったりユーザ作ったり
  • pacman -Syyu めっちゃ重い(国内ミラーなさそう)
  • pacman -S sudo
  • ホスト名変えた
    • kisaragi
    • mogami
    • kumano
  • sudoersいじった
  • 公開鍵認証以外封じた
  1. Kubernetesまわりガーっとインストール
  • Ansibleでやろうとしたが、pacmanだけでなくyayも使うのでちょっと厳しかった
  • ので横着してシェルスクリプト書いたが横着しすぎてコケた
  • ので最終的に半手作業……
#!/bin/bash -eu
pacman -S git base base-devel --noconfirm
mkdir ~/build/
cd ~/build
git clone https://aur.archlinux.org/yay.git
cd ~/build/yay
makepkg -si --noconfirm
cd ~/
yay -S docker kubelet-bin kubeadm-bin kubectl-bin ebtables ethtool socat conntrack-tools cni-plugins --noconfirm
  1. Kubernetesセットアップ
  • 構成
    • kisaragi : Master
    • mogami : node
    • kumano : node
    • お船じゃないよ
  • kisaragi
  • mogami & kumano
    • sudo systemctl enable kubelet.service
    • sudo systemctl start kubelete.service
    • sudo kubeadm join {いろんなひみつのオプション}
  • 再度kisaragi
    • kubectl label node mogami node-role.kubernetes.io/worker=worker
    • kubectl label node kumano node-role.kubernetes.io/worker=worker
kisaragi% kubectl version
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:28:09Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/arm64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/arm64"}}}
  1. なんかpod動かしてみる
  • オレオレDocker Registry置く
sudo docker pull hello-world
sudo docker tag hello-world kisaragi.local:5000/hello-world
sudo docker push kisaragi.local:5000/hello-world

つらかったこと

  • アップデートで再起動かけたら kubectl コケた
    • masterで systemctl enable kubelet 忘れてた
  • 一瞬世界から孤立したサーバを産み落としてしまった
    • ~/.ssh/authorized_keys を消してしまった
    • 別マシンでSDカードをマウントして authorized_keys を作ることでごまかした
      • chmod {ユーザ名}:sudo authorized_keys 忘れずにね

やらなかったこと(今後やりたいこと)

  • PoE(USBケーブル邪魔じゃね?)
  • ノード台数の拡張
  • 無線LANルータがちょっと残念だったので改善
    • ラズパイルータにしちゃう

結論

  • ArchLinuxはいいぞ
  • k8sはいいぞ
  • 横着はよくないぞ

参考記事

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment