K3SのRaspberry Piへのインストール

Kubernetes

サーバ遊びもはかどっていろいろ重くなってきました。
新天地に移転するに伴って思い切って常時起動サーバをRaspberry Pi 4のKubernetes環境にコンソリすることにしました。
今回はその初回としてRaspberryPiへのK3Sのインストールまで行いたいと思います。

環境

構築はRaspbery Pi 4に行います。8Gもメモリーがありますのでそこそこコンテナが動くことを期待しつつKubernetesはフットプリントを優先してK3Sを選択しました。

項目対象
HWRaspberry pi 4 8G
OSRaspberry Pi OS 64Bit
Kubernetes DistributionK3S

構成

インストール時の構成として、後ほどの構築の準備のために下記のコンフィグレーションを行います。

  • local-storageの無効化
    後段でLonghornでパーシステントボリュームを構成します。Local-storageはつわないので無効化(インストールしない構成)とします。
    > インストレーションコマンドライン引数: –disable local-storage
  • servicelbの無効化
    後段でMetalLBでロードバランサを構成します。servicelbが競合するため無効化します。
    > インストレーションコマンドライン引数: –disable servicelb

イメージャーの準備

下記よりRaspberry Pi Imagerをダウンロードする。

https://www.raspberrypi.org/software/

SDカードに書き込み

RaspyOSの64Bitを入れる。

  1. 適当なSDカードを用意する。
  2. Imagerより、Raspberry Pi OSの64Bitを選択する。
  3. ネットワーク設定など必要な設定をここで行うことも可能(行わない場合は後段で実行)
  4. SDを選択し書き込み。(中身は消えるので注意)

SDカードに対するPCからの設定

起動前に書き込んだPCからそのまま初期接続設定をする。

SSHの有効化

SSHを有効化する。
Imageを書き終わると、SDが刺さっているPCにBootパーティーションが見えるが見えるので、ファイル名sshで空ファイルを作成する。

Wifi設定

あまり多くはないかもしれないがネットワークにWifiを利用する場合はBootパーティーションに下記ファイルを設置する。

File Name: wpa_supplicant.conf

 country=JP
 ctrl_interface=/var/run/wpa_supplicant
 update_config=1
 network={
   ssid="<Wifi SSID>"
   psk="<WIFI PSK Key>"
 }

HDMI設定

3.5インチ(480×320)のHDMI接続のLCDが接続されている場合にはBootパーティーションのconfig.txt に下記を追記する。

File Name: config.txt

framebuffer_width=480
framebuffer_height=320

hdmi_group=2
hdmi_mode=87
hdmi_cvt=480 320 60 1 0 0 0

hdmi_drive=2

また、64bitでRasperry Pi 3の場合には下記をコメントアウトする。

File Name: config.txt

# dtoverlay=vc4-fkms-v3d
# max_framebuffers=2
コメントアウトしない場合、起動中にVC4がイニシャライズされたタイミングでNo Signalとなる。

画面が狭くRaspberryロゴがあるとコンソール領域を確保できないのでロゴを消す。cmdline.txtファイルの行の末尾にlogo.nologoを追加する。

File Name: cmdline.txt

起動後の初期設定

swap off

Swap offする。

sudo swapoff --all
sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
systemctl status dphys-swapfile

IP固定

IPを固定する
ファイルに下記を追記する。
(下記インターフェースはWifiの例)

File Name: /etc/dhcpcd.conf

interface wlan0
static ip_address=<Static IP>/<Net Mask>
static routers=<Default Gateway IP>
static domain_name_servers=<DNS IP>

ホスト名変更

hostnamectl set-hostname <ホスト名>

Hostsファイルの準備

Filename: /etc/hosts

<IP #1>  <Hose Name #1>  <FQDN #1>
<IP #2>  <Hose Name #2>  <FQDN #2>

OSのアップデート

OSのアップデートをする。

sudo apt update
sudo apt upgrade

K3Sインストール

カーネル引数へのCGROUPの追加

コンテナ利用準備のためCGROUPを有効化するパラメータを追加する。cmdline.txtファイルの行の末尾に下記を追加する。
追加後は有効化のため再起動する。

項目
cgroup_enable=cpuset
cgroup_enable=memory
cgroup_memory=1

File Name: /boot/cmdline.txt

console=serial0,115200 console=tty1 root=PARTUUID=5454db8f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait logo.nologo cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

マスターのK3Sをインストールする

K3Sをインストールする。

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik --disable servicelb" sh -

ワーカーのK3Sをインストールする

  1. トークンを取得する
  sudo cat /var/lib/rancher/k3s/server/token
  1. K3Sをインストールする。
curl -sfL https://get.k3s.io | K3S_URL="https://<Master Host Name>:6443" K3S_TOKEN="<token from above step>" sh -

付録

Kubectlのインストールと接続

WSLなどのクライアントになる環境で下記を実行

  1. バイナリのダウンロード
    下記を実行することでカレントディレクトリに最新のバイナリが取得される。
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
  1. コピー
    定位置に移動する
sudo mv kubectl /usr/local/bin/
  1. Kubeconfigの準備
    K3Sサーバ内で下記で内容を確認、いずれかの方法で保存先にコピーする。 less /etc/rancher/k3s/k3s.yaml クライアントマシン(WSL)で下記フォルダーを作成し、取得したファイルを配置する。 mkdir ~/.kube/ cp k3s.yaml ~/.kube/config 接続先アドレスを外向きアドレスに置換する sed -e 's/127.0.0.1/<マスターのアドレス(or VIP)>/g
  2. 確認
    kubectl get pod -A

k9sのインストール

下記から最新のtar.gzを取得して解凍
https://github.com/derailed/k9s/releases

所定の場所にコピー

sudo mv k9s /usr/local/bin/

k3sのマスターにインストール・実行するのであればKubeconfigをコピーする

cp /etc/rancher/k3s/k3s.yaml config

コメント

タイトルとURLをコピーしました