test: set up ALS E2E test (#5675)
This commit is contained in:
parent
627358ee9e
commit
239eaa01fd
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
MAVEN_OPTS: -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
|
|
|||
|
|
@ -0,0 +1,119 @@
|
|||
# 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.
|
||||
|
||||
name: Istio
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
ES_VERSION: es7
|
||||
ISTIO_VERSION: 1.7.1
|
||||
TAG: ${{ github.sha }}
|
||||
SCRIPTS_DIR: test/e2e-mesh/e2e-istio/scripts
|
||||
SW_OAP_BASE_IMAGE: openjdk:8-jre-alpine
|
||||
|
||||
jobs:
|
||||
als:
|
||||
runs-on: ubuntu-16.04
|
||||
timeout-minutes: 60
|
||||
name: Istio+Envoy Access Log Service
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.m2/repository
|
||||
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: ${{ runner.os }}-maven-
|
||||
|
||||
- name: Build Docker Image
|
||||
run: make docker
|
||||
|
||||
- name: Prepare envrionment
|
||||
run: bash ${SCRIPTS_DIR}/pre.sh
|
||||
|
||||
- name: Install Minikube
|
||||
run: bash ${SCRIPTS_DIR}/minikube.sh start
|
||||
|
||||
- name: Install Istio
|
||||
run: bash ${SCRIPTS_DIR}/istio.sh --set profile=demo --set meshConfig.defaultConfig.envoyAccessLogService.address=skywalking-oap.istio-system:11800 --set meshConfig.enableEnvoyAccessLogService=true
|
||||
|
||||
- name: Install SkyWalking
|
||||
run: |
|
||||
git clone https://github.com/apache/skywalking-kubernetes.git
|
||||
cd skywalking-kubernetes
|
||||
git reset --hard 419cd1aed8bb4ad972208e5a031527a25d2ae690
|
||||
cd chart
|
||||
helm dep up skywalking
|
||||
helm -n istio-system install skywalking skywalking \
|
||||
--set fullnameOverride=skywalking \
|
||||
--set elasticsearch.replicas=1 \
|
||||
--set oap.env.SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS=k8s-mesh \
|
||||
--set oap.envoy.als.enabled=true \
|
||||
--set oap.replicas=1 \
|
||||
--set oap.image.tag=$TAG \
|
||||
--set oap.image.repository=skywalking/oap
|
||||
kubectl -n istio-system get pods
|
||||
|
||||
sleep 3
|
||||
kubectl -n istio-system wait --for=condition=available deployments/skywalking-oap --timeout=1200s
|
||||
kubectl get pods -A -o wide --show-labels
|
||||
kubectl get services -A -o wide
|
||||
|
||||
- name: Deploy demo services
|
||||
run: bash ${SCRIPTS_DIR}/demo.sh
|
||||
|
||||
- name: Cluster Info
|
||||
if: ${{ failure() }}
|
||||
run: |
|
||||
df -h
|
||||
minikube logs
|
||||
minikube status
|
||||
|
||||
- name: Set up Minikube tunnel
|
||||
run: |
|
||||
mkdir /tmp/minikube-tunnel
|
||||
minikube tunnel > /tmp/minikube-tunnel/a.log &
|
||||
export POD_NAME=$(kubectl get pods -n istio-system -l "app=skywalking,release=skywalking,component=ui" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo $POD_NAME
|
||||
kubectl -n istio-system port-forward $POD_NAME 8080:8080 > /tmp/minikube-tunnel/b.log &
|
||||
|
||||
- name: Run E2E test
|
||||
run: |
|
||||
export GATEWAY_HOST=$(minikube ip)
|
||||
export GATEWAY_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
|
||||
export WEBAPP_HOST=127.0.0.1
|
||||
export WEBAPP_PORT=8080
|
||||
|
||||
./mvnw --batch-mode -f test/e2e/pom.xml -am -DfailIfNoTests=false verify -Dit.test=org.apache.skywalking.e2e.mesh.ALSE2E
|
||||
|
||||
- name: Logs
|
||||
if: ${{ failure() }}
|
||||
run: |
|
||||
kubectl -n istio-system logs --tail=10000 -l "app=skywalking,release=skywalking,component=ui"
|
||||
kubectl -n istio-system logs --tail=10000 -l "app=skywalking,release=skywalking,component=oap"
|
||||
cat /tmp/minikube-tunnel/*
|
||||
|
||||
- name: Clean up
|
||||
if: ${{ always() }}
|
||||
run: minikube delete
|
||||
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
|
|
|||
|
|
@ -21,8 +21,7 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
||||
|
|
@ -61,4 +60,4 @@ jobs:
|
|||
if: failure()
|
||||
with:
|
||||
name: logs
|
||||
path: logs
|
||||
path: logs
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
|
@ -115,4 +113,4 @@ jobs:
|
|||
if: failure()
|
||||
with:
|
||||
name: logs
|
||||
path: logs
|
||||
path: logs
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SKIP_TEST: true
|
||||
|
|
|
|||
|
|
@ -1,67 +0,0 @@
|
|||
# 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.
|
||||
|
||||
name: istio-mixer-ci
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
env:
|
||||
SCRIPTS_DIR: ./test/e2e-mesh/e2e-istio/scripts
|
||||
LOG_DIR: /tmp/skywalking
|
||||
INSTALL_SCRIPTS_DIR: ./install/deploy
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-16.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- name: Cache local Maven repository
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.m2/repository
|
||||
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-maven-
|
||||
- name: Prepare enviroment
|
||||
run: |
|
||||
bash ${SCRIPTS_DIR}/pre.sh
|
||||
mkdir -p ${LOG_DIR}
|
||||
- name: Compile all and Build docker image
|
||||
run: bash ${SCRIPTS_DIR}/compile_build.sh
|
||||
- name: Start minikube
|
||||
run: bash ${SCRIPTS_DIR}/minikube.sh start > ${LOG_DIR}/minikube-start-log.txt 2>&1 &
|
||||
- name: Wating minikube ready
|
||||
run: bash ${SCRIPTS_DIR}/minikube.sh wait
|
||||
- name: Setup tunnel
|
||||
run: minikube tunnel --log_dir=${LOG_DIR} &
|
||||
- name: Istio install
|
||||
run: bash ${INSTALL_SCRIPTS_DIR}/istio-deploy.sh
|
||||
- name: SW And ES install
|
||||
run: bash ${INSTALL_SCRIPTS_DIR}/skywalking-deploy.sh
|
||||
- name: Bookinfo demo install
|
||||
run: bash ${INSTALL_SCRIPTS_DIR}/demo-deploy.sh
|
||||
- uses: actions/upload-artifact@v1.0.0
|
||||
if: always()
|
||||
with:
|
||||
name: logs
|
||||
path: /tmp/skywalking
|
||||
|
|
@ -18,11 +18,6 @@ name: PluginsJDK14Test
|
|||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
PluginsJDK14Test:
|
||||
|
|
|
|||
|
|
@ -18,11 +18,6 @@ name: PluginsTest
|
|||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
PluginsTest:
|
||||
|
|
|
|||
|
|
@ -18,11 +18,6 @@ name: PluginsTest
|
|||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
PluginsTest:
|
||||
|
|
|
|||
|
|
@ -18,11 +18,6 @@ name: PluginsTest
|
|||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
PluginsTest:
|
||||
|
|
|
|||
|
|
@ -18,11 +18,6 @@ name: PluginsTest
|
|||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
PluginsTest:
|
||||
|
|
|
|||
12
Makefile
12
Makefile
|
|
@ -28,16 +28,16 @@ init:
|
|||
.PHONY: build.all build.agent build.backend build.ui build.docker
|
||||
|
||||
build.all:
|
||||
cd $(SW_ROOT) && ./mvnw clean package -Dmaven.test.skip=$(SKIP_TEST)
|
||||
cd $(SW_ROOT) && ./mvnw --batch-mode clean package -Dmaven.test.skip=$(SKIP_TEST)
|
||||
|
||||
build.agent:
|
||||
cd $(SW_ROOT) && ./mvnw clean package -Dmaven.test.skip=$(SKIP_TEST) -Pagent,dist
|
||||
cd $(SW_ROOT) && ./mvnw --batch-mode clean package -Dmaven.test.skip=$(SKIP_TEST) -Pagent,dist
|
||||
|
||||
build.backend:
|
||||
cd $(SW_ROOT) && ./mvnw clean package -Dmaven.test.skip=$(SKIP_TEST) -Pbackend,dist
|
||||
cd $(SW_ROOT) && ./mvnw --batch-mode clean package -Dmaven.test.skip=$(SKIP_TEST) -Pbackend,dist
|
||||
|
||||
build.ui:
|
||||
cd $(SW_ROOT) && ./mvnw clean package -Dmaven.test.skip=$(SKIP_TEST) -Pui,dist
|
||||
cd $(SW_ROOT) && ./mvnw --batch-mode clean package -Dmaven.test.skip=$(SKIP_TEST) -Pui,dist
|
||||
|
||||
DOCKER_BUILD_TOP:=${SW_OUT}/docker_build
|
||||
|
||||
|
|
@ -63,8 +63,8 @@ else
|
|||
DIST_NAME := apache-skywalking-apm-bin
|
||||
endif
|
||||
|
||||
ifneq ($(SW_OAP_JAVA_VERSION),)
|
||||
BUILD_ARGS := $(BUILD_ARGS) --build-arg JAVA_VERSION=$(SW_OAP_JAVA_VERSION)
|
||||
ifneq ($(SW_OAP_BASE_IMAGE),)
|
||||
BUILD_ARGS := $(BUILD_ARGS) --build-arg BASE_IMAGE=$(SW_OAP_BASE_IMAGE)
|
||||
endif
|
||||
|
||||
BUILD_ARGS := $(BUILD_ARGS) --build-arg DIST_NAME=$(DIST_NAME)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ microservices, cloud native and container-based (Docker, Kubernetes, Mesos) arch
|
|||
[](http://skywalking.apache.org/downloads/)
|
||||
[](https://github.com/apache/skywalking/actions?query=branch%3Amaster+event%3Apush+workflow%3A%22CI+AND+IT%22)
|
||||
[](https://github.com/apache/skywalking/actions?query=branch%3Amaster+event%3Apush+workflow%3AE2E)
|
||||
[](https://codecov.io/gh/apache/skywalking/branch/master)
|
||||
|
||||
# Abstract
|
||||
**SkyWalking** is an open source APM system, including monitoring, tracing, diagnosing capabilities for distributed system
|
||||
|
|
|
|||
|
|
@ -14,11 +14,11 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
ARG JAVA_VERSION=8
|
||||
ARG BASE_IMAGE='adoptopenjdk/openjdk8:alpine'
|
||||
|
||||
FROM apache/skywalking-base:8.1.0-es6 AS cli
|
||||
|
||||
FROM adoptopenjdk/openjdk$JAVA_VERSION:alpine
|
||||
FROM $BASE_IMAGE
|
||||
|
||||
ENV JAVA_OPTS=" -Xms256M " \
|
||||
SW_CLUSTER="standalone" \
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
These scripts are for istio , skywalking , ES to a kubernetes cluster.
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
- kubernetes 1.9.6+
|
||||
- helm 3
|
||||
- kubectl
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
#!/bin/bash
|
||||
# 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.
|
||||
|
||||
set -e
|
||||
# cleanup files
|
||||
|
||||
rm -fr istio/
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
#!/bin/bash
|
||||
# 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.
|
||||
|
||||
set -e
|
||||
|
||||
#free -lh
|
||||
|
||||
# The script for bookinfo Application to deploy
|
||||
BOOKINFO_VERSION="1.3"
|
||||
kubectl label namespace default istio-injection=enabled
|
||||
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-${BOOKINFO_VERSION}/samples/bookinfo/platform/kube/bookinfo.yaml
|
||||
|
||||
# check status
|
||||
kubectl get deploy | grep -E 'details|productpage|ratings|reviews' | awk '{print "deployment/"$1}' | while read deploy
|
||||
do
|
||||
kubectl wait ${deploy} --for condition=available --timeout=600s
|
||||
done
|
||||
|
||||
# request
|
||||
start=$(date "+%M")
|
||||
while true
|
||||
do
|
||||
REQUEST_STATUS=$(kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl -m 10 productpage:9080/productpage | grep -o "<title>.*</title>" | wc -l)
|
||||
if [ $REQUEST_STATUS == 1 ]; then
|
||||
break
|
||||
fi
|
||||
end=$(date "+%M")
|
||||
time=$(($end - $start))
|
||||
if [ $time -ge 3 ]; then
|
||||
echo "Request timeout"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
#!/bin/bash
|
||||
# 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.
|
||||
|
||||
set -e
|
||||
|
||||
# Add istio official repo
|
||||
add_repo(){
|
||||
VERSION=$1
|
||||
REPO="https://storage.googleapis.com/istio-release/releases/${VERSION}/charts/"
|
||||
helm repo add istio $REPO
|
||||
|
||||
STATUS_CMD=`echo $?`
|
||||
CHECK_REPO_CMD=`helm repo list | grep $REPO | wc -l`
|
||||
echo "$STATUS_CMD"
|
||||
echo "$CHECK_REPO_CMD"
|
||||
while [[ $STATUS_CMD != 0 && $CHECK_REPO_CMD -ge 1 ]]
|
||||
do
|
||||
sleep 5
|
||||
helm repo add istio $REPO
|
||||
|
||||
STATUS_CMD=`echo $?`
|
||||
CHECK_REPO_CMD=`helm repo list | grep $REPO | wc -l`
|
||||
done
|
||||
}
|
||||
|
||||
# Create istio-system namespace
|
||||
create_namespace() {
|
||||
NAMESPACE=$1
|
||||
kubectl create ns ${NAMESPACE}
|
||||
|
||||
STATUS_CMD=`echo $?`
|
||||
while [[ $STATUS_CMD != 0 ]]
|
||||
do
|
||||
sleep 5
|
||||
kubectl create ns ${NAMESPACE}
|
||||
STATUS_CMD=`echo $?`
|
||||
done
|
||||
}
|
||||
|
||||
# Create CRD need for istio
|
||||
create_crd() {
|
||||
NAMESPACE=$1
|
||||
helm install istio-init istio/istio-init -n ${NAMESPACE}
|
||||
CRD_COUNT=`kubectl get crds | grep 'istio.i' | wc -l`
|
||||
|
||||
while [[ ${CRD_COUNT} != 23 ]]
|
||||
do
|
||||
sleep 5
|
||||
CRD_COUNT=`kubectl get crds | grep 'istio.io' | wc -l`
|
||||
done
|
||||
|
||||
echo 'Istio crd create successful'
|
||||
}
|
||||
|
||||
# Deploy istio related components
|
||||
deploy_istio() {
|
||||
NAMESPACE=$1
|
||||
VERSION=$2
|
||||
CHART_DIR="istio-skywalking-ci/install/kubernetes/helm"
|
||||
|
||||
git clone -b istio-skywalking-ci https://github.com/SkyAPMTest/istio-skywalking-ci.git
|
||||
|
||||
cd $CHART_DIR
|
||||
|
||||
helm install istio istio -n ${NAMESPACE} -f istio/values-istio-skywalking.yaml
|
||||
|
||||
check() {
|
||||
kubectl -n ${NAMESPACE} get deploy | grep istio | awk '{print "deployment/"$1}' | while read line ;
|
||||
do
|
||||
kubectl rollout status $line -n ${NAMESPACE} --timeout 10m
|
||||
done
|
||||
}
|
||||
check
|
||||
|
||||
echo "Istio is deployed successful"
|
||||
}
|
||||
|
||||
add_mixer_template() {
|
||||
VERSION=$1
|
||||
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$VERSION/mixer/template/metric/template.yaml
|
||||
}
|
||||
|
||||
main(){
|
||||
ISTIO_VERSION="1.3.3"
|
||||
ISTIO_NAMESPACE="istio-system"
|
||||
add_repo $ISTIO_VERSION
|
||||
if [[ `kubectl get ns | grep $ISTIO_NAMESPACE | wc -l ` == 0 && `kubectl get ns $ISTIO_NAMESPACE | grep -v NAME | wc -l` == 0 ]] ;then
|
||||
create_namespace $ISTIO_NAMESPACE
|
||||
fi
|
||||
create_crd $ISTIO_NAMESPACE
|
||||
deploy_istio $ISTIO_NAMESPACE $ISTIO_VERSION
|
||||
add_mixer_template $ISTIO_VERSION
|
||||
}
|
||||
|
||||
main
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
#!/bin/bash
|
||||
# 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.
|
||||
|
||||
set -e
|
||||
|
||||
CURRENT_DIR="$(cd "$(dirname $0)"; pwd)"
|
||||
|
||||
CHART_PATH="$CURRENT_DIR/../kubernetes/helm"
|
||||
DPELOY_NAMESPACE="istio-system"
|
||||
NEED_CHECK_PREFIX="deployment/skywalking-skywalking-"
|
||||
ALS_ENABLED=true
|
||||
MIXER_ENABLED=true
|
||||
|
||||
cd ${CHART_PATH}
|
||||
|
||||
and_stable_repo(){
|
||||
STABLE_REPO="https://kubernetes-charts.storage.googleapis.com/"
|
||||
helm repo add stable $STABLE_REPO
|
||||
|
||||
STATUS_CMD=`echo $?`
|
||||
CHECK_REPO_CMD=`helm repo list | grep $STABLE_REPO | wc -l`
|
||||
echo "$STATUS_CMD"
|
||||
echo "$CHECK_REPO_CMD"
|
||||
while [[ $STATUS_CMD != 0 && $CHECK_REPO_CMD -ge 1 ]]
|
||||
do
|
||||
sleep 5
|
||||
helm repo add stable $STABLE_REPO
|
||||
|
||||
STATUS_CMD=`echo $?`
|
||||
CHECK_REPO_CMD=`helm repo list | grep $STABLE_REPO | wc -l`
|
||||
done
|
||||
}
|
||||
|
||||
and_stable_repo
|
||||
|
||||
helm dep up skywalking
|
||||
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
sudo sysctl -w vm.drop_caches=1
|
||||
sudo sysctl -w vm.drop_caches=3
|
||||
|
||||
TAG="ci"
|
||||
IMAGE="skywalking/oap"
|
||||
|
||||
docker images
|
||||
|
||||
helm -n $DPELOY_NAMESPACE install skywalking skywalking --set oap.istio.adapter.enabled=$MIXER_ENABLED \
|
||||
--set oap.envoy.als.enabled=$ALS_ENABLED --set oap.replicas=1 --set oap.image.tag=$TAG --set oap.image.repository=$IMAGE
|
||||
|
||||
for component in $NEED_CHECK_PREFIX"oap" ; do
|
||||
sleep 60
|
||||
kubectl get deploy -o wide -n $DPELOY_NAMESPACE
|
||||
kubectl -n ${DPELOY_NAMESPACE} wait $component --for condition=available --timeout=600s
|
||||
done
|
||||
|
||||
rm -rf tag.txt
|
||||
|
||||
echo "SkyWalking deployed successfully"
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
# 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.
|
||||
|
||||
apiVersion: v2
|
||||
name: skywalking
|
||||
home: https://skywalking.apache.org
|
||||
version: 0.1.2
|
||||
appVersion: latest
|
||||
description: Apache SkyWalking APM System
|
||||
icon: https://raw.githubusercontent.com/apache/skywalking-kubernetes/master/logo/sw-logo-for-chart.jpg
|
||||
sources:
|
||||
- https://github.com/apache/skywalking-kubernetes
|
||||
maintainers:
|
||||
- name: hanahmily
|
||||
email: hanahmily@gmail.com
|
||||
- name: innerpeacez
|
||||
email: innerpeace.zhai@gmail.com
|
||||
|
||||
dependencies:
|
||||
- name: elasticsearch
|
||||
version: 6.8.2
|
||||
condition: elasticsearch.enabled
|
||||
|
|
@ -1,232 +0,0 @@
|
|||
`
|
||||
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.
|
||||
`
|
||||
|
||||
# Apache Skywalking Helm Chart
|
||||
|
||||
[Apache SkyWalking](https://skywalking.apache.org/) is application performance monitor tool for distributed systems, especially designed for microservices, cloud native and container-based (Docker, K8s, Mesos) architectures.
|
||||
|
||||
## Introduction
|
||||
|
||||
This chart bootstraps a [Apache SkyWalking](https://skywalking.apache.org/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Kubernetes 1.9.6+
|
||||
- PV dynamic provisioning support on the underlying infrastructure (StorageClass)
|
||||
- Helm 3
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```shell
|
||||
$ helm install my-release skywalking -n <namespace>
|
||||
```
|
||||
|
||||
The command deploys Apache Skywalking on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
||||
|
||||
> **Tip**: List all releases using `helm list`
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `my-release` deployment:
|
||||
|
||||
```shell
|
||||
$ helm uninstall my-release -n <namespace>
|
||||
```
|
||||
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following table lists the configurable parameters of the Skywalking chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|---------------------------------------|--------------------------------------------------------------------|-------------------------------------|
|
||||
| `nameOverride` | Override name | `nil` |
|
||||
| `serviceAccounts.oap` | Name of the OAP service account to use or create | `nil` |
|
||||
| `oap.name` | OAP deployment name | `oap` |
|
||||
| `oap.image.repository` | OAP container image name | `apache/skywalking-oap-server` |
|
||||
| `oap.image.tag` | OAP container image tag | `6.1.0` |
|
||||
| `oap.image.pullPolicy` | OAP container image pull policy | `IfNotPresent` |
|
||||
| `oap.ports.grpc` | OAP grpc port for tracing or metric | `11800` |
|
||||
| `oap.ports.rest` | OAP http port for Web UI | `12800` |
|
||||
| `oap.replicas` | OAP k8s deployment replicas | `2` |
|
||||
| `oap.service.type` | OAP svc type | `ClusterIP` |
|
||||
| `oap.javaOpts` | Parameters to be added to `JAVA_OPTS`environment variable for OAP | `-Xms2g -Xmx2g` |
|
||||
| `oap.antiAffinity` | OAP anti-affinity policy | `soft` |
|
||||
| `oap.nodeAffinity` | OAP node affinity policy | `{}` |
|
||||
| `oap.nodeSelector` | OAP labels for master pod assignment | `{}` |
|
||||
| `oap.tolerations` | OAP tolerations | `[]` |
|
||||
| `oap.resources` | OAP node resources requests & limits | `{} - cpu limit must be an integer` |
|
||||
| `oap.envoy.als.enabled` | Open envoy als | `false` |
|
||||
| `oap.istio.adapter.enabled` | Open istio adapter | `false` |
|
||||
| `oap.env` | OAP environment variables | `[]` |
|
||||
| `ui.name` | Web UI deployment name | `ui` |
|
||||
| `ui.replicas` | Web UI k8s deployment replicas | `1` |
|
||||
| `ui.image.repository` | Web UI container image name | `apache/skywalking-ui` |
|
||||
| `ui.image.tag` | Web UI container image tag | `6.1.0` |
|
||||
| `ui.image.pullPolicy` | Web UI container image pull policy | `IfNotPresent` |
|
||||
| `ui.ingress.enabled` | Create Ingress for Web UI | `false` |
|
||||
| `ui.ingress.annotations` | Associate annotations to the Ingress | `{}` |
|
||||
| `ui.ingress.path` | Associate path with the Ingress | `/` |
|
||||
| `ui.ingress.hosts` | Associate hosts with the Ingress | `[]` |
|
||||
| `ui.ingress.tls` | Associate TLS with the Ingress | `[]` |
|
||||
| `ui.service.type` | Web UI svc type | `ClusterIP` |
|
||||
| `ui.service.externalPort` | external port for the service | `80` |
|
||||
| `ui.service.internalPort` | internal port for the service | `8080` |
|
||||
| `ui.service.externalIPs` | external IP addresses | `nil` |
|
||||
| `ui.service.loadBalancerIP` | Load Balancer IP address | `nil` |
|
||||
| `ui.service.annotations` | Kubernetes service annotations | `{}` |
|
||||
| `ui.service.loadBalancerSourceRanges` | Limit load balancer source IPs to list of CIDRs (where available)) | `[]` |
|
||||
| `elasticsearch.enabled` | Spin up a new elasticsearch cluster for SkyWalking | `true` |
|
||||
| `elasticsearch.client.name` | `client` | Client component name |
|
||||
| `elasticsearch.client.replicas` | `2` | Client node replicas (deployment) |
|
||||
| `elasticsearch.client.resources` | `{} - cpu limit must be an integer` | Client node resources requests & limits |
|
||||
| `elasticsearch.client.priorityClassName` | `nil` | Client priorityClass |
|
||||
| `elasticsearch.client.heapSize` | `512m` | Client node heap size |
|
||||
| `elasticsearch.client.podAnnotations` | `{}` | Client Deployment annotations |
|
||||
| `elasticsearch.client.nodeSelector` | `{}` | Node labels for client pod assignment |
|
||||
| `elasticsearch.client.tolerations` | `[]` | Client tolerations |
|
||||
| `elasticsearch.client.serviceAnnotations` | `{}` | Client Service annotations |
|
||||
| `elasticsearch.client.serviceType` | `ClusterIP` | Client service type |
|
||||
| `elasticsearch.client.httpNodePort` | `nil` | Client service HTTP NodePort port number. Has no effect if client.serviceType is not `NodePort`. |
|
||||
| `elasticsearch.client.loadBalancerIP` | `{}` | Client loadBalancerIP |
|
||||
| `elasticsearch.client.loadBalancerSourceRanges` | `{}` | Client loadBalancerSourceRanges |
|
||||
| `elasticsearch.client.antiAffinity` | `soft` | Client anti-affinity policy |
|
||||
| `elasticsearch.client.nodeAffinity` | `{}` | Client node affinity policy |
|
||||
| `elasticsearch.client.initResources` | `{}` | Client initContainer resources requests & limits |
|
||||
| `elasticsearch.client.additionalJavaOpts` | `""` | Parameters to be added to `ES_JAVA_OPTS` environment variable for client |
|
||||
| `elasticsearch.client.ingress.enabled` | `false` | Enable Client Ingress |
|
||||
| `elasticsearch.client.ingress.user` | `nil` | If this & password are set, enable basic-auth on ingress |
|
||||
| `elasticsearch.client.ingress.password` | `nil` | If this & user are set, enable basic-auth on ingress |
|
||||
| `elasticsearch.client.ingress.annotations` | `{}` | Client Ingress annotations |
|
||||
| `elasticsearch.client.ingress.hosts` | `[]` | Client Ingress Hostnames |
|
||||
| `elasticsearch.client.ingress.tls` | `[]` | Client Ingress TLS configuration |
|
||||
| `elasticsearch.client.exposeTransportPort` | `false` | Expose transport port 9300 on client service (ClusterIP) |
|
||||
| `elasticsearch.master.initResources` | `{}` | Master initContainer resources requests & limits |
|
||||
| `elasticsearch.master.additionalJavaOpts` | `""` | Parameters to be added to `ES_JAVA_OPTS` environment variable for master |
|
||||
| `elasticsearch.master.exposeHttp` | `false` | Expose http port 9200 on master Pods for monitoring, etc |
|
||||
| `elasticsearch.master.name` | `master` | Master component name |
|
||||
| `elasticsearch.master.replicas` | `2` | Master node replicas (deployment) |
|
||||
| `elasticsearch.master.resources` | `{} - cpu limit must be an integer` | Master node resources requests & limits |
|
||||
| `elasticsearch.master.priorityClassName` | `nil` | Master priorityClass |
|
||||
| `elasticsearch.master.podAnnotations` | `{}` | Master Deployment annotations |
|
||||
| `elasticsearch.master.nodeSelector` | `{}` | Node labels for master pod assignment |
|
||||
| `elasticsearch.master.tolerations` | `[]` | Master tolerations |
|
||||
| `elasticsearch.master.heapSize` | `512m` | Master node heap size |
|
||||
| `elasticsearch.master.name` | `master` | Master component name |
|
||||
| `elasticsearch.master.persistence.enabled` | `false` | Master persistent enabled/disabled |
|
||||
| `elasticsearch.master.persistence.name` | `data` | Master statefulset PVC template name |
|
||||
| `elasticsearch.master.persistence.size` | `4Gi` | Master persistent volume size |
|
||||
| `elasticsearch.master.persistence.storageClass` | `nil` | Master persistent volume Class |
|
||||
| `elasticsearch.master.persistence.accessMode` | `ReadWriteOnce` | Master persistent Access Mode |
|
||||
| `elasticsearch.master.readinessProbe` | see `values.yaml` for defaults | Master container readiness probes |
|
||||
| `elasticsearch.master.antiAffinity` | `soft` | Master anti-affinity policy |
|
||||
| `elasticsearch.master.nodeAffinity` | `{}` | Master node affinity policy |
|
||||
| `elasticsearch.master.podManagementPolicy` | `OrderedReady` | Master pod creation strategy |
|
||||
| `elasticsearch.master.updateStrategy` | `{type: "onDelete"}` | Master node update strategy policy |
|
||||
| `elasticsearch.data.initResources` | `{}` | Data initContainer resources requests & limits |
|
||||
| `elasticsearch.data.additionalJavaOpts` | `""` | Parameters to be added to `ES_JAVA_OPTS` environment variable for data |
|
||||
| `elasticsearch.data.exposeHttp` | `false` | Expose http port 9200 on data Pods for monitoring, etc |
|
||||
| `elasticsearch.data.replicas` | `2` | Data node replicas (statefulset) |
|
||||
| `elasticsearch.data.resources` | `{} - cpu limit must be an integer` | Data node resources requests & limits |
|
||||
| `elasticsearch.data.priorityClassName` | `nil` | Data priorityClass |
|
||||
| `elasticsearch.data.heapSize` | `1536m` | Data node heap size |
|
||||
| `elasticsearch.data.hooks.drain.enabled` | `true` | Data nodes: Enable drain pre-stop and post-start hook |
|
||||
| `elasticsearch.data.persistence.enabled` | `false` | Data persistent enabled/disabled |
|
||||
| `elasticsearch.data.persistence.name` | `data` | Data statefulset PVC template name |
|
||||
| `elasticsearch.data.persistence.size` | `30Gi` | Data persistent volume size |
|
||||
| `elasticsearch.data.persistence.storageClass` | `nil` | Data persistent volume Class |
|
||||
| `elasticsearch.data.persistence.accessMode` | `ReadWriteOnce` | Data persistent Access Mode |
|
||||
| `elasticsearch.data.readinessProbe` | see `values.yaml` for defaults | Readiness probes for data-containers |
|
||||
| `elasticsearch.data.podAnnotations` | `{}` | Data StatefulSet annotations |
|
||||
| `elasticsearch.data.nodeSelector` | `{}` | Node labels for data pod assignment |
|
||||
| `elasticsearch.data.tolerations` | `[]` | Data tolerations |
|
||||
| `elasticsearch.data.terminationGracePeriodSeconds` | `3600` | Data termination grace period (seconds) |
|
||||
| `elasticsearch.data.antiAffinity` | `soft` | Data anti-affinity policy |
|
||||
| `elasticsearch.data.nodeAffinity` | `{}` | Data node affinity policy |
|
||||
| `elasticsearch.data.podManagementPolicy` | `OrderedReady` | Data pod creation strategy |
|
||||
| `elasticsearch.data.updateStrategy` | `{type: "onDelete"}` | Data node update strategy policy |
|
||||
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
$ helm install myrelease skywalking --set nameOverride=newSkywalking
|
||||
```
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
```console
|
||||
$ helm install my-release skywalking -f values.yaml
|
||||
```
|
||||
|
||||
> **Tip**: You can use the default [values.yaml](values.yaml)
|
||||
|
||||
### RBAC Configuration
|
||||
Roles and RoleBindings resources will be created automatically for `OAP` .
|
||||
|
||||
> **Tip**: You can refer to the default `oap-role.yaml` file in [templates](templates/) to customize your own.
|
||||
|
||||
### Ingress TLS
|
||||
If your cluster allows automatic create/retrieve of TLS certificates (e.g. [kube-lego](https://github.com/jetstack/kube-lego)), please refer to the documentation for that mechanism.
|
||||
|
||||
To manually configure TLS, first create/retrieve a key & certificate pair for the address(skywalking ui) you wish to protect. Then create a TLS secret in the namespace:
|
||||
|
||||
```console
|
||||
kubectl create secret tls skywalking-tls --cert=path/to/tls.cert --key=path/to/tls.key
|
||||
```
|
||||
|
||||
Include the secret's name, along with the desired hostnames, in the skywalking-ui Ingress TLS section of your custom `values.yaml` file:
|
||||
|
||||
```yaml
|
||||
ui:
|
||||
ingress:
|
||||
## If true, Skywalking ui server Ingress will be created
|
||||
##
|
||||
enabled: true
|
||||
|
||||
## Skywalking ui server Ingress hostnames
|
||||
## Must be provided if Ingress is enabled
|
||||
##
|
||||
hosts:
|
||||
- skywalking.domain.com
|
||||
|
||||
## Skywalking ui server Ingress TLS configuration
|
||||
## Secrets must be manually created in the namespace
|
||||
##
|
||||
tls:
|
||||
- secretName: skywalking-tls
|
||||
hosts:
|
||||
- skywalking.domain.com
|
||||
```
|
||||
### Envoy ALS
|
||||
|
||||
Envoy ALS(access log service) provides fully logs about RPC routed, including HTTP and TCP.
|
||||
|
||||
If you want to open envoy ALS, you can do this by modifying values.yaml.
|
||||
|
||||
```yaml
|
||||
oap:
|
||||
envoy:
|
||||
als:
|
||||
enabled: true
|
||||
```
|
||||
|
||||
When envoy als ,will give ServiceAccount clusterrole permission.
|
||||
More envoy als ,please refer to [als_setting](../../../../docs/en/setup/envoy/als_setting.md)
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
# 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.
|
||||
|
||||
apiVersion: v2
|
||||
name: elasticsearch
|
||||
description: A ES Helm chart for SkyWalking CI pipeline
|
||||
|
||||
# A chart can be either an 'application' or a 'library' chart.
|
||||
#
|
||||
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||
# to be deployed.
|
||||
#
|
||||
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||
type: application
|
||||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
version: 6.8.2
|
||||
|
||||
# This is the version number of the application being deployed. This version number should be
|
||||
# incremented each time you make changes to the application.
|
||||
appVersion: 6.8.2
|
||||
|
||||
maintainers:
|
||||
- name: hanahmily
|
||||
email: hanahmily@gmail.com
|
||||
- name: innerpeacez
|
||||
email: innerpeace.zhai@gmail.com
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
{{/*
|
||||
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.
|
||||
*/}}
|
||||
|
||||
1. Get the application URL by running these commands:
|
||||
{{- if .Values.ingress.enabled }}
|
||||
{{- range $host := .Values.ingress.hosts }}
|
||||
{{- range .paths }}
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "elasticsearch.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "elasticsearch.fullname" . }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "elasticsearch.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "elasticsearch.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80
|
||||
{{- end }}
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
{{/*
|
||||
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.
|
||||
*/}}
|
||||
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "elasticsearch.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
If release name contains chart name it will be used as a full name.
|
||||
*/}}
|
||||
{{- define "elasticsearch.fullname" -}}
|
||||
{{- if .Values.fullnameOverride -}}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "elasticsearch.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "elasticsearch.labels" -}}
|
||||
helm.sh/chart: {{ include "elasticsearch.chart" . }}
|
||||
{{ include "elasticsearch.selectorLabels" . }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "elasticsearch.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "elasticsearch.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name of the service account to use
|
||||
*/}}
|
||||
{{- define "elasticsearch.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.create -}}
|
||||
{{ default (include "elasticsearch.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- else -}}
|
||||
{{ default "default" .Values.serviceAccount.name }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
# 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.
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "elasticsearch.fullname" . }}
|
||||
labels:
|
||||
{{- include "elasticsearch.labels" . | nindent 4 }}
|
||||
spec:
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "elasticsearch.selectorLabels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "elasticsearch.selectorLabels" . | nindent 8 }}
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ include "elasticsearch.serviceAccountName" . }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 9200
|
||||
- name: transport
|
||||
containerPort: 9300
|
||||
# livenessProbe:
|
||||
# httpGet:
|
||||
# path: /
|
||||
# port: http
|
||||
# readinessProbe:
|
||||
# httpGet:
|
||||
# path: /
|
||||
# port: http
|
||||
resources:
|
||||
{{- toYaml .Values.resources | nindent 12 }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
# 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.
|
||||
|
||||
{{- if .Values.ingress.enabled -}}
|
||||
{{- $fullName := include "elasticsearch.fullname" . -}}
|
||||
{{- $svcPort := .Values.service.port -}}
|
||||
{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||
apiVersion: networking.k8s.io/v1beta1
|
||||
{{- else -}}
|
||||
apiVersion: extensions/v1beta1
|
||||
{{- end }}
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ $fullName }}
|
||||
labels:
|
||||
{{- include "elasticsearch.labels" . | nindent 4 }}
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.ingress.tls }}
|
||||
tls:
|
||||
{{- range .Values.ingress.tls }}
|
||||
- hosts:
|
||||
{{- range .hosts }}
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
secretName: {{ .secretName }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- range .Values.ingress.hosts }}
|
||||
- host: {{ .host | quote }}
|
||||
http:
|
||||
paths:
|
||||
{{- range .paths }}
|
||||
- path: {{ . }}
|
||||
backend:
|
||||
serviceName: {{ $fullName }}
|
||||
servicePort: {{ $svcPort }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
# 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.
|
||||
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "elasticsearch.fullname" . }}
|
||||
labels:
|
||||
{{- include "elasticsearch.labels" . | nindent 4 }}
|
||||
spec:
|
||||
type: {{ .Values.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.service.ports.http }}
|
||||
targetPort: http
|
||||
name: http
|
||||
- name: tcp
|
||||
port: {{ .Values.service.ports.transport }}
|
||||
targetPort: transport
|
||||
selector:
|
||||
{{- include "elasticsearch.selectorLabels" . | nindent 4 }}
|
||||
|
|
@ -1,83 +0,0 @@
|
|||
# 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.
|
||||
|
||||
# Default values for elasticsearch.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
image:
|
||||
repository: elasticsearch
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
imagePullSecrets: []
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a service account should be created
|
||||
create: true
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
name:
|
||||
|
||||
podSecurityContext: {}
|
||||
# fsGroup: 2000
|
||||
|
||||
securityContext: {}
|
||||
# capabilities:
|
||||
# drop:
|
||||
# - ALL
|
||||
# readOnlyRootFilesystem: true
|
||||
# runAsNonRoot: true
|
||||
# runAsUser: 1000
|
||||
|
||||
service:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
transport: 9300
|
||||
http: 9200
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
annotations: {}
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
hosts:
|
||||
- host: chart-example.local
|
||||
paths: []
|
||||
tls: []
|
||||
# - secretName: chart-example-tls
|
||||
# hosts:
|
||||
# - chart-example.local
|
||||
|
||||
resources: {}
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||
# choice for the user. This also increases chances charts run on environments with little
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
affinity: {}
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
{{/*
|
||||
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.
|
||||
*/}}
|
||||
|
||||
|
||||
Thank you for installing {{ .Chart.Name }}.
|
||||
|
||||
Your release is named {{ .Release.Name }}.
|
||||
|
||||
Learn more, please visit https://skywalking.apache.org/
|
||||
|
||||
Get the UI URL by running these commands:
|
||||
{{- if .Values.ui.ingress.enabled }}
|
||||
{{- range .Values.ui.ingress.hosts }}
|
||||
http{{ if $.Values.ui.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ui.ingress.path }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.ui.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "skywalking.ui.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT
|
||||
{{- else if contains "LoadBalancer" .Values.ui.service.type }}
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch the status of by running 'kubectl get svc -w {{ include "skywalking.ui.fullname" . }} -n {{ .Release.Namespace }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "skywalking.ui.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP:{{ .Values.ui.service.externalPort }}
|
||||
{{- else if contains "ClusterIP" .Values.ui.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "skywalking.name" . }},release={{ .Release.Name }},component={{ .Values.ui.name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||
kubectl port-forward $POD_NAME 8080:{{ .Values.ui.service.internalPort }}
|
||||
{{- end }}
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
{{/*
|
||||
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.
|
||||
*/}}
|
||||
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "skywalking.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
*/}}
|
||||
{{- define "skywalking.fullname" -}}
|
||||
{{- if .Values.fullnameOverride -}}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified oap name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
*/}}
|
||||
{{- define "skywalking.oap.fullname" -}}
|
||||
{{ template "skywalking.fullname" . }}-{{ .Values.oap.name }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified ui name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
*/}}
|
||||
{{- define "skywalking.ui.fullname" -}}
|
||||
{{ template "skywalking.fullname" . }}-{{ .Values.ui.name }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name of the service account to use for the oap cluster
|
||||
*/}}
|
||||
{{- define "skywalking.serviceAccountName.oap" -}}
|
||||
{{ default (include "skywalking.oap.fullname" .) .Values.serviceAccounts.oap }}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "call-nested" }}
|
||||
{{- $dot := index . 0 }}
|
||||
{{- $subchart := index . 1 }}
|
||||
{{- $template := index . 2 }}
|
||||
{{- include $template (dict "Chart" (dict "Name" $subchart) "Values" (index $dot.Values $subchart) "Release" $dot.Release "Capabilities" $dot.Capabilities) }}
|
||||
{{- end }}
|
||||
|
||||
{{- define "skywalking.containers.wait-for-es" -}}
|
||||
- name: wait-for-elasticsearch
|
||||
image: busybox:1.30
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ['sh', '-c', 'for i in $(seq 1 60); do nc -z -w3 {{ include "call-nested" (list . "elasticsearch" "elasticsearch.fullname") }} 9200 && exit 0 || sleep 5; done; exit 1']
|
||||
{{- end -}}
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
# 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.
|
||||
|
||||
# https://docs.sentry.io/server/installation/docker/#running-migrations
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: "{{ .Release.Name }}-es-init"
|
||||
labels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
component: "{{ template "skywalking.fullname" . }}-job"
|
||||
heritage: {{ .Release.Service }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
name: "{{ .Release.Name }}-es-init"
|
||||
labels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
component: "{{ template "skywalking.fullname" . }}-job"
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
initContainers:
|
||||
{{- include "skywalking.containers.wait-for-es" . | nindent 6 }}
|
||||
containers:
|
||||
- name: {{ .Values.oap.name }}
|
||||
image: "{{ .Values.oap.image.repository }}:{{ .Chart.AppVersion }}"
|
||||
imagePullPolicy: {{ .Values.oap.image.pullPolicy }}
|
||||
{{- if .Values.oap.resources }}
|
||||
resources:
|
||||
{{ toYaml .Values.oap.resources | indent 10 }}
|
||||
{{- end }}
|
||||
env:
|
||||
- name: JAVA_OPTS
|
||||
value: "{{ .Values.oap.javaOpts }} -Dmode=init"
|
||||
- name: SW_STORAGE
|
||||
value: elasticsearch
|
||||
- name: SW_STORAGE_ES_CLUSTER_NODES
|
||||
value: "{{ include "call-nested" (list . "elasticsearch" "elasticsearch.fullname") }}:9200"
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
# 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.
|
||||
|
||||
{{- if .Values.oap.istio.adapter.enabled }}
|
||||
apiVersion: "config.istio.io/v1alpha2"
|
||||
kind: adapter
|
||||
metadata:
|
||||
name: skywalking-adapter
|
||||
spec:
|
||||
description:
|
||||
session_based: false
|
||||
templates:
|
||||
- metric
|
||||
{{- end}}
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
# 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.
|
||||
|
||||
{{- if .Values.oap.istio.adapter.enabled }}
|
||||
apiVersion: "config.istio.io/v1alpha2"
|
||||
kind: handler
|
||||
metadata:
|
||||
name: skywalking-handler
|
||||
spec:
|
||||
adapter: skywalking-adapter
|
||||
connection:
|
||||
address: {{ template "skywalking.oap.fullname" . }}"."{{ .Release.Namespace }}".svc.cluster.local:11800"
|
||||
{{- end }}
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
# 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.
|
||||
|
||||
# instance for template metric
|
||||
{{- if .Values.oap.istio.adapter.enabled }}
|
||||
apiVersion: "config.istio.io/v1alpha2"
|
||||
kind: instance
|
||||
metadata:
|
||||
name: skywalking-metric
|
||||
spec:
|
||||
template: metric
|
||||
params:
|
||||
value: request.size | 0
|
||||
dimensions:
|
||||
sourceService: source.workload.name | ""
|
||||
sourceNamespace: source.workload.namespace | ""
|
||||
sourceUID: source.uid | ""
|
||||
destinationService: destination.workload.name | ""
|
||||
destinationNamespace: destination.workload.namespace | ""
|
||||
destinationUID: destination.uid | ""
|
||||
requestMethod: request.method | ""
|
||||
requestPath: request.path | ""
|
||||
requestScheme: request.scheme | ""
|
||||
requestTime: request.time
|
||||
responseTime: response.time
|
||||
responseCode: response.code | 200
|
||||
reporter: conditional((context.reporter.kind | "inbound") == "outbound", "source", "destination")
|
||||
apiProtocol: api.protocol | ""
|
||||
{{- end }}
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
# 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.
|
||||
|
||||
# rule to dispatch to handler sw
|
||||
{{- if .Values.oap.istio.adapter.enabled }}
|
||||
apiVersion: "config.istio.io/v1alpha2"
|
||||
kind: rule
|
||||
metadata:
|
||||
name: swmetric-rule
|
||||
spec:
|
||||
actions:
|
||||
- handler: skywalking-handler.istio-system
|
||||
instances:
|
||||
- skywalking-metric
|
||||
{{- end }}
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
# 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.
|
||||
|
||||
{{- if .Values.oap.envoy.als.enabled }}
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: {{ template "skywalking.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["pods"]
|
||||
verbs: ["get", "watch", "list"]
|
||||
- apiGroups: ["extensions"]
|
||||
resources: ["deployments", "replicasets"]
|
||||
verbs: ["get", "watch", "list"]
|
||||
{{- end }}
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
# 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.
|
||||
|
||||
{{- if .Values.oap.envoy.als.enabled }}
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: {{ template "skywalking.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: {{ template "skywalking.fullname" . }}
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ template "skywalking.serviceAccountName.oap" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
{{- end }}
|
||||
|
|
@ -1,118 +0,0 @@
|
|||
# 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.
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
component: "{{ .Values.oap.name }}"
|
||||
heritage: {{ .Release.Service }}
|
||||
release: {{ .Release.Name }}
|
||||
name: {{ template "skywalking.oap.fullname" . }}
|
||||
spec:
|
||||
replicas: {{ .Values.oap.replicas }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
component: "{{ .Values.oap.name }}"
|
||||
release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
component: "{{ .Values.oap.name }}"
|
||||
release: {{ .Release.Name }}
|
||||
{{- if .Values.oap.podAnnotations }}
|
||||
annotations:
|
||||
{{ toYaml .Values.oap.podAnnotations | indent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
serviceAccountName: {{ template "skywalking.serviceAccountName.oap" . }}
|
||||
affinity:
|
||||
{{- if eq .Values.oap.antiAffinity "hard" }}
|
||||
podAntiAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
- topologyKey: "kubernetes.io/hostname"
|
||||
labelSelector:
|
||||
matchLabels:
|
||||
app: "{{ template "skywalking.name" . }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
component: "{{ .Values.oap.name }}"
|
||||
{{- else if eq .Values.oap.antiAffinity "soft" }}
|
||||
podAntiAffinity:
|
||||
preferredDuringSchedulingIgnoredDuringExecution:
|
||||
- weight: 1
|
||||
podAffinityTerm:
|
||||
topologyKey: kubernetes.io/hostname
|
||||
labelSelector:
|
||||
matchLabels:
|
||||
app: "{{ template "skywalking.name" . }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
component: "{{ .Values.oap.name }}"
|
||||
{{- end }}
|
||||
{{- with .Values.oap.nodeAffinity }}
|
||||
nodeAffinity:
|
||||
{{ toYaml . | indent 10 }}
|
||||
{{- end }}
|
||||
{{- if .Values.oap.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{ toYaml .Values.oap.nodeSelector | indent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.oap.tolerations }}
|
||||
tolerations:
|
||||
{{ toYaml .Values.oap.tolerations | indent 8 }}
|
||||
{{- end }}
|
||||
initContainers:
|
||||
{{- include "skywalking.containers.wait-for-es" . | nindent 6 }}
|
||||
containers:
|
||||
- name: {{ .Values.oap.name }}
|
||||
image: "{{ .Values.oap.image.repository }}:{{ .Values.oap.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.oap.image.pullPolicy }}
|
||||
ports:
|
||||
- containerPort: 11800
|
||||
name: grpc
|
||||
- containerPort: 12800
|
||||
name: rest
|
||||
{{- if .Values.oap.resources }}
|
||||
resources:
|
||||
{{ toYaml .Values.oap.resources | indent 10 }}
|
||||
{{- end }}
|
||||
env:
|
||||
- name: JAVA_OPTS
|
||||
value: "{{ .Values.oap.javaOpts }} -Dmode=no-init"
|
||||
- name: SW_CLUSTER
|
||||
value: kubernetes
|
||||
- name: SW_CLUSTER_K8S_NAMESPACE
|
||||
value: "{{ .Release.Namespace }}"
|
||||
- name: SW_CLUSTER_K8S_LABEL
|
||||
value: "app={{ template "skywalking.name" . }},release={{ .Release.Name }},component={{ .Values.oap.name }}"
|
||||
- name: SKYWALKING_COLLECTOR_UID
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.uid
|
||||
- name: SW_STORAGE
|
||||
value: elasticsearch
|
||||
{{- if .Values.oap.envoy.als.enabled }}
|
||||
- name: SW_ENVOY_ALS_ENABLED
|
||||
value: {{ .Values.oap.envoy.als.enabled | quote}}
|
||||
{{- end }}
|
||||
- name: SW_STORAGE_ES_CLUSTER_NODES
|
||||
value: "{{ include "call-nested" (list . "elasticsearch" "elasticsearch.fullname") }}:9200"
|
||||
{{- range $key, $value := .Values.oap.env }}
|
||||
- name: {{ $key }}
|
||||
value: {{ $value | quote }}
|
||||
{{- end }}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
# 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.
|
||||
|
||||
{{- if not .Values.oap.envoy.als.enabled }}
|
||||
kind: Role
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: {{ template "skywalking.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["pods"]
|
||||
verbs: ["get", "watch", "list"]
|
||||
{{- end }}
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
# 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.
|
||||
|
||||
{{- if not .Values.oap.envoy.als.enabled }}
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
name: {{ template "skywalking.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: Role
|
||||
name: {{ template "skywalking.fullname" . }}
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ template "skywalking.serviceAccountName.oap" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
{{- end }}
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
# 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.
|
||||
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "skywalking.oap.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
component: "{{ .Values.oap.name }}"
|
||||
heritage: {{ .Release.Service }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
type: {{ .Values.oap.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.oap.ports.rest }}
|
||||
name: rest
|
||||
- port: {{ .Values.oap.ports.grpc }}
|
||||
name: grpc
|
||||
selector:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
component: "{{ .Values.oap.name }}"
|
||||
release: {{ .Release.Name }}
|
||||
|
|
@ -1,269 +0,0 @@
|
|||
# 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.
|
||||
|
||||
# Default values for skywalking.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
|
||||
serviceAccounts:
|
||||
oap:
|
||||
|
||||
oap:
|
||||
name: skywalking-oap
|
||||
image:
|
||||
repository: apache/skywalking-oap-server
|
||||
tag: latest
|
||||
pullPolicy: IfNotPresent
|
||||
ports:
|
||||
grpc: 11800
|
||||
rest: 12800
|
||||
replicas: 2
|
||||
service:
|
||||
type: ClusterIP
|
||||
javaOpts: -Xmx2g -Xms2g
|
||||
antiAffinity: "soft"
|
||||
nodeAffinity: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
resources: {}
|
||||
# limits:
|
||||
# cpu: 8
|
||||
# memory: 8Gi
|
||||
# requests:
|
||||
# cpu: 8
|
||||
# memory: 4Gi
|
||||
# podAnnotations:
|
||||
# example: oap-foo
|
||||
envoy:
|
||||
als:
|
||||
enabled: false
|
||||
# more envoy ALS ,please refer to https://github.com/apache/skywalking/blob/master/docs/en/setup/envoy/als_setting.md#observe-service-mesh-through-als
|
||||
istio:
|
||||
adapter:
|
||||
enabled: false
|
||||
env:
|
||||
# more env, please refer to https://hub.docker.com/r/apache/skywalking-oap-server
|
||||
# or https://github.com/apache/skywalking-docker/blob/master/6/6.4/oap/README.md#sw_telemetry
|
||||
ui:
|
||||
name: skywalking-ui
|
||||
replicas: 1
|
||||
image:
|
||||
repository: apache/skywalking-ui
|
||||
tag: latest
|
||||
pullPolicy: IfNotPresent
|
||||
# podAnnotations:
|
||||
# example: oap-foo
|
||||
ingress:
|
||||
enabled: false
|
||||
annotations: {}
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
path: /
|
||||
hosts: []
|
||||
# - skywalking.local
|
||||
tls: []
|
||||
# - secretName: skywalking-tls
|
||||
# hosts:
|
||||
# - skywalking.local
|
||||
service:
|
||||
type: ClusterIP
|
||||
# clusterIP: None
|
||||
externalPort: 80
|
||||
internalPort: 8080
|
||||
## External IP addresses of service
|
||||
## Default: nil
|
||||
##
|
||||
# externalIPs:
|
||||
# - 192.168.0.1
|
||||
#
|
||||
## LoadBalancer IP if service.type is LoadBalancer
|
||||
## Default: nil
|
||||
##
|
||||
# loadBalancerIP: 10.2.2.2
|
||||
# Annotation example: setup ssl with aws cert when service.type is LoadBalancer
|
||||
# service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-east-1:EXAMPLE_CERT
|
||||
annotations: {}
|
||||
## Limit load balancer source ips to list of CIDRs (where available)
|
||||
# loadBalancerSourceRanges: []
|
||||
|
||||
elasticsearch:
|
||||
enabled: true
|
||||
# If elasticsearch,enabled=true values for elasticsearch.
|
||||
|
||||
## Define serviceAccount names for components. Defaults to component's fully qualified name.
|
||||
serviceAccounts:
|
||||
client:
|
||||
create: true
|
||||
name:
|
||||
master:
|
||||
create: true
|
||||
name:
|
||||
data:
|
||||
create: true
|
||||
name:
|
||||
|
||||
client:
|
||||
name: client
|
||||
replicas: 2
|
||||
serviceType: ClusterIP
|
||||
## If coupled with serviceType = "NodePort", this will set a specific nodePort to the client HTTP port
|
||||
# httpNodePort: 30920
|
||||
loadBalancerIP: {}
|
||||
loadBalancerSourceRanges: {}
|
||||
## (dict) If specified, apply these annotations to the client service
|
||||
# serviceAnnotations:
|
||||
# example: client-svc-foo
|
||||
heapSize: "512m"
|
||||
# additionalJavaOpts: "-XX:MaxRAM=512m"
|
||||
antiAffinity: "soft"
|
||||
nodeAffinity: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
initResources: {}
|
||||
# limits:
|
||||
# cpu: "25m"
|
||||
# # memory: "128Mi"
|
||||
# requests:
|
||||
# cpu: "25m"
|
||||
# memory: "128Mi"
|
||||
resources:
|
||||
limits:
|
||||
cpu: "1"
|
||||
# memory: "1024Mi"
|
||||
requests:
|
||||
cpu: "25m"
|
||||
memory: "512Mi"
|
||||
priorityClassName: ""
|
||||
## (dict) If specified, apply these annotations to each client Pod
|
||||
# podAnnotations:
|
||||
# example: client-foo
|
||||
podDisruptionBudget:
|
||||
enabled: false
|
||||
minAvailable: 1
|
||||
# maxUnavailable: 1
|
||||
ingress:
|
||||
enabled: false
|
||||
# user: NAME
|
||||
# password: PASSWORD
|
||||
annotations: {}
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
path: /
|
||||
hosts:
|
||||
- chart-example.local
|
||||
tls: []
|
||||
# - secretName: chart-example-tls
|
||||
# hosts:
|
||||
# - chart-example.local
|
||||
|
||||
master:
|
||||
name: master
|
||||
exposeHttp: false
|
||||
replicas: 3
|
||||
heapSize: "512m"
|
||||
# additionalJavaOpts: "-XX:MaxRAM=512m"
|
||||
persistence:
|
||||
enabled: false
|
||||
accessMode: ReadWriteOnce
|
||||
name: data
|
||||
size: "4Gi"
|
||||
# storageClass: "ssd"
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /_cluster/health?local=true
|
||||
port: 9200
|
||||
initialDelaySeconds: 5
|
||||
antiAffinity: "soft"
|
||||
nodeAffinity: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
initResources: {}
|
||||
# limits:
|
||||
# cpu: "25m"
|
||||
# # memory: "128Mi"
|
||||
# requests:
|
||||
# cpu: "25m"
|
||||
# memory: "128Mi"
|
||||
resources:
|
||||
limits:
|
||||
cpu: "1"
|
||||
# memory: "1024Mi"
|
||||
requests:
|
||||
cpu: "25m"
|
||||
memory: "512Mi"
|
||||
priorityClassName: ""
|
||||
## (dict) If specified, apply these annotations to each master Pod
|
||||
# podAnnotations:
|
||||
# example: master-foo
|
||||
podManagementPolicy: OrderedReady
|
||||
podDisruptionBudget:
|
||||
enabled: false
|
||||
minAvailable: 2 # Same as `cluster.env.MINIMUM_MASTER_NODES`
|
||||
# maxUnavailable: 1
|
||||
updateStrategy:
|
||||
type: OnDelete
|
||||
|
||||
data:
|
||||
name: data
|
||||
exposeHttp: false
|
||||
replicas: 2
|
||||
heapSize: "1536m"
|
||||
# additionalJavaOpts: "-XX:MaxRAM=1536m"
|
||||
persistence:
|
||||
enabled: false
|
||||
accessMode: ReadWriteOnce
|
||||
name: data
|
||||
size: "30Gi"
|
||||
# storageClass: "ssd"
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /_cluster/health?local=true
|
||||
port: 9200
|
||||
initialDelaySeconds: 5
|
||||
terminationGracePeriodSeconds: 3600
|
||||
antiAffinity: "soft"
|
||||
nodeAffinity: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
initResources: {}
|
||||
# limits:
|
||||
# cpu: "25m"
|
||||
# # memory: "128Mi"
|
||||
# requests:
|
||||
# cpu: "25m"
|
||||
# memory: "128Mi"
|
||||
resources:
|
||||
limits:
|
||||
cpu: "1"
|
||||
# memory: "2048Mi"
|
||||
requests:
|
||||
cpu: "25m"
|
||||
memory: "1536Mi"
|
||||
priorityClassName: ""
|
||||
## (dict) If specified, apply these annotations to each data Pod
|
||||
# podAnnotations:
|
||||
# example: data-foo
|
||||
podDisruptionBudget:
|
||||
enabled: false
|
||||
# minAvailable: 1
|
||||
maxUnavailable: 1
|
||||
podManagementPolicy: OrderedReady
|
||||
updateStrategy:
|
||||
type: OnDelete
|
||||
hooks: # post-start and pre-stop hooks
|
||||
drain: # drain the node before stopping it and re-integrate it into the cluster after start
|
||||
enabled: true
|
||||
|
||||
nameOverride: ""
|
||||
|
|
@ -36,6 +36,8 @@ import java.util.concurrent.TimeUnit;
|
|||
import java.util.stream.Collectors;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import static java.util.Objects.isNull;
|
||||
|
||||
@Slf4j
|
||||
public enum NamespacedPodListInformer {
|
||||
|
||||
|
|
@ -92,7 +94,9 @@ public enum NamespacedPodListInformer {
|
|||
}
|
||||
|
||||
public Optional<List<V1Pod>> listPods() {
|
||||
|
||||
if (isNull(podLister)) {
|
||||
return Optional.empty();
|
||||
}
|
||||
return Optional.ofNullable(podLister.list().size() != 0
|
||||
? podLister.list()
|
||||
.stream()
|
||||
|
|
|
|||
|
|
@ -67,8 +67,6 @@ import org.slf4j.LoggerFactory;
|
|||
public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(K8sALSServiceMeshHTTPAnalysis.class);
|
||||
|
||||
private static final String ADDRESS_TYPE_INTERNAL_IP = "InternalIP";
|
||||
|
||||
private static final String VALID_PHASE = "Running";
|
||||
|
||||
private static final String NON_TLS = "NONE";
|
||||
|
|
|
|||
12
test/e2e-mesh/e2e-istio/scripts/clean.sh → test/e2e-mesh/e2e-istio/scripts/demo.sh
Executable file → Normal file
12
test/e2e-mesh/e2e-istio/scripts/clean.sh → test/e2e-mesh/e2e-istio/scripts/demo.sh
Executable file → Normal file
|
|
@ -19,10 +19,12 @@
|
|||
# under the License.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
set -e
|
||||
set -ex
|
||||
|
||||
CONTAINER_NAME=$1
|
||||
[[ "${CONTAINER_NAME}" == "" ]] && exit 1
|
||||
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
|
||||
|
||||
docker ps | grep -e ${CONTAINER_NAME} | awk '{print $1}' | xargs docker stop
|
||||
docker ps -a | grep -e ${CONTAINER_NAME} | awk '{print $1}' | xargs docker rm
|
||||
sleep 3
|
||||
kubectl wait --for=condition=Ready pods --all --timeout=1200s
|
||||
kubectl get pods -A -o wide --show-labels
|
||||
kubectl get rs -A
|
||||
13
test/e2e-mesh/e2e-istio/scripts/compile_build.sh → test/e2e-mesh/e2e-istio/scripts/istio.sh
Executable file → Normal file
13
test/e2e-mesh/e2e-istio/scripts/compile_build.sh → test/e2e-mesh/e2e-istio/scripts/istio.sh
Executable file → Normal file
|
|
@ -19,12 +19,9 @@
|
|||
# under the License.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
set -e
|
||||
set -ex
|
||||
|
||||
TAG="ci"
|
||||
|
||||
git rev-parse HEAD
|
||||
git submodule init
|
||||
git submodule update
|
||||
|
||||
SKIP_TEST=true make build.all && make docker.oap -e TAG=$TAG
|
||||
curl -L https://istio.io/downloadIstio | sh -
|
||||
sudo mv $PWD/istio-$ISTIO_VERSION/bin/istioctl /usr/local/bin/
|
||||
istioctl install $@
|
||||
kubectl label namespace default istio-injection=enabled
|
||||
|
|
@ -21,10 +21,7 @@
|
|||
|
||||
set -x
|
||||
|
||||
K8S_VER=$2
|
||||
if [[ "${K8S_VER}" == "" ]]; then
|
||||
K8S_VER="k8s-v1.15.4"
|
||||
fi
|
||||
K8S_VER=${K8S_VER:-'k8s-v1.18.0'}
|
||||
|
||||
function waitMinikube() {
|
||||
set +e
|
||||
|
|
@ -74,30 +71,6 @@ function startMinikubeNone() {
|
|||
export MINIKUBE_HOME=$HOME
|
||||
export CHANGE_MINIKUBE_NONE_USER=true
|
||||
|
||||
# Troubleshoot problem with Docker build on some CircleCI machines.
|
||||
if [ -f /proc/sys/net/ipv4/ip_forward ]; then
|
||||
echo "IP forwarding setting: $(cat /proc/sys/net/ipv4/ip_forward)"
|
||||
echo "My hostname is:"
|
||||
hostname
|
||||
echo "My distro is:"
|
||||
cat /etc/*-release
|
||||
echo "Contents of /etc/sysctl.d/"
|
||||
ls -l /etc/sysctl.d/ || true
|
||||
echo "Contents of /etc/sysctl.conf"
|
||||
grep ip_forward /etc/sysctl.conf
|
||||
echo "Config files setting ip_forward"
|
||||
find /etc/sysctl.d/ -type f -exec grep ip_forward \{\} \; -print
|
||||
if [ "$(cat /proc/sys/net/ipv4/ip_forward)" -eq 0 ]; then
|
||||
whoami
|
||||
echo "Cannot build images without IPv4 forwarding, attempting to turn on forwarding"
|
||||
sudo sysctl -w net.ipv4.ip_forward=1
|
||||
if [ "$(cat /proc/sys/net/ipv4/ip_forward)" -eq 0 ]; then
|
||||
echo "Cannot build images without IPv4 forwarding"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
sudo -E minikube config set WantUpdateNotification false
|
||||
sudo -E minikube config set WantReportErrorPrompt false
|
||||
sudo -E minikube start --kubernetes-version=${K8S_VER#k8s-} --driver=none
|
||||
|
|
|
|||
|
|
@ -21,33 +21,9 @@
|
|||
|
||||
set -ex
|
||||
|
||||
HELMVERSION=$1
|
||||
if [[ "${HELMVERSION}" == "" ]]; then
|
||||
HELMVERSION="helm-v3.0.0"
|
||||
fi
|
||||
|
||||
MINIKUBEVERESION=$2
|
||||
if [[ "${MINIKUBEVERESION}" == "" ]]; then
|
||||
MINIKUBEVERESION="minikube-v1.8.0"
|
||||
fi
|
||||
|
||||
K8SVERSION=$3
|
||||
if [[ "${K8SVERSION}" == "" ]]; then
|
||||
K8SVERSION="k8s-v1.15.4"
|
||||
fi
|
||||
|
||||
# Remove strict host checking. The rest of the file is already populated by the 'add_ssh_keys' step.
|
||||
mkdir -p ~/.ssh
|
||||
echo -e "\tStrictHostKeyChecking no" >> ~/.ssh/config
|
||||
echo -e "\tControlMaster auto" >> ~/.ssh/config
|
||||
echo -e "\tControlPersist 3600" >> ~/.ssh/config
|
||||
echo -e "\tControlPath ~/.ssh/%r@%h:%p" >> ~/.ssh/config
|
||||
|
||||
# Create directory for logs.
|
||||
mkdir -p ~/logs
|
||||
|
||||
# create directory for e2e artifacts.
|
||||
mkdir -p ~/skywalking/test/e2e/artifacts
|
||||
HELMVERSION=${HELMVERSION:-'helm-v3.0.0'}
|
||||
MINIKUBEVERESION=${MINIKUBEVERESION:-'minikube-v1.13.1'}
|
||||
K8SVERSION=${K8SVERSION:-'k8s-v1.19.2'}
|
||||
|
||||
curl -sSL https://get.helm.sh/${HELMVERSION}-linux-amd64.tar.gz | \
|
||||
sudo tar xz -C /usr/local/bin --strip-components=1 linux-amd64/helm
|
||||
|
|
@ -61,23 +37,5 @@ curl -sSL "https://storage.googleapis.com/kubernetes-release/release/${K8SVERSIO
|
|||
chmod +x /tmp/kubectl
|
||||
sudo mv /tmp/kubectl /usr/local/bin/kubectl
|
||||
|
||||
sudo apt-get remove -y --purge man-db
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
--no-install-recommends --allow-downgrades --allow-remove-essential --allow-change-held-packages \
|
||||
xvfb libgtk-3-0 libnotify4 libgconf-2-4 libnss3 libxss1 libasound2 \
|
||||
apt-transport-https \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg-agent \
|
||||
software-properties-common \
|
||||
openjdk-8-jdk-headless
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
|
||||
sudo apt-key fingerprint 0EBFCD88
|
||||
sudo add-apt-repository \
|
||||
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
|
||||
$(lsb_release -cs) \
|
||||
stable"
|
||||
sudo apt-get update
|
||||
sudo apt-cache madison docker-ce
|
||||
sudo apt-get install -y docker-ce=5:19.03.8~3-0~ubuntu-xenial docker-ce-cli=5:19.03.8~3-0~ubuntu-xenial containerd.io
|
||||
sudo apt-get install -y socat conntrack
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public @interface RetryableTest {
|
|||
/**
|
||||
* @return maximum times to retry, or -1 for infinite retries. {@code -1} by default.
|
||||
*/
|
||||
int value() default -1;
|
||||
int value() default 300;
|
||||
|
||||
/**
|
||||
* @return the interval between any two retries, in millisecond. {@code 1000} by default.
|
||||
|
|
|
|||
|
|
@ -201,6 +201,8 @@ public class SimpleQueryClient {
|
|||
}
|
||||
|
||||
public Topology topo(final TopoQuery query) throws Exception {
|
||||
LOGGER.info("topo {}", query);
|
||||
|
||||
final URL queryFileUrl = Resources.getResource("topo.gql");
|
||||
final String queryString = Resources.readLines(queryFileUrl, StandardCharsets.UTF_8)
|
||||
.stream()
|
||||
|
|
@ -209,17 +211,27 @@ public class SimpleQueryClient {
|
|||
.replace("{step}", query.step())
|
||||
.replace("{start}", query.start())
|
||||
.replace("{end}", query.end());
|
||||
final ResponseEntity<GQLResponse<TopologyResponse>> responseEntity = restTemplate.exchange(
|
||||
new RequestEntity<>(queryString, HttpMethod.POST, URI.create(endpointUrl)),
|
||||
new ParameterizedTypeReference<GQLResponse<TopologyResponse>>() {
|
||||
|
||||
LOGGER.info("query string {}", queryString);
|
||||
|
||||
try {
|
||||
final ResponseEntity<GQLResponse<TopologyResponse>> responseEntity = restTemplate.exchange(
|
||||
new RequestEntity<>(queryString, HttpMethod.POST, URI.create(endpointUrl)),
|
||||
new ParameterizedTypeReference<GQLResponse<TopologyResponse>>() {
|
||||
}
|
||||
);
|
||||
|
||||
LOGGER.info("response {}", responseEntity);
|
||||
|
||||
if (responseEntity.getStatusCode() != HttpStatus.OK) {
|
||||
throw new RuntimeException("Response status != 200, actual: " + responseEntity.getStatusCode());
|
||||
}
|
||||
);
|
||||
|
||||
if (responseEntity.getStatusCode() != HttpStatus.OK) {
|
||||
throw new RuntimeException("Response status != 200, actual: " + responseEntity.getStatusCode());
|
||||
return Objects.requireNonNull(responseEntity.getBody()).getData().getTopo();
|
||||
} catch (Exception e) {
|
||||
LOGGER.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
return Objects.requireNonNull(responseEntity.getBody()).getData().getTopo();
|
||||
return new Topology();
|
||||
}
|
||||
|
||||
public ServiceInstanceTopology serviceInstanceTopo(final ServiceInstanceTopologyQuery query) throws Exception {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ public abstract class AbstractMatcher<T> {
|
|||
private static final Pattern GT_MATCHER = Pattern.compile("gt\\s+(?<val>.+)");
|
||||
private static final Pattern GE_MATCHER = Pattern.compile("ge\\s+(?<val>.+)");
|
||||
private static final Pattern NN_MATCHER = Pattern.compile("^not null$");
|
||||
private static final Pattern RE_MATCHER = Pattern.compile("^re\\((?<regexp>.+)\\)$");
|
||||
|
||||
public abstract void verify(T t);
|
||||
|
||||
|
|
@ -72,6 +73,15 @@ public abstract class AbstractMatcher<T> {
|
|||
return;
|
||||
}
|
||||
|
||||
matcher = RE_MATCHER.matcher(expected);
|
||||
if (matcher.find()) {
|
||||
String regexp = matcher.group("regexp");
|
||||
|
||||
assertThat(regexp).isNotBlank();
|
||||
assertThat(actual).matches(regexp);
|
||||
return;
|
||||
}
|
||||
|
||||
assertThat(actual).isEqualTo(expected);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||
public final class TrafficController {
|
||||
@Builder.Default
|
||||
private final int interval = 1000;
|
||||
@Builder.Default
|
||||
private final boolean logResult = true;
|
||||
private final String host;
|
||||
private final Callable<?> sender;
|
||||
|
||||
|
|
@ -51,7 +53,9 @@ public final class TrafficController {
|
|||
future = executor.scheduleAtFixedRate(() -> {
|
||||
try {
|
||||
final Object result = sender.call();
|
||||
LOGGER.info("response: {}", result);
|
||||
if (logResult) {
|
||||
LOGGER.info("response: {}", result);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
LOGGER.error("failed to send traffic", e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,264 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.skywalking.e2e.mesh;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Predicate;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.skywalking.e2e.base.SkyWalkingTestAdapter;
|
||||
import org.apache.skywalking.e2e.base.TrafficController;
|
||||
import org.apache.skywalking.e2e.common.HostAndPort;
|
||||
import org.apache.skywalking.e2e.metrics.AtLeastOneOfMetricsMatcher;
|
||||
import org.apache.skywalking.e2e.metrics.Metrics;
|
||||
import org.apache.skywalking.e2e.metrics.MetricsQuery;
|
||||
import org.apache.skywalking.e2e.metrics.MetricsValueMatcher;
|
||||
import org.apache.skywalking.e2e.retryable.RetryableTest;
|
||||
import org.apache.skywalking.e2e.service.Service;
|
||||
import org.apache.skywalking.e2e.service.ServicesMatcher;
|
||||
import org.apache.skywalking.e2e.service.ServicesQuery;
|
||||
import org.apache.skywalking.e2e.service.endpoint.Endpoint;
|
||||
import org.apache.skywalking.e2e.service.endpoint.EndpointQuery;
|
||||
import org.apache.skywalking.e2e.service.endpoint.Endpoints;
|
||||
import org.apache.skywalking.e2e.service.endpoint.EndpointsMatcher;
|
||||
import org.apache.skywalking.e2e.service.instance.Instance;
|
||||
import org.apache.skywalking.e2e.service.instance.Instances;
|
||||
import org.apache.skywalking.e2e.service.instance.InstancesMatcher;
|
||||
import org.apache.skywalking.e2e.service.instance.InstancesQuery;
|
||||
import org.apache.skywalking.e2e.topo.Call;
|
||||
import org.apache.skywalking.e2e.topo.TopoMatcher;
|
||||
import org.apache.skywalking.e2e.topo.TopoQuery;
|
||||
import org.apache.skywalking.e2e.topo.Topology;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.TestInstance;
|
||||
|
||||
import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics;
|
||||
import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS;
|
||||
import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_METRICS;
|
||||
import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_METRICS;
|
||||
import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_CLIENT_METRICS;
|
||||
import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_SERVER_METRICS;
|
||||
import static org.apache.skywalking.e2e.utils.Times.now;
|
||||
import static org.apache.skywalking.e2e.utils.Yamls.load;
|
||||
|
||||
@Slf4j
|
||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||
public class ALSE2E extends SkyWalkingTestAdapter {
|
||||
private final String swWebappHost = Optional.ofNullable(Strings.emptyToNull(System.getenv("WEBAPP_HOST"))).orElse("127.0.0.1");
|
||||
private final String swWebappPort = Optional.ofNullable(Strings.emptyToNull(System.getenv("WEBAPP_PORT"))).orElse("8080");
|
||||
protected HostAndPort swWebappHostPort = HostAndPort.builder()
|
||||
.host(swWebappHost)
|
||||
.port(Integer.parseInt(swWebappPort))
|
||||
.build();
|
||||
|
||||
private final Map<Predicate<Service>, String> serviceEndpointExpectedDataFiles =
|
||||
ImmutableMap.<Predicate<Service>, String>builder()
|
||||
.put(service -> IDManager.ServiceID.analysisId(service.getKey()).getName().startsWith("ratings-v1"), "expected/als/endpoints-ratings.yml")
|
||||
.put(service -> IDManager.ServiceID.analysisId(service.getKey()).getName().startsWith("details-v1"), "expected/als/endpoints-details.yml")
|
||||
.put(service -> IDManager.ServiceID.analysisId(service.getKey()).getName().startsWith("reviews-v"), "expected/als/endpoints-reviews.yml")
|
||||
.put(service -> IDManager.ServiceID.analysisId(service.getKey()).getName().startsWith("productpage-v1"), "expected/als/endpoints-productpage.yml")
|
||||
.build();
|
||||
|
||||
@BeforeAll
|
||||
public void setUp() throws Exception {
|
||||
LOGGER.info("set up");
|
||||
|
||||
queryClient(swWebappHostPort);
|
||||
|
||||
String gatewayHost = Strings.isNullOrEmpty(System.getenv("GATEWAY_HOST")) ? "127.0.0.1" : System.getenv("GATEWAY_HOST");
|
||||
String gatewayPort = Strings.isNullOrEmpty(System.getenv("GATEWAY_PORT")) ? "80" : System.getenv("GATEWAY_PORT");
|
||||
|
||||
HostAndPort serviceHostPort = HostAndPort.builder()
|
||||
.host(gatewayHost)
|
||||
.port(Integer.parseInt(gatewayPort))
|
||||
.build();
|
||||
|
||||
final URL url = new URL("http", serviceHostPort.host(), serviceHostPort.port(), "/productpage");
|
||||
|
||||
trafficController =
|
||||
TrafficController.builder()
|
||||
.logResult(false)
|
||||
.sender(() -> restTemplate.getForEntity(url.toURI(), String.class))
|
||||
.build()
|
||||
.start();
|
||||
|
||||
LOGGER.info("set up done");
|
||||
}
|
||||
|
||||
@RetryableTest
|
||||
void services() throws Exception {
|
||||
LOGGER.info("services starts");
|
||||
|
||||
List<Service> services = graphql.services(new ServicesQuery().start(startTime).end(now()));
|
||||
|
||||
LOGGER.info("services: {}", services);
|
||||
|
||||
load("expected/als/services.yml").as(ServicesMatcher.class).verify(services);
|
||||
|
||||
for (final Service service : services) {
|
||||
LOGGER.info("verifying service instances: {}", service);
|
||||
|
||||
verifyServiceMetrics(service);
|
||||
|
||||
final Instances instances = verifyServiceInstances(service);
|
||||
|
||||
verifyInstancesMetrics(instances);
|
||||
|
||||
final Endpoints endpoints = verifyServiceEndpoints(service);
|
||||
|
||||
verifyEndpointsMetrics(endpoints);
|
||||
}
|
||||
}
|
||||
|
||||
@RetryableTest
|
||||
void topology() throws Exception {
|
||||
LOGGER.info("topology starts {} {}", graphql, startTime);
|
||||
|
||||
final Topology topology = graphql.topo(new TopoQuery().stepByMinute().start(startTime.minusDays(1)).end(now()));
|
||||
|
||||
LOGGER.info("topology: {}", topology);
|
||||
|
||||
load("expected/als/topo.yml").as(TopoMatcher.class).verify(topology);
|
||||
|
||||
verifyServiceRelationMetrics(topology.getCalls());
|
||||
}
|
||||
|
||||
private Instances verifyServiceInstances(final Service service) throws Exception {
|
||||
final Instances instances = graphql.instances(
|
||||
new InstancesQuery().serviceId(service.getKey()).start(startTime).end(now())
|
||||
);
|
||||
|
||||
LOGGER.info("instances: {}", instances);
|
||||
|
||||
load("expected/als/instances.yml").as(InstancesMatcher.class).verify(instances);
|
||||
|
||||
return instances;
|
||||
}
|
||||
|
||||
private Endpoints verifyServiceEndpoints(final Service service) throws Exception {
|
||||
final Endpoints endpoints = graphql.endpoints(new EndpointQuery().serviceId(service.getKey()));
|
||||
|
||||
LOGGER.info("endpoints: {}", endpoints);
|
||||
|
||||
serviceEndpointExpectedDataFiles.entrySet()
|
||||
.stream()
|
||||
.filter(it -> it.getKey().test(service))
|
||||
.findFirst()
|
||||
.map(Map.Entry::getValue)
|
||||
.ifPresent(expectedDataFile -> {
|
||||
try {
|
||||
load(expectedDataFile).as(EndpointsMatcher.class).verify(endpoints);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
|
||||
return endpoints;
|
||||
}
|
||||
|
||||
private void verifyInstancesMetrics(final Instances instances) throws Exception {
|
||||
for (Instance instance : instances.getInstances()) {
|
||||
for (String metricsName : ALL_INSTANCE_METRICS) {
|
||||
LOGGER.info("verifying service instance response time: {}", instance);
|
||||
final Metrics instanceMetrics = graphql.metrics(
|
||||
new MetricsQuery().stepByMinute().metricsName(metricsName).id(instance.getKey())
|
||||
);
|
||||
|
||||
LOGGER.info("instance metrics: {}", instanceMetrics);
|
||||
|
||||
final AtLeastOneOfMetricsMatcher instanceRespTimeMatcher = new AtLeastOneOfMetricsMatcher();
|
||||
final MetricsValueMatcher greaterThanZero = new MetricsValueMatcher();
|
||||
greaterThanZero.setValue("gt 0");
|
||||
instanceRespTimeMatcher.setValue(greaterThanZero);
|
||||
instanceRespTimeMatcher.verify(instanceMetrics);
|
||||
LOGGER.info("{}: {}", metricsName, instanceMetrics);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void verifyEndpointsMetrics(final Endpoints endpoints) throws Exception {
|
||||
for (Endpoint endpoint : endpoints.getEndpoints()) {
|
||||
for (final String metricName : ALL_ENDPOINT_METRICS) {
|
||||
LOGGER.info("verifying endpoint {}: {}", endpoint, metricName);
|
||||
|
||||
final Metrics metrics = graphql.metrics(
|
||||
new MetricsQuery().stepByMinute().metricsName(metricName).id(endpoint.getKey())
|
||||
);
|
||||
|
||||
LOGGER.info("metrics: {}", metrics);
|
||||
|
||||
final AtLeastOneOfMetricsMatcher instanceRespTimeMatcher = new AtLeastOneOfMetricsMatcher();
|
||||
final MetricsValueMatcher greaterThanZero = new MetricsValueMatcher();
|
||||
greaterThanZero.setValue("gt 0");
|
||||
instanceRespTimeMatcher.setValue(greaterThanZero);
|
||||
instanceRespTimeMatcher.verify(metrics);
|
||||
|
||||
LOGGER.info("{}: {}", metricName, metrics);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void verifyServiceMetrics(final Service service) throws Exception {
|
||||
for (String metricName : ALL_SERVICE_METRICS) {
|
||||
LOGGER.info("verifying service {}, metrics: {}", service, metricName);
|
||||
final Metrics serviceMetrics = graphql.metrics(
|
||||
new MetricsQuery().stepByMinute().metricsName(metricName).id(service.getKey())
|
||||
);
|
||||
LOGGER.info("serviceMetrics: {}", serviceMetrics);
|
||||
final AtLeastOneOfMetricsMatcher instanceRespTimeMatcher = new AtLeastOneOfMetricsMatcher();
|
||||
final MetricsValueMatcher greaterThanZero = new MetricsValueMatcher();
|
||||
greaterThanZero.setValue("gt 0");
|
||||
instanceRespTimeMatcher.setValue(greaterThanZero);
|
||||
instanceRespTimeMatcher.verify(serviceMetrics);
|
||||
LOGGER.info("{}: {}", metricName, serviceMetrics);
|
||||
}
|
||||
}
|
||||
|
||||
private void verifyServiceRelationMetrics(final List<Call> calls) throws Exception {
|
||||
verifyRelationMetrics(calls, ALL_SERVICE_RELATION_CLIENT_METRICS, ALL_SERVICE_RELATION_SERVER_METRICS);
|
||||
}
|
||||
|
||||
private void verifyRelationMetrics(final List<Call> calls,
|
||||
final String[] relationClientMetrics,
|
||||
final String[] relationServerMetrics) throws Exception {
|
||||
for (Call call : calls) {
|
||||
for (String detectPoint : call.getDetectPoints()) {
|
||||
switch (detectPoint) {
|
||||
case "CLIENT": {
|
||||
for (String metricName : relationClientMetrics) {
|
||||
verifyMetrics(graphql, metricName, call.getId(), startTime);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SERVER": {
|
||||
for (String metricName : relationServerMetrics) {
|
||||
verifyMetrics(graphql, metricName, call.getId(), startTime);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.skywalking.e2e.mesh;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Base64;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
public class IDManager {
|
||||
public static class ServiceID {
|
||||
|
||||
public static ServiceIDDefinition analysisId(String id) {
|
||||
final String[] strings = id.split("\\.");
|
||||
if (strings.length != 2) {
|
||||
throw new RuntimeException("Can't split service id into 2 parts, " + id);
|
||||
}
|
||||
return new ServiceIDDefinition(
|
||||
decode(strings[0]),
|
||||
Integer.parseInt(strings[1]) == 1
|
||||
);
|
||||
}
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Getter
|
||||
@EqualsAndHashCode
|
||||
public static class ServiceIDDefinition {
|
||||
private final String name;
|
||||
|
||||
private final boolean isReal;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param base64text Base64 encoded UTF-8 string
|
||||
* @return normal literal string
|
||||
*/
|
||||
private static String decode(String base64text) {
|
||||
return new String(Base64.getDecoder().decode(base64text), StandardCharsets.UTF_8);
|
||||
}
|
||||
}
|
||||
|
|
@ -13,9 +13,6 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
approvers:
|
||||
- hanahmily
|
||||
- wu-sheng
|
||||
reviewers:
|
||||
- hanahmily
|
||||
- wu-sheng
|
||||
endpoints:
|
||||
- key: not null
|
||||
label: /details/0
|
||||
|
|
@ -13,11 +13,6 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
{{- if .Values.serviceAccount.create }}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ include "elasticsearch.serviceAccountName" . }}
|
||||
labels:
|
||||
{{ include "elasticsearch.labels" . | nindent 4 }}
|
||||
{{- end }}
|
||||
endpoints:
|
||||
- key: not null
|
||||
label: /productpage
|
||||
|
|
@ -13,13 +13,6 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "skywalking.name" . }}
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
component: "{{ .Values.oap.name }}"
|
||||
heritage: {{ .Release.Service }}
|
||||
release: {{ .Release.Name }}
|
||||
name: {{ template "skywalking.serviceAccountName.oap" . }}
|
||||
endpoints:
|
||||
- key: not null
|
||||
label: /ratings/0
|
||||
|
|
@ -13,25 +13,6 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
OWNERS
|
||||
endpoints:
|
||||
- key: not null
|
||||
label: /reviews/0
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
# 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.
|
||||
|
||||
instances:
|
||||
- key: not null
|
||||
label: not null
|
||||
|
|
@ -13,25 +13,18 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
services:
|
||||
- key: not null
|
||||
label: re(ratings-v1.*)
|
||||
- key: not null
|
||||
label: re(reviews-v1.*)
|
||||
- key: not null
|
||||
label: re(reviews-v2.*)
|
||||
- key: not null
|
||||
label: re(reviews-v3.*)
|
||||
- key: not null
|
||||
label: re(productpage-v1.*)
|
||||
- key: not null
|
||||
label: re(details-v1.*)
|
||||
- key: not null
|
||||
label: re(istio-ingressgateway.*)
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
# 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.
|
||||
|
||||
nodes:
|
||||
- id: not null
|
||||
name: re(ratings-v1.*)
|
||||
type: http
|
||||
isReal: true
|
||||
- id: not null
|
||||
name: re(reviews-v1.*)
|
||||
type: http
|
||||
isReal: true
|
||||
- id: not null
|
||||
name: re(reviews-v2.*)
|
||||
type: http
|
||||
isReal: true
|
||||
- id: not null
|
||||
name: re(reviews-v3.*)
|
||||
type: http
|
||||
isReal: true
|
||||
- id: not null
|
||||
name: re(productpage-v1.*)
|
||||
isReal: true
|
||||
- id: not null
|
||||
name: re(details-v1.*)
|
||||
type: http
|
||||
isReal: true
|
||||
- id: not null
|
||||
name: re(istio-ingressgateway.*)
|
||||
type: http
|
||||
isReal: true
|
||||
- id: not null
|
||||
name: UNKNOWN
|
||||
isReal: true
|
||||
calls:
|
||||
- id: not null
|
||||
source: re(VU5LTk9XTg.*)
|
||||
target: re(aXN0aW8taW5ncmVzc2dhdGV3YXkt.*)
|
||||
detectPoints:
|
||||
- SERVER
|
||||
- id: not null
|
||||
source: re(cHJvZHVjdHBhZ2UtdjEt.*)
|
||||
target: re(cmV2aWV3cy12MS0.*)
|
||||
detectPoints:
|
||||
- CLIENT
|
||||
- SERVER
|
||||
- id: not null
|
||||
source: re(cHJvZHVjdHBhZ2UtdjEt.*)
|
||||
target: re(ZGV0YWlscy12MS.*)
|
||||
detectPoints:
|
||||
- CLIENT
|
||||
- SERVER
|
||||
- id: not null
|
||||
source: re(cHJvZHVjdHBhZ2UtdjEt.*)
|
||||
target: re(cmV2aWV3cy12Mi.*)
|
||||
detectPoints:
|
||||
- CLIENT
|
||||
- SERVER
|
||||
- id: not null
|
||||
source: re(cmV2aWV3cy12Mi.*)
|
||||
target: re(cmF0aW5ncy12MS.*)
|
||||
detectPoints:
|
||||
- CLIENT
|
||||
- SERVER
|
||||
- id: not null
|
||||
source: re(cmV2aWV3cy12My.*)
|
||||
target: re(cmF0aW5ncy12MS.*)
|
||||
detectPoints:
|
||||
- CLIENT
|
||||
- SERVER
|
||||
- id: not null
|
||||
source: re(aXN0aW8taW5ncmVzc2dhdGV3YXkt.*)
|
||||
target: re(cHJvZHVjdHBhZ2UtdjEt.*)
|
||||
detectPoints:
|
||||
- CLIENT
|
||||
- id: not null
|
||||
source: re(cHJvZHVjdHBhZ2UtdjEt.*)
|
||||
target: re(cmV2aWV3cy12My.*)
|
||||
detectPoints:
|
||||
- CLIENT
|
||||
- SERVER
|
||||
Loading…
Reference in New Issue