交付第一个应用

开始之前,请确认你已完成 KubeVela 的安装,参考 安装指导文档

欢迎使用 KubeVela, 在该章节中你可以学习到使用 KubeVela 部署一个基础的应用。

下面给出了一个经典的 OAM 应用定义,它包括了一个无状态服务组件和运维特征,三个部署策略和工作流步骤。此应用描述的含义是将一个服务部署到两个目标命名空间,并且在第一个目标部署完成后等待人工审核后部署到第二个目标,且在第二个目标时部署2个实例。

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: first-vela-app
  5. spec:
  6. components:
  7. - name: express-server
  8. type: webservice
  9. properties:
  10. image: oamdev/hello-world
  11. ports:
  12. - port: 8000
  13. expose: true
  14. traits:
  15. - type: scaler
  16. properties:
  17. replicas: 1
  18. policies:
  19. - name: target-default
  20. type: topology
  21. properties:
  22. # local 集群即 Kubevela 所在的集群
  23. clusters: ["local"]
  24. namespace: "default"
  25. - name: target-prod
  26. type: topology
  27. properties:
  28. clusters: ["local"]
  29. # 此命名空间需要在应用部署前完成创建
  30. namespace: "prod"
  31. - name: deploy-ha
  32. type: override
  33. properties:
  34. components:
  35. - type: webservice
  36. traits:
  37. - type: scaler
  38. properties:
  39. replicas: 2
  40. workflow:
  41. steps:
  42. - name: deploy2default
  43. type: deploy
  44. properties:
  45. policies: ["target-default"]
  46. - name: manual-approval
  47. type: suspend
  48. - name: deploy2prod
  49. type: deploy
  50. properties:
  51. policies: ["target-prod", "deploy-ha"]
  • 开始应用部署
  1. # 此命令用于在管控集群创建命名空间
  2. vela env init prod --namespace prod

期望输出

  1. environment prod with namespace prod created
  1. vela up -f https://kubevela.net/example/applications/first-app.yaml

需要注意的是需要你的部署环境可以正常获取 oamdev/hello-world 镜像

期望输出

  1. Applying an application in vela K8s object format...
  2. I0516 15:45:18.123356 27156 apply.go:107] "creating object" name="first-vela-app" resource="core.oam.dev/v1beta1, Kind=Application"
  3. App has been deployed 🚀🚀🚀
  4. Port forward: vela port-forward first-vela-app
  5. SSH: vela exec first-vela-app
  6. Logging: vela logs first-vela-app
  7. App status: vela status first-vela-app
  8. Endpoint: vela status first-vela-app --endpoint
  9. Application prod/first-vela-app applied.
  • 查看部署状态
  1. vela status first-vela-app

期望输出

  1. About:
  2. Name: first-vela-app
  3. Namespace: prod
  4. Created at: 2022-05-16 15:45:18 +0800 CST
  5. Status: workflowSuspending
  6. Workflow:
  7. ...
  8. Services:
  9. - Name: express-server
  10. Cluster: local Namespace: default
  11. Type: webservice
  12. Healthy Ready:1/1
  13. Traits:
  14. scaler

正常情况下应用完成第一个目标部署后进入暂停状态(workflowSuspending)。

  • 人工审核,批准应用进入第二个目标部署
  1. vela workflow resume first-vela-app
  • 通过下述方式来访问该应用
  1. $ vela port-forward first-vela-app 8000:8000

上述命令将创建本地代理并打开本地浏览器,你可以查看到如下内容:

期望输出

  1. <xmp>
  2. Hello KubeVela! Make shipping applications more enjoyable.
  3. ...snip...

恭喜,至此你已经完成了首个 KubeVela 应用的部署流程,下面我们介绍通过 UI 控制台查看和管理应用。

如果你已完成 VelaUX 安装, 你可以通过 UI 来管理和可视化应用。

本地测试模式下通过下述命令即可打开 UI 界面。

  1. vela port-forward addon-velaux -n vela-system 8080:80

UI 控制台需要用户认证,默认的账号是: admin 密码是: VelaUX12345

首次登录后会进入修改密码和设置邮箱流程,请正确设置你的企业邮箱(后期不可修改)和谨记修改后的密码。

  • 查看第一个应用的部署拓扑图

通过 CLI 部署的应用会自动同步到 UI 侧,你可以进入应用页面查看到应用的相关可视化状态,比如:资源拓扑图,实例等。

first-app-graph

KubeVela 的 UI 控制台跟底层的控制器使用了不同的元数据存储,它的架构类似企业的 PaaS 模式,UI 控制台(velaux)在上层使用数据库作为元数据存储而非依赖底层集群的 etcd。

默认情况下,CLI 操作的应用会自动同步到 UI 控制台的元数据中,但是一旦你通过 UI 界面做应用部署的操作,应用元数据的自动同步就会停止。接下来你依旧可以用 CLI 去管理应用,并且修改的差异可以在 UI 控制台上查看。但是我们不建议你同时通过 CLI 和 UI 去管理应用。

交付第一个应用 - 图2提示

如果 CLI 操作的应用的命名空间已经在 UI 中指向了对应的环境,那么该应用被会自动同步到 UI 中环境关联的项目中。否则,应用会被同步到默认项目中。 如果你希望指定应用被同步到 UI 控制台的哪个项目中,请参考 创建项目关联的环境

总体而言,如果你的场景更倾向于使用 CLI/YAML/GitOps,那么我们建议你直接管理 application CRD,将 UI 控制台当成看板使用。如果你喜欢通过 UI 控制台管理,那就保持行为的一致,基于 UI 提供的方式:界面、API 和 Webhook 来执行部署。

  1. vela delete first-vela-app

期望输出

  1. Deleting Application "first-vela-app"
  2. app "first-vela-app" deleted from namespace "prod"

处于同步状态的应用,如果通过 CLI 删除后,UI 侧的应用同步删除。

Last updated on 2023年8月4日 by Daniel Higuero