RKEをUpgradeしてみた

今回はrkeのバージョンアップをおこなっていきます。


まずは現状のスナップショットを作成します。
```
rke etcd snapshot-save --config cluster.yml --name pre-upgrade-20221021
```
すると、`/opt/rke/etcd-snapshots/`配下にスナップショットが作成されます。

続いてサポートされているrkeのバージョンを確認します。
```
rke config --list-version --all
v1.18.10-rancher1-1
v1.17.13-rancher1-1
v1.19.3-rancher1-1
v1.16.15-rancher1-2
```

現状の利用バージョンを確認します。：
```
kubectl get nodes -o wide
NAME           STATUS   ROLES                      AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION   CONTAINER-RUNTIME
xx.xx.xxx.xx   Ready    controlplane,etcd,worker   165d   v1.19.3   172.31.44.161   <none>        Ubuntu 18.04.6 LTS   5.4.0-1086-aws   docker://19.3.15
```

rkeのバージョンは1.19.3みたいです。
さっきのリストを見る限り、`v1.19.3-rancher1-1`の方が新しいのでそれにUpgradeしてみます。
ということで`cluster.yml`を更新します。`kubernetes_version`を追記します。
追記したのが以下となります。
```
nodes:
  - address: xx.xx.xx.xx
    internal_address: 172.31.44.161
    user: ubuntu
    role: [controlplane,etcd,worker]
addon_job_timeout: 120
kubernetes_version: "v1.19.6-rancher1-1"　 ##ここが追記箇所
```
本当に初心者の設定ファイルという感じで全くオプションが設定されていませんね。
まぁ仕方ないでしょう。

これで準備は完了したので、ついにUpgradeしていきます。
コマンドは簡単、`rke up`を入力するだけです。

一通りのログがながれ、最後にこのログが流れたので成功したようですね。
> INFO[0124] Finished building Kubernetes cluster successfully

それでは、バージョンの確認を行います。
```
NAME           STATUS   ROLES                      AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION   CONTAINER-RUNTIME
xx.xx.xx.xx   Ready    controlplane,etcd,worker   165d   v1.19.6   172.31.44.161   <none>        Ubuntu 18.04.6 LTS   5.4.0-1086-aws   docker://19.3.15
```

バージョンが`v1.19.6`に変更されているので成功ですね。

ただ、この手順では`rke config --list-version --all`コマンドで出力されるバージョンにしかバージョン変更ができません。
一気にv.1.24とかにあげたかったんですが、どうすればいいのか。。。
rkeのドキュメントを確認する限り、`system_image`を設定するとあったんですが、どうもダウングレードに対応しているのかな、という感じで、指定してもうまくいきませんでした。

https://rancher.com/docs/rke/latest/en/upgrades/

----
#### 追記(2022/10/26)
上の手順ではリストに出たRKEのバージョンにしかupgradeができません。
しかし、それでは困る、ということでupgradeをしなければなりません。
それをするにはrkeコマンドラインツールのupgradeが必要になります。
では、まず、現状のバージョンを確認します。

```
rke -v
rke version v1.2.4
```

前回勘違いしていたのが、k8sのv1.24にupgradeしたかったのでrkeコマンドラインツールもv1.24をインストールしてしまいました。
RKEのバージョンはそこと連動しているわけではなく、今はv1.3台がリリースされているのでもっと最新のがあったんですよね。
古いrkeツールを利用していたので古いk8sバージョンしか使えなかったということになります。

ということでまずは古いRKEツールを削除します。

```
sudo rm -r /usr/local/bin/rke
```

そして再度rkeコマンドラインツールをインストールします。今回はv1.13.15をインストールします。
```
sudo wget -O /usr/local/bin/rke https://github.com/rancher/rke/releases/download/v1.3.15/rke_linux-amd64
```

実行権限を与え、バージョン確認を行います。
```
sudo chmod +x /usr/local/bin/rke
rke -v
rke version v1.3.15
```

正しくインストールされているので、このバージョンで扱えるk8sバージョンを確認します。
```
rke config --list-version --all
v1.20.15-rancher2-2
v1.19.16-rancher2-1
v1.22.13-rancher1-1
v1.24.4-rancher1-1
v1.18.20-rancher1-3
v1.23.10-rancher1-1
v1.21.14-rancher1-1
```

k8sの1.24が扱えるのでこちらを指定します。
後の手順は同じです。
バックアップをとって、cluster.ymlを編集してあげて、`rke up`を実行します。
処理が完了したのでバージョンを確認してみます。

```
kubectl get node -o wide
NAME           STATUS   ROLES                      AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION   CONTAINER-RUNTIME
xx.xx.xx.xx   Ready    controlplane,etcd,worker   170d   v1.24.4   172.31.44.161   <none>        Ubuntu 18.04.6 LTS   5.4.0-1088-aws   docker://19.3.15
```

バージョンがv1.24.4と表示されているので問題ないですね。これで目的達成です。

rkeのバージョンとk8sのバージョン対応についてはgitから確認してください。
https://github.com/rancher/rke/releases