KubeVela + ASM 云原生交付体验

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 前提条件● 已创建ASM实例,且ASM实例的Istio为1.9.7.93及以上版本。具体操作,请参见创建ASM实例。● 已创建ACK集群。具体操作,请参见创建Kubernetes托管版集群。● 添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
作者:华相 阿里云技术专家

前提条件
● 已创建ASM实例,且ASM实例的Istio为1.9.7.93及以上版本。具体操作,请参见创建ASM实例。
● 已创建ACK集群。具体操作,请参见创建Kubernetes托管版集群。
● 添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
步骤一:启用数据面集群KubeAPI访问Istio资源功能

  1. 登录ASM控制台。
  2. 在左侧导航栏,选择服务网格 > 网格管理。
  3. 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
  4. 在网格信息页面单击右上角的功能设置。
  5. 在功能设置更新面板选中启用数据面集群KubeAPI访问Istio资源,然后单击确定。

步骤二:获取asm-cr-aggregation配置信息

  1. 查看ASM实例ID。
    a. 登录ASM控制台。
    b. 在左侧导航栏,选择服务网格 > 网格管理。
    c. 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。在网格信息页面查看ASM实例ID。
  2. 查看集群地域ID。
    a. 登录容器服务管理控制台。
    b. 在控制台左侧导航栏单击集群。在集群页面查看目标集群的地域,例如您集群地域为华北2(北京),则集群地域ID为cn-beijing。
  3. 查看AccessKey ID和AccessKey Secret。具体操作,请参见获取AccessKey。

步骤三:安装asm-cr-aggregation

  1. 通过cloudshell连接集群
  2. 下载并解压至asm-cr-aggregation本地。

curl -O -L https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-helmcharts/asm-cr-aggregation.tgz
tar xvf asm-cr-aggregation.tgz

  1. 进入asm-cr-aggregation文件夹中,找到values.yaml文件,在values.yaml文件中补充ASM ID、集群地域ID、AccessKey ID和AccessKey Secret,修改repository为registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/asm-craggregation-apiservice,然后保存values.yaml文件。
  2. 执行以下命令,安装asm-cr-aggregation。

helm upgrade -i -f values.yaml asm-cr-aggregation ./

  1. 验证asm-cr-aggregation是否安装成功。
    a. 登录容器服务管理控制台。
    b. 在控制台左侧导航栏中,单击集群。
    c. 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
    d. 在集群管理页面左侧导航栏选择应用 > Helm。在Helm页面可以看到asm-cr-aggregation,说明asm-cr-aggregation安装成功。

步骤四:授予RAM用户权限
使用数据面集群Kubernetes API访问Istio资源之前,您的账号需要拥有在数据面集群访问Istio资源的权限和ASM的自定义资源权限:

授予RAM用户访问Istio资源的读写权限。

  1. 使用阿里云账号登录容器服务管理控制台。
  2. 在控制台左侧导航栏单击授权管理。
  3. 在子账号页签下单击目标RAM用户右侧的管理权限。
  4. 在集群RBAC配置页面中单击“+”图标,选择要授予的集群和命名空间,设置访问权限为自定义,在文本框中选择asm-istio-admin,然后单击下一步。
  5. 验证RAM用户是否拥有访问Istio资源的读写权限。
    a. 执行以下命令,查看虚拟服务。

kubectl get VirtualService
预期输出:
NAME CREATED AT
reviews-route 2021-11-15T07:09:10Z
b. 执行以下命令,编辑虚拟服务。
kubectl edit VirtualService reviews-route
预期输出:
virtualservice.networking.istio.io/reviews-route edited
步骤五:安装KubeVela

  1. 登录容器服务管理控制台。
  2. 在控制台左侧导航栏中,选择市场 > 应用目录。
  3. 在应用目录页面搜索ack-kubevela,然后单击ack-kubevela。
  4. 修改两个image,指向深圳的内网仓库:
    a. registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/vela-core
    b. registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/kube-webhook-certgen
  5. 在ack-kubevela详情页面创建面板选择集群,然后单击创建。

步骤六:部署Kebuvla配置文件

  1. 下载操作文件

curl -O -L https://aliware-images.oss-cn-hangzhou.aliyuncs.com/ASM/Istio%E8%B5%84%E6%BA%90%E5%AE%89%E8%A3%85%E5%8C%85/asm_kubevela.zip
unzip asm_kubevela.zip

  1. 进入asm_kubevela文件夹中,执行以下命令,逐个部署Kebuvla配置文件。

kubectl apply -f rollback-wf-def.yaml
kubectl apply -f canary-rollout-wf-def.yaml
kubectl apply -f traffic-trait-def.yaml
步骤七:部署应用和网关

  1. 进入asm_kubevela文件夹中,执行以下命令,部署Bookinfo应用。application.yaml文件中为review服务配置traits字段下type为canary-traffic,表示配置了渐进式流量发布的运维特征。

kubectl apply -f - << EOF
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: book-info
namespace: default
spec:
components:

- name: reviews
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-reviews-v2:1.16.2
    port: 9080
    volumes:
      - name: wlp-output
        type: emptyDir
        mountPath: /opt/ibm/wlp/output
      - name: tmp
        type: emptyDir
        mountPath: /tmp

  traits:
    - type: canary-traffic
      properties:
        port:
          - 9080

    - type: rollout
      properties:
        targetSize: 2
        # This means to rollout two more replicas in two batches.
        rolloutBatches:
          - replicas: 2

- name: productpage
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-productpage-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: ratings
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-ratings-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: details
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-details-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

EOF

  1. 在ASM控制台中部署网关规则和虚拟服务。
    a. 登录ASM控制台。
    b. 在左侧导航栏,选择服务网格 > 网格管理。
    c. 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
    d. 部署网关规则。
    ⅰ. 在网格详情页面左侧导航栏选择流量管理 > 网关规则,在右侧页面单击使用YAML创建。
    ⅱ. 在创建页面设置命名空间为default,复制以下内容到文本框中,然后单击创建。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:

istio: ingressgateway # use istio default controller

servers:

  • port:

    number: 80
    name: http
    protocol: HTTP

    hosts:

    • "*"

e. 部署虚拟服务。

ⅰ. 在网格详情页面左侧导航栏选择流量管理 > 虚拟服务,在右侧页面单击使用YAML创建。
ⅱ. 在创建页面设置命名空间为default,复制以下内容到文本框中,然后单击确定。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:

  • "*"

gateways:

  • bookinfo-gateway

http:

  • match:

    • uri:
      exact: /productpage
    • uri:
      prefix: /static
    • uri:
      exact: /login
    • uri:
      exact: /logout
    • uri:
      prefix: /api/v1/products

    route:

    • destination:
      host: productpage
      port:
      number: 9080
  1. 访问Bookinfo应用。
    a. 登录容器服务管理控制台。
    b. 在控制台左侧导航栏中,单击集群。
    c. 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
    d. 在集群管理页面选择网络 > 服务。
    e. 在服务页面顶部设置命名空间为istio-system,查看istio-ingressgateway右侧80端口的外部端点,然后在浏览器地址栏中输入80端口的入口网关地址/productpage,访问Bookinfo应用。多次刷新页面,可以看到页面上显示黑色星星。

步骤八:渐进式发布应用

  1. 执行以下命令,升级reviews应用,并调整流量。

kubectl apply -f - << EOF
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: book-info
namespace: default
spec:
components:

- name: reviews
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-reviews-v3:1.16.2
    port: 9080
    volumes:
      - name: wlp-output
        type: emptyDir
        mountPath: /opt/ibm/wlp/output
      - name: tmp
        type: emptyDir
        mountPath: /tmp

  traits:
    - type: canary-traffic
      properties:
        port:
          - 9080

    - type: rollout
      properties:
        targetSize: 2
        # This means to rollout two more replicas in two batches.
        rolloutBatches:
          - replicas: 1
          - replicas: 1

- name: productpage
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-productpage-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: ratings
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-ratings-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: details
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-details-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

workflow:

steps:
  - name: rollout-1st-batch
    type: canary-rollout
    properties:
      # just upgrade first batch of component
      batchPartition: 0
      traffic:
        weightedTargets:
          - revision: reviews-v1
            weight: 90 # 90% shift to new version
          - revision: reviews-v2
            weight: 10 # 10% shift to new version

  # give user time to verify part of traffic shifting to newRevision
  - name: manual-approval
    type: suspend

  - name: rollout-rest
    type: canary-rollout
    properties:
      # upgrade all batches of component
      batchPartition: 1
      traffic:
        weightedTargets:
          - revision: reviews-v2
            weight: 100 # 100% shift to new version

EOF
a. targetSize:升级实例的批次。
b. rolloutBatches:每批实例升级的个数。
c. 在application_rollout-v2.yaml文件中设置了以下三个执行工作流:

ⅰ. 设置batchPartition等于0,表示只升级第一批次实例,即将reviews服务的2个Pod中,只升级其中的1个Pod。然后设置traffic.weightedTargets参数,将10%流量导向新升级的reviews服务,90%的流量仍然流向旧版本的服务。
ⅱ. 设置type为suspend,完成第一步工作流后,将暂停工作流。
ⅲ. 设置batchPartition等于1,表示升级第二批次实例,即将reviews服务的2个Pod都升级到v3版本镜像。然后设置traffic.weightedTargets参数,将100%流量导向新升级的reviews服务。
  1. 在浏览器地址栏中输入80端口的入口网关地址/productpage,访问Bookinfo应用。多次刷新页面,10%概率可以看到红色星星,90%概率看到黑色星星。
  2. 执行以下命令,继续执行工作流,使reviews服务全部升级到v3版本。

curl -O https://ali-workshop.oss-cn-shenzhen.aliyuncs.com/vela
chmod +x vela
./vela workflow resume book-info

  1. 在浏览器地址栏中输入80端口的入口网关地址/productpage,访问Bookinfo应用。多次刷新页面,页面上只显示红色星星。说明reviews服务全部升级到v3版本。

(可选)步骤九:回滚应用
如果发现发布的新版本应用不符合预期,您可以终止发布工作流量,并将应用回滚到之前的版本。

  1. 执行以下命令,回滚应用。

kubectl apply -f - << EOF
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: book-info
namespace: default
spec:
components:

- name: reviews
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-reviews-v3:1.16.2
    port: 9080
    volumes:
      - name: wlp-output
        type: emptyDir
        mountPath: /opt/ibm/wlp/output
      - name: tmp
        type: emptyDir
        mountPath: /tmp

  traits:
    - type: canary-traffic
      properties:
        port:
          - 9080

    - type: rollout
      properties:
        targetSize: 2
            # This means to rollout two more replicas in two batches.
        rolloutBatches:
         - replicas: 1
         - replicas: 1

- name: productpage
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-productpage-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: ratings
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-ratings-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: details
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-details-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

workflow:

steps:
  - name: rollback
    type: canary-rollback

EOF

  1. 在rollback.yaml文件中设置type为canary-rollback,会自动进行以下操作:
    a. 更新Rollout对象的targetRevisionName成旧的版本,自动回滚所有已发布的新版本的实例回到旧版本,并且保持还没升级的旧版本实例。
    b. 更新VirtualService对象的route字段,将所有流量导向旧的版本。
    c. 更新DestinationRule对象的subset字段,只容纳旧的版本。
  2. 在浏览器地址栏中输入80端口的入口网关地址/productpage,访问Bookinfo应用。多次刷新页面,页面上只显示黑色星星。说明reviews服务回滚到v2版本。
相关文章
|
3月前
|
负载均衡 Kubernetes Cloud Native
OpenKruise 是一个基于 Istio 的云原生服务网格
OpenKruise 是一个基于 Istio 的云原生服务网格
51 10
|
29天前
|
机器学习/深度学习 Kubernetes Cloud Native
云原生技术演进之旅:从容器到服务网格
在云计算的浪潮中,云原生技术以其独特的灵活性和可扩展性引领了新的技术革命。本文将深入探讨云原生技术的发展脉络,从容器技术的突破,到Kubernetes的集群管理,再到服务网格的微服务通信解决方案,揭示云原生如何不断适应和塑造现代应用的需求。文章将通过数据支撑和案例分析,展示云原生技术在实际应用中的优势和挑战,并预测其未来的发展趋势。
34 1
|
3月前
|
Kubernetes 监控 Cloud Native
全栈声明式可观测:KubeVela开箱即用且灵活定制的云原生应用洞察
KubeVela 是一个开箱即用的现代化应用交付与管理平台。本文我们将聚焦 KubeVela 的可观测体系,介绍云原生时代的可观测挑战及 KubeVela 的解决方案。
107 0
|
26天前
|
存储 监控 Cloud Native
kubevela可观测体系问题之KubeVela云原生时代可观测性挑战的问题如何解决
kubevela可观测体系问题之KubeVela云原生时代可观测性挑战的问题如何解决
|
29天前
|
安全 Cloud Native 网络安全
云原生应用交付
【7月更文挑战第22天】云原生环境下的安全问题易被忽视,导致潜在风险。应用层渗透测试和漏洞扫描是检测安全的关键,尤其是对于CVE漏洞的修复。然而,常见误解认为安全由外部防护处理且不易引入问题。
|
1月前
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
1月前
|
Kubernetes Cloud Native Docker
云原生架构的演进:从容器化到服务网格
本文深入探讨了云原生技术从最初的容器化技术,如Docker和Kubernetes,发展到现代的服务网格架构,如Istio。文章将通过分析云原生技术的演进路径,揭示其在处理微服务复杂性、流量管理和安全性方面的优势。我们将通过具体案例展示服务网格如何优化分布式系统的性能,并预测未来云原生技术的发展趋势。
26 2
|
29天前
|
运维 Kubernetes Cloud Native
云原生技术的未来演进:探索服务网格和无服务器架构的融合
随着企业数字化转型的不断深入,云原生技术已成为推动现代软件开发的关键力量。本文深入探讨了服务网格和无服务器架构这两大云原生技术趋势,分析了它们各自的优势以及未来可能的融合点。通过对比分析和案例研究,我们揭示了这两种技术如何互补并共同推进云原生生态系统的发展,同时指出了实践中面临的挑战和潜在的解决方案。 【7月更文挑战第22天】
|
3月前
|
消息中间件 监控 微服务
【专栏】随着技术发展,未来将探索服务网格、容器化和云原生技术,以提升微服务架构的效能
【4月更文挑战第27天】本文探讨了构建高效微服务架构的后端开发最佳实践。微服务以服务独立、去中心化、自治和轻量级通信为核心原则,带来可扩展性、独立性、技术灵活性和团队协作优势。实践中,要注意服务拆分粒度、选择合适的通信协议(如RESTful、RPC、消息队列)、处理数据一致性与分布式事务、实施服务治理和监控,以及确保安全性与权限控制。随着技术发展,未来将探索服务网格、容器化和云原生技术,以提升微服务架构的效能。
85 6
|
3月前
|
运维 监控 Cloud Native
云原生架构下的服务网格演进与实践
【5月更文挑战第23天】 随着云计算技术的不断成熟,云原生架构已成为推动企业数字化转型的关键动力。本文将深入探讨服务网格在云原生环境中的重要性,分析其在微服务管理、流量控制和安全性方面的创新应用。通过对服务网格的技术和实践案例的剖析,揭示其如何优化云原生应用的部署、运行和管理,为企业构建更加动态、可靠和高效的分布式系统提供策略指导。