Files
kubevela/docs/developers/devex/appfile.md
Hongchao Deng 629ceee307 fix
Signed-off-by: Hongchao Deng <hongchaodeng1@gmail.com>
2020-10-30 00:08:15 -07:00

3.9 KiB

Using Appfile for More Flexible Configuration

Appfile supports more flexible options than CLI/UI to configure appliation deployment on Vela. A detailed design doc could be found here

In this tutorial, we will build and deploy an example NodeJS app under examples/testapp/.

Prerequisites

  • docker installed on the host
  • vela installed and configured

1. Download test app code

git clone and go to the testapp directory:

$ git clone https://github.com/oam-dev/kubevela.git
$ cd kubevela/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.

ATTENTION: change the image field in vela.yaml to something you can push to on your host:

Or you may try the local kind cluster option which will be introduced in the following section.

    image: oamdev/testapp:v1

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 <port>
	SSH: vela exec testapp
	Logging: vela logs testapp

Now the app deployment has been rendered and run.

Check the status of the application deployment:

$ vela svc status express-server                                                                                                                               [0:06:32]
Showing status of service(type: webservice) express-server deployed in Environment default
Service express-server Status:	 HEALTHY Ready: 1/1
	scaler: replica=1
	scaler: replica=1

Last Deployment:
	Created at: 2020-10-30 00:06:10 -0700 PDT
	Updated at: 2020-10-30T00:06:10-07:00

3. 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
    traits:
    - trait:
        apiVersion: core.oam.dev/v1alpha2
        kind: ManualScalerTrait
        ...
    - trait:
        apiVersion: standard.oam.dev/v1alpha1
        kind: Route
        ...
---
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 "task" workload type

In above we deploy webservice workload. We can also deploy task workload via appfile. Below is a simplified example from k8s doc:

services:
  pi:
    image: perl 
    cmd: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]

[Optional] Local kind cluster testing without pushing image remotely

If you have local kind cluster running:

$ kind get clusters
kind

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

kind