KubeVela + ASM 云原生交付体验-阿里云开发者社区

开发者社区> 容器小师妹> 正文

KubeVela + ASM 云原生交付体验

简介: 前提条件 ● 已创建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版本。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9552 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
2465 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9068 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13249 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
21969 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6961 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4061 0
44
文章
1
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载