Rancher 2.4 — это последняя версия Rancher, в которой вы можете обновлять кластер K3s и управлять им через пользовательский интерфейс Rancher.
K3s — это облегченный дистрибутив Kubernetes, с помощью которого вы можете настроить среду разработки Kubernetes за считанные минуты. Он очень подходит для производственных сценариев использования, в основном для устройств IoT и Edge.
В Rancher 2.4 вы можете импортировать кластеры K3s и управлять ими с помощью обновлений из самого Rancher. В этом руководстве мы увидим, как выполнить обновление в реальном времени на работающем кластере K3s.
Шаг 1: Создайте кластер K3s
Перед выполнением обновления нам необходимо запустить кластер K3s. В этой статье я начал с виртуальной машины CentOS, вы можете сделать это в любом облаке.
Войдите в виртуальную машину и выполните следующие команды:
**[root@demo3 ~]# curl -sfL [https://get.k3s.io](https://get.k3s.io) | INSTALL_K3S_VERSION="v1.0.1" sh -s -**
[INFO] Using v1.0.1 as release
[INFO] Downloading hash [https://github.com/rancher/k3s/releases/download/v1.0.1/sha256sum-amd64.txt](https://github.com/rancher/k3s/releases/download/v1.0.1/sha256sum-amd64.txt)
[INFO] Downloading binary [https://github.com/rancher/k3s/releases/download/v1.0.1/k3s](https://github.com/rancher/k3s/releases/download/v1.0.1/k3s)
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[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 from /etc/systemd/system/multi-user.target.wants/k3s.service to /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3sAbove will install k3s version
**[root@demo3 ~]# kubectl get nodes**
NAME STATUS ROLES AGE VERSION
demo3 Ready master 5m55s **v1.16.3-k3s.2**
Вы можете видеть, что на виртуальной машине у нас установлен Kubernetes v1.16.3.
Шаг 2: Установите Ранчер
Чтобы выполнить обновление пользовательского интерфейса Rancher, необходимо установить Rancher с помощью следующей команды:
**[root@demo3 ~]# sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
**Unable to find image 'rancher/rancher:latest' locally
Trying to pull repository docker.io/rancher/rancher ...
latest: Pulling from docker.io/rancher/rancher
5bed26d33875: Pull complete
f11b29a9c730: Pull complete
930bda195c84: Pull complete
78bf9a5ad49e: Pull complete
fdb587a45dfe: Pull complete
0c3f7647a659: Pull complete
02c5407ca821: Pull complete
ebc009758b56: Pull complete
57a6e40f0f6e: Pull complete
30a88d01aca6: Pull complete
76505b705d6f: Pull complete
e585ea16af8d: Pull complete
6b069694034e: Pull complete
8c5d309f94d1: Pull complete
8ec56f5fa6c2: Pull complete
75872eb736b7: Pull complete
e774fd043162: Pull complete
c76d81e7a658: Pull complete
49bf6b83af1c: Pull complete
Digest: sha256:248ddca1169e8a4e06babd50e8105cbba0a326f86ec4de3e38d61e8909ffdb4e
Status: Downloaded newer image for docker.io/rancher/rancher:latest
ef7f9a0d5bca831af19900a6ceafd30daca51e4f951295762cf7516e48d3d742
Шаг 3: Импортируйте кластер в Rancher
Откройте пользовательский интерфейс Rancher и нажмите следующую кнопку, чтобы импортировать кластер K3s:
Скопируйте последнюю команду и запустите ее на виртуальной машине с установленным K3s:
**[root@demo3 ~]# curl --insecure -sfL [https://185.136.232.236/v3/import/pxv5g7xswnnqkhl4dx7nrn8swndwshk9g8426lnldrvt7vjvfc2fgr.yaml](https://185.136.232.236/v3/import/pxv5g7xswnnqkhl4dx7nrn8swndwshk9g8426lnldrvt7vjvfc2fgr.yaml) | kubectl apply -f -**
clusterrole.rbac.authorization.k8s.io/proxy-clusterrole-kubeapiserver created
clusterrolebinding.rbac.authorization.k8s.io/proxy-role-binding-kubernetes-master created
namespace/cattle-system created
serviceaccount/cattle created
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding created
secret/cattle-credentials-d6e5b6d created
clusterrole.rbac.authorization.k8s.io/cattle-admin created
deployment.apps/cattle-cluster-agent created
daemonset.apps/cattle-node-agent created
Шаг 4: Выполните обновление
Нажмите на три маленькие точки и выберите [Редактировать]. Выберите последнюю версию Kubernetes и нажмите «Сохранить».
После нажатия кнопки «Сохранить» вы увидите, что статус кластера изменился с «Активный» на «Обновление».
Через некоторое время статус снова изменится на Active, и вы увидите, что кластер K3s обновлен до последней версии.
Всего за несколько кликов мы обновили импортированный кластер K3s до версии 1.17.4 непосредственно через пользовательский интерфейс Rancher.
Troubleshooting
После практики пользователи сообщества обнаружили, что кластер K3s долгое время находится в состоянии Upgrading. После воспроизведения локальной операции технического менеджера сообщества Rancher China предлагаются следующие решения:
K3s разделен на роли мастера и агента. После успешного запуска кластера K3s его можно импортировать на сервер Rancher для управления. Если сервер Rancher и мастер K3s находятся на одном узле, обновление версии K3s в пользовательском интерфейсе Rancher не удастся.
Также, по логике https://github.com/rancher/k3s-upgrade/blob/v1.18.4+k3s1/scripts/upgrade.sh#L15, при обновленииgrep
Эти два процесса являются K3s на главном сервере K3s и сервере Rancher, поэтому будет сообщено об ошибке.
Чтобы решить вышеуказанные проблемы, вам нужно сначала остановить сервер Rancher, дождаться успешного обновления K3, а затем запустить сервер Rancher.
В заключение
K3, выпущенный Rancher, легкий и простой в использовании, а благодаря поддержке Rancher 2.4 обновить кластер стало еще проще. Когда вы импортируете кластер K3s через пользовательский интерфейс Rancher, Rancher автоматически обнаружит и активирует опцию обновления кластера со списком доступных версий. С помощью этой функции вы можете обновить любой кластер K3s, независимо от того, является ли он самоуправляемым или размещенным в облаке.