Оновлення за допомогою Helm
Скористайтесь цим посібником для оновлення та налаштування установки в режимі ambient, використовуючи Helm. Цей посібник передбачає, що ви вже виконали установку в режимі ambient за допомогою Helm з попередньою версією Istio.
Розуміння оновлень у режимі ambient
Усі оновлення Istio передбачають оновлення панелі управління, панелі даних та CRD Istio. Оскільки панель даних у режимі ambient розділена між двома компонентами, ztunnel та шлюзів (які включають waypoint), оновлення включають окремі кроки для цих компонентів. Оновлення панелі управління та CRD розглянуті тут коротко, але по суті є аналогічними процесу оновлення цих компонентів у режимі sidecar.
Як і в режимі sidecar, шлюзи можуть використовувати теґи ревізій для тонкого контролю за оновленнями (шлюзів), включаючи waypoint, з простими контролерами для відкочування до попередньої версії панелі правління Istio в будь-який момент. Однак, на відміну від режиму sidecar, ztunnel працює як DaemonSet, проксі на кожному вузлі, — це означає, що оновлення ztunnel мінімум вплине на весь вузол одночасно. Хоча це може бути прийнятним у багатьох випадках, застосунки з довготривалими TCP-зʼєднаннями можуть бути порушені. У таких випадках ми рекомендуємо використовувати ізоляцію вузлів і очищення перед оновленням ztunnel для конкретного вузла. Заради простоти цей документ продемонструє оновлення ztunnel на місці, що може спричинити короткочасний простій.
Попередні вимоги
Підготовка до оновлення
Перед оновленням Istio ми рекомендуємо завантажити нову версію istioctl та запустити istioctl x precheck
, щоб переконатися, що оновлення сумісне з вашим середовищем. Результат має виглядати приблизно так:
$ istioctl x precheck
✔ No issues found when checking the cluster. Istio is safe to install or upgrade!
To get started, check out <https://istio.io/latest/docs/setup/getting-started/>
Тепер оновіть репозиторій Helm:
$ helm repo update istio
Організуйте свої теґи та ревізії
Для безпечного оновлення mesh у режимі ambient ваші шлюзи та простори імен повинні використовувати мітку istio.io/rev
для вказання теґу ревізії, який контролює версію проксі, що виконується. Ми рекомендуємо розділити ваш операційний кластер на кілька теґів для організації вашого оновлення. Усі учасники одного теґу будуть оновлюватись одночасно, тому розумно розпочинати оновлення з найбільш низькоризикових застосунків. Ми не рекомендуємо використовувати ревізії безпосередньо через мітки для оновлень, оскільки цей процес може легко призвести до випадкового оновлення великої кількості проксі і його складно сегментувати. Щоб побачити, які теґи та ревізії ви використовуєте у вашому кластері, дивіться розділ про оновлення теґів.
Виберіть ім’я ревізії
Ревізії визначають унікальні екземпляри панелі управління Istio, дозволяючи запускати кілька окремих версій панелі управління одночасно в одному mesh.
Рекомендується, щоб ревізії залишалися незмінними, тобто після встановлення панелі управління з певною назвою ревізії встановлення не слід змінювати, а назву ревізії не слід повторно використовувати. Теґи, з іншого боку, є змінними покажчиками на ревізії. Це дозволяє оператору кластера виконувати оновлення панелі даних без необхідності змінювати будь-які мітки робочих навантажень, просто переміщуючи теґ з однієї ревізії на іншу. Всі панелі даних будуть підключатися лише до однієї панелі управління, вказану міткою istio.io/rev
(яка вказує або на ревізію, або на теґ), або стандартно, якщо мітка istio.io/rev
відсутня. Оновлення панелі даних складається з простої зміни панелі управління, на яку вона вказує, за допомогою модифікації міток або редагування теґів.
Оскільки ревізії призначені залишатися незмінними, ми рекомендуємо вибрати назву ревізії, яка відповідає версії Istio, яку ви встановлюєте, наприклад 1-22-1
. Окрім вибору нової назви ревізії, вам слід зазначити свою поточну назву ревізії. Ви можете знайти її, виконавши:
$ kubectl get mutatingwebhookconfigurations -l 'istio.io/rev,!istio.io/tag' -L istio\.io/rev
$ # Збережіть вашу ревізію та нову ревізію у змінних:
$ export REVISION=istio-1-22-1
$ export OLD_REVISION=istio-1-21-2
Оновлення панелі управління
Основні компоненти
Перш ніж розгортати нову версію панелі управління, необхідно оновити CRD, що охоплюють весь кластер:
$ helm upgrade istio-base istio/base -n istio-system
Панель управління istiod
Панель управління Istiod керує і налаштовує проксі, які маршрутизують трафік в межах mesh. Наступна команда встановить новий екземпляр панелі управління поряд з поточним, але не додасть нових шлюзів проксі або waypoints та не візьме на себе керування наявними проксі.
Якщо ви налаштували встановлення istiod, ви можете повторно використовувати файл values.yaml
з попередніх оновлень або встановлень, щоб зберегти панелі управління узгодженими.
$ helm upgrade istiod istio/istiod -n istio-system --wait
$ helm install istiod-"$REVISION" istio/istiod -n istio-system --set revision="$REVISION" --set profile=ambient --wait
CNI node agent
Агент вузла Istio CNI відповідає за виявлення podʼів, доданих до ambient mesh, інформування ztunnel про необхідність встановлення проксі-портів у доданих podʼах і налаштування перенаправлення трафіку в межах мережевого простору імен podʼа. Він не є частиною панелі даних або панелі управління.
CNI версії 1.x сумісний із панеллю управління версії 1.x+1 і 1.x. Це означає, що спочатку потрібно оновити панелі управління перед оновленням Istio CNI, якщо різниця між їхніми версіями не перевищує одну мінорну версію.
$ helm upgrade istio-cni istio/cni -n istio-system
Оновлення панелі даних
Ztunnel DaemonSet
Ztunnel DaemonSet є проксі-компонентом вузла. Ztunnel версії 1.x сумісний з панеллю управління версії 1.x+1 і 1.x. Це означає, що спочатку потрібно оновити панель управління перед оновленням ztunnel, якщо різниця між їхніми версіями не перевищує одну мінорну версію. Якщо ви раніше налаштовували встановлення ztunnel, ви можете повторно використати файл values.yaml
з попередніх оновлень або встановлень, щоб зберегти ваші панелі даних послідовним.
$ helm upgrade ztunnel istio/ztunnel -n istio-system --wait
$ helm upgrade ztunnel istio/ztunnel -n istio-system --set revision="$REVISION" --wait
Оновлення чарту розгорнутого вручну шлюзу (необовʼязково)
Gateway
, які були розгорнуті вручну, потрібно оновити індивідуально за допомогою Helm:
$ helm upgrade istio-ingress istio/gateway -n istio-ingress
Оновлення waypoints та шлюзів за допомогою теґів
Якщо ви дотримувалися найкращих практик, усі ваші шлюзи, робочі навантаження та простори імен використовують або стандартну версію (фактично теґ з назвою default
), або мітку istio.io/rev
зі значенням, встановленим у назву теґу. Тепер ви можете оновити все це до нової версії панелі даних Istio, перемістивши їх теґи, щоб вони вказували на нову версію, по черзі. Щоб переглянути всі теґи у вашому кластері, виконайте:
$ kubectl get mutatingwebhookconfigurations -l 'istio.io/tag' -L istio\.io/tag,istio\.io/rev
Для кожного теґу ви можете оновити теґ, виконавши наступну команду, замінивши $MYTAG
назвою вашого теґу, а $REVISION
назвою вашої версії:
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{$MYTAG}" --set revision="$REVISION" -n istio-system | kubectl apply -f -
Це оновить всі обʼєкти, що посилаються на цей теґ, за винятком тих, що використовують режим ручного розгортання шлюзу, які розглянуті нижче, і sidecar, які не використовуються в режимі оточення.
Рекомендується уважно стежити за станом справності застосунків, що використовують оновлені панелі даних, перед оновленням наступного теґу. Якщо ви виявите проблему, ви можете відкотити теґ, повернувши його до вказування на назву вашої старої версії:
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{$MYTAG}" --set revision="$OLD_REVISION" -n istio-system | kubectl apply -f -
Оновлення вручну розгорнутих шлюзів (необовʼязково)
Gateway
, які були розгорнуті вручну, потрібно оновити індивідуально за допомогою Helm:
$ helm upgrade istio-ingress istio/gateway -n istio-ingress
Видалення попередньої панелі управління
Якщо ви оновили всі компоненти панелі даних до нової ревізії панелі управління Istio і задоволені тим, що вам не потрібно виконувати відкат, ви можете видалити попередню ревізію панелі управління, виконавши:
$ helm delete istiod-"$OLD_REVISION" -n istio-system