使用K8s原生方式创建EDAS应用

CloudApp是EDAS在云原生场景下推出的新一代应用模型,践行了原生K8s的设计理念。通过CRD方式,将EDAS多年来在微服务应用管理中的沉淀经验标准化,将K8s的Workload(工作负载)和EDAS应用相结合,让您可以通过原生方式管理EDAS应用。本文介绍如何使用K8s原生方式创建EDAS应用。

前提条件

确保该集群已导入EDAS。具体操作,请参见在EDAS控制台导入Kubernetes集群使用Helm方式导入Kubernetes集群

操作入口

通过原生Workload创建EDAS应用

步骤一:创建Workload时同步创建EDAS应用

  1. 使用以下内容,创建demo-01.yaml文件。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-demo-01
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: deployment-demo-01
      template:
        metadata:
          labels:
            app: deployment-demo-01
        spec:
          containers:
          - name: group-1
            image: registry.cn-hangzhou.aliyuncs.com/edas-demo-project/consumer:1.0
  2. 在创建应用时,添加edas.alibabacloud.com/app标签,将1的Deployment转化为一个EDAS应用,标签值为EDAS中的应用名称。添加标签后,Deployment的YAML配置如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        edas.alibabacloud.com/app: deployment-demo-01
      name: deployment-demo-01
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: deployment-demo-01
      template:
        metadata:
          labels:
            app: deployment-demo-01
        spec:
          containers:
          - name: group-1
            image: registry.cn-hangzhou.aliyuncs.com/edas-demo-project/consumer:1.0
  3. 执行以下命令,创建应用。

    kubectl apply -f demo-01.yaml

步骤二:验证应用是否创建成功

  • 方式一:执行命令查看应用信息。

  • 执行以下命令,查看EDAS应用是否创建成功,并查看应用信息。

    kubectl get cloudapps

    如果已指定创建应用至非默认命名空间,查询时请加namespace。

    kubectl get cloudapps -n k8s-namespace

    image.png

    应用如果正常成功创建,会生成CloudApp资源。

  • 方式二:通过EDAS控制台上查看应用信息。

    image.png

    查看应用详情

    image.png

    查看应用监控

    image.png

应用创建成功后,在EDAS控制台进行应用的变更、部署等操作。上述应用由于在创建时没有指定微服务空间,因此默认为创建的集群所在的微服务空间。

创建应用到指定的微服务空间

  1. 在EDAS控制台上的资源管理 > 微服务空间页面获取微服务空间ID。

    image.png

  2. 添加以下Annotation,将应用创建至指定的微服务空间,注解值为EDAS微服务空间ID。

    edas.alibabacloud.com/namespace: cn-hangzhou:test1
    重要

    应用创建后,无法更改微服务空间。

    以下示例是将Demo应用创建至test1微服务空间中,添加Annotation后的配置如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        edas.alibabacloud.com/app: deployment-demo-01
      annotations:
        edas.alibabacloud.com/namespace: cn-hangzhou:test1
      name: deployment-demo-01
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: deployment-demo-01
      template:
        metadata:
          labels:
            app: deployment-demo-01
        spec:
          containers:
          - name: group-1
            image: registry.cn-hangzhou.aliyuncs.com/edas-demo-project/consumer:1.0
  3. 创建完成后,在应用管理 > 应用列表页面确认应用是否已创建至指定微服务空间。

通过已有原生Workload转化EDAS应用

步骤一:转化为EDAS应用

添加edas.alibabacloud.com/app: deployment-demo-01标签,将已有的Workload(Deployment/StatefulSet)转换为EDAS应用。Label的Value值为EDAS上展示的应用名。

  • 方式一:执行以下命令,为Workload添加Label。

    kubectl label deployments/deployment-demo-01 edas.alibabacloud.com/app=deployment-demo-01
  • 方式二:执行以下命令,在编辑应用信息时,添加Label。

    kubectl edit deployment deployment-demo-01

步骤二:验证是否转化完成

  1. 执行以下命令,查看是否正常生成了EDAS应用。

    kubectl get cloudapps

    image.png

  2. 登录EDAS控制台,在应用管理 > 应用列表页面查看EDAS应用。

    image.png

  3. 单击应用名称,查看应用详情。

    image.png

步骤三:重新部署应用

说明

您查看到的简版的应用详情,是由于将Workload转换后,为确保已有业务工作正常,整个转换过程不会影响正在运行中的应用,所以应用没有挂载监控及微服务治理的Agent,需要主动部署一次才能正常使用EDAS的监控及微服务治理能力。您可在EDAS控制台应用总览页面重新部署应用,也可执行以下命令部署应用。

  1. 编辑应用YAML文件,增加以下Annontation。

    edas.alibabacloud.com/immediate-rollout: "true"
  2. 执行以下命令,使配置立即生效。

    kubectl annotate deployments/deployment-demo-01 edas.alibabacloud.com/immediate-rollout=true
  3. 部署后,在应用总览页面可以看到监控和微服务治理功能已启用。

    image.png

  4. 在应用详情页面左侧导航栏,单击监控 > 实例监控,查看ARMS监控信息。

    image.png

在转化的同时指定微服务空间

在Workload转化为EDAS应用时,如果没有指定微服务空间,默认使用导入集群所在的微服务空间。如果需要指定具体的微服务空间,需在转化的同时添加注解Annotation:edas.alibabacloud.com/namespace: cn-hangzhou:test1

  1. 执行以下命令,编辑应用。

    kubectl edit deployment deployment-demo-01
  2. 添加以下Label和Annotation,在转化为EDAS应用的同时指定微服务空间,编辑并保存后,配置立即生效。

    labels:
      edas.alibabacloud.com/app: deployment-demo-01
    annotations:
      edas.alibabacloud.com/namespace: cn-hangzhou:test1
      edas.alibabacloud.com/immediate-rollout: "true"
  3. 应用管理>应用列表页面确认应用是否已转化至指定微服务空间。

  • 如果指定的微服务空间不存在,将会转化失败,您可以通过kubectl get events命令查看Warning事件。因此在转化前,您需确保微服务空间已存在,如需新建微服务空间,请参见创建微服务空间

    image.png

  • 如果对已经转成EDAS的应用增加该注解,会提示以下报错:

    image.png

    同时产生一个Warning事件,可通过kubectl get events命令查看该事件。

    image.png

原生Workload转化为EDAS应用的Label和Annotation

类型

标签或者注解内容

作用

Label

edas.alibabacloud.com/app: app-name

将Workload转化为EDAS应用。

Annotation

edas.alibabacloud.com/namespace: cn-hangzhou

指定EDAS上的微服务空间。

Annotation

edas.alibabacloud.com/micro-service-type: HSF

指定应用类型。HSF类型的应用需添加该注解,非HSF类型应用无需添加。

Annotation

edas.alibabacloud.com/immediate-rollout: "true"

监控及微服务治理立即生效。同时,在EDAS控制上部署也可以生效。

通过Helm方式创建应用

  1. 下载测试应用的Helm Chart包。

    wget https://edas-hz.oss-cn-hangzhou.aliyuncs.com/helm/edas-apps-chart-1.0.0.tgz
  2. 执行以下命令,创建应用。

    helm install edas-apps edas-apps-chart-1.0.0.tgz

    image.png

  3. 验证应用(edas-app-consumer)是否创建成功。

    • 方式一:执行以下命令,查看应用是否已创建成功。

      kubectl get cloudapps

      image.png

    • 方式二:在EDAS控制台查的应用管理 > 应用列表页面查看应用是否已创建成功。

      image.png

  4. 查看应用详情及应用监控。

    查看应用详情

    image.png

    查看应用监控

    image.png

编辑原生Workload

对于已被EDAS接管的Workload,如果修改Workload下Pod相关信息(Template区域的内容),将会同步到CloudApp被保留。下次通过控制台部署应用时,不会丢失原有配置信息。例如:

  1. 在Deployment下新增以下Annotation。

    image.png

  2. 编辑并保存后,在EDAS控制台部署时,可看到新增配置。

    image.png

删除应用

  • 方式一:删除Workload(Deployment/StatefulSet) 。

    kubectl delete deployment deployment-demo-01
  • 方式二:删除CloudApp。

    kubectl delete cloudapps deployment-demo-01

    以上两种方式,任意一种执行后,EDAS上的应用都会自动删除。