Skip to content

Commit

Permalink
Integrate BanyanDB cluster as storage solution (#145)
Browse files Browse the repository at this point in the history
  • Loading branch information
ButterBright authored Mar 27, 2024
1 parent 3eb9fc8 commit 917a6ff
Show file tree
Hide file tree
Showing 5 changed files with 229 additions and 4 deletions.
6 changes: 4 additions & 2 deletions .github/workflows/e2e.ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@ jobs:
test:
- name: Run Skywalking E2E Test (Elasticsearch as database)
config: test/e2e/e2e-elasticsearch.yaml
- name: Run Skywalking E2E Test (BanyanDB as database)
config: test/e2e/e2e-banyandb.yaml
- name: Run Skywalking E2E Test (standalone BanyanDB as database)
config: test/e2e/e2e-banyandb-standalone.yaml
- name: Run Skywalking E2E Test (BanyanDB cluster as database)
config: test/e2e/e2e-banyandb-cluster.yaml
- name: Run SWCK E2E Test
config: test/e2e/swck/e2e.yaml
name: ${{ matrix.test.name }}
Expand Down
5 changes: 3 additions & 2 deletions chart/skywalking/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ dependencies:
repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
condition: postgresql.enabled
- name: skywalking-banyandb-helm
version: 0.1.0
repository: oci://registry-1.docker.io/apache
alias: banyandb
version: 0.0.0-8bdff75
repository: oci://ghcr.io/apache/skywalking-banyandb-helm
condition: banyandb.enabled
11 changes: 11 additions & 0 deletions chart/skywalking/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -456,6 +456,17 @@ banyandb:
httpHost: banyandb-http
httpPort: 17913
targets: "banyandb-grpc:17912"
standalone:
enabled: true
cluster:
enabled: false
liaison:
replicas: 1
data:
replicas: 1
etcd:
enabled: false
replicaCount: 1

satellite:
name: satellite
Expand Down
208 changes: 208 additions & 0 deletions test/e2e/e2e-banyandb-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This file is used to show how to write configuration files and can be used to test.

setup:
env: kind
file: kind.yaml
init-system-environment: env
kind:
expose-ports:
- namespace: istio-system
resource: service/skywalking-ui
port: 80
steps:
- name: install yq
command: bash test/e2e/setup-e2e-shell/install.sh yq
- name: install swctl
command: bash test/e2e/setup-e2e-shell/install.sh swctl
- name: install kubectl
command: bash test/e2e/setup-e2e-shell/install.sh kubectl
- name: install istio
command: |
bash test/e2e/setup-e2e-shell/install.sh istioctl
istioctl install -y --set profile=demo \
--set meshConfig.defaultConfig.envoyAccessLogService.address=skywalking-satellite.istio-system:11800 \
--set meshConfig.enableEnvoyAccessLogService=true
kubectl label namespace default istio-injection=enabled
- name: Install helm
command: bash test/e2e/setup-e2e-shell/install.sh helm
- name: Install SkyWalking
command: |
helm dep up chart/skywalking
helm -n istio-system install --timeout 10m skywalking chart/skywalking \
--set fullnameOverride=skywalking \
--set oap.env.SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS=k8s-mesh \
--set oap.env.SW_ENVOY_METRIC_ALS_TCP_ANALYSIS=k8s-mesh \
--set oap.env.K8S_SERVICE_NAME_RULE='e2e::${service.metadata.name}' \
--set oap.replicas=1 \
--set ui.image.repository=$UI_REPO \
--set ui.image.tag=$UI_TAG \
--set oap.image.repository=$OAP_REPO \
--set oap.image.tag=$OAP_TAG \
--set oap.storageType=banyandb \
--set elasticsearch.enabled=false \
--set banyandb.enabled=true \
--set banyandb.standalone.enabled=false \
--set banyandb.cluster.enabled=true \
--set banyandb.etcd.enabled=true \
--set satellite.enabled=true \
--set satellite.image.repository=$SATELLITE_REPO \
--set satellite.image.tag=$SATELLITE_TAG \
-f test/e2e/values.yaml
wait:
- namespace: istio-system
resource: deployments/skywalking-oap
for: condition=available
- namespace: istio-system
resource: deployments/skywalking-satellite
for: condition=available
- name: Deploy demo services
command: |
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo.yaml
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/bookinfo-gateway.yaml
# Enable TCP services
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo-db.yaml
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/destination-rule-all.yaml
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/virtual-service-ratings-db.yaml
wait:
- namespace: default
resource: pod
for: condition=Ready
- name: Generate traffic
path: traffic-gen.yaml
wait:
- namespace: default
resource: pod
for: condition=Ready
timeout: 25m

verify:
retry:
count: 20
interval: 10s
cases:
# service list
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql service ls
expected: expected/service.yml
# service instance list
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::productpage
expected: expected/service-instance.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::reviews
expected: expected/service-instance.yml
# service endpoint
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql endpoint list --service-name=e2e::productpage
expected: expected/service-endpoint-productpage.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql endpoint list --service-name=e2e::reviews
expected: expected/service-endpoint-reviews.yml

# service metrics: e2e::productpage
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_sla --service-name=e2e::productpage |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_cpm --service-name=e2e::productpage |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_resp_time --service-name=e2e::productpage |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_apdex --service-name=e2e::productpage |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
# service metrics: e2e::reviews
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_sla --service-name=e2e::reviews |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_cpm --service-name=e2e::reviews |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_resp_time --service-name=e2e::reviews |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_apdex --service-name=e2e::reviews |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
# service instance metrics: e2e::productpage
- query: |
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_instance_resp_time --service-name=e2e::productpage --instance-name=$( \
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::productpage | yq e '.[0].name' -
) |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: |
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_instance_cpm --service-name=e2e::productpage --instance-name=$( \
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::productpage | yq e '.[0].name' -
) |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: |
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_instance_sla --service-name=e2e::productpage --instance-name=$( \
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::productpage | yq e '.[0].name' -
) |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
# service instance metrics: e2e::reviews
- query: |
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_instance_resp_time --service-name=e2e::reviews --instance-name=$( \
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::reviews | yq e '.[0].name' -
) |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: |
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_instance_cpm --service-name=e2e::reviews --instance-name=$( \
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::reviews | yq e '.[0].name' -
) |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: |
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_instance_sla --service-name=e2e::reviews --instance-name=$( \
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::reviews | yq e '.[0].name' -
) |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
# service endpoint metrics: e2e::productpage GET:/productpage
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=endpoint_cpm --endpoint-name=GET:/productpage --service-name=e2e::productpage |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=endpoint_resp_time --endpoint-name=GET:/productpage --service-name=e2e::productpage |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=endpoint_sla --endpoint-name=GET:/productpage --service-name=e2e::productpage |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
# service endpoint metrics: e2e::reviews GET:/reviews/0
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=endpoint_cpm --endpoint-name=GET:/reviews/0 --service-name=e2e::reviews |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=endpoint_resp_time --endpoint-name=GET:/reviews/0 --service-name=e2e::reviews |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=endpoint_sla --endpoint-name=GET:/reviews/0 --service-name=e2e::reviews |yq e 'to_entries' -
expected: expected/metrics-has-value.yml

# dependency service
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql dependency service --service-name=e2e::productpage
expected: expected/dependency-services-productpage.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql dependency service --service-name=e2e::reviews
expected: expected/dependency-services-reviews.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql dependency instance --service-name=e2e::productpage --dest-service-name=e2e::reviews
expected: expected/dependency-services-instance-productpage.yml

# service relation metrics
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_relation_client_cpm --service-name=e2e::productpage --dest-service-name=e2e::reviews |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_relation_server_cpm --service-name=e2e::productpage --dest-service-name=e2e::reviews |yq e 'to_entries' -
expected: expected/metrics-has-value.yml
# service instance relation metrics, e2e::productpage -> e2e::reviews
- query: |
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_instance_relation_client_cpm \
--service-name=e2e::productpage --instance-name=$( \
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::productpage | yq e '.[0].name' - ) \
--dest-service-name=e2e::reviews --dest-instance-name=$( \
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::reviews | yq e '.[0].name' - ) \
|yq e 'to_entries' -
expected: expected/metrics-has-value.yml
- query: |
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics linear --name=service_instance_relation_server_cpm \
--service-name=e2e::productpage --instance-name=$( \
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::productpage | yq e '.[0].name' - ) \
--dest-service-name=e2e::reviews --dest-instance-name=$( \
swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=e2e::reviews | yq e '.[0].name' - ) \
|yq e 'to_entries' -
expected: expected/metrics-has-value.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ setup:
--set oap.storageType=banyandb \
--set elasticsearch.enabled=false \
--set banyandb.enabled=true \
--set banyandb.standalone.enabled=true \
--set banyandb.cluster.enabled=false \
--set banyandb.etcd.enabled=false \
--set satellite.enabled=true \
--set satellite.image.repository=$SATELLITE_REPO \
--set satellite.image.tag=$SATELLITE_TAG \
Expand Down

0 comments on commit 917a6ff

Please sign in to comment.