Как обновить кластер Kubernetes на OpenStack Magnum

Как обновить кластер Kubernetes на OpenStack Magnum

 

Как я могу обновить кластер Kubernetes на базе OpenStack Magnum ?. Для управляемой службы Kubernetes, такой как служба оркестровки Magnum, последовательное обновление является важной функцией, которая может понадобиться пользователю. Основная зависимость для этой статьи — это рабочий кластер Kubernetes, развернутый в Openstack с использованием Magnum .

Обратите внимание, что обновление версии Kubernetes поддерживается только драйверами Fedora Atomic и Fedora CoreOS. Это связано с особенностями базовой ОС, способной противостоять сбоям в результате автоматических обновлений. В моем кластере в качестве базовой операционной системы используется Fedora CoreOS:

$ cat /etc/os-release
NAME=Fedora
VERSION="34.20210427.3.0 (CoreOS)"
ID=fedora
VERSION_ID=34
VERSION_CODENAME=""
PLATFORM_ID="platform:f34"
PRETTY_NAME="Fedora CoreOS 34.20210427.3.0"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:34"
HOME_URL="https://getfedora.org/coreos/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora-coreos/"
SUPPORT_URL="https://github.com/coreos/fedora-coreos-tracker/"
BUG_REPORT_URL="https://github.com/coreos/fedora-coreos-tracker/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
....

Kube_tag метка позволяет пользователю выбрать конкретный Kubernetes релиз на основе контейнерного тега для Образ Fedora CoreOS . Если этот ярлык не установлен, во время подготовки кластера используется выпуск Kubernetes по умолчанию для текущей версии Magnum. Вы можете посмотреть на Magnum и Kubernetes выпускают матрицу совместимости .

Шаг 1. Определите текущую версию Kubernetes.

Получите текущую версию Kubernetes:

$ kubectl version --short
Server Version: v1.18.2

Мы обновим наш кластер, выполнив следующие шаги:

  1. Создайте новый шаблон кластера Magnum Kubernetes — он должен быть похож на предыдущий шаблон, только метка kube_tag ссылается на более новую версию Kubernetes.
  2. Начать последовательное обновление кластера

Шаг 2. Создайте новый шаблон кластера с обновленной версией

Пройдите через Magnum и Kubernetes выпускают матрицу совместимости, чтобы иметь четкое представление о поддерживаемых версиях в вашей установке OpenStack Magnum. Поскольку моя установка основана на Victoria, я смогу обновить версию 1.18.2 до 1.18.9.

На странице выпусков Github есть все примечания к выпускам Kubernetes, если вам нужно получить более подробную информацию о вспомогательной версии.

Мой кластер был развернут из следующего шаблона:

# Cluster Template Creation
openstack coe cluster template create k8s-cluster-template-v1.18.2 \
   --image Fedora-CoreOS-34 \
   --keypair admin \
   --external-network public \
   --fixed-network private \
   --fixed-subnet private_subnet \
   --dns-nameserver 8.8.8.8 \
   --flavor m1.medium \
   --master-flavor m1.medium \
   --volume-driver cinder \
   --docker-volume-size 5 \
   --network-driver calico \
   --docker-storage-driver overlay2 \
   --coe kubernetes \
   --labels kube_tag=v1.18.2

# Initial Cluster Creation
openstack coe cluster create k8s-cluster-02 \
    --cluster-template k8s-cluster-template-v1.18.2 \
    --master-count 1 \
    --node-count 1

Убедитесь, что созданный кластер завершен и находится в работоспособном состоянии, прежде чем продолжить обновление:

$ openstack coe cluster list  -f json
[
  {
    "uuid": "48eb36b9-7f8b-4442-8637-bebcf078ca8b",
    "name": "k8s-cluster-01",
    "keypair": "admin",
    "node_count": 2,
    "master_count": 1,
    "status": "CREATE_COMPLETE",
    "health_status": "HEALTHY"
  },
  {
    "uuid": "e5ebf8aa-38f0-4082-a665-5bdb4f4769f9",
    "name": "k8s-cluster-02",
    "keypair": "admin",
    "node_count": 1,
    "master_count": 1,
    "status": "CREATE_COMPLETE",
    "health_status": "HEALTHY"
  }
]

Создайте новый шаблон кластера с обновленной версией. Моя такая, как показано ниже:

openstack coe cluster template create k8s-cluster-template-v1.18.9 \
   --image Fedora-CoreOS-34 \
   --keypair admin \
   --external-network public \
   --fixed-network private \
   --fixed-subnet private_subnet \
   --dns-nameserver 8.8.8.8 \
   --flavor m1.medium \
   --master-flavor m1.medium \
   --volume-driver cinder \
   --docker-volume-size 5 \
   --network-driver calico \
   --docker-storage-driver overlay2 \
   --coe kubernetes \
   --labels kube_tag=v1.18.9

Подтвердите создание успешно:

$ openstack coe cluster template list -f json
openstack coe cluster template list -f json
[
  {
    "uuid": "b05dcb03-07a7-4b66-beee-42383ff16e9b",
    "name": "k8s-cluster-template"
  },
  {
    "uuid": "77cc9112-b7ba-4531-9be5-6923528cd0eb",
    "name": "k8s-cluster-template-v1.18.2"
  },
  {
    "uuid": "cc33f457-866a-440f-ac78-6c3be713ef73",
    "name": "k8s-cluster-template-v1.18.9"
  }
]

Ключевые примечания:

  • Самая высокая версия, до которой вы можете выполнить обновление в OpenStack Victoria и ниже, — это 1.18.9. Это потому , что официальные изображения Hyperkube было прекращено из- за  kube_tag  больше , чем 1.18.x . Невозможно передать метку, которая позволяет пользователям указывать настраиваемый префикс для источника контейнера Hyperkube.
  • Если вы используете OpenStack Wallaby, вы можете добавить метку hyperkube_prefix, чтобы указать настраиваемый префикс для источника контейнера Hyperkube.
#docker.io/rancher/
#docker.io/kubesphere/hyperkube
#Example:
--labels kube_tag=v1.21.1,hyperkube_prefix=docker.io/rancher/

#Checking available tags
sudo podman image search docker.io/rancher/hyperkube --list-tags --limit 1000

Вы также можете вытащить, пометить и загрузить в свой реестр или docker.io

#Examples
## Search available tags for particular release
podman image search docker.io/rancher/hyperkube --list-tags --limit 1000 | grep 1.21

# Pull
podman pull docker.io/rancher/hyperkube:v1.21.1-rancher1

# Login to docker.io
$ podman login docker.io
Username: jmutai
Password:
Login Succeeded!

# Tag image
$ podman tag docker.io/rancher/hyperkube:v1.21.1-rancher1 docker.io/jmutai/hyperkube:v1.21.1

# Push image to registry
$ podman push docker.io/jmutai/hyperkube:v1.21.1

# I can the use the labels below in the template
--labels kube_tag=v1.21.1,hyperkube_prefix=docker.io/jmutai/

Шаг 3. Обновите кластер Kubernetes с помощью нового шаблона

Выполните следующую команду, чтобы запустить последовательное обновление для версии Kubernetes:

$ openstack coe cluster upgrade <cluster ID> <new cluster template ID>

Пример:

$ openstack coe cluster upgrade k8s-cluster-02 k8s-cluster-template-v1.18.9
Request to upgrade cluster k8s-cluster-01 has been accepted.

Статус должен показывать, что идет обновление.

$ openstack coe cluster list --column name  --column status --column health_status
+----------------+--------------------+---------------+
| name           | status             | health_status |
+----------------+--------------------+---------------+
| k8s-cluster-02 | UPDATE_IN_PROGRESS | UNHEALTHY     |
+----------------+--------------------+---------------+

Проверьте статус кластера после завершения обновления:

$ openstack coe cluster list --column name  --column status --column health_status
+----------------+-----------------+---------------+
| name           | status          | health_status |
+----------------+-----------------+---------------+
| k8s-cluster-01 | CREATE_COMPLETE | HEALTHY       |
| k8s-cluster-02 | UPDATE_COMPLETE | HEALTHY       |
+----------------+-----------------+---------------+

Скачиваем kubeconfig и подтверждаем статус:

$ mkdir k8s-cluster-02 
$ openstack coe cluster config --dir ./k8s-cluster-02 k8s-cluster-02 --force

Проверьте версию Kubernetes:

$ export KUBECONFIG=./k8s-cluster-02/config
$ kubectl version --short
Client Version: v1.21.1
Server Version: v1.18.9

Пример обновления до версии 1.21.1 :

$ kubectl version --short
Client Version: v1.21.1
Server Version: v1.21.1

$ kubectl get nodes
NAME                                   STATUS   ROLES    AGE   VERSION
k8s-cluster-02-soooe6tdv773-master-0   Ready    master   10h   v1.21.1
k8s-cluster-02-soooe6tdv773-node-0     Ready    <none>   10h   v1.21.1
k8s-cluster-02-soooe6tdv773-node-1     Ready    <none>   10h   v1.21.1
k8s-cluster-02-soooe6tdv773-node-2     Ready    <none>   10h   v1.21.1

Это подтверждает, что обновление Kubernetes Cluster на OpenStack Magnum прошло успешно.