RKE2の鯖のホストIPアドレスを変えて苦労した話

メモ
この記事は約6分で読めます。

先日サーバーラックの引っ越しを行い機材の差し替えを行いました。

そこで一緒にサーバーのIP変更をしたら面倒いことになった話

対象サーバー

Ubuntu 24.04をベースにしたRancher経由でインストールしたk8sクラスタです。

RKE2でエージェントをインストールをしたのでお手軽環境で起動しました。

root@yume:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
root@yume:~# uname -a
Linux yume 5.15.0-156-generic #166-Ubuntu SMP Sat Aug 9 00:02:46 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
root@yume:~# rke2 --version
rke2 version v1.30.9+rke2r1 (bfd23524f32a4d9fa6f19ab58a2d47572e56f813)
go version go1.22.10 X:boringcrypto
root@yume:~#

難点はk8sクラスタを一台のホストで運用していた点でしょうか。

変更点

ネットワークのセグメントを良い加減揃えようと思いホストマシンは192.168.0.0/24でしたが172.16.0.0/24に変更しました。

ホストIPはnetplanで変えるだけなので簡単ですね

RKE2/k8s

こいつが難題でRKE2サーバーが起動できなくなりました。

Rancher上でも接続を確認できない状態です。

対応

/etc/rancher/rke2/config.yaml

でまず新しいNodeIPを通知します

node-ip: 172.16.1.33

このまま再起動しても適応できないのでetcdの内容を書き換えます。

Rancher/RKE2の場合etcdctlがインストールされていないので手動で入れます。

ETCD_VER=v3.6.5

# choose either URL
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GOOGLE_URL}

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1 --no-same-owner
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

/tmp/etcd-download-test/etcdctl version

インストールしたetcdctlを用いて書き換えます。

root@yume:/tmp/etcd-download-test# ETCDCTL_API=3 ./etcdctl   --endpoints=https://127.0.0.1:2379   --cacert="$CACERT" --cert="$CERT" --key="$KEY"   member list
{"level":"warn","ts":"2025-10-08T15:18:00.618988Z","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
d208df3aa033ed05, started, -d0ab3723, https://192.168.0.33:2380, https://172.16.1.33:2379, false
root@yume:/tmp/etcd-download-test#
root@yume:/tmp/etcd-download-test# export MEMBER_ID="d208df3aa033ed05"
root@yume:/tmp/etcd-download-test# ETCDCTL_API=3 ./etcdctl   --endpoints=https://127.0.0.1:2379   --cacert="$CACERT" --cert="$CERT" --key="$KEY"   member update "$MEMBER_ID" --peer-urls="https://172.16.1.33:2380"
{"level":"warn","ts":"2025-10-08T15:18:17.541287Z","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
Member d208df3aa033ed05 updated in cluster a9ab719b19efb6d7
root@yume:/tmp/etcd-download-test#
root@yume:/tmp/etcd-download-test# ETCDCTL_API=3 ./etcdctl   --endpoints=https://127.0.0.1:2379   --cacert="$CACERT" --cert="$CERT" --key="$KEY"   member list
{"level":"warn","ts":"2025-10-08T15:18:22.532591Z","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
d208df3aa033ed05, started, -d0ab3723, https://172.16.1.33:2380, https://172.16.1.33:2379, false
root@yume:/tmp/etcd-download-test#

最後に(めんどくさいので)再起動するとノードが接続できるようになります。ヤター

ただし、クラスターマネジメントのInternal IPは変わりませんでした。(こっちはRancherのDBか?)

そもそも

このノードはハードウェア的な制約でControlPlane/Wokerを合計1台の構成で作りました。

根本的にこれが問題で少なくともControlPlaneを分けておくとかしておくべきでした。

そうすれば機材をローテーションする、drawinしていけば解決しそうですね。

参考

Releases · etcd-io/etcd
Distributed reliable key-value store for the most critical data of a distributed system - etcd-io/etcd

コメント