Rancher で構築した kubernetes クラスタのアップグレード手順
[履歴] [最終更新] (2019/10/31 00:03:45)
ここは
モノづくり総合プラットフォーム。記事の一部は有料設定にして公開できます。 詳しくはこちらをクリック📝
最近の投稿
注目の記事

概要

RancherOS 等、docker が使える何らかの OS で Rancher によって構築した kubernetes クラスタのアップグレードを行うためには、以下のようにします。

v2.1.5 の Rancher で構築した k8s クラスタに存在する脆弱性 CVE-2019-11253 への対応がなされた v2.3.2 に更新したい場合などに必要になります。

検証のための kubernetes クラスタを構築

検証のために v2.1.5 で古いバージョンの kubernetes クラスタを構築します。

docker run --restart=unless-stopped --name=rancher -p 8443:443 rancher/rancher:v2.1.5

https://localhost:8443

Uploaded Image

バージョン 1.11 の k8s クラスタが構築されました。

# Run kubectl commands inside here
# e.g. kubectl get all
> kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.5", GitCommit:"32ac1c9073b132b8ba18aa830f46b77dcceb0723", GitTreeState:"clean", BuildDate:"2018-06-21T11:46:00Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.6", GitCommit:"b1d75deca493a24a2f87eb1efde1a569e52fc8d9", GitTreeState:"clean", BuildDate:"2018-12-16T04:30:10Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}

検証のために Deployment を一つだけ作成しておきます。

kubectl run mydeployment --image=nginx
kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
mydeployment-65b9f8795d-7vqqj   1/1       Running   0          1m

Rancher を停止してバックアップを作成

こちらのページの手順にしたがって更新します。Rancher を停止します。

docker stop rancher

/var/lib/rancher ディレクトリのバックアップを作成します。

docker create --volumes-from rancher --name rancher-data rancher/rancher:v2.1.5
docker run --volumes-from rancher-data -v $PWD:/backup busybox tar zcvf /backup/rancher-data-backup-v2.1.5-20191030.tar.gz /var/lib/rancher

du -h rancher-data-backup-v2.1.5-20191030.tar.gz
16M     rancher-data-backup-v2.1.5-20191030.tar.gz

docker rm -f rancher-data

新しいバージョンの Rancher を作成

バックアップした /var/lib/rancher をマウントして、新しいバージョン v2.3.2 の Rancher を作成します。

tar zxvf rancher-data-backup-v2.1.5-20191030.tar.gz

docker run --restart=unless-stopped --name=rancher-v2.3.2 -p 8443:443 \
  -v $PWD/var/lib/rancher:/var/lib/rancher \
  rancher/rancher:v2.3.2

stop してある rancher コンテナとの port 8443 の競合は発生しません。rancher のバージョンとコンテナ名以外は変更しないようにします。ログインして左下のバージョンが v2.3.2 になっていることを確認します。

Uploaded Image

古いコンテナはホストマシンの再起動時に問題になる (--restart=unless-stopped) ため削除します。

docker rm -f rancher

kubernetes クラスタの更新

Rancher のバージョンが新しくなったため、利用できる kubernetes のバージョンも新しくなっています。クラスタの Edit を選びます。

Uploaded Image

新しいバージョンを選択して Save します。

Uploaded Image

更新が始まるためしばらく待ちます。時間がかかります。

Uploaded Image

バージョン 1.16 に更新されました。

# Run kubectl commands inside here
# e.g. kubectl get all
> kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.1", GitCommit:"d647ddbd755faf07169599a625faf302ffc34458", GitTreeState:"clean", BuildDate:"2019-10-02T17:01:15Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:09:08Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}

Deployment は以前のままです。

> kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
mydeployment-65b9f8795d-7vqqj   1/1     Running   1          25m

rancher-agent のバージョンは別途更新します。

関連ページ