容器镜像

本文介绍企业基于 KubeVela 通过容器镜像交付业务应用的操作方式,通过该方式交付应用无需你学习过多的 Kubernetes 领域知识。

开始之前

  • 完成你的业务容器化,无论你的业务使用何种开发语言,请先将其通过 CI 系统或在本地完成运行镜像打包。

  • 将你的业务镜像存放于镜像仓库中,KubeVela 管理的集群可以正常获取该镜像。

  • 启用了 VelaUX 插件,如果你仅是 CLI 用户,直接参考 通过 CLI 部署

创建应用

进入应用管理页面,点击右上方的 新建应用 按钮,进入应用创建弹窗页面,输入应用名称等基础信息,选择 webservice 主组件类型,并选择需要部署的环境。点击下一步进入组件部署属性配置页面,如图所示,填写镜像名称、启动命令,端口等信息。根据你的集群支持情况选择合适的服务暴露方式。

如果你需要部署来自私有镜像仓库的镜像,请先进行镜像仓库配置,参考:私有镜像仓库配置

当你输入完镜像名称后,系统将自动开始加载镜像信息。如果你输入的镜像属于已配置的私有镜像仓库,Secret 字段将自动赋值。你可以参考镜像的 Volume 和 Port 信息来选择性配置应用的 Service PortsPersistent Storage 等字段。

set webservice application

确认提交后即完成应用初始化配置。

部署应用

应用创建后默认不会自动部署,需要点击页面右上方的部署按钮,并选择需要执行的工作流,每一个工作流对应部署一个环境。部署开始后可以点击 基础配置 旁边的不同 Tab 即进入不同环境的管理页面。

webservice application env page

每一个环境视图目前提供了部署资源状态、应用实例和应用日志的查询页面。部署资源状态页面展示了该应用实际分发的底层资源列表即各组件状态;应用实例页面中展示该应用部署的所有实例信息,点击实例行即可查询该实例的详细信息;日志页面可以查询该应用所有运行实例的标准输出日志。

更新镜像版本

当我们完成初始部署后,后续随着我们业务开发和升级需要变更镜像版本或其他部署参数。

回到基础配置页面,点击需要修改的组件名称即可进入组件设置弹窗页面,在该页面中你可以修改部署镜像、环境变量等部署参数,也可以变更组件别名或描述等基础信息。

更新副本数

如果你的业务需要扩大或减小规模,我们使用调整副本数的运维特征来设置副本数量,在控制台中创建的应用该运维特征会自动创建。点击组件卡片上的Scaler运维特征即可进入配置页面,你可以手动设置需要的副本数量。

set application replicas

升级应用

上述两个步骤我们只是修改了应用的配置参数,但其不是立即在部署环境中生效的,我们可以再次点击部署按钮选择需要升级的环境对应的工作流执行,即可完成指定环境的升级。

通过 CLI 部署应用

如果你不使用 UI,通过 CLI 也可以完成业务应用示例的部署,通过执行下述命令即可:

  1. cat <<EOF | vela up -f -
  2. # YAML begins
  3. apiVersion: core.oam.dev/v1beta1
  4. kind: Application
  5. metadata:
  6. name: webservice-app
  7. spec:
  8. components:
  9. - name: frontend
  10. type: webservice
  11. properties:
  12. image: oamdev/testapp:v1
  13. cmd: ["node", "server.js"]
  14. ports:
  15. - port: 8080
  16. expose: true
  17. exposeType: NodePort
  18. cpu: "0.5"
  19. memory: "512Mi"
  20. traits:
  21. - type: scaler
  22. properties:
  23. replicas: 1
  24. # YAML ends
  25. EOF

容器镜像 - 图4备注

目前,通过 CLI 部署的应用会同步到控制台中,但其为只读状态。

你也可以复制上述的应用配置并创建一个 YAML 文件 webservice-app.yaml,然后使用命令 vela up -f webservice-app.yaml 来完成部署。

接下来你可以通过 vela status webservice-app 命令获取应用的部署状态。

  1. About:
  2. Name: test-app
  3. Namespace: default
  4. Created at: 2022-04-21 12:03:42 +0800 CST
  5. Status: running
  6. Workflow:
  7. mode: DAG
  8. finished: true
  9. Suspend: false
  10. Terminated: false
  11. Steps
  12. - id:y4n26n7uql
  13. name:frontend
  14. type:apply-component
  15. phase:succeeded
  16. message:
  17. Services:
  18. - Name: frontend
  19. Cluster: local Namespace: default
  20. Type: webservice
  21. Healthy Ready:1/1
  22. Traits:
  23. scaler

你可以访问该应用的端点,根据安装的 KubeVela 方式,有以下几种选择

  • Standalone Local
  • Standalone Remote
  • Kubernetes

通过端口转发访问端点

  1. vela port-forward webservice-app -n default 8080:8080

这条命令自动打开一个浏览器,或者你也可以手动访问 http://localhost:8080

因为我们已经在远程服务器中安装了 KubeVela,并且该服务器还有以可访问的 IP 地址。所以可以通过 vela status --endpoint 检测应用端点。该命令可以检测多种暴露的端点。 在本例中,这个应用的底层会创建一个 NodePort 类型的 Service。你可以访问列出的端点。

  1. vela status webservice-app --endpoint

期望输出

  1. I0816 21:20:08.536617 59163 utils.go:156] find cluster gateway service vela-system/kubevela-cluster-gateway-service:9443
  2. Please access webservice-app from the following endpoints:
  3. +---------+-----------+--------------------------+----------------------------+-------+
  4. | CLUSTER | COMPONENT | REF(KIND/NAMESPACE/NAME) | ENDPOINT | INNER |
  5. +---------+-----------+--------------------------+----------------------------+-------+
  6. | local | frontend | Service/default/frontend | http://182.92.178.219:30128 | false |
  7. +---------+-----------+--------------------------+----------------------------+-------+

容器镜像 - 图5打开端口

如果你在使用云服务器,请在云服务器的安全组中开放该端口(30128)。

所以可以通过 `vela status —endpoint` 检测应用端点。该命令可以检测多种暴露的端点。 在本例中,这个应用的底层会创建一个 NodePort 类型的 Service。你可以访问列出的端点。

  1. vela status webservice-app --endpoint

期望输出

  1. I0816 21:20:08.536617 59163 utils.go:156] find cluster gateway service vela-system/kubevela-cluster-gateway-service:9443
  2. Please access webservice-app from the following endpoints:
  3. +---------+-----------+--------------------------+----------------------------+-------+
  4. | CLUSTER | COMPONENT | REF(KIND/NAMESPACE/NAME) | ENDPOINT | INNER |
  5. +---------+-----------+--------------------------+----------------------------+-------+
  6. | local | frontend | Service/default/frontend | http://182.92.178.219:30128 | false |
  7. +---------+-----------+--------------------------+----------------------------+-------+

容器镜像 - 图6打开端口

上面命令的输出中,你可以看到 NodePort 类型 Service 对外暴露了集群可用节点的 30128 端口,在从集群外部访问该 URL(182.92.178.219:30128) 之前, 必须在节点的安全组中打开该端口,允许 30128 端口的入站流量。