Version: v1.0
学习使用 Appfile
appfile 的示例如下:
name: testappservices:frontend: # 1st serviceimage: oamdev/testapp:v1build:docker:file: Dockerfilecontext: .cmd: ["node", "server.js"]port: 8080route: # traitdomain: example.comrules:- path: /testapprewriteTarget: /backend: # 2nd servicetype: task # workload typeimage: perlcmd: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
在底层,Appfile 会从源码构建镜像,然后用镜像名称创建 application 资源
Schema
在深入学习 Appfile 的详细 schema 之前,我们建议你先熟悉 KubeVela 的核心概念
name: _app-name_services:_service-name_:# If `build` section exists, this field will be used as the name to build image. Otherwise, KubeVela will try to pull the image with given name directly.image: oamdev/testapp:v1build:docker:file: _Dockerfile_path_ # relative path is supported, e.g. "./Dockerfile"context: _build_context_path_ # relative path is supported, e.g. "."push:local: kind # optionally push to local KinD cluster instead of remote registrytype: webservice (default) | worker | task# detailed configurations of workload... properties of the specified workload ..._trait_1_:# properties of trait 1_trait_2_:# properties of trait 2... more traits and their properties ..._another_service_name_: # more services can be defined...
想了解怎样设置特定类型的 workload 或者 trait,请阅读参考文档手册
示例流程
在以下的流程中,我们会构建并部署一个 NodeJs 的示例 app。该 app 的源文件在这里。
环境要求
1. 下载测试的 app 的源码
git clone 然后进入 testapp 目录:
$ git clone https://github.com/oam-dev/kubevela.git$ cd kubevela/docs/examples/testapp
这个示例包含 NodeJs app 的源码和用于构建 app 镜像的Dockerfile
2. 使用命令部署 app
我们将会使用目录中的 vela.yaml 文件来构建和部署 app
注意:请修改
oamdev为你自己注册的账号。或者你可以尝试本地测试方式。
image: oamdev/testapp:v1 # change this to your image
执行如下命令:
$ vela upParsing vela.yaml ...Loading templates ...Building service (express-server)...Sending build context to Docker daemon 71.68kBStep 1/10 : FROM mhart/alpine-node:12---> 9d88359808c3...pushing image (oamdev/testapp:v1)......Rendering configs for service (express-server)...Writing deploy config to (.vela/deploy.yaml)Applying deploy configs ...Checking if app has been deployed...App has not been deployed, creating a new deployment...✅ App has been deployed 🚀🚀🚀Port forward: vela port-forward testappSSH: vela exec testappLogging: vela logs testappApp status: vela status testappService status: vela status testapp --svc express-server
检查服务状态:
$ vela status testappAbout:Name: testappNamespace: defaultCreated at: 2020-11-02 11:08:32.138484 +0800 CSTUpdated at: 2020-11-02 11:08:32.138485 +0800 CSTServices:- Name: express-serverType: webserviceHEALTHY Ready: 1/1Last Deployment:Created at: 2020-11-02 11:08:33 +0800 CSTUpdated at: 2020-11-02T11:08:32+08:00Routes:
本地测试方式
如果你本地有运行的 kind 集群,你可以尝试推送到本地。这种方法无需注册远程容器仓库。
在 build 中添加 local 的选项值:
build:# push image into local kind cluster without remote transferpush:local: kinddocker:file: Dockerfilecontext: .
然后部署到 kind:
$ vela up
(进阶) 检查渲染后的 manifests 文件
默认情况下,Vela 通过 ./vela/deploy.yaml 渲染最后的 manifests 文件:
apiVersion: core.oam.dev/v1alpha2kind: ApplicationConfigurationmetadata:name: testappnamespace: defaultspec:components:- componentName: express-server---apiVersion: core.oam.dev/v1alpha2kind: Componentmetadata:name: express-servernamespace: defaultspec:workload:apiVersion: apps/v1kind: Deploymentmetadata:name: express-server...---apiVersion: core.oam.dev/v1alpha2kind: HealthScopemetadata:name: testapp-default-healthnamespace: defaultspec:...
[可选] 配置其他类型的 workload
至此,我们成功地部署一个默认类型的 workload 的 web 服务。我们也可以添加 Task 类型的服务到同一个 app 中。
services:pi:type: taskimage: perlcmd: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]express-server:...
然后再次部署 Applfile 来升级应用:
$ vela up
恭喜!你已经学会了使用 Appfile 来部署应用了。
下一步?
更多关于 app 的操作: