先日サーバーラックの引っ越しを行い機材の差し替えを行いました。
そこで一緒にサーバーの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





コメント