• Русский
  • Обновление с использованием стратегии InPlace

    Стратегия обновления InPlace запускает только одну revision control plane одновременно. Во время обновления все workload немедленно подключаются к новой версии control plane. Чтобы поддерживать совместимость между sidecar и control plane, вы можете выполнять обновление только на одну minor-версию за раз.

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

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

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

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

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

    kind: Istio
    spec:
      updateStrategy:
        type: InPlace

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

    Чтобы минимизировать прерывание трафика во время обновления, вы можете запустить Istio control plane в режиме High Availability (HA), который требует дополнительной настройки в ресурсе Istio. Дополнительные сведения см. в разделе Istio High Availability.

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

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

    NOTE

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

    При использовании стратегии InPlace ресурс IstioRevision, который создает Alauda Service Mesh v2 Operator, всегда имеет то же имя, что и родительский ресурс Istio.

    Процедура

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

      kubectl create ns istio-cni
      kubectl create ns istio-system
    2. Привяжите workload к control plane, развернутому с использованием стратегии InPlace:

      • Присвойте namespace label, чтобы автоматически включить все workload, выполнив следующую команду:

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

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

      kubectl label namespace <namespace_name> istio-injection=enabled
    4. Установите Istio CNI plugin с требуемой версией. Следующий пример конфигурации создает ресурс IstioCNI с именем default в namespace 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 control plane с использованием стратегии обновления InPlace. Следующий пример конфигурации создает ресурс Istio с именем default в namespace 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 control plane будет готов, выполнив следующую команду:

      kubectl wait --for condition=Ready istio/default --timeout=3m
    7. Настройте application workload для выполнения в кластере. Например, вы можете развернуть sample application bookinfo в namespace bookinfo.

      a. Создайте namespace bookinfo с помощью следующей команды:

      kubectl create ns bookinfo

      b. Примените label к namespace bookinfo, чтобы включить автоматическую инъекцию sidecar. Используйте следующую команду:

      kubectl label namespace bookinfo istio-injection=enabled

      c. Разверните application pods bookinfo в namespace bookinfo, выполнив эту команду:

      kubectl -n bookinfo apply -f https://raw.githubusercontent.com/alauda-mesh/istio/refs/heads/istio-1.28/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 ссылаются и label namespace, и внедренные sidecar proxies.

    Обновление Istio control plane со стратегией InPlace

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

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

    • Вы вошли в web console Alauda Container Platform как cluster-admin.
    • Вы установили плагин Alauda Container Platform Networking for Multus, а версия kube-ovn должна быть v4.1.5 или более поздней.
    • Вы развернули Istio и обновили Alauda Service Mesh v2 Operator до версии, которая предоставляет новую целевую версию Istio. Дополнительные сведения см. в разделе Понимание обновлений и каналов Operator.
    • Вы установили istioctl на локальной машине.
    • Вы настроили Istio control plane на использование стратегии обновления InPlace. В этом примере ресурс Istio с именем default развернут в namespace istio-system.
    • Вы установили Istio CNI plugin с требуемой версией. В этом примере ресурс IstioCNI с именем default развернут в namespace istio-cni.
    • Вы применили label к namespace bookinfo, чтобы включить инъекцию sidecar.
    • В кластере запущены application workload. В этом примере приложение bookinfo развернуто в namespace bookinfo.

    Процедура

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

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

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

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

      Service Mesh v2 Operator развертывает новую версию control plane, которая заменяет старую версию control plane. Sidecar автоматически переподключаются к новому control plane.

    2. Дождитесь, пока Istio control plane будет готов, выполнив следующую команду:

      kubectl wait --for condition=Ready istio/default --timeout=3m
    3. Подтвердите, что новая версия control plane готова, выполнив следующую команду:

      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.6   18m5s
    4. Обновите Istio CNI plugin до той же версии, что и control plane. Ресурс IstioCNI обновляется независимо от ресурса Istio, поэтому изменение версии control plane не обновляет CNI plugin автоматически. Подробные шаги см. в разделе Процесс обновления Istio CNI.

    5. Перезапустите application workload, чтобы была внедрена новая версия sidecar, выполнив следующую команду:

      kubectl rollout restart deployment -n bookinfo

    Проверка

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

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

    Значение в столбце VERSION должно соответствовать новой версии control plane.

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

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

    Процедура

    Выполните следующие команды, чтобы удалить все компоненты Istio и sample applications:

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