安装 Alauda Service Mesh

安装 Alauda Service Mesh 包含四个主要部分:

  • 安装 Alauda Service Mesh v2 Operator
  • 部署 Istio CNI 插件
  • 部署 Istio 控制平面
WARNING

请勿在同一 Kubernetes 集群中同时安装 Alauda Service Mesh 和 Alauda Service Mesh v2,否则可能导致功能冲突。

迁移指南将在未来版本中提供。

使用 Alauda Service Mesh v2 Operator 部署 Istio

要使用 Alauda Service Mesh v2 Operator 部署 Istio,需要创建 Istio 资源。 Operator 随后会创建 IstioRevision 资源,表示 Istio 控制平面的不同版本修订。 Istio 控制平面将基于这些 IstioRevision 资源进行部署。

如果 Istio 资源的更新策略设置为 RevisionBased,Operator 可能会创建额外的 IstioRevision 资源来管理控制平面升级。

安装 Alauda Service Mesh v2 Operator

通过 Web 控制台安装

前提条件

  • 已上传 Alauda Service Mesh v2。
  • 您已以 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
  • 已安装 Alauda Container Platform Networking for Multus 插件,且 kube-ovn 版本为 4.1.5 或更高。

操作步骤

  1. 在 Alauda Container Platform Web 控制台中,导航至 Administrator
  2. 选择 Marketplace > OperatorHub
  3. 搜索 Alauda Service Mesh v2。
  4. 找到 Alauda Service Mesh v2 并点击选择。
  5. 点击 Install
  6. Install Alauda Service Mesh v2 对话框中,执行以下操作:
    1. 选择一个 Channel
      • 选择 stable 通道以安装最新稳定版本的 Alauda Service Mesh v2 Operator。该通道为默认安装通道。
      • 若要安装特定版本的 Alauda Service Mesh v2 Operator,选择对应的 stable-<version> 通道。例如,安装 Alauda Service Mesh v2 Operator 版本 2.0.x,选择 stable-2.0 通道。
  7. 点击 Install 并确认安装 Operator。

验证

确认在 Installation Info 部分 Operator 安装状态显示为 Succeeded

通过 CLI 安装

前提条件

  • 已上传 Alauda Service Mesh v2。
  • 以具有 cluster-admin 角色的集群管理员身份,开启有效的 ACP CLI (kubectl) 会话。
  • 已安装 Alauda Container Platform Networking for Multus 插件,且 kube-ovn 版本为 4.1.5 或更高。

操作步骤

  1. 查看可用版本

    (
      echo -e "CHANNEL\tNAME\tVERSION"
      kubectl get packagemanifest servicemesh-operator2 -o json | jq -r '
        .status.channels[] |
        .name as $channel |
        .entries[] |
        [$channel, .name, .version] | @tsv
      '
    ) | column -t -s $'\t'

    示例输出

    CHANNEL     NAME                          VERSION
    stable      servicemesh-operator2.v2.1.0  2.1.0
    stable-2.1  servicemesh-operator2.v2.1.0  2.1.0

    字段说明

    • CHANNEL:Operator 通道名称
    • NAME:CSV 资源名称
    • VERSION:Operator 版本
  2. 确认 catalogSource

    kubectl get packagemanifests servicemesh-operator2 -ojsonpath='{.status.catalogSource}'

    示例输出

    platform

    表示 servicemesh-operator2 来自 platform catalogSource。

  3. 创建命名空间

    kubectl get namespace sail-operator || kubectl create namespace sail-operator
  4. 创建 Subscription

    kubectl apply -f - <<EOF
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      annotations:
        cpaas.io/target-namespaces: ""
      labels:
        catalog: platform
      name: servicemesh-operator2
      namespace: sail-operator
    spec:
      channel: stable
      installPlanApproval: Manual
      name: servicemesh-operator2
      source: platform
      sourceNamespace: cpaas-system
      startingCSV: servicemesh-operator2.v2.1.0
    EOF

    字段说明

    • annotation cpaas.io/target-namespaces:建议设置为空,空表示集群范围安装。
    • .metadata.name:Subscription 名称(符合 DNS 规范,最长 253 字符)。
    • .metadata.namespace:Operator 安装的命名空间。
    • .spec.channel:订阅的 Operator 通道。
    • .spec.installPlanApproval:审批策略(ManualAutomatic)。此处为 Manual,表示安装/升级需手动审批。
    • .spec.source:Operator catalogSource。
    • .spec.sourceNamespace:必须设置为 cpaas-system,因为平台提供的所有 catalogSource 均位于此命名空间。
    • .spec.startingCSV:指定安装版本(Manual 审批时必填);为空时默认安装通道最新版本。Automatic 不需要。
  5. 检查 Subscription 状态

    kubectl -n sail-operator get subscriptions servicemesh-operator2 -o yaml

    关键输出

    • .status.stateUpgradePending 表示 Operator 正等待安装或升级。
    • Condition InstallPlanPending = True:等待手动审批。
    • .status.currentCSV:当前订阅的最新 CSV。
    • .status.installPlanRef:关联的 InstallPlan,必须审批后才会继续安装。

    等待 InstallPlanPending 条件为 True

    kubectl -n sail-operator wait --for=condition=InstallPlanPending subscription servicemesh-operator2 --timeout=2m
  6. 审批 InstallPlan

    kubectl -n sail-operator get installplan \
      "$(kubectl -n sail-operator get subscriptions servicemesh-operator2 -o jsonpath='{.status.installPlanRef.name}')"

    示例输出

    NAME            CSV                            APPROVAL   APPROVED
    install-rlgnp   servicemesh-operator2.v2.1.0   Manual     false

    手动审批

    PLAN="$(kubectl -n sail-operator get subscription servicemesh-operator2 -o jsonpath='{.status.installPlanRef.name}')"
    kubectl -n sail-operator patch installplan "$PLAN" --type=json -p='[{"op": "replace", "path": "/spec/approved", "value": true}]'

验证

等待 CSV 创建,Phase 变为 Succeeded

kubectl wait --for=jsonpath='{.status.phase}'=Succeeded csv --all -n sail-operator --timeout=3m

检查 CSV 状态:

kubectl -n sail-operator get csv

示例输出

NAME                           DISPLAY                  VERSION   REPLACES   PHASE
servicemesh-operator2.v2.1.0   Alauda Service Mesh v2   2.1.0                Succeeded

字段说明

  • NAME:已安装的 CSV 名称
  • DISPLAY:Operator 显示名称
  • VERSION:Operator 版本
  • REPLACES:升级时替换的 CSV
  • PHASE:安装状态(Succeeded 表示成功)

Operator 安装的自定义资源定义

Operator 安装以下类别的自定义资源定义(CRDs):

  • Sail Operator CRDs: 这些 CRD 属于 sailoperator.io API 组,定义了管理 Istio 组件的自定义资源,包括 IstioIstioRevisionIstioCNIZTunnel。 详情请参见 Sail Operator API 参考

  • Istio CRDs: 这些 CRD 管理网格配置、服务发现、流量路由和可观测性,属于 istio.io API 组,如 networking.istio.iosecurity.istio.iotelemetry.istio.io。 配置指导请参见 Istio 文档

部署 Istio 组件

必须创建 IstioIstioCNI 自定义资源,分别用于部署控制平面和 Istio CNI 插件。

要求在不同命名空间中创建这两个资源。

创建 IstioCNI 命名空间

kubectl create namespace istio-cni

创建 IstioCNI 资源

通过 Web 控制台创建

创建 Istio 容器网络接口(CNI)资源,包含 Istio CNI 插件的配置文件。 Alauda Service Mesh v2 Operator 使用该资源的配置来部署 CNI Pod。

前提条件

  • 您已以 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
  • 已安装 Alauda Service Mesh v2 Operator。
  • 已安装 Alauda Container Platform Networking for Multus 插件,且 kube-ovn 版本为 4.1.5 或更高。

操作步骤

  1. 在 Alauda Container Platform Web 控制台中,导航至 Administrator
  2. 选择 Marketplace > OperatorHub
  3. 搜索 Alauda Service Mesh v2。
  4. 找到 Alauda Service Mesh v2 并点击选择。
  5. 点击 All Instances 标签页。
  6. 点击 Create
  7. 找到并选择 IstioCNI,然后点击 Create
  8. Namespace 下拉框中选择 istio-cni
  9. 点击 YAML 标签页。
  10. YAML 代码编辑器中添加以下 YAML 片段:
    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    spec:
      # 将以下内容应用到 yaml 代码编辑器:
      values:
        cni:
          cniConfDir: /etc/cni/multus/net.d # ACP 4.0 中为 /etc/cni/net.d
          excludeNamespaces:
            - istio-cni
            - kube-system
  11. 点击 Create

验证

等待 IstioCNI 资源的 .status.state 字段变为 Healthy

通过 CLI 创建

前提条件

  • 以具有 cluster-admin 角色的集群管理员身份,开启有效的 ACP CLI (kubectl) 会话。
  • 已安装 Alauda Service Mesh v2 Operator。
  • 已安装 Alauda Container Platform Networking for Multus 插件,且 kube-ovn 版本为 4.1.5 或更高。

操作步骤

  1. 运行以下命令创建 IstioCNI 资源:

    cat <<EOF | kubectl apply -f -
    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    metadata:
      name: default
    spec:
      namespace: istio-cni
      values:
        cni:
          cniConfDir: /etc/cni/multus/net.d # ACP 4.0 中为 /etc/cni/net.d
          excludeNamespaces:
            - istio-cni
            - kube-system
    EOF
  2. 运行以下命令等待 IstioCNI 资源返回 Ready 状态条件:

    kubectl wait --for condition=Ready istiocni/default --timeout=3m

创建 Istio 命名空间

kubectl create namespace istio-system
kubectl label namespace istio-system cpaas.io/project=cpaas-system

创建 Istio 资源

通过 Web 控制台创建

创建 Istio 资源,包含 Istio 部署的 YAML 配置。 Alauda Service Mesh v2 Operator 使用该资源的配置来部署 Istio 控制平面。

前提条件

  • 已安装 Alauda Service Mesh v2 Operator。
  • 您已以 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
  • 已安装 Alauda Container Platform Networking for Multus 插件,且 kube-ovn 版本为 4.1.5 或更高。

操作步骤

  1. 在 Alauda Container Platform Web 控制台中,导航至 Administrator
  2. 选择 Marketplace > OperatorHub
  3. 搜索 Alauda Service Mesh v2。
  4. 找到 Alauda Service Mesh v2 并点击选择。
  5. 点击 All Instances 标签页。
  6. 点击 Create
  7. 找到并选择 Istio,然后点击 Create
  8. Namespace 下拉框中选择 istio-system
  9. 点击 Create

验证

等待 Istio 资源的 .status.state 字段变为 Healthy

通过 CLI 创建

前提条件

  • 以具有 cluster-admin 角色的集群管理员身份,开启有效的 ACP CLI (kubectl) 会话。
  • 已安装 Alauda Service Mesh v2 Operator。
  • 已安装 Alauda Container Platform Networking for Multus 插件,且 kube-ovn 版本为 4.1.5 或更高。

操作步骤

  1. 运行以下命令创建 Istio 资源:

    cat <<EOF | kubectl apply -f -
    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      namespace: istio-system
      version: v1.28.3
    EOF
  2. 运行以下命令等待 Istio 控制平面返回 Ready 状态条件:

    kubectl wait --for condition=Ready istio/default --timeout=3m

其他资源