From 7ab7e3a0048a087cccc7b7ace6f1af831968b934 Mon Sep 17 00:00:00 2001 From: "sammy.huang" Date: Tue, 21 May 2024 16:54:38 +0800 Subject: [PATCH] feat: support arm-based image build and pull request (#33219) Signed-off-by: Liang Huang --- ci/jenkins/PR-Arm.groovy | 324 +++++++++++++++++++++ ci/jenkins/PublishArmBasedGPUImages.groovy | 14 +- ci/jenkins/PublishArmBasedImages.groovy | 93 ++++++ ci/jenkins/pod/rte-arm.yaml | 66 +++++ tests/scripts/values/ci/pr-arm.yaml | 202 +++++++++++++ 5 files changed, 696 insertions(+), 3 deletions(-) create mode 100644 ci/jenkins/PR-Arm.groovy create mode 100644 ci/jenkins/PublishArmBasedImages.groovy create mode 100644 ci/jenkins/pod/rte-arm.yaml create mode 100644 tests/scripts/values/ci/pr-arm.yaml diff --git a/ci/jenkins/PR-Arm.groovy b/ci/jenkins/PR-Arm.groovy new file mode 100644 index 0000000000..cdf50e1678 --- /dev/null +++ b/ci/jenkins/PR-Arm.groovy @@ -0,0 +1,324 @@ +#!/usr/bin/env groovy + +int total_timeout_minutes = 60 * 5 +int e2e_timeout_seconds = 120 * 60 +def imageTag='' +int case_timeout_seconds = 20 * 60 +def chart_version='4.1.28' +pipeline { + options { + timestamps() + timeout(time: total_timeout_minutes, unit: 'MINUTES') + buildDiscarder logRotator(artifactDaysToKeepStr: '30') + parallelsAlwaysFailFast() + preserveStashes(buildCount: 5) + disableConcurrentBuilds(abortPrevious: true) + + } + agent { + kubernetes { + cloud '4am' + defaultContainer 'main' + yamlFile 'ci/jenkins/pod/rte-arm.yaml' + customWorkspace '/home/jenkins/agent/workspace' + } + } + environment { + PROJECT_NAME = 'milvus' + SEMVER = "${BRANCH_NAME.contains('/') ? BRANCH_NAME.substring(BRANCH_NAME.lastIndexOf('/') + 1) : BRANCH_NAME}" + DOCKER_BUILDKIT = 1 + ARTIFACTS = "${env.WORKSPACE}/_artifacts" + CI_DOCKER_CREDENTIAL_ID = "harbor-milvus-io-registry" + MILVUS_HELM_NAMESPACE = "milvus-ci" + DISABLE_KIND = true + HUB = 'harbor.milvus.io/milvus' + JENKINS_BUILD_ID = "${env.BUILD_ID}" + CI_MODE="pr" + SHOW_MILVUS_CONFIGMAP= true + + DOCKER_CREDENTIALS_ID = "dockerhub" + TARGET_REPO = "milvusdb" + HARBOR_REPO = "harbor.milvus.io" + } + + stages { + stage ('Build'){ + steps { + container('main') { + script { + sh 'printenv' + def date = sh(returnStdout: true, script: 'date +%Y%m%d').trim() + sh 'git config --global --add safe.directory /home/jenkins/agent/workspace' + def gitShortCommit = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim() + imageTag="${env.BRANCH_NAME}-${date}-${gitShortCommit}" + + + sh """ + echo "Building image with tag: ${imageTag}" + + set -a # automatically export all variables from .env + . .env + set +a # stop automatically + + + docker run --net=host -v /root/.conan:/root/.conan -v \$(pwd):/root/milvus -w /root/milvus milvusdb/milvus-env:ubuntu20.04-\${DATE_VERSION} sh -c "make clean && make install" + """ + + withCredentials([usernamePassword(credentialsId: "${env.CI_DOCKER_CREDENTIAL_ID}", usernameVariable: 'CI_REGISTRY_USERNAME', passwordVariable: 'CI_REGISTRY_PASSWORD')]){ + sh "docker login ${env.HARBOR_REPO} -u '${CI_REGISTRY_USERNAME}' -p '${CI_REGISTRY_PASSWORD}'" + sh """ + export MILVUS_HARBOR_IMAGE_REPO="${env.HARBOR_REPO}/milvus/milvus" + export MILVUS_IMAGE_TAG="${imageTag}" + + docker build --build-arg TARGETARCH=arm64 -f "./build/docker/milvus/ubuntu20.04/Dockerfile" -t \${MILVUS_HARBOR_IMAGE_REPO}:\${MILVUS_IMAGE_TAG} . + + docker push \${MILVUS_HARBOR_IMAGE_REPO}:\${MILVUS_IMAGE_TAG} + docker logout + """ + } + + // stash imageTag info for rebuild install & E2E Test only + sh "echo ${imageTag} > imageTag.txt" + stash includes: 'imageTag.txt', name: 'imageTag' + + } + } + } + } + + + stage('Install & E2E Test') { + matrix { + axes { + axis { + name 'MILVUS_SERVER_TYPE' + values 'standalone' + } + axis { + name 'MILVUS_CLIENT' + values 'pymilvus' + } + } + + stages { + stage('Install') { + agent { + kubernetes { + cloud '4am' + inheritFrom 'milvus-e2e-4am' + defaultContainer 'main' + yamlFile 'ci/jenkins/pod/rte-build.yaml' + customWorkspace '/home/jenkins/agent/workspace' + } + } + steps { + container('main') { + stash includes: 'tests/**', name: 'testCode', useDefaultExcludes: false + dir ('tests/scripts') { + script { + sh 'printenv' + def clusterEnabled = "false" + def valuesFile = "pr-arm.yaml" + + if ("${MILVUS_SERVER_TYPE}" == "standalone-one-pod") { + valuesFile = "nightly-one-pod.yaml" + } + + if ("${MILVUS_CLIENT}" == "pymilvus") { + if ("${imageTag}"==''){ + dir ("imageTag"){ + try{ + unstash 'imageTag' + imageTag=sh(returnStdout: true, script: 'cat imageTag.txt | tr -d \'\n\r\'') + }catch(e){ + print "No Image Tag info remained ,please rerun build to build new image." + exit 1 + } + } + } + // modify values file to enable kafka + if ("${MILVUS_SERVER_TYPE}".contains("kafka")) { + sh ''' + apt-get update + apt-get install wget -y + wget https://github.com/mikefarah/yq/releases/download/v4.34.1/yq_linux_amd64 -O /usr/bin/yq + chmod +x /usr/bin/yq + ''' + sh """ + cp values/ci/pr-4am.yaml values/ci/pr_kafka.yaml + yq -i '.pulsar.enabled=false' values/ci/pr_kafka.yaml + yq -i '.kafka.enabled=true' values/ci/pr_kafka.yaml + yq -i '.kafka.metrics.kafka.enabled=true' values/ci/pr_kafka.yaml + yq -i '.kafka.metrics.jmx.enabled=true' values/ci/pr_kafka.yaml + yq -i '.kafka.metrics.serviceMonitor.enabled=true' values/ci/pr_kafka.yaml + """ + } + withCredentials([usernamePassword(credentialsId: "${env.CI_DOCKER_CREDENTIAL_ID}", usernameVariable: 'CI_REGISTRY_USERNAME', passwordVariable: 'CI_REGISTRY_PASSWORD')]){ + if ("${MILVUS_SERVER_TYPE}" == "standalone-one-pod") { + try { + sh """ + MILVUS_CLUSTER_ENABLED=${clusterEnabled} \ + MILVUS_HELM_REPO="https://nexus-ci.zilliz.cc/repository/milvus-proxy" \ + TAG=${imageTag}\ + ./e2e-k8s.sh \ + --skip-export-logs \ + --skip-cleanup \ + --skip-setup \ + --skip-test \ + --skip-build \ + --skip-build-image \ + --install-extra-arg " + --set etcd.metrics.enabled=true \ + --set etcd.metrics.podMonitor.enabled=true \ + --set indexCoordinator.gc.interval=1 \ + --set indexNode.disk.enabled=true \ + --set queryNode.disk.enabled=true \ + --set standalone.disk.enabled=true \ + --version ${chart_version} \ + -f values/ci/${valuesFile}" + """ + } catch (Exception e) { + echo "Tests failed, but the build will not be marked as failed." + } + + }else{ + sh """ + MILVUS_CLUSTER_ENABLED=${clusterEnabled} \ + MILVUS_HELM_REPO="https://nexus-ci.zilliz.cc/repository/milvus-proxy" \ + TAG=${imageTag}\ + ./e2e-k8s.sh \ + --skip-export-logs \ + --skip-cleanup \ + --skip-setup \ + --skip-test \ + --skip-build \ + --skip-build-image \ + --install-extra-arg " + --set etcd.metrics.enabled=true \ + --set etcd.metrics.podMonitor.enabled=true \ + --set indexCoordinator.gc.interval=1 \ + --set indexNode.disk.enabled=true \ + --set queryNode.disk.enabled=true \ + --set standalone.disk.enabled=true \ + --version ${chart_version} \ + -f values/ci/${valuesFile}" + """ + } + } + } else { + error "Error: Unsupported Milvus client: ${MILVUS_CLIENT}" + } + } + } + } + + } + } + stage('E2E Test'){ + options { + skipDefaultCheckout() + } + agent { + kubernetes { + cloud '4am' + inheritFrom 'default' + defaultContainer 'main' + yamlFile 'ci/jenkins/pod/e2e.yaml' + customWorkspace '/home/jenkins/agent/workspace' + } + } + steps { + container('pytest') { + unstash('testCode') + script { + sh 'ls -lah' + } + dir ('tests/scripts') { + script { + def release_name=sh(returnStdout: true, script: './get_release_name.sh') + def clusterEnabled = 'false' + if ("${MILVUS_SERVER_TYPE}".contains("distributed")) { + clusterEnabled = "true" + } + if ("${MILVUS_CLIENT}" == "pymilvus") { + if ("${MILVUS_SERVER_TYPE}" == "standalone-one-pod") { + try { + sh """ + MILVUS_HELM_RELEASE_NAME="${release_name}" \ + MILVUS_HELM_NAMESPACE="milvus-ci" \ + MILVUS_CLUSTER_ENABLED="${clusterEnabled}" \ + TEST_TIMEOUT="${e2e_timeout_seconds}" \ + ./ci_e2e_4am.sh "-n 6 -x --tags L0 L1 --timeout ${case_timeout_seconds}" + """ + } catch (Exception e) { + echo "Tests failed, but the build will not be marked as failed." + } + }else{ + sh """ + MILVUS_HELM_RELEASE_NAME="${release_name}" \ + MILVUS_HELM_NAMESPACE="milvus-ci" \ + MILVUS_CLUSTER_ENABLED="${clusterEnabled}" \ + TEST_TIMEOUT="${e2e_timeout_seconds}" \ + ./ci_e2e_4am.sh "-n 6 -x --tags L0 L1 --timeout ${case_timeout_seconds}" + """ + } + } else { + error "Error: Unsupported Milvus client: ${MILVUS_CLIENT}" + } + } + } + } + } + post{ + always { + container('pytest'){ + dir("${env.ARTIFACTS}") { + sh "tar -zcvf ${PROJECT_NAME}-${MILVUS_SERVER_TYPE}-${MILVUS_CLIENT}-pytest-logs.tar.gz /tmp/ci_logs/test --remove-files || true" + archiveArtifacts artifacts: "${PROJECT_NAME}-${MILVUS_SERVER_TYPE}-${MILVUS_CLIENT}-pytest-logs.tar.gz ", allowEmptyArchive: true + } + } + } + + } + } + } + post{ + always { + container('main') { + dir ('tests/scripts') { + script { + def release_name=sh(returnStdout: true, script: './get_release_name.sh') + sh "kubectl get pods -n ${MILVUS_HELM_NAMESPACE} | grep ${release_name} " + sh "./uninstall_milvus.sh --release-name ${release_name}" + sh "./ci_logs.sh --log-dir /ci-logs --artifacts-name ${env.ARTIFACTS}/artifacts-${PROJECT_NAME}-${MILVUS_SERVER_TYPE}-${SEMVER}-${env.BUILD_NUMBER}-${MILVUS_CLIENT}-e2e-logs \ + --release-name ${release_name}" + dir("${env.ARTIFACTS}") { + archiveArtifacts artifacts: "artifacts-${PROJECT_NAME}-${MILVUS_SERVER_TYPE}-${SEMVER}-${env.BUILD_NUMBER}-${MILVUS_CLIENT}-e2e-logs.tar.gz", allowEmptyArchive: true + } + } + } + } + } + } + + } + + } + } + post{ + unsuccessful { + container('jnlp') { + dir ('tests/scripts') { + script { + def authorEmail = sh(returnStdout: true, script: './get_author_email.sh ') + emailext subject: '$DEFAULT_SUBJECT', + body: '$DEFAULT_CONTENT', + recipientProviders: [developers(), culprits()], + replyTo: '$DEFAULT_REPLYTO', + to: "${authorEmail},devops@zilliz.com" + } + } + } + } + } +} diff --git a/ci/jenkins/PublishArmBasedGPUImages.groovy b/ci/jenkins/PublishArmBasedGPUImages.groovy index 3ed8affb07..16245b8661 100644 --- a/ci/jenkins/PublishArmBasedGPUImages.groovy +++ b/ci/jenkins/PublishArmBasedGPUImages.groovy @@ -2,7 +2,15 @@ pipeline { agent { - label 'arm' + kubernetes { + cloud '4am' + defaultContainer 'main' + yamlFile "ci/jenkins/pod/rte-arm.yaml" + customWorkspace '/home/jenkins/agent/workspace' + // We allow this pod to remain active for a while, later jobs can + // reuse cache in previous created nodes. + // idleMinutes 120 + } } options { @@ -27,10 +35,10 @@ pipeline { script { sh """ set -a # automatically export all variables from .env - . ${WORKSPACE}/.env + . .env set +a # stop automatically - docker run -v \$(pwd):/root/milvus -v \$(pwd)/.docker/.conan:/root/.conan -w /root/milvus milvusdb/milvus-env:gpu-ubuntu22.04-\${GPU_DATE_VERSION} sh -c "make clean && make gpu-install" + docker run --net=host -v \$(pwd):/root/milvus -v /root/.conan:/root/.conan -w /root/milvus milvusdb/milvus-env:gpu-ubuntu22.04-\${GPU_DATE_VERSION} sh -c "make clean && make gpu-install" """ def date = sh(returnStdout: true, script: 'date +%Y%m%d').trim() diff --git a/ci/jenkins/PublishArmBasedImages.groovy b/ci/jenkins/PublishArmBasedImages.groovy new file mode 100644 index 0000000000..0fd77c7da7 --- /dev/null +++ b/ci/jenkins/PublishArmBasedImages.groovy @@ -0,0 +1,93 @@ +#!/usr/bin/env groovy + +pipeline { + agent { + kubernetes { + cloud '4am' + defaultContainer 'main' + yamlFile "ci/jenkins/pod/rte-arm.yaml" + customWorkspace '/home/jenkins/agent/workspace' + // We allow this pod to remain active for a while, later jobs can + // reuse cache in previous created nodes. + // idleMinutes 120 + } + } + parameters { + string(name: 'image-tag', defaultValue: '', description: 'the image tag to be pushed to image registry') + } + + options { + timestamps() + timeout(time: 300, unit: 'MINUTES') + // parallelsAlwaysFailFast() + disableConcurrentBuilds() + } + + environment { + DOCKER_CREDENTIALS_ID = "dockerhub" + DOCKER_BUILDKIT = 1 + TARGET_REPO = "milvusdb" + CI_DOCKER_CREDENTIAL_ID = "harbor-milvus-io-registry" + HARBOR_REPO = "harbor.milvus.io" + } + + stages { + stage('Publish Milvus cpu Images'){ + + steps { + script { + sh """ + git config --global --add safe.directory /home/jenkins/agent/workspace + """ + + def tag = "" + if (params['image-tag'] == '') { + def date = sh(returnStdout: true, script: 'date +%Y%m%d').trim() + def gitShortCommit = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim() + tag = "${env.BRANCH_NAME}-${date}-${gitShortCommit}-arm" + }else{ + tag = params['image-tag'] + } + + sh """ + echo "Building image with tag: ${tag}" + + set -a # automatically export all variables from .env + . .env + set +a # stop automatically + + + docker run --net=host -v /root/.conan:/root/.conan -v \$(pwd):/root/milvus -w /root/milvus milvusdb/milvus-env:ubuntu20.04-\${DATE_VERSION} sh -c "make clean && make install" + """ + + + withCredentials([usernamePassword(credentialsId: "${env.DOCKER_CREDENTIALS_ID}", usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) { + sh 'docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD}' + sh """ + export MILVUS_IMAGE_REPO="${env.TARGET_REPO}/milvus" + export MILVUS_HARBOR_IMAGE_REPO="${env.HARBOR_REPO}/milvus/milvus" + export MILVUS_IMAGE_TAG="${tag}" + + docker build --build-arg TARGETARCH=arm64 -f "./build/docker/milvus/ubuntu20.04/Dockerfile" -t \${MILVUS_IMAGE_REPO}:\${MILVUS_IMAGE_TAG} . + + docker push \${MILVUS_IMAGE_REPO}:\${MILVUS_IMAGE_TAG} + docker tag \${MILVUS_IMAGE_REPO}:\${MILVUS_IMAGE_TAG} \${MILVUS_HARBOR_IMAGE_REPO}:\${MILVUS_IMAGE_TAG} + docker logout + """ + } + + withCredentials([usernamePassword(credentialsId: "${env.CI_DOCKER_CREDENTIAL_ID}", usernameVariable: 'CI_REGISTRY_USERNAME', passwordVariable: 'CI_REGISTRY_PASSWORD')]){ + sh "docker login ${env.HARBOR_REPO} -u '${CI_REGISTRY_USERNAME}' -p '${CI_REGISTRY_PASSWORD}'" + sh """ + export MILVUS_HARBOR_IMAGE_REPO="${env.HARBOR_REPO}/milvus/milvus" + export MILVUS_IMAGE_TAG="${tag}" + docker push \${MILVUS_HARBOR_IMAGE_REPO}:\${MILVUS_IMAGE_TAG} + docker logout + """ + } + } + } + } + } + +} diff --git a/ci/jenkins/pod/rte-arm.yaml b/ci/jenkins/pod/rte-arm.yaml new file mode 100644 index 0000000000..7d10349f40 --- /dev/null +++ b/ci/jenkins/pod/rte-arm.yaml @@ -0,0 +1,66 @@ +apiVersion: v1 +kind: Pod +metadata: + labels: + app: milvus-e2e + namespace: milvus-ci +spec: + hostNetwork: true + securityContext: # Optional: Restrict capabilities for some security hardening + privileged: true + tolerations: + - key: "node-role.kubernetes.io/arm" + operator: "Exists" + effect: "NoSchedule" + nodeSelector: + "kubernetes.io/arch": "arm64" + enableServiceLinks: false + containers: + - name: main + image: docker:latest + args: ["sleep", "36000"] + # workingDir: /home/jenkins/agent/workspace + securityContext: + privileged: true + resources: + limits: + cpu: "6" + memory: 12Gi + requests: + cpu: "0.5" + memory: 5Gi + volumeMounts: + - mountPath: /var/run + name: docker-root + - mountPath: /root/.conan + name: build-cache + # - mountPath: /ci-logs + # name: ci-logs + - name: dind + image: docker:dind + securityContext: + privileged: true + args: ["dockerd","--host=unix:///var/run/docker.sock","--registry-mirror=https://docker-nexus-ci.zilliz.cc"] + resources: + limits: + cpu: "6" + memory: 12Gi + requests: + cpu: "0.5" + memory: 5Gi + volumeMounts: + - mountPath: /var/run + name: docker-root + - mountPath: /root/.conan + name: build-cache + volumes: + - emptyDir: {} + name: docker-root + - hostPath: + path: /root/.conan + type: DirectoryOrCreate + name: build-cache + # - name: ci-logs + # nfs: + # path: /ci-logs + # server: 172.16.70.249 diff --git a/tests/scripts/values/ci/pr-arm.yaml b/tests/scripts/values/ci/pr-arm.yaml new file mode 100644 index 0000000000..9327ae6113 --- /dev/null +++ b/tests/scripts/values/ci/pr-arm.yaml @@ -0,0 +1,202 @@ +metrics: + serviceMonitor: + enabled: true +log: + level: debug + +nodeSelector: + "kubernetes.io/arch": "arm64" +tolerations: + - key: "node-role.kubernetes.io/arm" + operator: "Exists" + effect: "NoSchedule" + +proxy: + resources: + requests: + cpu: "0.3" + memory: "256Mi" + limits: + cpu: "1" +rootCoordinator: + resources: + requests: + cpu: "0.2" + memory: "256Mi" + limits: + cpu: "1" +queryCoordinator: + resources: + requests: + cpu: "0.2" + memory: "100Mi" + limits: + cpu: "1" +queryNode: + resources: + requests: + cpu: "0.5" + memory: "500Mi" + limits: + cpu: "2" +indexCoordinator: + resources: + requests: + cpu: "0.1" + memory: "50Mi" + limits: + cpu: "1" +indexNode: + resources: + requests: + cpu: "0.5" + memory: "500Mi" + limits: + cpu: "2" +dataCoordinator: + resources: + requests: + cpu: "0.1" + memory: "50Mi" + limits: + cpu: "1" +dataNode: + resources: + requests: + cpu: "0.5" + memory: "500Mi" + limits: + cpu: "2" + +pulsar: + components: + autorecovery: false + proxy: + configData: + PULSAR_MEM: > + -Xms1024m -Xmx1024m + PULSAR_GC: > + -XX:MaxDirectMemorySize=2048m + httpNumThreads: "50" + resources: + requests: + cpu: "0.5" + memory: "1Gi" + # Resources for the websocket proxy + wsResources: + requests: + memory: "100Mi" + cpu: "0.1" + broker: + resources: + requests: + cpu: "0.5" + memory: "4Gi" + configData: + PULSAR_MEM: > + -Xms4096m + -Xmx4096m + -XX:MaxDirectMemorySize=8192m + PULSAR_GC: > + -Dio.netty.leakDetectionLevel=disabled + -Dio.netty.recycler.linkCapacity=1024 + -XX:+ParallelRefProcEnabled + -XX:+UnlockExperimentalVMOptions + -XX:+DoEscapeAnalysis + -XX:ParallelGCThreads=32 + -XX:ConcGCThreads=32 + -XX:G1NewSizePercent=50 + -XX:+DisableExplicitGC + -XX:-ResizePLAB + -XX:+ExitOnOutOfMemoryError + maxMessageSize: "104857600" + defaultRetentionTimeInMinutes: "10080" + defaultRetentionSizeInMB: "8192" + backlogQuotaDefaultLimitGB: "8" + backlogQuotaDefaultRetentionPolicy: producer_exception + + bookkeeper: + configData: + PULSAR_MEM: > + -Xms4096m + -Xmx4096m + -XX:MaxDirectMemorySize=8192m + PULSAR_GC: > + -Dio.netty.leakDetectionLevel=disabled + -Dio.netty.recycler.linkCapacity=1024 + -XX:+UseG1GC -XX:MaxGCPauseMillis=10 + -XX:+ParallelRefProcEnabled + -XX:+UnlockExperimentalVMOptions + -XX:+DoEscapeAnalysis + -XX:ParallelGCThreads=32 + -XX:ConcGCThreads=32 + -XX:G1NewSizePercent=50 + -XX:+DisableExplicitGC + -XX:-ResizePLAB + -XX:+ExitOnOutOfMemoryError + -XX:+PerfDisableSharedMem + -XX:+PrintGCDetails + nettyMaxFrameSizeBytes: "104867840" + resources: + requests: + cpu: "0.5" + memory: "4Gi" + + zookeeper: + + replicaCount: 1 + configData: + PULSAR_MEM: > + -Xms1024m + -Xmx1024m + PULSAR_GC: > + -Dcom.sun.management.jmxremote + -Djute.maxbuffer=10485760 + -XX:+ParallelRefProcEnabled + -XX:+UnlockExperimentalVMOptions + -XX:+DoEscapeAnalysis + -XX:+DisableExplicitGC + -XX:+PerfDisableSharedMem + -Dzookeeper.forceSync=no + resources: + requests: + cpu: "0.3" + memory: "512Mi" +kafka: + + resources: + requests: + cpu: "0.5" + memory: "1Gi" + zookeeper: + + replicaCount: 1 + resources: + requests: + cpu: "0.3" + memory: "512Mi" +etcd: + + + replicaCount: 1 + resources: + requests: + cpu: "0.3" + memory: "100Mi" +minio: + + resources: + requests: + cpu: "0.3" + memory: "512Mi" +standalone: + persistence: + persistentVolumeClaim: + storageClass: local-path + resources: + requests: + cpu: "1" + memory: "3.5Gi" + limits: + cpu: "4" +