112 lines
2.6 KiB
Markdown
112 lines
2.6 KiB
Markdown
---
|
|
title: Attach Traits
|
|
---
|
|
|
|
All traits in the KubeVela system works well with the Raw K8s Object Template based Component.
|
|
|
|
In this sample, we will attach two traits,
|
|
[scaler](https://github.com/oam-dev/kubevela/blob/master/charts/vela-core/templates/defwithtemplate/manualscale.yaml)
|
|
and
|
|
[virtualgroup](https://github.com/oam-dev/kubevela/blob/master/docs/examples/kube-module/virtual-group-td.yaml) to a component
|
|
|
|
```yaml
|
|
apiVersion: core.oam.dev/v1beta1
|
|
kind: Application
|
|
metadata:
|
|
name: myapp
|
|
namespace: default
|
|
spec:
|
|
components:
|
|
- name: mycomp
|
|
type: kube-worker
|
|
properties:
|
|
image: nginx:1.14.0
|
|
traits:
|
|
- type: scaler
|
|
properties:
|
|
replicas: 2
|
|
- type: virtualgroup
|
|
properties:
|
|
group: "my-group1"
|
|
type: "cluster"
|
|
```
|
|
|
|
## Verify
|
|
|
|
Deploy the application and verify traits work.
|
|
|
|
Check the `scaler` trait.
|
|
```shell
|
|
$ kubectl get manualscalertrait
|
|
NAME AGE
|
|
demo-podinfo-scaler-3x1sfcd34 2m
|
|
```
|
|
```shell
|
|
$ kubectl get deployment mycomp -o json | jq .spec.replicas
|
|
2
|
|
```
|
|
|
|
Check the `virtualgroup` trait.
|
|
```shell
|
|
$ kubectl get deployment mycomp -o json | jq .spec.template.metadata.labels
|
|
{
|
|
"app.cluster.virtual.group": "my-group1",
|
|
"app.kubernetes.io/name": "myapp"
|
|
}
|
|
```
|
|
|
|
## Update an Application
|
|
|
|
After the application is deployed and workloads/traits are created successfully,
|
|
you can update the application, and corresponding changes will be applied to the
|
|
workload.
|
|
|
|
Let's make several changes on the configuration of the sample application.
|
|
|
|
```yaml
|
|
apiVersion: core.oam.dev/v1beta1
|
|
kind: Application
|
|
metadata:
|
|
name: myapp
|
|
namespace: default
|
|
spec:
|
|
components:
|
|
- name: mycomp
|
|
type: kube-worker
|
|
properties:
|
|
image: nginx:1.14.1 # 1.14.0 => 1.14.1
|
|
traits:
|
|
- type: scaler
|
|
properties:
|
|
replicas: 4 # 2 => 4
|
|
- type: virtualgroup
|
|
properties:
|
|
group: "my-group2" # my-group1 => my-group2
|
|
type: "cluster"
|
|
```
|
|
|
|
Apply the new configuration and check the results after several seconds.
|
|
|
|
> After updating, the workload instance name will be updated from `mycomp-v1` to `mycomp-v2`.
|
|
|
|
Check the new property value.
|
|
```shell
|
|
$ kubectl get deployment mycomp -o json | jq '.spec.template.spec.containers[0].image'
|
|
"nginx:1.14.1"
|
|
```
|
|
|
|
Check the `scaler` trait.
|
|
```shell
|
|
$ kubectl get deployment mycomp -o json | jq .spec.replicas
|
|
4
|
|
```
|
|
|
|
Check the `virtualgroup` trait.
|
|
```shell
|
|
$ kubectl get deployment mycomp -o json | jq .spec.template.metadata.labels
|
|
{
|
|
"app.cluster.virtual.group": "my-group2",
|
|
"app.kubernetes.io/name": "myapp"
|
|
}
|
|
```
|