少し前に実施したシングルノード構成の「オフライン環境へのK3sインストール」に、workerノードを追加する。
環境は引き続きインターネット接続のないオフライン環境。
手順はAir-Gap Installの通りで大丈夫。
構成 (再掲)
- ホストOS: Ubuntu 22.04.03 LTS
- K3s: v1.29.2
- プライベートコンテナレジストリ: ローカルのGitLab使用
- ネットワークはcontrol planeと同じサブネットにいて、control planeともプライベートレジストリとも直接疎通がある構成 (インターネットには接続できない)
root@k3s-offline2:~# ip r default via 172.29.0.1 dev eth0 proto static 172.29.0.0/24 dev eth0 proto kernel scope link src 172.29.0.78
control planeは以下
root@k3s-offline1:~# ip r default via 172.29.0.1 dev eth0 proto static 10.42.0.0/24 dev cni0 proto kernel scope link src 10.42.0.1 172.29.0.0/24 dev eth0 proto kernel scope link src 172.29.0.77
イメージの準備
これはcontrol planeを構築したときのものをそのまま使用。
プライベートレジストリのリダイレクト設定
これはcontrol planeノード同様に各ノードで実施。
以下の内容の/etc/rancher/k3s/registries.yaml
を作成する。
mirrors: docker.io: endpoint: - "https://gitlab.example.jp:25000" rewrite: "^rancher/(.*)": "zaki/images/$1" configs: "gitlab.example.jp:25000": tls: insecure_skip_verify: true
インストールスクリプトの配置
これもcontrol plane構築のものをそのまま使用。
構築対象ノードのどこかに配置しておく。
workerの台数が多い場合はIPリーチするwebサーバーを立てるのが楽かもしれない。(が、今回はローカル配置で実施)
実行バイナリの配置
同じくcontrol plane構築の(ry
追加するノードの/usr/local/bin/k3s
へ配置。
zaki@k3s-offline2:~$ sudo cp k3s /usr/local/bin/k3s zaki@k3s-offline2:~$ sudo chmod 755 /usr/local/bin/k3s zaki@k3s-offline2:~$ k3s --version k3s version v1.29.2+k3s1 (86f10213) go version go1.21.7
トークン確認
クラスターへ参加するためのトークンをcontrol planeノードで確認。
ここはオンラインの場合の手順と同様。
root@k3s-offline1:~# cat /var/lib/rancher/k3s/server/token
内容をworkerノードで環境変数あたりにセットしておく。
インストール
イメージ、バイナリ、インストールスクリプト、トークンの準備ができたら、以下のオプションを付与してインストールスクリプトを実行する。
INSTALL_K3S_SKIP_DOWNLOAD=true
(ダウンロード処理をskip / control planeと同様)K3S_URL=control planeのアドレス
(構築済みcontrol planeを指定 / オンライン時の手順と同様)K3S_TOKEN=上記で確認したトークン値
(クラスター参加用トークン / オンライン時の手順と同様)
zaki@k3s-offline2:~$ INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://172.29.0.77:6443 K3S_TOKEN=${K3S_TOKEN} ./install.sh [INFO] Skipping k3s download and verify [INFO] Skipping installation of SELinux RPM [INFO] Creating /usr/local/bin/kubectl symlink to k3s [INFO] Creating /usr/local/bin/crictl symlink to k3s [INFO] Creating /usr/local/bin/ctr symlink to k3s [INFO] Creating killall script /usr/local/bin/k3s-killall.sh [INFO] Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh [INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env [INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service [INFO] systemd: Enabling k3s-agent unit Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service. [INFO] systemd: Starting k3s-agent
比較的すぐ完了し、get node
でノードが追加されることを確認できる。
root@k3s-offline1:~# kubectl get node NAME STATUS ROLES AGE VERSION k3s-offline1 Ready control-plane,master 50d v1.29.2+k3s1 k3s-offline2 Ready <none> 4s v1.29.2+k3s1 root@k3s-offline1:~# kubectl get pod -A -o wide NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system helm-install-traefik-crd-xsblz 0/1 Completed 0 50d <none> k3s-offline1 <none> <none> kube-system helm-install-traefik-gvq48 0/1 Completed 1 50d <none> k3s-offline1 <none> <none> kube-system svclb-sample-http-4cda7872-mdm9q 1/1 Running 6 (25h ago) 50d 10.42.0.58 k3s-offline1 <none> <none> kube-system svclb-traefik-10a1b448-6h6c9 2/2 Running 12 (25h ago) 50d 10.42.0.55 k3s-offline1 <none> <none> kube-system traefik-f4564c4f4-gg6mv 1/1 Running 6 (25h ago) 50d 10.42.0.62 k3s-offline1 <none> <none> kube-system coredns-6799fbcd5-vvxrq 1/1 Running 4 (25h ago) 46d 10.42.0.59 k3s-offline1 <none> <none> kube-system local-path-provisioner-6c86858495-qznr7 1/1 Running 12 (25h ago) 50d 10.42.0.61 k3s-offline1 <none> <none> kube-system metrics-server-67c658944b-r655h 1/1 Running 12 (25h ago) 50d 10.42.0.60 k3s-offline1 <none> <none> sample-app sample-http-5cd4944c69-6knfd 1/1 Running 2 (46d ago) 50d 10.42.0.56 k3s-offline1 <none> <none> sample-app sample-http-5cd4944c69-l7xnb 1/1 Running 2 (46d ago) 50d 10.42.0.57 k3s-offline1 <none> <none> kube-system svclb-traefik-10a1b448-8vhz9 2/2 Running 0 4m5s 10.42.1.3 k3s-offline2 <none> <none> kube-system svclb-sample-http-4cda7872-f6jzs 1/1 Running 0 4m5s 10.42.1.2 k3s-offline2 <none> <none>
「オフライン構築」と「workerノードの追加」をミックスした手順なので、それぞれ実施経験があれば簡単に構築できる。