Обновление с использованием стратегии InPlace

Стратегия обновления InPlace запускает только одну ревизию контрольной плоскости за раз. Во время обновления все рабочие нагрузки сразу подключаются к новой версии контрольной плоскости. Чтобы сохранить совместимость между сайдкарами и контрольной плоскостью, можно обновлять только одну минорную версию за раз.

Стратегия InPlace обновляет и перезапускает существующую контрольную плоскость Istio на месте. В процессе обновления существует только один экземпляр контрольной плоскости, что исключает необходимость перемещения рабочих нагрузок на новый экземпляр контрольной плоскости. Для завершения обновления перезапустите рабочие нагрузки приложения и шлюзы, чтобы обновить прокси Envoy.

Хотя стратегия InPlace обеспечивает простоту и эффективность, существует небольшая вероятность прерывания трафика приложения, если под рабочей нагрузки обновляется, перезапускается или масштабируется во время перезапуска контрольной плоскости. Вы можете снизить этот риск, запуская несколько реплик контрольной плоскости Istio (istiod).

Содержание

Выбор стратегии InPlace

Чтобы выбрать стратегию InPlace, установите значение spec.updateStrategy.type в ресурсе Istio в InPlace.

Пример спецификации для выбора стратегии обновления InPlace

kind: Istio
spec:
  updateStrategy:
    type: InPlace

Вы можете задать это значение при создании ресурса или изменить его позже. Если вы редактируете ресурс после создания, внесите изменение до обновления контрольной плоскости Istio.

Установка с использованием стратегии обновления InPlace

Вы можете установить контрольную плоскость Istio, Istio CNI и демонстрационное приложение Bookinfo, используя стратегию обновления InPlace.

NOTE

Следующий раздел поможет понять процесс обновления. Вы можете пропустить эту установку, если в кластере уже развернута Istio.

Процедура

  1. Создайте пространства имён istio-cni и istio-system, выполнив следующие команды:

    kubectl create ns istio-cni
    kubectl create ns istio-system
  2. Подключите рабочие нагрузки к контрольной плоскости, развернутой с использованием стратегии InPlace:

    • Пометьте пространство имён для автоматического включения всех рабочих нагрузок, выполнив команду:

      kubectl label namespace <namespace_name> istio.io/rev=<revision_name>
    • Примените метку ревизии к отдельным рабочим нагрузкам, изменив шаблон пода в ресурсе Deployment. Например:

      apiVersion: apps/v1
      kind: Deployment
      spec:
        template:
          metadata:
            labels:
              istio.io/rev: <revision_name>
  3. Если имя ревизии — default, подключите рабочие нагрузки к ревизии, выполнив команду. В следующем примере пространство имён помечается меткой istio-injection: enabled.

    kubectl label namespace <namespace_name> istio-injection=enabled
  4. Установите плагин Istio CNI нужной версии. В следующем примере создаётся ресурс IstioCNI с именем default в пространстве имён istio-cni:

    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    metadata:
      name: default
    spec:
      version: v1.24.6
      namespace: istio-cni
      values:
        cni:
          cniConfDir: /etc/cni/multus/net.d # /etc/cni/net.d в ACP 4.0
          excludeNamespaces:
            - istio-cni
            - kube-system
  5. Разверните контрольную плоскость Istio с использованием стратегии обновления InPlace. В следующем примере создаётся ресурс Istio с именем default в пространстве имён istio-system:

    Пример конфигурации

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      namespace: istio-system
      version: v1.24.6
      updateStrategy:
        type: InPlace
  6. Настройте рабочие нагрузки приложения для запуска в кластере. Например, вы можете развернуть демонстрационное приложение bookinfo в пространстве имён bookinfo.

    1. Создайте пространство имён bookinfo командой:

      kubectl create ns bookinfo
    2. Примените метку к пространству имён bookinfo для активации автоматической инъекции сайдкара. Используйте команду:

      kubectl label namespace bookinfo istio-injection=enabled
    3. Разверните поды приложения bookinfo в пространстве имён bookinfo, выполнив команду:

      kubectl -n bookinfo apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
  7. Проверьте ресурс Istio с помощью команды:

    kubectl get istio -n istio-system

    Пример вывода

    NAME      NAMESPACE      PROFILE   REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
    default   istio-system             1           1       1        default           Healthy   v1.24.6   6m3s

    Значение 1 в столбце IN USE означает, что ресурс IstioRevision используется как меткой на пространстве имён, так и внедрёнными прокси сайдкаров.

Обновление контрольной плоскости Istio со стратегией InPlace

При обновлении Istio с использованием стратегии InPlace можно увеличивать версию только на одну минорную версию за раз. Чтобы обновиться более чем на одну минорную версию, необходимо увеличивать версию и перезапускать рабочие нагрузки после каждого обновления. Перезапуск рабочих нагрузок гарантирует совместимость между версиями сайдкара и контрольной плоскости. Процесс обновления завершается после перезапуска всех рабочих нагрузок.

Предварительные условия

  • Вы вошли в веб-консоль Alauda Container Platform с правами cluster-admin.
  • Вы установили плагин Alauda Container Platform Networking для Multus, kube-ovn должен быть версии v4.1.5 или выше.
  • Вы установили оператор Alauda Service Mesh v2 и развернули Istio.
  • На локальной машине установлен istioctl.
  • Контрольная плоскость Istio настроена на использование стратегии обновления InPlace. В этом примере ресурс Istio с именем default развернут в пространстве имён istio-system.
  • Плагин Istio CNI установлен нужной версии. В этом примере ресурс IstioCNI с именем default развернут в пространстве имён istio-cni.
  • Пространство имён bookinfo помечено для включения инъекции сайдкара.
  • В кластере запущены рабочие нагрузки приложения. В этом примере приложение bookinfo развернуто в пространстве имён bookinfo.

Процедура

  1. Измените версию в ресурсе Istio. Например, чтобы обновиться до Istio 1.26.3, установите поле spec.version в v1.26.3, выполнив команду:

    kubectl patch istio default --type='merge' -p '{"spec":{"version":"v1.26.3"}}'

    Обновление версии в CR Istio

    kind: Istio
    spec:
      version: v1.26.3
      updateStrategy:
        type: InPlace

    Оператор Service Mesh v2 развернёт новую версию контрольной плоскости, которая заменит старую. Сайдкары автоматически переподключатся к новой контрольной плоскости.

  2. Убедитесь, что новая версия контрольной плоскости готова, выполнив команду:

    kubectl get istio

    Пример вывода

    NAME      NAMESPACE      PROFILE   REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
    default   istio-system             1           1       1        default           Healthy   v1.26.3   18m5s
  3. Перезапустите рабочие нагрузки приложения, чтобы внедрить новую версию сайдкара, выполнив команду:

    kubectl rollout restart deployment -n bookinfo

Проверка

Проверьте, что новая версия сайдкара запущена, выполнив команду:

istioctl proxy-status

Пример вывода

NAME                                        CLUSTER        CDS              LDS              EDS              RDS              ECDS        ISTIOD                      VERSION
details-v1-5c89dbb599-4t927.bookinfo        Kubernetes     SYNCED (92s)     SYNCED (92s)     SYNCED (85s)     SYNCED (92s)     IGNORED     istiod-57559f96c4-v2h9g     1.26.3-asm-r0
productpage-v1-f8fdd5649-xmxkt.bookinfo     Kubernetes     SYNCED (92s)     SYNCED (92s)     SYNCED (85s)     SYNCED (92s)     IGNORED     istiod-57559f96c4-v2h9g     1.26.3-asm-r0
ratings-v1-ccf8bc48c-766tl.bookinfo         Kubernetes     SYNCED (93s)     SYNCED (93s)     SYNCED (85s)     SYNCED (93s)     IGNORED     istiod-57559f96c4-v2h9g     1.26.3-asm-r0
reviews-v1-85dc746bfc-gsf6l.bookinfo        Kubernetes     SYNCED (92s)     SYNCED (92s)     SYNCED (85s)     SYNCED (92s)     IGNORED     istiod-57559f96c4-v2h9g     1.26.3-asm-r0
reviews-v2-5bd759b4c5-nkb62.bookinfo        Kubernetes     SYNCED (93s)     SYNCED (93s)     SYNCED (85s)     SYNCED (93s)     IGNORED     istiod-57559f96c4-v2h9g     1.26.3-asm-r0
reviews-v3-55d5b84fb9-wq9ds.bookinfo        Kubernetes     SYNCED (94s)     SYNCED (94s)     SYNCED (85s)     SYNCED (94s)     IGNORED     istiod-57559f96c4-v2h9g     1.26.3-asm-r0

Столбец VERSION должен соответствовать новой версии контрольной плоскости.