Rancher2サーバが落ちていて起動しない時の対処(2021年皐月)


初めに

こんにちは、今更な感じもありますが、困っている人がいるかもしれないのと、自分の備忘録を兼ねて本書を記します。ご覧になっていただき、読者のみなさまに感謝します。

対象の読者

以下のような方々のお役にたてれば幸いです。

  • rancher2を内部自己署名TLS証明書で動かしている
  • 導入してから1年以上アップデートしていない
  • 久しぶりに管理画面を見ようとしたらサーバが停止していた
  • 更新方法がよくわからない

原因

Rancher内臓のTLS証明書の期限が1年間であり、放置していると切れてしまい、証明書不正で動作不可となった。これは再起動しても改善されない。

課題

既存Rancher環境での緒設定を壊してしまうと、最初からさ設定のやり直しになるので、正規の手順に従って作業する必要がある。

対処方法

Rancher2サーバのデータ領域からTSL証明書を削除し、新バージョンにアップデートすれば、TLS証明書も新規作成されて動作するようになる、さらにどのバージョンからかは忘れたが、再起動か何かで古いTLS証明書を再作成する機能が加わったようだ。

Rancher2 update tls

以下の記事を参考にして、順次アップデートしていく。

以下のようにして、処理をすすめる。

1.サーバの確認

rancher2サーバのバージョンを確認。

docker ps -a

出力の一例

rancher2サーバのIMAGE(イメージ名)は、「rancher/rancher:TAG」となっていて、大抵は最後の行に現れる。下の例では「rancher/ranchre:stable」となっており、NAMES(名称)は「rancher2-server」となっている。なお、名称は起動時の指定で好きにつけられるので、別の名前になっていることもある。

CONTAINER ID        IMAGE                                                                                                      COMMAND                  CREATED             STATUS                        PORTS               NAMES
f4b50bdeed46        f29ece87a195                                                                                               "run.sh"                 13 seconds ago      Exited (1) 13 seconds ago                         k8s_cluster-register_cattle-cluster-agent-db695c944-nwrlp_cattle-system_bab5ca79-ad23-4644-9373-c818ba29e69d_1739
. . . . .
7063f22dd646        rancher/rancher-agent:v2.3.5                                                                               "run.sh -- share-r..."   14 months ago       Exited (0) 6 days ago                             share-mnt
9e2eee18a879        rancher/rancher:stable                                                                                     "entrypoint.sh"          14 months ago       Restarting (1) 30 hours ago                       rancher2-server

バージョン確認

TAGがstableだと、実際のバージョンが不明なので、「docker inspect」 にて調査する。

docker inspect 9e2eee18a879 | grep "CATTLE_SERVER_VERSION"
# 出力例
                "CATTLE_SERVER_VERSION=v2.3.5",

設定データの保存

「rancher2-server」コンテナを停止し、データを保存するコンテナ「rancher2-data」を作成する。

# stop rancher2-server
docker stop  rancher2-server
# create volume as rancher2-data
docker create --volumes-from rancher2-server --name rancher2-data rancher/rancher:stable

データ確認

busyboxコンテナを利用し作成したボリューム内のデータを確認する。

# exec sh with volume
docker run -it --volumes-from rancher2-data -v $PWD:/backup busybox sh
# inspect 上記「busybox」コンテナ内部にて
ls -altr /var/lib/rancher/
# 出力例
total 4
drwxr-xr-x    4 root     root            32 Jan 16  2020 k3s
drwx------    8 root     root           109 Jan 16  2020 management-state
-rw-r--r--    1 root     root             1 Jan 16  2020 .existing
drwxr-xr-x    4 root     root            37 Jan 16  2020 .kube
drwxr-xr-x    5 root     root            71 Jan 16  2020 .
drwxr-xr-x    3 root     root            21 Sep 24 16:21 ..

バックアップ

busyboxから戻り、バックアップしてからアップデートする。

# backup
docker run --volumes-from rancher2-data -v $PWD:/backup busybox tar cvzf /backup/rancher-data-backup-ORG.tgz -C /var/lib/ ./rancher

busyboxの中でバックアップする場合

すでにバインドマントはされているので、、、
# backup in busybox
tar cvzf /backup/rancher-data-backup-ORG-in.tgz -C /var/lib/ ./rancher

アップデート

方針としては、現バージョンから始め、「最後のパッチバージョン=>マイナーバージョンアップ」を繰り返す。rancher独自のTLS証明書を使う場合は、古いTLS証明書を削除してからアップデートする。以下、ポート設定などは標準と異なるので、注意されたし。

例)v2.3.5=>v2.3.10=>v2.4.0=>v2.4.15=>. . . . .

# 変数設定
RC2_VER=v2.3.10
TODT=$(date +%y%m%d-%H%M)

# backup and clear tls
docker run --volumes-from rancher2-data -v $PWD:/backup busybox tar cvzf /backup/tls-back.tgz -C /var/lib/rancher/k3s/server ./tls

docker run --volumes-from rancher2-data -v $PWD:/backup busybox sh -c 'rm -r /var/lib/rancher/k3s/server/tls/*'

# rename old server
docker rename rancher2-server rancher2-server-old

# get newly image
docker pull rancher/rancher:${RC2_VER}

# start with volume
docker run -d --volumes-from rancher2-data \
  --name=rancher2-server \
  --restart=unless-stopped \
  -p 81:80 -p 444:443 \
  --privileged \
  rancher/rancher:${RC2_VER}

動作確認

Rancher2の管理画面にアクセスして状況を確認する。
複数ノードでクラスタを組んでいる場合など、「cluster unavailable」が表示されて、クラスタ操作不能のトラブルとなる場合もある。

Rancher画面の、cluster -> edit で、
□etcd □controlplane □worker の3つを現状の設定に合わせてチェックして、
クラスタの中心ノードで、表示されたスクリプトを実行してみる。
自分の場合は、これでagentが実行され、環境が正常になった。

# スクリプトの一例
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.3.4 --server https://172.30.16.240:444 --token xhwwc2q9475pkz2tqlzzvrfs8mtltdkf2c8gk7gv8ztfhwzwch27n2 --ca-checksum 1aa4680ce04d83a774052634cc6fc23d0d6fe60bb59d5b9e058b40147d4fcdf8 --etcd --controlplane --worker

もし、まだ問題があるようなら、docker自体を再起動してみるとよい。起動中のコンテナも再起動になるので、サービス提供中の場合は、メンテの時間を確保してから注意して行うこと。

sudo systemctl restart docker

古いコンテナの削除

# remove old
docker rm -f rancher2-server-old

アップデートスクリプト

TLSの問題がない場合は、以下のようにしてアップデートを自動化できる。

RC2_VER=v2.4.0
# RC2_VER=v2.4.15
# RC2_VER=v2.5.0
# RC2_VER=v2.5.7
TODT=$(date +%y%m%d-%H%M)

# stop rancher2-server
docker stop  rancher2-server

# backup
docker run --volumes-from rancher2-data -v $PWD:/backup \
  busybox tar zcvf /backup/rancher-data-backup-bfr_${RC2_VER}-${TODT}.tgz -C /var/lib/ ./rancher

# rename old
docker rename rancher2-server rancher2-server-old

# get newly image
docker pull rancher/rancher:${RC2_VER}

# start with volume
docker run -d --volumes-from rancher2-data \
  --name=rancher2-server \
  --restart=unless-stopped \
  -p 81:80 -p 444:443 \
  --privileged \
  rancher/rancher:${RC2_VER}
# remove old
docker rm -f rancher2-server-old

Docker領域のお掃除

なんやかんやで領域を食いつぶしている場合に、以下のように掃除してみるとよいかも。

system prune

不要なデータを削除
注意:rancher2-dataなどのVolumeコンテナは、実行中のコンテナからマウントされていないと消されてしまう

docker system prune

builder prune

dockerバージョンが 1.39 以上の場合1

docker builder prune

log files

ログ削除

sudo sh -c "ls -al /var/lib/docker/containers/*/*-json.log"
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"

参考リンク: