diff --git a/.github/workflows/auth.json b/.github/workflows/auth.json new file mode 100644 index 0000000..74c1bf4 --- /dev/null +++ b/.github/workflows/auth.json @@ -0,0 +1 @@ +{"meshery-provider":"None","token":""} \ No newline at end of file diff --git a/.github/workflows/configurable-benchmark-test-self-hosted.yaml b/.github/workflows/configurable-benchmark-test-self-hosted.yaml index 65e71b3..2e505b4 100644 --- a/.github/workflows/configurable-benchmark-test-self-hosted.yaml +++ b/.github/workflows/configurable-benchmark-test-self-hosted.yaml @@ -15,6 +15,7 @@ on: options: - istio - linkerd + - osm load_generator: type: choice required: false diff --git a/.github/workflows/configurable-benchmark-test.yaml b/.github/workflows/configurable-benchmark-test.yaml index 7e1940f..aad26f8 100644 --- a/.github/workflows/configurable-benchmark-test.yaml +++ b/.github/workflows/configurable-benchmark-test.yaml @@ -1,64 +1,69 @@ -# This workflow runs performance benchmarks with Meshery based on the configuration provided -# This workflow needs to be triggered manually by providing the test configuration - -name: Configurable Benchmark Test -on: - # for triggering the workflow, provide these inputs - workflow_dispatch: - inputs: - profile_name: - description: "performance profile to use" - required: false - profile_filename: - description: "test configuration file" - required: false - service_mesh: - type: choice - required: false - description: "service mesh being tested" - options: - - istio - - linkerd - load_generator: - type: choice - required: false - description: "load generator to run tests with" - options: - - fortio - - wrk2 - - nighthawk - -jobs: - manual-test: - name: Configurable Benchmark Test - runs-on: ubuntu-latest - if: ${{ github.event_name == 'workflow_dispatch' }} - steps: - - name: Setup Kubernetes - uses: manusa/actions-setup-minikube@v2.4.3 - with: - minikube version: 'v1.23.2' - kubernetes version: 'v1.23.2' - driver: docker - start args: "--v=5" - - - name: Checkout Code - uses: actions/checkout@v2 - - - name: Install Service Mesh and Deploy Application - run: | - chmod +x .github/workflows/scripts/${{ github.event.inputs.service_mesh }}_deploy.sh - .github/workflows/scripts/${{ github.event.inputs.service_mesh }}_deploy.sh - shell: bash - - - name: Run Benchmark Tests - uses: layer5io/meshery-smp-action@master - with: - provider_token: ${{ secrets.MESHERY_TOKEN }} - platform: docker - profile_name: ${{ github.event.inputs.profile_name }} - profile_filename: ${{ github.event.inputs.profile_filename }} - endpoint_url: ${{env.ENDPOINT_URL}} - service_mesh: ${{env.SERVICE_MESH}} - load_generator: ${{ github.event.inputs.load_generator }} - test_name: '${{ github.event.inputs.service_mesh }}-${{ github.event.inputs.load_generator }}-${{ github.event.inputs.profile_filename }}${{ github.event.inputs.profile_name }}' +# This workflow runs performance benchmarks with Meshery based on the configuration provided +# This workflow needs to be triggered manually by providing the test configuration + +name: Configurable Benchmark Test +on: + # for triggering the workflow, provide these inputs + workflow_dispatch: + inputs: + profile_name: + description: "performance profile to use" + required: false + profile_filename: + description: "test configuration file" + required: false + service_mesh: + type: choice + required: false + description: "service mesh being tested" + options: + - istio + - linkerd + - osm + load_generator: + type: choice + required: false + description: "load generator to run tests with" + options: + - fortio + - wrk2 + - nighthawk + +jobs: + manual-test: + name: Configurable Benchmark Test + runs-on: ubuntu-latest + if: ${{ github.event_name == 'workflow_dispatch' }} + steps: + - name: Setup Kubernetes + uses: manusa/actions-setup-minikube@v2.4.3 + with: + minikube version: v1.23.2 + kubernetes version: v1.23.2 + driver: docker + apus: 4 + memory: 5192 + + - name: Checkout Code + uses: actions/checkout@v2 + + - name: Install Service Mesh and Deploy Application + run: | + chmod +x .github/workflows/scripts/${{ github.event.inputs.service_mesh }}_deploy.sh + .github/workflows/scripts/${{ github.event.inputs.service_mesh }}_deploy.sh + shell: bash + + - name: Initiate tmate session + uses: mxschmitt/action-tmate@v3 + + - name: Run Benchmark Tests + uses: layer5io/meshery-smp-action@master + with: + provider_token: ${{ secrets.MESHERY_TOKEN }} + platform: docker + profile_name: ${{ github.event.inputs.profile_name }} + profile_filename: ${{ github.event.inputs.profile_filename }} + endpoint_url: ${{env.ENDPOINT_URL}} + service_mesh: ${{env.SERVICE_MESH}} + load_generator: ${{ github.event.inputs.load_generator }} + test_name: '${{ github.event.inputs.service_mesh }}-${{ github.event.inputs.load_generator }}-${{ github.event.inputs.profile_filename }}${{ github.event.inputs.profile_name }}' diff --git a/.github/workflows/scripts/istio_deploy.sh b/.github/workflows/scripts/istio_deploy.sh index f448b14..d7cee1b 100644 --- a/.github/workflows/scripts/istio_deploy.sh +++ b/.github/workflows/scripts/istio_deploy.sh @@ -1,24 +1,27 @@ #!/usr/bin/env bash - # This script is used to deploy Istio on Kubernetes # # Also deploys the bookinfo application on Istio and passes the gateway URL to Meshery - # See: https://github.com/service-mesh-performance/service-mesh-performance/blob/master/protos/service_mesh.proto + export MESH_NAME='Istio' export SERVICE_MESH='ISTIO' -curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.11.4 sh - -cd istio-1.11.4 -export PATH=$PWD/bin:$PATH -istioctl install --set profile=demo -y -kubectl label namespace default istio-injection=enabled +# Check if mesheryctl is present, else install it +if ! [ -x "$(command -v mesheryctl)" ]; then + echo 'mesheryctl is not installed. Installing mesheryctl client... Standby... (Starting Meshery as well...)' >&2 + curl -L https://meshery.io/install | ADAPTERS=istio PLATFORM=kubernetes bash - +fi -kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml +sleep 10 +#mesheryctl system login --provider None +echo 'E' | mesheryctl mesh deploy adapter meshery-istio:10000 --token "./.github/workflows/auth.json" +sleep 100 +echo "Onboarding application... Standby for few minutes..." +mesheryctl pattern apply -f "https://raw.githubusercontent.com/service-mesh-patterns/service-mesh-patterns/master/samples/bookInfoPattern.yaml" --token "./.github/workflows/auth.json" # Wait for the application to be ready -sleep 100 +sleep 50 # Get the gateway URL and export it and # Expose the service inside the cluster @@ -31,6 +34,5 @@ minikube tunnel &> /dev/null & echo "Service Mesh: $MESH_NAME - $SERVICE_MESH" echo "Gateway URL: $GATEWAY_URL" - echo "ENDPOINT_URL=$GATEWAY_URL/productpage" >> $GITHUB_ENV echo "SERVICE_MESH=$SERVICE_MESH" >> $GITHUB_ENV diff --git a/.github/workflows/scripts/linkerd_deploy.sh b/.github/workflows/scripts/linkerd_deploy.sh index 948acae..128d907 100644 --- a/.github/workflows/scripts/linkerd_deploy.sh +++ b/.github/workflows/scripts/linkerd_deploy.sh @@ -8,16 +8,19 @@ export MESH_NAME='Linkerd' export SERVICE_MESH='LINKERD' -curl -fsL https://run.linkerd.io/install | sh -export PATH=$PATH:/home/runner/.linkerd2/bin -linkerd version -linkerd check --pre -linkerd install | kubectl apply -f - -linkerd check +# Check if mesheryctl is present, else install it +if ! [ -x "$(command -v mesheryctl)" ]; then + echo 'mesheryctl is not installed. Installing mesheryctl client... Standby... (Starting Meshery as well...)' >&2 + curl -L https://meshery.io/install | ADAPTERS=linkerd PLATFORM=kubernetes bash - +fi -curl -fsL https://run.linkerd.io/emojivoto.yml | kubectl apply -f - -kubectl -n emojivoto port-forward svc/web-svc 8080:80 &> /dev/null & -kubectl get -n emojivoto deploy -o yaml | linkerd inject - | kubectl apply -f - +curl -fsL https://run.linkerd.io/emojivoto.yml --output emojivoto.yml +sleep 10 +mesheryctl system login --provider None +mesheryctl mesh deploy adapter meshery-linkerd:10001 +echo "Onboarding application... Standby for few minutes..." +mesheryctl app onboard -f "./emojivoto.yml" +#mesheryctl pattern apply -f "./emojivoto.yml" # Wait for the application to be ready sleep 100 diff --git a/.github/workflows/scripts/osm_deploy.sh b/.github/workflows/scripts/osm_deploy.sh index 42376a3..d118129 100755 --- a/.github/workflows/scripts/osm_deploy.sh +++ b/.github/workflows/scripts/osm_deploy.sh @@ -8,18 +8,19 @@ export MESH_NAME='Open Service Mesh' export SERVICE_MESH='OPEN_SERVICE_MESH' -system=$(uname -s) -release=v1.0.0 -curl -L https://github.com/openservicemesh/osm/releases/download/${release}/osm-${release}-${system,,}-amd64.tar.gz | tar -vxzf - -./${system,,}-amd64/osm install \ - --set=OpenServiceMesh.enablePermissiveTrafficPolicy=true \ - --set=OpenServiceMesh.deployPrometheus=true \ - --set=OpenServiceMesh.deployGrafana=true \ - --set=OpenServiceMesh.deployJaeger=true - -kubectl create namespace bookstore -./${system,,}-amd64/osm namespace add bookstore -kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm/release-v0.11/docs/example/manifests/apps/bookstore.yaml +# Check if mesheryctl is present, else install it +if ! [ -x "$(command -v mesheryctl)" ]; then + echo 'mesheryctl is not installed. Installing mesheryctl client... Standby... (Starting Meshery as well...)' >&2 + curl -L https://meshery.io/install | ADAPTERS=osm PLATFORM=kubernetes bash - +fi + +curl -fsL https://raw.githubusercontent.com/openservicemesh/osm-docs/main/manifests/apps/bookstore.yaml --output bookstore.yaml +sleep 10 +mesheryctl system login --provider None +mesheryctl mesh deploy adapter meshery-osm:10009 +echo "Onboarding application... Standby for few minutes..." +mesheryctl app onboard -f "./bookstore.yaml" +#mesheryctl pattern apply -f "https://raw.githubusercontent.com/openservicemesh/osm-docs/main/manifests/apps/bookstore.yaml" --token "./.github/workflows/auth.json" sleep 100