RancherOS 等、docker が使える何らかの OS で Rancher によって構築した kubernetes クラスタのアップグレードを行うためには、以下のようにします。
v2.1.5 の Rancher で構築した k8s クラスタに存在する脆弱性 CVE-2019-11253 への対応がなされた v2.3.2 に更新したい場合などに必要になります。
検証のために v2.1.5
で古いバージョンの kubernetes クラスタを構築します。
docker run --restart=unless-stopped --name=rancher -p 8443:443 rancher/rancher:v2.1.5
バージョン 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 を停止します。
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
バックアップした /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 になっていることを確認します。
古いコンテナはホストマシンの再起動時に問題になる (--restart=unless-stopped
) ため削除します。
docker rm -f rancher
Rancher のバージョンが新しくなったため、利用できる kubernetes のバージョンも新しくなっています。クラスタの Edit を選びます。
新しいバージョンを選択して Save します。
更新が始まるためしばらく待ちます。時間がかかります。
バージョン 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 のバージョンは別途更新します。