• Русский
  • Обновление с использованием стратегии 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:

      cat <<EOF | kubectl apply -f -
      apiVersion: sailoperator.io/v1
      kind: IstioCNI
      metadata:
        name: default
      spec:
        version: v1.26.3
        namespace: istio-cni
        values:
          cni:
            cniConfDir: /etc/cni/multus/net.d # /etc/cni/net.d in ACP 4.0
            excludeNamespaces:
              - istio-cni
              - kube-system
      EOF
    5. Разверните контрольную плоскость Istio, используя стратегию обновления InPlace. Следующая конфигурация создаёт ресурс Istio с именем default в пространстве имён istio-system:

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

      cat <<EOF | kubectl apply -f -
      apiVersion: sailoperator.io/v1
      kind: Istio
      metadata:
        name: default
      spec:
        namespace: istio-system
        version: v1.26.3
        updateStrategy:
          type: InPlace
      EOF
    6. Дождитесь готовности контрольной плоскости Istio, выполнив команду:

      kubectl wait --for condition=Ready istio/default --timeout=3m
    7. Настройте выполнение рабочих нагрузок приложения в кластере. Например, вы можете развернуть пример приложения bookinfo в пространстве имён bookinfo.

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

      kubectl create ns bookinfo

      b. Добавьте метку в пространство имён bookinfo для активации автоматической инъекции сайдкара:

      kubectl label namespace bookinfo istio-injection=enabled

      c. Разверните поды приложения bookinfo в пространстве имён bookinfo командой:

      kubectl -n bookinfo apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
    8. Проверьте ресурс 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.26.3   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.28.3, установите поле spec.version в v1.28.3, выполнив команду:

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

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

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

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

    2. Дождитесь готовности контрольной плоскости Istio, выполнив команду:

      kubectl wait --for condition=Ready istio/default --timeout=3m
    3. Убедитесь, что новая версия контрольной плоскости готова, выполнив команду:

      kubectl get istio

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

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

      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.28.3-asm-r0
    productpage-v1-f8fdd5649-xmxkt.bookinfo     Kubernetes     SYNCED (92s)     SYNCED (92s)     SYNCED (85s)     SYNCED (92s)     IGNORED     istiod-57559f96c4-v2h9g     1.28.3-asm-r0
    ratings-v1-ccf8bc48c-766tl.bookinfo         Kubernetes     SYNCED (93s)     SYNCED (93s)     SYNCED (85s)     SYNCED (93s)     IGNORED     istiod-57559f96c4-v2h9g     1.28.3-asm-r0
    reviews-v1-85dc746bfc-gsf6l.bookinfo        Kubernetes     SYNCED (92s)     SYNCED (92s)     SYNCED (85s)     SYNCED (92s)     IGNORED     istiod-57559f96c4-v2h9g     1.28.3-asm-r0
    reviews-v2-5bd759b4c5-nkb62.bookinfo        Kubernetes     SYNCED (93s)     SYNCED (93s)     SYNCED (85s)     SYNCED (93s)     IGNORED     istiod-57559f96c4-v2h9g     1.28.3-asm-r0
    reviews-v3-55d5b84fb9-wq9ds.bookinfo        Kubernetes     SYNCED (94s)     SYNCED (94s)     SYNCED (85s)     SYNCED (94s)     IGNORED     istiod-57559f96c4-v2h9g     1.28.3-asm-r0

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

    Удаление ресурсов обновления InPlace из среды разработки

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

    Процедура

    Выполните следующие команды для удаления всех компонентов Istio и примерных приложений:

    kubectl delete istio/default istiocni/default
    kubectl delete ns/bookinfo
    kubectl delete ns/istio-system ns/istio-cni