mirror of
https://github.com/kubevela/kubevela.git
synced 2026-05-20 08:13:23 +00:00
243 lines
5.2 KiB
Markdown
243 lines
5.2 KiB
Markdown
# 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](../../design/appfile-design.md).
|
|
|
|
In this tutorial, we will build and deploy an example NodeJS app under [examples/testapp/](https://github.com/oam-dev/kubevela/tree/master/examples/testapp).
|
|
|
|
## Prerequisites
|
|
|
|
- [docker](https://docs.docker.com/get-docker/) installed on the host
|
|
- [vela](../../install.md) installed and configured
|
|
|
|
## 1. Download test app code
|
|
|
|
git clone and go to the testapp directory:
|
|
|
|
```console
|
|
$ 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](../../../examples/testapp/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 testing option introduced in the following section.
|
|
|
|
```yaml
|
|
image: oamdev/testapp:v1
|
|
```
|
|
|
|
Run the following command:
|
|
|
|
```console
|
|
$ 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:
|
|
|
|
```console
|
|
$ 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](../../install.md#kind) cluster running, you may try the local push option without pushing image remotely.
|
|
|
|
Add local option to `build`:
|
|
|
|
```yaml
|
|
build:
|
|
# push image into local kind cluster without remote transfer
|
|
push:
|
|
local: kind
|
|
|
|
docker:
|
|
file: Dockerfile
|
|
context: .
|
|
```
|
|
|
|
Then deploy the app to kind:
|
|
|
|
```console
|
|
$ vela up
|
|
```
|
|
|
|
### [Optional] Check rendered manifests
|
|
|
|
By default, Vela renders the final manifests in `.vela/deploy.yaml`:
|
|
|
|
```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:
|
|
...
|
|
```
|
|
|
|
## 3. Add routing
|
|
|
|
Add routing config under `express-server`:
|
|
|
|
```yaml
|
|
servcies:
|
|
express-server:
|
|
...
|
|
|
|
route:
|
|
domain: example.com
|
|
rules:
|
|
- path: /testapp
|
|
rewriteTarget: /
|
|
```
|
|
|
|
Apply again:
|
|
|
|
```console
|
|
$ vela up
|
|
```
|
|
|
|
Check the status until we see route trait ready:
|
|
```console
|
|
$ vela status testapp
|
|
About:
|
|
|
|
Name: testapp
|
|
Namespace: default
|
|
Created at: ...
|
|
Updated at: ...
|
|
|
|
Services:
|
|
|
|
- Name: express-server
|
|
Type: webservice
|
|
HEALTHY Ready: 1/1
|
|
Last Deployment:
|
|
Created at: ...
|
|
Updated at: ...
|
|
Routes:
|
|
- route: Visiting URL: http://example.com IP: localhost
|
|
```
|
|
|
|
**In [kind cluster setup](../../install.md#kind)**, you can visit the service via localhost:
|
|
|
|
> If not in kind cluster, replace localhost with ingress address
|
|
|
|
```
|
|
$ curl -H "Host:example.com" http://localhost/testapp
|
|
Hello World
|
|
```
|
|
|
|
## 4. Add monitoring metrics
|
|
|
|
TODO
|
|
|
|
## [Optional] Configure "task" workload type
|
|
|
|
By now we have deployed a *webservice* workload. We can also add a *task* workload in appfile:
|
|
|
|
> Below is a simplified [k8s job example](https://kubernetes.io/docs/concepts/workloads/controllers/job/#running-an-example-job) using Vela:
|
|
|
|
```yaml
|
|
services:
|
|
pi:
|
|
image: perl
|
|
cmd: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
|
|
|
|
express-server:
|
|
...
|
|
```
|
|
|
|
Then deploy appfile again:
|
|
|
|
```console
|
|
$ vela up
|
|
```
|
|
|
|
## What's Next?
|
|
|
|
Congratulations! You have just deployed an app using Vela.
|
|
|
|
Here are some next steps that you can have more play with your app:
|
|
|
|
- [Check Application Logs](../check-logs.md)
|
|
- [Execute Commands in Container](../exec-cmd.md)
|
|
- [Port Forward to Container](../port-forward.md)
|
|
|
|
|
|
## References
|
|
|
|
For more configuration options of built-in capabilities, check [references](../references/README.md)
|