Learning Appfile Step by Step
Appfile is the main user interface to configure application deployment on Vela.
In this tutorial, we will build and deploy an example NodeJS app under examples/testapp/.
Prerequisites
1. Download test app code
git clone and go to the testapp directory:
$ git clone https://github.com/oam-dev/kubevela.git
$ cd kubevela/docs/examples/testapp
The example contains NodeJS app code, Dockerfile to build the app.
2. Deploy app in one command
In the directory there is a vela.yaml which follows Appfile format supported by Vela. We are going to use it to build and deploy the app.
NOTE: please change
oamdev
to your own registry account so you can push. Or, you could try the alternative approach inLocal testing without pushing image remotely
section.
image: oamdev/testapp:v1 # change this to your image
Run the following command:
$ vela up
Parsing vela.yaml ...
Loading templates ...
Building service (express-server)...
Sending build context to Docker daemon 71.68kB
Step 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 testapp
SSH: vela exec testapp
Logging: vela logs testapp
App status: vela status testapp
Service status: vela status testapp --svc express-server
Check the status of the service:
$ vela status testapp
About:
Name: testapp
Namespace: default
Created at: 2020-11-02 11:08:32.138484 +0800 CST
Updated at: 2020-11-02 11:08:32.138485 +0800 CST
Services:
- Name: express-server
Type: webservice
HEALTHY Ready: 1/1
Last Deployment:
Created at: 2020-11-02 11:08:33 +0800 CST
Updated at: 2020-11-02T11:08:32+08:00
Routes:
Alternative: Local testing without pushing image remotely
If you have local kind cluster running, you may try the local push option. No remote container registry is needed in this case.
Add local option to build
:
build:
# push image into local kind cluster without remote transfer
push:
local: kind
docker:
file: Dockerfile
context: .
Then deploy the app to kind:
$ vela up
(Advanced) Check rendered manifests
By default, Vela renders the final manifests in .vela/deploy.yaml
:
apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
name: testapp
namespace: default
spec:
components:
- componentName: express-server
---
apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
name: express-server
namespace: default
spec:
workload:
apiVersion: apps/v1
kind: Deployment
metadata:
name: express-server
...
---
apiVersion: core.oam.dev/v1alpha2
kind: HealthScope
metadata:
name: testapp-default-health
namespace: default
spec:
...
[Optional] Configure another workload type
By now we have deployed a Web Service, which is the default workload type in KubeVela. We can also add another service of Task type in the same app:
services:
pi:
type: task
image: perl
cmd: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
express-server:
...
Then deploy Appfile again to update the application:
$ vela up
Interested in the more details of Appfile? Learn Full Schema of Appfile
What’s Next?
Congratulations! You have just deployed an app using Vela.
Some tips that you can have more play with your app: