ドキュメント通りなので特に問題ないけどメモとして残してなかったので一応。
概要
ポイントは「インストールした時と同一のオプションで」再度インストールスクリプトを実行すればOK
たとえば使用するIPアドレスなどを指定してインストールした場合は、同じオプションでインストールすること。なので構築時はコマンドラインオプションよりは設定ファイルを使ってインストールする方が良かったりする。
コマンドラインオプションを指定してインストールした稼働中のK3sクラスターのオプションは、基本的には/etc/systemd/system/k3s.serviceを見れば、ExecStartに記載があるはずなのでそこで確認できる。
ExecStart=/usr/local/bin/k3s \
server \
'--write-kubeconfig-mode' \
'644' \
'--cluster-cidr' \
'172.28.0.0/16' \
'--service-cidr' \
'172.29.0.0/16' \
'--kube-controller-manager-arg=node-cidr-mask-size=24' \
'--kubelet-arg=max-pods=200'
例えば上記の通りであれば、(1.30.xから)1.31へのアップグレードのためのインストールオプションは以下。
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.31.4+k3s1 \ sh -s - \ --write-kubeconfig-mode 644 \ --cluster-cidr "172.28.0.0/16" \ --service-cidr "172.29.0.0/16" \ --kube-controller-manager-arg=node-cidr-mask-size=24 \ --kubelet-arg=max-pods=200
指定可能なバージョンは https://update.k3s.io/v1-release/channels のstableかlatestを見ればわかるが、ブラウザで開くのも面倒であればcurlする。
$ curl -s https://update.k3s.io/v1-release/channels | python -m json.tool | grep -m 1 latest
"latest": "v1.31.4+k3s1"
アップグレード
before
zaki@cloud-dev2:~$ kubectl get node NAME STATUS ROLES AGE VERSION rasp5-01 Ready control-plane,master 155d v1.30.5+k3s1
アップグレード
zaki@langres:~ $ curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.31.4+k3s1 sh -s - [INFO] Using v1.31.4+k3s1 as release [INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.31.4+k3s1/sha256sum-arm64.txt [INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.31.4+k3s1/k3s-arm64 [INFO] Verifying binary download [INFO] Installing k3s to /usr/local/bin/k3s [INFO] Finding available k3s-selinux versions sh: 416: [: unexpected operator [INFO] Skipping /usr/local/bin/kubectl symlink to k3s, already exists [INFO] Skipping /usr/local/bin/crictl symlink to k3s, already exists [INFO] Skipping /usr/local/bin/ctr symlink to k3s, already exists [INFO] Creating killall script /usr/local/bin/k3s-killall.sh [INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh [INFO] env: Creating environment file /etc/systemd/system/k3s.service.env [INFO] systemd: Creating service file /etc/systemd/system/k3s.service [INFO] systemd: Enabling k3s unit Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service. [INFO] systemd: Starting k3s
after
zaki@cloud-dev2:~$ kubectl get node NAME STATUS ROLES AGE VERSION rasp5-01 Ready control-plane,master 155d v1.31.4+k3s1
アップグレードパス的には、Kubernetesと同様。
K3sとしてもマイナーバージョンを飛び級でアップグレードはサポートされていない。(1.31.xにアップグレードするには1.30.xから)
クラウドサービスのマネージドKubernetesだと新しいバージョンのノードと入れ替わる形でアップグレードするが、K3sの場合はインプレースアップグレードとなり、ノードはそのまま、動いてるノードのバージョンが更新される形になる。
そういえばK3sのドキュメントっていつのまにか日本語版が公開されてたのね。助かる。