diff --git a/.env b/.env deleted file mode 100644 index 22d5741a2..000000000 --- a/.env +++ /dev/null @@ -1,7 +0,0 @@ -PREFIX=federatedai -RegistryURI= -TAG=1.3.0-release - -# PREFIX: the namespace on the registry's server to store the container images. -# RegistryURI: the address of the registry server. Refer to docker-deploy/README.md for more details. -# TAG: the tag of images of components. diff --git a/.github/workflows/fate-push.yml b/.github/workflows/fate-push.yml new file mode 100644 index 000000000..ae666455b --- /dev/null +++ b/.github/workflows/fate-push.yml @@ -0,0 +1,49 @@ +name: Push fate images to DockerHub + +on: + push: + # Publish `master` as Docker `latest` image. + branches: + - master + - jenkins-integration + + # Publish `v1.2.3` tags as releases. + tags: + - v* + +jobs: + # no test is required + push: + runs-on: ubuntu-18.04 + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v2 + + - name: Prepare the TAG + id: prepare-the-tag + run: | + # strip git ref prefix from version + TAG="" + VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') + if [ $VERSION = "master" ]; then + TAG=latest + else + TAG=${VERSION##*v}-release + fi + echo "::notice col=5 title=print tag::TAG=$TAG" + echo "::set-output name=tag::$TAG" + - name: Build image + run: | + IMG_TAG=${{steps.prepare-the-tag.outputs.tag}} + cd docker-build + bash docker-build.sh all + + - name: Log into DockerHub + run: docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Push image + run: | + IMG_TAG=${{steps.prepare-the-tag.outputs.tag}} + cd docker-build + bash docker-build.sh push diff --git a/.github/workflows/push.yml b/.github/workflows/kubefate-push.yml similarity index 96% rename from .github/workflows/push.yml rename to .github/workflows/kubefate-push.yml index 81cd7df1d..517e81331 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/kubefate-push.yml @@ -1,11 +1,10 @@ -name: Publish +name: Push kubefate service image to DockerHub on: push: # Publish `master` as Docker `latest` image. branches: - master - - jenkins-integration # Publish `v1.2.3` tags as releases. tags: diff --git a/.gitignore b/.gitignore index 20fe8ce74..cd37e5c00 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ dist/ *.out *.tgz *.tar +release/ diff --git a/build/ci/docker-deploy/docker_deploy.sh b/build/ci/docker-deploy/docker_deploy.sh index 341f3cfbd..14b3f840c 100644 --- a/build/ci/docker-deploy/docker_deploy.sh +++ b/build/ci/docker-deploy/docker_deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -e +set -x dir=$(dirname $0) CONTAINER_NUM=13 diff --git a/build/ci/docker-deploy/generate_config.sh b/build/ci/docker-deploy/generate_config.sh index 1ab1535f3..f4100f62f 100644 --- a/build/ci/docker-deploy/generate_config.sh +++ b/build/ci/docker-deploy/generate_config.sh @@ -13,7 +13,7 @@ sed -i "s/serving_ip_list=(192.168.1.1 192.168.1.2)/serving_ip_list=(${host_ip}) # Replace tag to latest # TODO should replace the serving as well -# sed -i "s/^TAG=.*/TAG=latest/g" .env +sed -i "s/^TAG=.*/TAG=latest/g" .env echo "# config prepare is ok" echo "# generate config" diff --git a/docker-build/.env b/docker-build/.env index 473130c9e..8fe30b1e3 100644 --- a/docker-build/.env +++ b/docker-build/.env @@ -1,2 +1,2 @@ #PREFIX=federatedai -#IMG_TAG=1.7.2-release +#IMG_TAG=1.8.0-release diff --git a/docker-build/README.md b/docker-build/README.md new file mode 100644 index 000000000..5a151f65a --- /dev/null +++ b/docker-build/README.md @@ -0,0 +1,29 @@ +# KubeFATE docker build + +This contains the builds of some images for KubeFATE to deploy FATE. + +- client +- nginx +- spark +- python-spark + +## Prerequisites + +1. A Linux host +2. Docker: 18+ + +## Build + +All images build. + +```bash +IMG_TAG=latest bash docker-build.sh all +``` + +## push + +Push images to DockerHub + +```bash +IMG_TAG=latest bash docker-build.sh all +``` diff --git a/docker-build/client/Dockerfile b/docker-build/client/Dockerfile index b5108be91..4a32cddd5 100644 --- a/docker-build/client/Dockerfile +++ b/docker-build/client/Dockerfile @@ -2,7 +2,7 @@ ARG SOURCE_PREFIX=federatedai ARG SOURCE_TAG=1.5.0-release FROM ${SOURCE_PREFIX}/python:${SOURCE_TAG} as data -FROM python:3.7 +FROM python:3.6 COPY pipeline /data/projects/fate/pipeline RUN pip install notebook fate-client pandas sklearn diff --git a/docker-build/docker-build.sh b/docker-build/docker-build.sh index 640a2f78f..458322abc 100644 --- a/docker-build/docker-build.sh +++ b/docker-build/docker-build.sh @@ -14,8 +14,12 @@ set -e -PREFIX=federatedai -IMG_TAG=latest +if [ -z "$IMG_TAG" ]; then + IMG_TAG=latest +fi +if [ -z "$PREFIX" ]; then + PREFIX=federatedai +fi source .env diff --git a/docker-deploy/.env b/docker-deploy/.env index 153105485..784cb39b9 100644 --- a/docker-deploy/.env +++ b/docker-deploy/.env @@ -1,5 +1,5 @@ RegistryURI= -TAG=1.7.2-release +TAG=1.8.0-release SERVING_TAG=2.0.4-release # PREFIX: namespace on the registry's server. diff --git a/docker-deploy/README.md b/docker-deploy/README.md index dacf3e6f7..f291ebb80 100644 --- a/docker-deploy/README.md +++ b/docker-deploy/README.md @@ -17,6 +17,7 @@ First, on a Linux host, download KubeFATE from [releases pages](https://github.c By default, the installation script pulls the images from Docker Hub during the deployment. If the target node is not connected to Internet, refer to the below section to set up a local registry such as Harbor and use the offline images. +***If you have deployed other versions of FATE before, please delete and clean up before deploying the new version, [Deleting the cluster](#deleting-the-cluster).*** ### Setting up a local registry Harbor (Optional) Please refer to [this guide](../registry/README.md) to install Harbor as a local registry. diff --git a/docker-deploy/README_zh.md b/docker-deploy/README_zh.md index f4468effa..027c53c71 100644 --- a/docker-deploy/README_zh.md +++ b/docker-deploy/README_zh.md @@ -83,6 +83,8 @@ RegistryURI=192.168.10.1/federatedai ### 用Docker Compose部署FATE + ***如果在之前你已经部署过其他版本的FATE,请删除清理之后再部署新的版本,[删除部署](#删除部署).*** + #### 配置需要部署的实例数目 部署脚本提供了部署多个FATE实例的功能,下面的例子我们部署在两个机器上,每个机器运行一个FATE实例,这里两台机器的IP分别为*192.168.7.1*和*192.168.7.2* diff --git a/docker-deploy/generate_config.sh b/docker-deploy/generate_config.sh index 242c9a905..be6f6be61 100755 --- a/docker-deploy/generate_config.sh +++ b/docker-deploy/generate_config.sh @@ -88,7 +88,7 @@ GenerateConfig() { cp -r training_template/backends/spark/rabbitmq confs-$party_id/confs/ cp training_template/docker-compose-spark.yml confs-$party_id/docker-compose.yml - sed -i '157,173d' confs-$party_id/docker-compose.yml + sed -i '163,179d' confs-$party_id/docker-compose.yml fi if [ "$backend" == "spark_pulsar" ]; then @@ -98,7 +98,7 @@ GenerateConfig() { cp -r training_template/backends/spark/pulsar confs-$party_id/confs/ cp training_template/docker-compose-spark.yml confs-$party_id/docker-compose.yml - sed -i '139,155d' confs-$party_id/docker-compose.yml + sed -i '145,161d' confs-$party_id/docker-compose.yml fi if [ "$backend" == "spark_local_pulsar" ]; then @@ -165,15 +165,12 @@ GenerateConfig() { mkdir -p ${shared_dir}/${value} done - sed -i "s|{/path/to/host/dir}|${dir}/${shared_dir}|g" ./confs-$party_id/docker-compose.yml + sed -i "s||${dir}/${shared_dir}|g" ./confs-$party_id/docker-compose.yml # Start the general config rendering # fateboard sed -i "s#^server.port=.*#server.port=${fateboard_port}#g" ./confs-$party_id/confs/fateboard/conf/application.properties sed -i "s#^fateflow.url=.*#fateflow.url=http://${fate_flow_ip}:${fate_flow_http_port}#g" ./confs-$party_id/confs/fateboard/conf/application.properties - sed -i "s##${db_user}#g" ./confs-$party_id/confs/fateboard/conf/application.properties - sed -i "s##${db_password}#g" ./confs-$party_id/confs/fateboard/conf/application.properties - sed -i "s##jdbc:mysql://${db_ip}:3306/${db_name}?characterEncoding=utf8\&characterSetResults=utf8\&autoReconnect=true\&failOverReadOnly=false\&serverTimezone=GMT%2B8#g" ./confs-$party_id/confs/fateboard/conf/application.properties sed -i "s##${fateboard_username}#g" ./confs-$party_id/confs/fateboard/conf/application.properties sed -i "s##${fateboard_password}#g" ./confs-$party_id/confs/fateboard/conf/application.properties echo fateboard module of $party_id done! diff --git a/docker-deploy/training_template/docker-compose-eggroll.yml b/docker-deploy/training_template/docker-compose-eggroll.yml index 3f3c47612..9107bc536 100644 --- a/docker-deploy/training_template/docker-compose-eggroll.yml +++ b/docker-deploy/training_template/docker-compose-eggroll.yml @@ -25,19 +25,19 @@ volumes: driver_opts: type: none o: bind - device: {/path/to/host/dir}/examples + device: /examples shared_dir_federatedml: driver: local driver_opts: type: none o: bind - device: {/path/to/host/dir}/federatedml + device: /federatedml shared_dir_data: driver: local driver_opts: type: none o: bind - device: {/path/to/host/dir}/data + device: /data services: rollsite: @@ -86,7 +86,7 @@ services: - 4671 volumes: - ./confs/eggroll/conf:/data/projects/fate/eggroll/conf - - ./confs/fate_flow/conf/service_conf.yaml:/data/projects/fate/fate/conf/service_conf.yaml + - ./confs/fate_flow/conf/service_conf.yaml:/data/projects/fate/conf/service_conf.yaml - ./shared_dir/data/nodemanager:/data/projects/fate/eggroll/data networks: - fate-network @@ -117,6 +117,12 @@ services: networks: fate-network: ipv4_address: 192.167.0.100 + healthcheck: + test: ["CMD", "curl", "-f", "-X POST", "http://192.167.0.100:9380/v1/version/get"] + interval: 1m30s + timeout: 10s + retries: 3 + start_period: 40s command: - "/bin/bash" - "-c" diff --git a/docker-deploy/training_template/docker-compose-spark-slim.yml b/docker-deploy/training_template/docker-compose-spark-slim.yml index 70d0402f4..195201693 100644 --- a/docker-deploy/training_template/docker-compose-spark-slim.yml +++ b/docker-deploy/training_template/docker-compose-spark-slim.yml @@ -26,19 +26,19 @@ volumes: driver_opts: type: none o: bind - device: {/path/to/host/dir}/examples + device: /examples shared_dir_federatedml: driver: local driver_opts: type: none o: bind - device: {/path/to/host/dir}/federatedml + device: /federatedml shared_dir_data: driver: local driver_opts: type: none o: bind - device: {/path/to/host/dir}/data + device: /data services: fateboard: @@ -71,6 +71,12 @@ services: networks: fate-network: ipv4_address: 192.167.0.100 + healthcheck: + test: ["CMD", "curl", "-f", "-X POST", "http://192.167.0.100:9380/v1/version/get"] + interval: 1m30s + timeout: 10s + retries: 3 + start_period: 40s command: - "/bin/bash" - "-c" diff --git a/docker-deploy/training_template/docker-compose-spark.yml b/docker-deploy/training_template/docker-compose-spark.yml index 66e2a2577..0945858ed 100644 --- a/docker-deploy/training_template/docker-compose-spark.yml +++ b/docker-deploy/training_template/docker-compose-spark.yml @@ -25,19 +25,19 @@ volumes: driver_opts: type: none o: bind - device: {/path/to/host/dir}/examples + device: /examples shared_dir_federatedml: driver: local driver_opts: type: none o: bind - device: {/path/to/host/dir}/federatedml + device: /federatedml shared_dir_data: driver: local driver_opts: type: none o: bind - device: {/path/to/host/dir}/data + device: /data services: fateboard: @@ -70,6 +70,12 @@ services: networks: fate-network: ipv4_address: 192.167.0.100 + healthcheck: + test: ["CMD", "curl", "-f", "-X POST", "http://192.167.0.100:9380/v1/version/get"] + interval: 1m30s + timeout: 10s + retries: 3 + start_period: 40s command: - "/bin/bash" - "-c" diff --git a/docker-deploy/training_template/public/fateboard/conf/application.properties b/docker-deploy/training_template/public/fateboard/conf/application.properties index fa5f035d1..9ff1f0591 100644 --- a/docker-deploy/training_template/public/fateboard/conf/application.properties +++ b/docker-deploy/training_template/public/fateboard/conf/application.properties @@ -1,29 +1,20 @@ server.port=8080 -fateflow.url= -spring.datasource.driver-Class-Name=com.mysql.cj.jdbc.Driver +fateflow.url=http://localhost:9380 +fateflow.http_app_key= +fateflow.http_secret_key= spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true server.tomcat.uri-encoding=UTF-8 -fateboard.datasource.jdbc-url= -fateboard.datasource.username= -fateboard.datasource.password= +fateboard.front_end.cors=false +fateboard.front_end.url=http://localhost:8028 server.tomcat.max-threads=1000 server.tomcat.max-connections=20000 spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=100MB -spring.datasource.druid.filter.config.enabled=false -spring.datasource.druid.web-stat-filter.enabled=false -spring.datasource.druid.stat-view-servlet.enabled=false server.compression.enabled=true server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain server.board.login.username= server.board.login.password= -management.endpoints.web.exposure.exclude=* -#server.ssl.key-store=classpath: -#server.ssl.key-store-password= -#server.ssl.key-password= -#server.ssl.key-alias= -spring.session.store-type=jdbc -spring.session.jdbc.initialize-schema=always -#HTTP_APP_KEY= -#HTTP_SECRET_KEY= \ No newline at end of file +server.servlet.session.timeout=4h +server.servlet.session.cookie.max-age=4h +management.endpoints.web.exposure.exclude=* \ No newline at end of file diff --git a/docs/FATE_On_Spark.md b/docs/FATE_On_Spark.md index 46c3eb290..6ded953e4 100644 --- a/docs/FATE_On_Spark.md +++ b/docs/FATE_On_Spark.md @@ -27,8 +27,6 @@ In current implementation, the `fate_flow` service uses the `spark-submit` binar "party_id": 10000 }, "job_parameters": { - "work_mode": 1, - "backend": 1, "spark_run": { "executor-memory": "4G", "total-executor-cores": 4 diff --git a/docs/FATE_On_Spark_With_Pulsar.md b/docs/FATE_On_Spark_With_Pulsar.md index aeb47cd38..a4ce9b0d6 100644 --- a/docs/FATE_On_Spark_With_Pulsar.md +++ b/docs/FATE_On_Spark_With_Pulsar.md @@ -70,8 +70,6 @@ When submitting a task, the user can declare in the config file to use Pulsar as "job_parameters": { "common": { "job_type": "train", - "work_mode": 1, - "backend": 2, "spark_run": { "num-executors": 1, "executor-cores": 2 diff --git a/docs/Manage_FATE_and_FATE-Serving_Version.md b/docs/Manage_FATE_and_FATE-Serving_Version.md index 4712028fe..fdff26324 100644 --- a/docs/Manage_FATE_and_FATE-Serving_Version.md +++ b/docs/Manage_FATE_and_FATE-Serving_Version.md @@ -30,18 +30,18 @@ The chart can be downloaded in each KubeFATE release, with name `fate-{release_v Download it and copy it to the folder to upload. ``` -$ kubefate chart upload -f ./fate-v1.3.0-a.tgz +$ kubefate chart upload -f ./fate-v1.8.0.tgz Upload file success $ kubefate chart ls UUID NAME VERSION APPVERSION -ca3f7843-749a-4f69-9f6b-4c544a7623ac fate v1.3.0-a v1.3.0 +ca3f7843-749a-4f69-9f6b-4c544a7623ac fate v1.8.0 v1.8.0 ``` -Then, we can deploy the fate cluster of v1.3.0-a version. The detail of cluster.yaml please refer to: [FATE Cluster Configuration](./configurations/FATE_cluster_configuration.md) +Then, we can deploy the fate cluster of v1.8.0 version. The detail of cluster.yaml please refer to: [FATE Cluster Configuration](./configurations/FATE_cluster_configuration.md) ``` chartName: fate -chartVersion: v1.3.0-a +chartVersion: v1.8.0 ``` We can delete the chart with: diff --git a/docs/configurations/FATE_cluster_configuration.md b/docs/configurations/FATE_cluster_configuration.md index 0ec8b3011..ee8b01dfa 100644 --- a/docs/configurations/FATE_cluster_configuration.md +++ b/docs/configurations/FATE_cluster_configuration.md @@ -2,39 +2,40 @@ `cluster.yaml` declares information about the FATE cluster to be deployed, which KubeFATE CLI uses to deploy the FATE cluster. ## cluster.yaml -| Name | Type | Description | -| ------------------------- | ------------------ | ------------------------------------------------------------ | -| * name | scalars | FATE cluster name. | -| * namespace | scalars | Kubernetes namespace for FATE cluster. | -| * chartName | scalars | FATE chart name. (fate/fate-serving) | -| * chartVersion | scalars | FATE chart corresponding version. | -| * partyId | scalars | FATE cluster party id. | -| registry | scalars | Other fate images sources. | -| pullPolicy | scalars | kubernetes images pull policy | -| imagePullSecrets | sequences | The imagePullSecrets names for all deployments | -| * persistence | bool | mysql and nodemanager data persistence. | -| istio.enable | bool | enable istio | -| podSecurityPolicy.enabled | bool | if `true`, create & use Pod Security Policy resources | -| * modules | sequences | Modules to be deployed in the FATE cluster. | -| backend | set(eggroll,spark) | Configure cluster computing engine( eggroll or spark) | -| ingress | mappings | Custom domain of FATE UI component | -| rollsite | mappings | Configuration of FATE cluster `rollsite` module. | -| nodemanager | mappings | Configuration of FATE cluster `nodemanager` module. | -| python | mappings | Configuration of FATE cluster `python` module. | -| fateboard | mappings | Configuration of FATE cluster `fateboard` module. | -| client | mappings | Configuration of FATE cluster `client` module. | +| Name | Type | Description | +|---------------------------|--------------------|--------------------------------------------------------------------------------------------------------| +| * name | scalars | FATE cluster name. | +| * namespace | scalars | Kubernetes namespace for FATE cluster. | +| * chartName | scalars | FATE chart name. (fate/fate-serving) | +| * chartVersion | scalars | FATE chart corresponding version. | +| * partyId | scalars | FATE cluster party id. | +| registry | scalars | Other fate images sources. | +| pullPolicy | scalars | kubernetes images pull policy | +| imagePullSecrets | sequences | The imagePullSecrets names for all deployments | +| * persistence | bool | mysql and nodemanager data persistence. | +| istio.enable | bool | enable istio | +| podSecurityPolicy.enabled | bool | if `true`, create & use Pod Security Policy resources | +| ingressClassName | scalars | The Ingress class name, such as "nginx". | +| * modules | sequences | Modules to be deployed in the FATE cluster. | +| backend | set(eggroll,spark) | Configure cluster computing engine( eggroll or spark) | +| ingress | mappings | Custom domain of FATE UI component | +| rollsite | mappings | Configuration of FATE cluster `rollsite` module. | +| nodemanager | mappings | Configuration of FATE cluster `nodemanager` module. | +| python | mappings | Configuration of FATE cluster `python` module. | +| fateboard | mappings | Configuration of FATE cluster `fateboard` module. | +| client | mappings | Configuration of FATE cluster `client` module. | | mysql | mappings | Configuration of FATE cluster `mysql` module.
If you use your own redis, please delete this item. | -| externalMysqlIp | scalars | Access your own MySQL. | -| externalMysqlPort | scalars | Access your own MySQL. | -| externalMysqlDatabase | scalars | Access your own MySQL. | -| externalMysqlUser | scalars | Access your own MySQL. | -| externalMysqlPassword | scalars | Access your own MySQL. | -| servingIp | scalars | Serving cluster connected to fate. | -| servingPort | scalars | Serving cluster connected to fate. | -| spark | mappings | Configuration of FATE cluster `spark` module. | -| hdfs | mappings | Configuration of FATE cluster `hdfs` module. | -| nginx | mappings | Configuration of FATE cluster `nginx` module. | -| rabbitmq | mappings | Configuration of FATE cluster `rabbitmq` module. | +| externalMysqlIp | scalars | Access your own MySQL. | +| externalMysqlPort | scalars | Access your own MySQL. | +| externalMysqlDatabase | scalars | Access your own MySQL. | +| externalMysqlUser | scalars | Access your own MySQL. | +| externalMysqlPassword | scalars | Access your own MySQL. | +| servingIp | scalars | Serving cluster connected to fate. | +| servingPort | scalars | Serving cluster connected to fate. | +| spark | mappings | Configuration of FATE cluster `spark` module. | +| hdfs | mappings | Configuration of FATE cluster `hdfs` module. | +| nginx | mappings | Configuration of FATE cluster `nginx` module. | +| rabbitmq | mappings | Configuration of FATE cluster `rabbitmq` module. | @@ -57,42 +58,42 @@ ### ingress mappings -| Name | Type | Description | -| ----------------------- | ----------------- | ------------------------------------------------------------ | -| `fateboard` | mappings | Configuration of Fateboard UI domain | -| `fateboard.annotations` | mappings | The annotations used commonly for ingresses | -| `fateboard.hosts` | sequences | Set hosts list of ingress record | -| `fateboard.tls` | sequences | Set this to enable TLS on the ingress record | -| `client` | mappings | Configuration of Notebook UI domain | -| `client.annotations` | mappings | The annotations used commonly for ingresses | +| Name | Type | Description | +|-------------------------|-------------------|------------------------------------------------------------------| +| `fateboard` | mappings | Configuration of Fateboard UI domain | +| `fateboard.annotations` | mappings | The annotations used commonly for ingresses | +| `fateboard.hosts` | sequences | Set hosts list of ingress record | +| `fateboard.tls` | sequences | Set this to enable TLS on the ingress record | +| `client` | mappings | Configuration of Notebook UI domain | +| `client.annotations` | mappings | The annotations used commonly for ingresses | | `client.hosts` | sequencesmappings | Set hosts list of ingress recordConfiguration of Spark UI domain | -| `client.tls` | sequences | Set this to enable TLS on the ingress record | -| `spark` | mappings | Configuration of spark UI domain | -| `rabbitmq` | mappings | Configuration of Rabbitmq UI domain | +| `client.tls` | sequences | Set this to enable TLS on the ingress record | +| `spark` | mappings | Configuration of spark UI domain | +| `rabbitmq` | mappings | Configuration of Rabbitmq UI domain | ### rollsite mappings It is used to declare the `rollsite ` module in the FATE cluster to be deployed. -| Name | subitem | Type | Description | -| ------------ | ----------- | --------- | ------------------------------------------------------------ | -| type | | scalars | Kubernetes ServiceTypes, default is NodePort. | -| nodePort | | scalars | The port used by `proxy` module's kubernetes service, default range: 30000-32767. | +| Name | subitem | Type | Description | +|--------------|-------------|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| type | | scalars | Kubernetes ServiceTypes, default is NodePort. | +| nodePort | | scalars | The port used by `proxy` module's kubernetes service, default range: 30000-32767. | | partyList | | sequences | If this FATE cluster is exchange cluster, partyList is all party's sequences of all parties proxy address. If this FATE cluster is one of participants, delete this configuration item. | -| partyList | partyId | scalars | Participant FATE cluster party ID. | -| partyList | partyIp | scalars | Participant FATE cluster IP. | -| partyList | partyPort | scalars | Participant FATE cluster port. | -| exchange | | mappings | FATE cluster `exchange` module's ip and port. | -| exchange | ip | mappings | FATE cluster `exchange` module's ip. . | -| exchange | port | mappings | FATE cluster `exchange` module's port. | -| nodeSelector | | mappings | kubernetes nodeSelector. | -| polling | | | rollsite support polling | -| polling | enabled | | enable polling | -| polling | type | | polling type (server/client) | -| polling | server | | if type choose client, you need a polling server. | -| polling | clientList | | if type choose server, this rollsite serve for clientList. | -| polling | concurrency | | if type choose server, polling client concurrency. | +| partyList | partyId | scalars | Participant FATE cluster party ID. | +| partyList | partyIp | scalars | Participant FATE cluster IP. | +| partyList | partyPort | scalars | Participant FATE cluster port. | +| exchange | | mappings | FATE cluster `exchange` module's ip and port. | +| exchange | ip | mappings | FATE cluster `exchange` module's ip. . | +| exchange | port | mappings | FATE cluster `exchange` module's port. | +| nodeSelector | | mappings | kubernetes nodeSelector. | +| polling | | | rollsite support polling | +| polling | enabled | | enable polling | +| polling | type | | polling type (server/client) | +| polling | server | | if type choose client, you need a polling server. | +| polling | clientList | | if type choose server, this rollsite serve for clientList. | +| polling | concurrency | | if type choose server, polling client concurrency. | FATE cluster has two deployment modes: with exchange and without exchange. #### Exchange mode: @@ -107,48 +108,48 @@ The parties are directly connected. ### nodemanager mappings -| Name | SubItem | Type | Description | -| -------------------------- | -------------------------- | --------- | ------------------------------------------------------------ | -| count | | scalars | Number of nodes deployed nodemanager. | -| session-Processors-PerNode | | scalars | Configuration of FATE cluster `nodemanager` module. | -| list | | sequences | List of nodemanager nodes. | -| list | name | scalars | nodemanager node name. | -| list | nodeSelector | mappings | kubernetes nodeSelector. | -| list | session-Processors-PerNode | scalars | Configuration of FATE cluster `nodemanager` module. | -| list | subPath | scalars | Path of data persistence, specify the "subPath" if the PVC is shared with other components. | -| list | existingClaim | scalars | Use the existing PVC which must be created manually before bound. | +| Name | SubItem | Type | Description | +|----------------------------|----------------------------|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| count | | scalars | Number of nodes deployed nodemanager. | +| session-Processors-PerNode | | scalars | Configuration of FATE cluster `nodemanager` module. | +| list | | sequences | List of nodemanager nodes. | +| list | name | scalars | nodemanager node name. | +| list | nodeSelector | mappings | kubernetes nodeSelector. | +| list | session-Processors-PerNode | scalars | Configuration of FATE cluster `nodemanager` module. | +| list | subPath | scalars | Path of data persistence, specify the "subPath" if the PVC is shared with other components. | +| list | existingClaim | scalars | Use the existing PVC which must be created manually before bound. | | list | storageClass | scalars | Specify the "storageClass" used to provision the volume. Or the default. StorageClass will be used(the default). Set it to "-" to disable dynamic provisioning. | -| list | accessMode | scalars | Kubernetes Persistent Volume Access Modes:
ReadWriteOnce
ReadOnlyMany
ReadWriteMany. | -| list | size | scalars | Match the volume size of PVC. | +| list | accessMode | scalars | Kubernetes Persistent Volume Access Modes:
ReadWriteOnce
ReadOnlyMany
ReadWriteMany. | +| list | size | scalars | Match the volume size of PVC. | ### python mappings -| Name | Type | Description | -| --------------------- | -------- | ------------------------------------------------------------ | -| type | scalars | Kubernetes ServiceTypes, default is NodePort.
Other modules can connect to the fateflow | -| nodePort | scalars | The port used by `proxy` module's kubernetes service, default range: 30000-32767. | -| nodeSelector | mappings | kubernetes nodeSelector. | -| enabledNN | bool | If or not neural network workflow is required | -| spark | mappings | If you use your own spark, modify the configuration | -| spark.cores_per_node | scalars | configuration of FATE fateflow module | -| spark.nodes | scalars | configuration of FATE fateflow module | -| spark.existingSpark | scalars | If you need to use the existing spark , you can set this configuration | -| spark.driverHost | scalars | call back IP of spark executor | -| spark.driverHostType | scalars | service type of spark driver | -| spark.portMaxRetries | scalars | spark driver's configuration | -| spark.driverStartPort | scalars | spark driver start port | -| spark.blockManagerStartPort | scalars | spark driver blockManager start port | -| spark.pysparkPython | scalars | spark worker node python PATH | -| hdfs | mappings | If you use the existing hdfs, you can set this configuration | -| rabbitmq | mappings | If you use the existing rabbitmq, you can set this configuration | -| nginx | mappings | If you use the existing nginx, you can set this configuration | +| Name | Type | Description | +|-----------------------------|----------|----------------------------------------------------------------------------------------------| +| type | scalars | Kubernetes ServiceTypes, default is NodePort.
Other modules can connect to the fateflow | +| nodePort | scalars | The port used by `proxy` module's kubernetes service, default range: 30000-32767. | +| nodeSelector | mappings | kubernetes nodeSelector. | +| enabledNN | bool | If or not neural network workflow is required | +| spark | mappings | If you use your own spark, modify the configuration | +| spark.cores_per_node | scalars | configuration of FATE fateflow module | +| spark.nodes | scalars | configuration of FATE fateflow module | +| spark.existingSpark | scalars | If you need to use the existing spark , you can set this configuration | +| spark.driverHost | scalars | call back IP of spark executor | +| spark.driverHostType | scalars | service type of spark driver | +| spark.portMaxRetries | scalars | spark driver's configuration | +| spark.driverStartPort | scalars | spark driver start port | +| spark.blockManagerStartPort | scalars | spark driver blockManager start port | +| spark.pysparkPython | scalars | spark worker node python PATH | +| hdfs | mappings | If you use the existing hdfs, you can set this configuration | +| rabbitmq | mappings | If you use the existing rabbitmq, you can set this configuration | +| nginx | mappings | If you use the existing nginx, you can set this configuration | ### fateboard mappings Configuration of kubernetes deployment fateboard. | Name | Type | Description | -| -------- | -------- | --------------------------- | +|----------|----------|-----------------------------| | type | mappings | Kubernetes nodeSelector. | | username | scalars | Login username of fateboard | | password | scalars | Login password of fateboard | @@ -157,32 +158,32 @@ Configuration of kubernetes deployment fateboard. Configuration of kubernetes deployment client. -| Name | Type | Description | -| ------------- | -------- | ------------------------------------------------------------ | -| nodeSelector | mappings | kubernetes nodeSelector. | -| subPath | scalars | Path of data persistence, specify the "subPath" if the PVC is shared with other components. | -| existingClaim | scalars | Use the existing PVC which must be created manually before bound. | +| Name | Type | Description | +|---------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| nodeSelector | mappings | kubernetes nodeSelector. | +| subPath | scalars | Path of data persistence, specify the "subPath" if the PVC is shared with other components. | +| existingClaim | scalars | Use the existing PVC which must be created manually before bound. | | storageClass | scalars | Specify the "storageClass" used to provision the volume. Or the default. StorageClass will be used(the default). Set it to "-" to disable dynamic provisioning. | -| accessMode | scalars | Kubernetes Persistent Volume Access Modes:
ReadWriteOnce
ReadOnlyMany
ReadWriteMany. | -| size | scalars | Match the volume size of PVC. | +| accessMode | scalars | Kubernetes Persistent Volume Access Modes:
ReadWriteOnce
ReadOnlyMany
ReadWriteMany. | +| size | scalars | Match the volume size of PVC. | ### Mysql mappings Configuration of kubernetes deployment mysql. -| Name | Type | Description | -| ------------- | -------- | ------------------------------------------------------------ | -| nodeSelector | mappings | kubernetes nodeSelector. | -| ip | scalars | Allow other modules to connect to MySQL. | -| port | scalars | Mysql port. | -| database | scalars | Database name of MySQL. | -| user | scalars | User of MySQL. | -| password | scalars | Password of MySQL. | -| subPath | scalars | Path of data persistence, specify the "subPath" if the PVC is shared with other components. | -| existingClaim | scalars | Use the existing PVC which must be created manually before bound. | +| Name | Type | Description | +|---------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| nodeSelector | mappings | kubernetes nodeSelector. | +| ip | scalars | Allow other modules to connect to MySQL. | +| port | scalars | Mysql port. | +| database | scalars | Database name of MySQL. | +| user | scalars | User of MySQL. | +| password | scalars | Password of MySQL. | +| subPath | scalars | Path of data persistence, specify the "subPath" if the PVC is shared with other components. | +| existingClaim | scalars | Use the existing PVC which must be created manually before bound. | | storageClass | scalars | Specify the "storageClass" used to provision the volume. Or the default. StorageClass will be used(the default). Set it to "-" to disable dynamic provisioning. | -| accessMode | scalars | Kubernetes Persistent Volume Access Modes:
ReadWriteOnce
ReadOnlyMany
ReadWriteMany. | -| size | scalars | Match the volume size of PVC. | +| accessMode | scalars | Kubernetes Persistent Volume Access Modes:
ReadWriteOnce
ReadOnlyMany
ReadWriteMany. | +| size | scalars | Match the volume size of PVC. | @@ -191,11 +192,11 @@ Configuration of kubernetes deployment mysql. Configuration of kubernetes deployment spark. | Name | SubItem | Type | Description | -| ----------------- | ------------ | -------- | ---------------------------- | +|-------------------|--------------|----------|------------------------------| | master/
worker | Image | scalars | Image of spark components | | | ImageTag | scalars | ImageTag of spark components | | | replicas | scalars | Number of copies of pod | -| | resources | mappings | resources of Pod | +| | resources | mappings | resources of Pod | | | nodeSelector | mappings | kubernetes nodeSelector. | | | type | scalars | Kubernetes ServiceTypes. | @@ -204,7 +205,7 @@ Configuration of kubernetes deployment spark. Configuration of kubernetes deployment hdfs. | Name | SubItem | Type | Description | -| --------------------- | ------------ | -------- | ------------------------------------------------ | +|-----------------------|--------------|----------|--------------------------------------------------| | namenode/
datanode | nodeSelector | mappings | kubernetes nodeSelector. | | | type | scalars | Kubernetes ServiceTypes, default is `ClusterIp`. | @@ -215,7 +216,7 @@ Configuration of kubernetes deployment hdfs. Configuration of kubernetes deployment hdfs. | Name | Type | Description | -| ------------ | -------- | ---------------------------- | +|--------------|----------|------------------------------| | nodeSelector | mappings | kubernetes nodeSelector. | | type | scalars | Kubernetes ServiceTypes. | | nodePort | scalars | Kubernetes Service NodePort. | @@ -254,7 +255,7 @@ Configuration of kubernetes deployment hdfs. Configuration of kubernetes deployment rabbitmq . | Name | Type | Description | -| ------------ | -------- | ------------------------------------------------ | +|--------------|----------|--------------------------------------------------| | nodeSelector | mappings | kubernetes nodeSelector. | | type | scalars | Kubernetes ServiceTypes, default is `ClusterIp`. | | nodePort | scalars | Kubernetes Service NodePort. | diff --git a/docs/tutorials/Build_Two_Parties_FATE_Cluster_in_One_Linux_Machine_with_MiniKube.md b/docs/tutorials/Build_Two_Parties_FATE_Cluster_in_One_Linux_Machine_with_MiniKube.md index d3083c283..bd97b7984 100644 --- a/docs/tutorials/Build_Two_Parties_FATE_Cluster_in_One_Linux_Machine_with_MiniKube.md +++ b/docs/tutorials/Build_Two_Parties_FATE_Cluster_in_One_Linux_Machine_with_MiniKube.md @@ -20,9 +20,9 @@ After the tutorial, the deployment architecture looks like the following diagram [use image pull secrets](https://github.com/federatedai/KubeFATE/blob/master/docs/Use_image_pull_secrets.md). 5. Network connectivity to dockerhub or 163 Docker Image Registry, and google gcr. 6. Setup the global KubeFATE version using in the tutorial and create a folder for the whole tutorial. We use - KubeFATE v1.7.2 in this tutorial, other versions should be similar. + KubeFATE v1.8.0 in this tutorial, other versions should be similar. ``` -export release_version=v1.7.2 && export kubefate_version=v1.4.3 && cd ~ && mkdir demo && cd demo +export release_version=v1.8.0 && export kubefate_version=v1.4.4 && cd ~ && mkdir demo && cd demo ``` **!!!Note: in this tutorial, the IP of the machine we used is 192.168.100.123. Please change it to your machine's IP in all the following commands and config files.** @@ -81,7 +81,7 @@ Till now, Kubernetes have been ready. ## Setup Kubefate ### Install KubeFATE CLI Go to [KubeFATE Release](https://github.com/FederatedAI/KubeFATE/releases), and find the latest kubefate-k8s release -pack, which is `v1.7.2` as set to ENVs before. (replace ${release_version} with the newest version avaliable) +pack, which is `v1.8.0` as set to ENVs before. (replace ${release_version} with the newest version available) ``` curl -LO https://github.com/FederatedAI/KubeFATE/releases/download/${release_version}/kubefate-k8s-${release_version}.tar.gz && tar -xzf ./kubefate-k8s-${release_version}.tar.gz ``` @@ -99,7 +99,7 @@ chmod +x ./kubefate && sudo mv ./kubefate /usr/bin Try to verify if kubefate works, ``` kubefate@machine:~/kubefate$ kubefate version -* kubefate commandLine version=v1.4.3 +* kubefate commandLine version=v1.4.4 * kubefate service connection error, resp.StatusCode=404, error: @@ -118,7 +118,7 @@ deployed the KubeFATE service yet. ### Deploy KubeFATE service #### 1. Load the docker image of the KubeFATE service -Download the KubeFATE Server v1.4.3's docker image, +Download the KubeFATE Server v1.4.4's docker image, ``` curl -LO https://github.com/FederatedAI/KubeFATE/releases/download/${release_version}/kubefate-${kubefate_version}.docker ``` @@ -128,7 +128,7 @@ the image needs to be loaded into [Docker Registry](https://docs.docker.com/regi [Harbor](https://goharbor.io/). For the details of using Harbor as a local image registry, please refer to: https://github.com/FederatedAI/KubeFATE/blob/master/registry/README.md. ``` -docker load < kubefate-v1.4.3.docker +docker load < kubefate-v1.4.4.docker ``` #### 2. Create kube-fate namespace and account for KubeFATE service We have prepared the yaml for creating kube-fate namespace, as well as creating a service account in rbac-config.yaml in your working folder. Just apply it, @@ -208,8 +208,8 @@ rtt min/avg/max/mdev = 0.054/0.067/0.080/0.013 ms When `example.com` well set, KubeFATE service version can be shown, ``` kubefate@machine:~/kubefate$ kubefate version -* kubefate service version=v1.4.3 -* kubefate commandLine version=v1.4.3 +* kubefate service version=v1.4.4 +* kubefate commandLine version=v1.4.4 ``` Note: The `kubefate` CLI can only work in the same directory of config.yaml @@ -230,10 +230,10 @@ For `/kubefate/examples/party-9999/cluster.yaml`, modify it as following: name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 9999 registry: "hub.c.163.com/federatedai" -imageTag: "1.7.2-release" +imageTag: "1.8.0-release" pullPolicy: imagePullSecrets: - name: myregistrykey @@ -242,6 +242,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - rollsite - clustermanager @@ -255,13 +256,9 @@ backend: eggroll ingress: fateboard: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.fateboard.example.com - client: - annotations: - kubernetes.io/ingress.class: "nginx" + client: hosts: - name: party9999.notebook.example.com @@ -287,10 +284,10 @@ and for fate-10000: name: fate-10000 namespace: fate-10000 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 10000 registry: "hub.c.163.com/federatedai" -imageTag: "1.7.2-release" +imageTag: "1.8.0-release" pullPolicy: imagePullSecrets: - name: myregistrykey @@ -299,6 +296,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - rollsite - clustermanager @@ -312,13 +310,9 @@ backend: eggroll ingress: fateboard: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.fateboard.example.com - client: - annotations: - kubernetes.io/ingress.class: "nginx" + client: hosts: - name: party10000.notebook.example.com @@ -360,10 +354,8 @@ or watch the clusters till their STATUS changing to `Running`: ``` kubefate@machine:~/kubefate$ watch kubefate cluster ls UUID NAME NAMESPACE REVISION STATUS CHART ChartVERSION AGE -51476469-b473-4d41-b2d5-ea7241d5eac7 fate-9999 fate-9999 1 Running fate v1.7.2 - 88s -dacc0549-b9fc-463f-837a-4e7316db2537 fate-10000 fate-10000 1 Running fate v1.7.2 - 69s +51476469-b473-4d41-b2d5-ea7241d5eac7 fate-9999 fate-9999 1 Running fate v1.8.0 88s +dacc0549-b9fc-463f-837a-4e7316db2537 fate-10000 fate-10000 1 Running fate v1.8.0 69s ``` We have about 10G Docker images that need to be pulled, this step will take a while for the first time. An alternative way is offline loading the images to the local environment. @@ -395,16 +387,16 @@ UUID 51476469-b473-4d41-b2d5-ea7241d5eac7 Name fate-9999 NameSpace fate-9999 ChartName fate -ChartVersion v1.7.2 +ChartVersion v1.8.0 Revision 1 Age 15h Status Running Spec backend: eggroll chartName: fate - chartVersion: v1.7.2 + chartVersion: v1.8.0 imagePullSecrets: - name: myregistrykey - imageTag: 1.7.2-release + imageTag: 1.8.0-release ingress: client: annotations: diff --git a/docs/tutorials/Build_Two_Parties_FATE_Cluster_in_One_Linux_Machine_with_MiniKube_zh.md b/docs/tutorials/Build_Two_Parties_FATE_Cluster_in_One_Linux_Machine_with_MiniKube_zh.md index b2db6ee7c..f47b5af3a 100644 --- a/docs/tutorials/Build_Two_Parties_FATE_Cluster_in_One_Linux_Machine_with_MiniKube_zh.md +++ b/docs/tutorials/Build_Two_Parties_FATE_Cluster_in_One_Linux_Machine_with_MiniKube_zh.md @@ -10,60 +10,50 @@ 2. 使用浏览器访问Jupyter Notebook, FATE-Board的机器,要求可以访问用来执行Demo的机器。可以是任何客户端。 # 前置条件 -1. 一台Linux的服务器,我们测试好的OS版本是Ubuntu 18.04 LTS,由于需要跑多方计算,服务器的推荐配置为:8核,16G内存以上; +1. 一台Linux的服务器,我们测试好的OS版本是CentOS Linux release 7.9.2009 (Core). 由于需要跑多方计算,服务器的推荐配置为:8核,16G内存以上; 2. 三个域名分别给KubeFATE服务,Jupyter Notebook和FATE-board使用。如果没有DNS解析条件,可以通过设置hosts方式,后面的介绍基于这种情况; 3. Linux服务器需要预先安装好Docker环境,具体参考[Install Docker in Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/); 4. 预先给image pull secrets设置好用户名和密码,具体参考[use image pull secrets](https://github.com/FederatedAI/KubeFATE/blob/master/docs/Use_image_pull_secrets.md); -5. 要保证安装机器可以正常访问Docker Hub或者网易云镜像仓库,以及Google存储; +5. 要保证安装机器可以正常访问Docker Hub或者网易云镜像仓库,以及Google gcr; 6. 预先创建一个目录,以便整个过程使用该目录作为工作目录,命令如下: ``` -export version=v1.6.0 && export kubefate_version=v1.4.1 && cd ~ && mkdir demo && cd demo +export release_version=v1.8.0 && export kubefate_version=v1.4.4 && cd ~ && mkdir demo && cd demo ``` **注意:下文介绍的MiniKube机器IP地址是192.168.100.123。请修改为你准备的实验机器IP地址!!!** # 开始安装 ## 安装需要的工具 -为了使用KubeFATE部署FATE,我们需要以下工具: -1. MiniKube: v1.7.3 -2. kubectl: v1.17.3 -3. kubefate: - * 发布版本: v1.6.0 - * 服务版本: v1.4.1 - * 命令行版本: v1.4.1 +为了使用KubeFATE部署FATE,我们需要以下工具。以下版本是经过验证的版本。基于向前兼容原则,我们假设高于以下版本的Minikube和kubectl也能够正常工作。 +1. MiniKube: v1.19.0 +2. kubectl: v1.19.0 ### 安装kubectl ``` -curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.3/bin/linux/amd64/kubectl && chmod +x ./kubectl && sudo mv ./kubectl /usr/bin +curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.19.0/bin/linux/amd64/kubectl && chmod +x ./kubectl && sudo mv ./kubectl /usr/bin ``` 执行完后可以验证是否成功, ``` kubefate@machine:~/demo$ kubectl version -Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"} -The connection to the server localhost:8080 was refused - did you specify the right host or port? +Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:30:33Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"} ``` ### 安装MiniKube ``` -curl -LO https://github.com/kubernetes/minikube/releases/download/v1.7.3/minikube-linux-amd64 && mv minikube-linux-amd64 minikube && chmod +x minikube && sudo mv ./minikube /usr/bin +curl -LO https://github.com/kubernetes/minikube/releases/download/v1.19.0/minikube-linux-amd64 && mv minikube-linux-amd64 minikube && chmod +x minikube && sudo mv ./minikube /usr/bin ``` 验证安装结果: ``` kubefate@machine:~/demo$ minikube version -minikube version: v1.7.3 -commit: 436667c819c324e35d7e839f8116b968a2d0a3ff +minikube version: v1.21.0 +commit: 76d74191d82c47883dc7e1319ef7cebd3e00ee11 ``` ### 使用MiniKube安装Kubernetes -MiniKube支持使用不同的虚拟机来部署Kubernetes,但是在Linux环境下,我们建议直接使用Docker方式。这个方式非常简单,只需要设置--vm-driver=none即可。更多的说明参考:[Install MiniKube - Install a Hypervisor](https://kubernetes.io/docs/tasks/tools/install-minikube/#install-a-hypervisor). +MiniKube支持使用不同的虚拟机来部署Kubernetes,但是在Linux环境下,我们建议直接使用Docker方式。更多的说明参考:[Install MiniKube - Install a Hypervisor](https://kubernetes.io/docs/tasks/tools/install-minikube/#install-a-hypervisor). ``` -sudo minikube start --vm-driver=none +sudo minikube start --vm-driver=none --kubernetes-version v1.19.0 ``` -根据屏幕指引,稍等一小会。接着我们要重新定位安装好的kubectl或者minikube。 -``` -sudo mv /home/vmware/.kube /home/vmware/.minikube $HOME -sudo chown -R $USER $HOME/.kube $HOME/.minikube -``` -待到命令没有错误返回,我们可以验证下, +待到命令执行完成,我们可以验证下, ``` kubefate@machine:~/demo$ sudo minikube status host: Running @@ -78,15 +68,18 @@ sudo minikube addons enable ingress ``` 到此,我们的Kubernetes也准备好了。 -### 下载KubeFATE的发布包, KubeFATE服务镜像v1.4.1,并安装KubeFATE的命令行 -我们从Github上 [KubeFATE Release](https://github.com/FederatedAI/KubeFATE/releases)页面找到Kuberetes部署的下载包,并下载对应版本,如前面环境变量设置`v1.6.0`, +## 安装Kubefate +### 下载KubeFATE命令行工具 +我们从Github上 [KubeFATE Release](https://github.com/FederatedAI/KubeFATE/releases)页面找到Kuberetes部署的下载包,并下载对应版本,如前面环境变量设置`v1.8.0`, ``` -curl -LO https://github.com/FederatedAI/KubeFATE/releases/download/${version}/kubefate-k8s-${version}.tar.gz && tar -xzf ./kubefate-k8s-${version}.tar.gz +curl -LO https://github.com/FederatedAI/KubeFATE/releases/download/${release_version}/kubefate-k8s-${release_version}.tar.gz && tar -xzf ./kubefate-k8s-${release_version}.tar.gz ``` 然后我们可以查看下下载解压的安装包内容, ``` -kubefate@machine:~/demo$ ls -cluster-serving.yaml cluster.yaml config.yaml examples kubefate kubefate-k8s-v1.6.0.tar.gz kubefate.yaml rbac-config.yaml +kubefate@machine:~/demo cd kubefate +kubefate@machine:~/kubefate ls +cluster-serving.yaml cluster-spark-rabbitmq.yaml cluster.yaml examples rbac-config.yaml +cluster-spark-pulsar.yaml cluster-spark-slim.yaml config.yaml kubefate.yaml ``` 由于KubeFATE命令行是可执行二进制文件,可以直接移动到path目录方便使用, ``` @@ -94,33 +87,41 @@ chmod +x ./kubefate && sudo mv ./kubefate /usr/bin ``` 然后我们测试下kubefate命令是否可用, ``` -kubefate@machine:~/demo$ kubefate version -* kubefate service connection error, Post http://example.com/v1/user/login: dial tcp: lookup example.com: no such host -* kubefate commandLine version=v1.4.1 -``` -我们发现获取KubeFATE服务版本报了个错,这是因为我们还没部署KubeFATE的服务;而命令行的版本已经正常显示出来了。 - -接着,我们下载KubeFATE服务镜像v1.4.1, 其中release_version在本片教程的里是```v1.6.0```,kubefate_version是```v1.4.1``` +kubefate@machine:~/kubefate$ kubefate version +* kubefate commandLine version=v1.4.4 +* kubefate service connection error, resp.StatusCode=404, error: + + + + 404 - Not Found + + +

404 - Not Found

+ + + +``` +我们发现获取KubeFATE服务版本报了个错,这是因为我们还没部署KubeFATE的服务;而命令行工具的版本已经正常显示出来了。 + +### 部署Kubefate服务 +#### 1.载入Kubefate服务镜像 +接着,我们下载KubeFATE服务镜像v1.4.4: ``` curl -LO https://github.com/FederatedAI/KubeFATE/releases/download/${release_version}/kubefate-${kubefate_version}.docker ``` 然后读入本地Docker环境。请注意,因为本文使用的MiniKube,是all-in-one的Kubernetes环境,所以只需要导入本地Docker环境即可给kubelet拉取。如果你运行的是集群形式的Kubernetes,容器镜像需要读入[Docker Registry](https://docs.docker.com/registry/introduction/)或者[Harbor](https://goharbor.io/)。关于如何集成使用Harbor,可以参考:https://github.com/FederatedAI/KubeFATE/blob/master/registry/README.md ``` -kubefate@machine:~/demo$ docker load < ./kubefate-v1.4.1.docker -7a5b9c0b4b14: Loading layer [==================================================>] 3.031MB/3.031MB -8edfcca02080: Loading layer [==================================================>] 44.02MB/44.02MB -b7ffb386319e: Loading layer [==================================================>] 2.048kB/2.048kB -Loaded image: federatedai/kubefate:v1.4.1 +docker load < kubefate-v1.4.4.docker ``` -## 部署KubeFATE服务 -### 创建kube-fate的命名空间以及账号 +#### 2.创建kube-fate的命名空间以及账号 在我们的安装包里已经包含了相关的yaml文件`rbac-config.yaml`,并且前面的准备工作已解压这个文件到你的工作目录。我们只需要直接执行, ``` -kubectl apply -f ./rbac-config.yaml +kubefate@machine:~/kubefate kubectl apply -f ./rbac-config.yaml ``` -### (可选)使用网易云镜像仓库 +#### 3.(可选)使用网易云镜像仓库 **因为近期Dockerhub调整了下载限制服务条例 [Dockerhub latest limitation](https://docs.docker.com/docker-hub/download-rate-limit/), 我建议使用国内网易云的镜像仓库代替官方Dockerhub** ``` sed 's/mariadb:10/hub.c.163.com\/federatedai\/mariadb:10/g' kubefate.yaml > kubefate_163.yaml @@ -128,12 +129,16 @@ sed 's/registry: ""/registry: "hub.c.163.com\/federatedai"/g' cluster.yaml > clu ``` -### 在kube-fate命名空间里部署KubeFATE服务 +#### 4.在kube-fate命名空间里部署KubeFATE服务 相关的yaml文件也已经准备在工作目录,直接使用`kubectl apply`, ``` kubectl apply -f ./kubefate_163.yaml ``` +或(如果可以使用Dockerhub) +``` +kubectl apply -f ./kubefate.yaml +``` 稍等一会,大概10几秒后用下面命令看下KubeFATE服务是否部署好`kubectl get all,ingress -n kube-fate`。如果返回类似下面的信息(特别是pod的STATUS显示的是Running状态),则KubeFATE的服务就已经部署好并正常运行: ``` @@ -159,8 +164,10 @@ NAME HOSTS ADDRESS PORTS AGE ingress.extensions/kubefate example.com 192.168.100.123 80 50s ``` -### 添加example.com到hosts文件 -因为我们要用 example.com 域名来访问KubeFATE服务(该域名在ingress中定义,有需要可自行修改),需要在运行kubefate命令行所在的机器配置hosts文件(注意不一定是Kubernetes所在的机器)。另外下文中部署的FATE集群默认也是使用`example.com`作为默认域名,在部署的时候可以参考:[FATE cluster configuration](https://github.com/FederatedAI/KubeFATE/blob/master/docs/configurations/FATE_cluster_configuration.md#host-mappings)部分进行修改。如果网络环境有域名解析服务,可配置example.com域名指向MiniKube机器的IP地址,这样就不用配置hosts文件。注意:下面地址192.168.100.123 要替换为你的MiniKube机器地址。 +#### 5.添加example.com到hosts文件 +因为我们要用 example.com 域名来访问KubeFATE服务(该域名在ingress中定义,有需要可自行修改),需要在运行kubefate命令行所在的机器配置hosts文件(注意不一定是Kubernetes所在的机器)。 +另外下文中部署的FATE集群默认也是使用`example.com`作为默认域名,在部署的时候可以参考:[FATE cluster configuration](https://github.com/FederatedAI/KubeFATE/blob/master/docs/configurations/FATE_cluster_configuration.md#host-mappings)部分进行修改。 +如果网络环境有域名解析服务,可配置example.com域名指向MiniKube机器的IP地址,这样就不用配置hosts文件。注意:下面地址192.168.100.123 要替换为你的MiniKube机器地址。 ``` sudo -- sh -c "echo \"192.168.100.123 example.com\" >> /etc/hosts" @@ -181,41 +188,40 @@ rtt min/avg/max/mdev = 0.054/0.067/0.080/0.013 ms ### 验证KubeFATE服务 当 `example.com` 顺利设置, KubeFATE服务的版本号应该就可以正常显示, ``` -kubefate@machine:~/demo$ kubefate version -* kubefate service version=v1.4.1 -* kubefate commandLine version=v1.4.1 +kubefate@machine:~/kubefate$ kubefate version +* kubefate service version=v1.4.4 +* kubefate commandLine version=v1.4.4 ``` 到此,所有准备工作完毕,下面我们可以开始安装FATE了。需要注意的是,上面的工作只需要做一次,后面如果添加、删除、更新FATE集群,上面的不需要重新执行。 ## 使用KubeFATE安装FATE +### 准备步骤 按照前面的计划,我们需要安装两联盟方,ID分别9999与10000。现实情况,这两方应该是完全独立、隔绝的组织,为了模拟现实情况,所以我们需要先为他们在Kubernetes上创建各自独立的命名空间(namespace)。 -### 创建命名空间 我们创建命名空间fate-9999用来部署9999,fate-10000部署10000 ``` kubectl create namespace fate-9999 kubectl create namespace fate-10000 ``` -### 准备各自的集群配置文件 -KubeFATE安装包包含了集群配置的简要配置参考文件cluster.yaml,我们可以给每个参与方复制一份来修改配置。如果前面的步骤正确,这个文件已经在工作目录里。运行下面命令复制文件: -``` -cp ./cluster_163.yaml fate-9999.yaml && cp ./cluster_163.yaml fate-10000.yaml -``` - -**注意: 我们强烈建议阅读以下文档** -`cluster.yaml`中具体配置的含义,请参考: https://github.com/FederatedAI/KubeFATE/blob/master/docs/configurations/FATE_cluster_configuration.md -我们把fate-9999.yaml按以下内容修改。再次强调这里的`192.168.100.123`需要替换成你的MiniKube机器地址,同时注意更换相应的partyid。 +在exmaple目录下,我们已经预先设置了两个例子:`/kubefate/examples/party-9999/` 和 `/kubefate/examples/party-10000` +对于`/kubefate/examples/party-9999/cluster.yaml`,我们可以将其修改如下: ``` name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.6.0 +chartVersion: v1.8.0 partyId: 9999 registry: "hub.c.163.com/federatedai" -pullPolicy: +imageTag: "1.8.0-release" +pullPolicy: +imagePullSecrets: +- name: myregistrykey persistence: false istio: enabled: false +podSecurityPolicy: + enabled: false +ingressClassName: nginx modules: - rollsite - clustermanager @@ -227,7 +233,15 @@ modules: backend: eggroll -rollsite: +ingress: + fateboard: + hosts: + - name: party9999.fateboard.example.com + client: + hosts: + - name: party9999.notebook.example.com + +rollsite: type: NodePort nodePort: 30091 partyList: @@ -239,20 +253,30 @@ python: type: NodePort httpNodePort: 30097 grpcNodePort: 30092 + logLevel: INFO + +servingIp: 192.168.100.123 +servingPort: 30095 ``` -fate-10000按以下内容修改: +对于`/kubefate/examples/party-10000/cluster.yaml`,我们可以将其修改如下: ``` name: fate-10000 namespace: fate-10000 chartName: fate -chartVersion: v1.6.0 +chartVersion: v1.8.0 partyId: 10000 registry: "hub.c.163.com/federatedai" -pullPolicy: +imageTag: "1.8.0-release" +pullPolicy: +imagePullSecrets: +- name: myregistrykey persistence: false istio: enabled: false +podSecurityPolicy: + enabled: false +ingressClassName: nginx modules: - rollsite - clustermanager @@ -264,7 +288,15 @@ modules: backend: eggroll -rollsite: +ingress: + fateboard: + hosts: + - name: party10000.fateboard.example.com + client: + hosts: + - name: party10000.notebook.example.com + +rollsite: type: NodePort nodePort: 30101 partyList: @@ -276,23 +308,30 @@ python: type: NodePort httpNodePort: 30107 grpcNodePort: 30102 + logLevel: INFO + +servingIp: 192.168.100.123 +servingPort: 30105 ``` +**注意: 我们强烈建议阅读以下文档** +`cluster.yaml`中具体配置的含义,请参考: https://github.com/FederatedAI/KubeFATE/blob/master/docs/configurations/FATE_cluster_configuration.md + +### 安装FATE集群 如果一切没有问题,那就可以使用`kubefate cluster install`来部署两个fate集群了, ``` -kubefate@machine:~/demo$ kubefate cluster install -f ./fate-9999.yaml +kubefate@machine:~/kubefate$ kubefate cluster install -f examples/party-9999/cluster.yaml create job success, job id=2c1d926c-bb57-43d3-9127-8cf3fc6deb4b -kubefate@machine:~/demo$ kubefate cluster install -f ./fate-10000.yaml +kubefate@machine:~/kubefate$ kubefate cluster install -f examples/party-10000/cluster.yaml create job success, job id=7752db70-e368-41fa-8827-d39411728d1b ``` 这时候,KubeFATE会创建两个任务去分别部署两个FATE集群。我们可以通过`kubefate job ls`来查看任务,或者直接`watch` KubeFATE中集群的状态,直至变成`Running` ``` - -kubefate@machine:~/demo$ watch kubefate cluster ls +kubefate@machine:~/kubefate$ watch kubefate cluster ls UUID NAME NAMESPACE REVISION STATUS CHART ChartVERSION AGE -51476469-b473-4d41-b2d5-ea7241d5eac7 fate-9999 fate-9999 1 Running fate v1.6.0 88s -dacc0549-b9fc-463f-837a-4e7316db2537 fate-10000 fate-10000 1 Running fate v1.6.0 69s +51476469-b473-4d41-b2d5-ea7241d5eac7 fate-9999 fate-9999 1 Running fate v1.8.0 88s +dacc0549-b9fc-463f-837a-4e7316db2537 fate-10000 fate-10000 1 Running fate v1.8.0 69s ``` 因为这个步骤需要到网易云镜像仓库去下载约10G的镜像,所以第一次执行视乎你的网络情况需要一定时间。 检查下载的进度可以用 @@ -310,73 +349,93 @@ nodemanager-1-7c986f9454-qcscd 2/2 Running 0 12m python-57b66d96bd-vj8kq 3/3 Running 0 12m rollsite-7846898d6d-j2gb9 1/1 Running 0 12m ``` -另外一个方案是我们可以通过下载离线的容器镜像,导入本地环境,具体做法本文就不做赘述了。 -## 验证FATE的部署 -### 访问集群 +### 验证FATE的部署 通过以上的 `kubefate cluster ls` 命令, 我们得到 `fate-9999` 的集群ID是 `51476469-b473-4d41-b2d5-ea7241d5eac7`, 而 `fate-10000` 的集群ID是 `dacc0549-b9fc-463f-837a-4e7316db2537`. 我们可以通过`kubefate cluster describe`查询集群的具体访问信息, ``` kubefate@machine:~/demo$ kubefate cluster describe 51476469-b473-4d41-b2d5-ea7241d5eac7 UUID 51476469-b473-4d41-b2d5-ea7241d5eac7 -Name fate-9999 -NameSpace fate-9999 -ChartName fate -ChartVersion v1.6.0 -Revision 1 -Age 2m22s -Status Running -Spec backend: eggroll - chartName: fate - chartVersion: v1.6.0 - istio: - enabled: false - modules: - - rollsite - - clustermanager - - nodemanager - - mysql - - python - - fateboard - - client - name: fate-9999 - namespace: fate-9999 - partyId: 9999 - persistence: false - pullPolicy: null - python: - grpcNodePort: 30092 - httpNodePort: 30097 - type: NodePort - registry: hub.c.163.com/federatedai - rollsite: - nodePort: 30091 - partyList: - - partyId: 10000 - partyIp: 192.168.100.123 - partyPort: 30101 - type: NodePort - -Info dashboard: - - party9999.notebook.example.com - - party9999.fateboard.example.com - ip: 192.168.100.123 - pod: - - clustermanager-5fcbd4ccc6-fj6tq - - mysql-7cf4d4dcb8-wvl4j - - nodemanager-0-6cbbc86769-fk77x - - nodemanager-1-5c6dd78f99-bgt2w - - python-57668d4497-qwnbb - - rollsite-f7476746-5cxh8 - status: - modules: - client: Running - clustermanager: Running - fateboard: Running - mysql: Running - nodemanager-0: Running - nodemanager-1: Running - python: Running - rollsite: Running +Name fate-9999 +NameSpace fate-9999 +ChartName fate +ChartVersion v1.8.0 +Revision 1 +Age 15h +Status Running +Spec backend: eggroll + chartName: fate + chartVersion: v1.8.0 + imagePullSecrets: + - name: myregistrykey + imageTag: 1.8.0-release + ingress: + client: + annotations: + kubernetes.io/ingress.class: nginx + hosts: + - name: party9999.notebook.example.com + fateboard: + annotations: + kubernetes.io/ingress.class: nginx + hosts: + - name: party9999.fateboard.example.com + istio: + enabled: false + modules: + - rollsite + - clustermanager + - nodemanager + - mysql + - python + - fateboard + - client + name: fate-9999 + namespace: fate-9999 + partyId: 9999 + persistence: false + podSecurityPolicy: + enabled: false + pullPolicy: null + python: + grpcNodePort: 30092 + httpNodePort: 30097 + type: NodePort + registry: "" + rollsite: + nodePort: 30091 + partyList: + - partyId: 10000 + partyIp: 10.192.173.64 + partyPort: 30101 + type: NodePort + servingIp: 10.192.173.64 + servingPort: 30095 + +Info dashboard: + - party9999.notebook.example.com + - party9999.fateboard.example.com + ip: 10.192.173.64 + port: 30091 + status: + containers: + client: Running + clustermanager: Running + fateboard: Running + mysql: Running + nodemanager-0: Running + nodemanager-0-eggrollpair: Running + nodemanager-1: Running + nodemanager-1-eggrollpair: Running + python: Running + rollsite: Running + deployments: + client: Available + clustermanager: Available + mysql: Available + nodemanager-0: Available + nodemanager-1: Available + python: Available + rollsite: Available ``` 从返回的内容中,我们看到`Info->dashboard`里包含了: * Jupyter Notebook的访问地址: `party9999.notebook.example.com`。这个是我们准备让数据科学家进行建模分析的平台。已经集成了FATE-Clients; @@ -387,8 +446,7 @@ Info dashboard: ### 在浏览器访问FATE集群的机器上配置相关的Host信息 **注意: 如果DNS已经配置了相关的解析,这步可以跳过** - -在Linux或者MacOS机器可以通过以下命令配置, +在准备打开浏览器的Linux或MacOS机器通过以下命令配置, ``` sudo -- sh -c "echo \"192.168.100.123 party9999.notebook.example.com\" >> /etc/hosts" sudo -- sh -c "echo \"192.168.100.123 party9999.fateboard.example.com\" >> /etc/hosts" @@ -405,38 +463,44 @@ sudo -- sh -c "echo \"192.168.100.123 party10000.fateboard.example.com\" >> /et -打开 -```Pipeline/notebooks/usage_of_fate_client.ipynb``` -, `ipynb` 是Jupyter Notebook的格式。如果想更多的了解这个格式,请参考: https://jupyter-notebook.readthedocs.io/en/stable/ +打开`pipeline/pipeline_tutorial_upload.ipynb`并执行这个脚本来上传数据。我们需要在`9999`和`10000`两方的 + +然后打开 +`pipeline/pipeline_tutorial_hetero_sbt.ipynb` 并执行训练和预测任务。具体信息可以参考脚本上的注释。 +这里收录了更多的Jupyter notebook脚本:https://github.com/FederatedAI/FATE/tree/master/doc/tutorial/pipeline -接着摁下图中所高亮的摁扭,整个notebook会自动运行。 +notebook截图:
- +
-
-
-当notebook在运行的时候,你可以随时的查阅任务的状态通过FateBoard, + +当训练任务结束是,我们可以在fateboard上查看训练任务的流程图:
- + +
+ +我们也可以在fateboard上查看训练任务的结果: +
+ +
+ +当预测任务结束时,我们可以在fateboard上查看训练好的模型,以及特征重要的度等信息: +
+ +
+ +当然还包括模型对每一条测试数据的预测结果: +
+
-
-当整个notebook结束运行后,如果最后两行结果跟如下代码相似,
-**注意:执行过程中,代码块前的变成`\*`。需等到变成数字才表明该步骤执行完毕。全部的代码块前面都变成数字后代表整个notebook执行完成。更多请参考Jupyter Notebook相关说明。** -``` -2021-07-07 05:31:50.784 | INFO | pipeline.utils.invoker.job_submitter:monitor_job_status:129 - Job is success!!! Job id is 202107070529230126236 -2021-07-07 05:31:50.788 | INFO | pipeline.utils.invoker.job_submitter:monitor_job_status:130 - Total time: 0:02:24 -``` -那就说明你正确的安装和部署了KubeFATE。 +这表示FATE已经完全安装好,并且KubeFate的功能一切正常。 -## 下一步 -1. Pipeline_example是非常简单的FATE联邦学习例子。我们可以在Notebook的目录上找到更多其他的联邦学习算法。但需要注意,这些例子都是按单边写的,所以,需要修改他们在已经部署的`fate-9999`与`fate-10000`共同训练。大多数情况下,需要保证host方已经把数据导入; -2. FML_Manager将会在下个版本与FATE-Clients合并,请参考FATE-Clients的文档:https://fate.readthedocs.io/en/latest/_build_temp/python/fate_client/flow_sdk/README.html. FATE-Clients已经默认安装在Jupyter Notebook中,可以直接使用; -3. 现在你已经部署了一个基本版本的FATE集群,我们在Github上准备了不同FATE的集群部署例子(https://github.com/FederatedAI/KubeFATE/tree/master/k8s-deploy/examples ),包括: - * FATE-Serving的部署; - * Spark作为计算引擎的部署。 - - 我们也会推出系列文章介绍以上内容。 +## 后续 +1. 上面的联邦学习例子是最简单的一个例子,请自行探索其他的例子。 +2. 本文只介绍了基于eggroll的FATE集群架构,在`https://github.com/FederatedAI/KubeFATE/tree/master/k8s-deploy/examples`目录中,我们还准备了其他的YAML文件,用来: +* 部署FATE-Serving。 +* 部署基于Spark的FATE集群,以及基于两种消息队列的FATE集群:rabbitmq和pulsar。 \ No newline at end of file diff --git a/helm-charts/FATE-Exchange/Chart.yaml b/helm-charts/FATE-Exchange/Chart.yaml index a6ddaa5d8..26ce21b4e 100644 --- a/helm-charts/FATE-Exchange/Chart.yaml +++ b/helm-charts/FATE-Exchange/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 -appVersion: v1.7.2 +appVersion: v1.8.0 description: A Helm chart for fate exchange name: fate-exchange -version: v1.7.2 +version: v1.8.0 diff --git a/helm-charts/FATE-Exchange/values-template-example.yaml b/helm-charts/FATE-Exchange/values-template-example.yaml index 232e84e06..7e4d068c3 100644 --- a/helm-charts/FATE-Exchange/values-template-example.yaml +++ b/helm-charts/FATE-Exchange/values-template-example.yaml @@ -1,10 +1,10 @@ name: fate-exchange namespace: fate-exchange chartName: fate-exchange -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 1 registry: "" -imageTag: "1.7.2-release" +imageTag: "1.8.0-release" pullPolicy: imagePullSecrets: - name: myregistrykey diff --git a/helm-charts/FATE-Exchange/values-template.yaml b/helm-charts/FATE-Exchange/values-template.yaml index c8e8a78e7..e89ae3c3d 100644 --- a/helm-charts/FATE-Exchange/values-template.yaml +++ b/helm-charts/FATE-Exchange/values-template.yaml @@ -4,7 +4,7 @@ partyName: {{ .name }} image: registry: {{ .registry | default "federatedai" }} isThridParty: {{ empty .registry | ternary "false" "true" }} - tag: {{ .imageTag | default "1.7.2-release" }} + tag: {{ .imageTag | default "1.8.0-release" }} pullPolicy: {{ .pullPolicy | default "IfNotPresent" }} {{- with .imagePullSecrets }} imagePullSecrets: diff --git a/helm-charts/FATE-Exchange/values.yaml b/helm-charts/FATE-Exchange/values.yaml index bfeb6cca0..0ba13c2d4 100644 --- a/helm-charts/FATE-Exchange/values.yaml +++ b/helm-charts/FATE-Exchange/values.yaml @@ -4,7 +4,7 @@ partyName: fate-exchange image: registry: federatedai isThridParty: - tag: 1.7.2-release + tag: 1.8.0-release pullPolicy: IfNotPresent imagePullSecrets: # - name: diff --git a/helm-charts/FATE-Serving/templates/serving-server-module.yaml b/helm-charts/FATE-Serving/templates/serving-server-module.yaml index 802b5b904..d3d2d3a88 100644 --- a/helm-charts/FATE-Serving/templates/serving-server-module.yaml +++ b/helm-charts/FATE-Serving/templates/serving-server-module.yaml @@ -27,8 +27,8 @@ data: #serviceRoleName=serving # cache #remoteModelInferenceResultCacheSwitch=false - #cache.type=local - #model.cache.path= + cache.type={{ .Values.servingServer.cacheType | default "local" }} + model.cache.path=/root/.fate # local cache #local.cache.maxsize=10000 #local.cache.expire=30 diff --git a/helm-charts/FATE-Serving/values-template-example.yaml b/helm-charts/FATE-Serving/values-template-example.yaml index 908f8e161..db3e5cbda 100644 --- a/helm-charts/FATE-Serving/values-template-example.yaml +++ b/helm-charts/FATE-Serving/values-template-example.yaml @@ -73,6 +73,7 @@ ingress: # ip: 192.168.10.1 # port: 30110 # subPath: "" + # cacheType: "local" # existingClaim: "" # storageClass: "serving-server" # accessMode: ReadWriteOnce diff --git a/helm-charts/FATE-Serving/values-template.yaml b/helm-charts/FATE-Serving/values-template.yaml index 2fd8eee1e..9386f3a1e 100644 --- a/helm-charts/FATE-Serving/values-template.yaml +++ b/helm-charts/FATE-Serving/values-template.yaml @@ -149,7 +149,7 @@ servingServer: storageClass: {{ .storageClass | default "serving-redis" }} accessMode: {{ .accessMode | default "ReadWriteOnce" }} size: {{ .size | default "1Gi" }} - + cacheType: {{ .cacheType | default "local" }} {{- with .nodeSelector }} nodeSelector: {{ toYaml . | indent 4 }} diff --git a/helm-charts/FATE-Serving/values.yaml b/helm-charts/FATE-Serving/values.yaml index 7f28e0253..e3779fa29 100644 --- a/helm-charts/FATE-Serving/values.yaml +++ b/helm-charts/FATE-Serving/values.yaml @@ -84,6 +84,7 @@ servingServer: existingClaim: "" storageClass: "serving-server" accessMode: ReadWriteOnce + cacheType: local size: 1Gi diff --git a/helm-charts/FATE/Chart.yaml b/helm-charts/FATE/Chart.yaml index bc06a9ea2..6f323acda 100644 --- a/helm-charts/FATE/Chart.yaml +++ b/helm-charts/FATE/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v1 -appVersion: v1.7.2 +appVersion: v1.8.0 description: A Helm chart for fate-training name: fate -version: v1.7.2 +version: v1.8.0 home: https://fate.fedai.org icon: https://aisp-1251170195.cos.ap-hongkong.myqcloud.com/wp-content/uploads/sites/12/2019/09/logo.png sources: diff --git a/helm-charts/FATE/templates/NOTES.txt b/helm-charts/FATE/templates/NOTES.txt index bb7370ceb..bd9a06454 100644 --- a/helm-charts/FATE/templates/NOTES.txt +++ b/helm-charts/FATE/templates/NOTES.txt @@ -1,3 +1,14 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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. + Please wait for several minutes for FATE deployment to complete. For more details, please visit https://github.com/FederatedAI/KubeFATE. diff --git a/helm-charts/FATE/templates/_helpers.tpl b/helm-charts/FATE/templates/_helpers.tpl index 88972b68b..8b6bae344 100644 --- a/helm-charts/FATE/templates/_helpers.tpl +++ b/helm-charts/FATE/templates/_helpers.tpl @@ -1,3 +1,14 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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. + {{/* Helm required labels */}} {{- define "fate.labels" -}} name: {{ .Values.partyName | quote }} diff --git a/helm-charts/FATE/templates/eggroll-config.yaml b/helm-charts/FATE/templates/backends/eggroll/clustermanager/configmap.yaml similarity index 98% rename from helm-charts/FATE/templates/eggroll-config.yaml rename to helm-charts/FATE/templates/backends/eggroll/clustermanager/configmap.yaml index 39a9cb005..f3ab2929b 100644 --- a/helm-charts/FATE/templates/eggroll-config.yaml +++ b/helm-charts/FATE/templates/backends/eggroll/clustermanager/configmap.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -9,6 +9,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +{{ if .Values.modules.clustermanager.include }} kind: ConfigMap apiVersion: v1 metadata: @@ -95,3 +96,4 @@ data: eggroll.rollsite.polling.server.enabled=true eggroll.rollsite.polling.concurrency= {{ .Values.modules.rollsite.polling.concurrency | default 50 }} {{- end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/clustermanager-module.yaml b/helm-charts/FATE/templates/backends/eggroll/clustermanager/deployment.yaml similarity index 83% rename from helm-charts/FATE/templates/clustermanager-module.yaml rename to helm-charts/FATE/templates/backends/eggroll/clustermanager/deployment.yaml index 601f614e6..e708c4942 100644 --- a/helm-charts/FATE/templates/clustermanager-module.yaml +++ b/helm-charts/FATE/templates/backends/eggroll/clustermanager/deployment.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -53,6 +53,27 @@ spec: java -Dlog4j.configurationFile=$${EGGROLL_HOME}/conf/log4j2.properties -cp $${EGGROLL_HOME}/lib/*: com.webank.eggroll.core.Bootstrap --bootstraps com.webank.eggroll.core.resourcemanager.ClusterManagerBootstrap -c $${EGGROLL_HOME}/conf/eggroll.properties -p 4670 -s 'EGGROLL_DEAMON' ports: - containerPort: 4670 + livenessProbe: + tcpSocket: + port: 4670 + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + tcpSocket: + port: 4670 + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + tcpSocket: + port: 4670 + failureThreshold: 12 + periodSeconds: 10 volumeMounts: - mountPath: /data/projects/fate/eggroll/conf/eggroll.properties name: eggroll-confs @@ -79,24 +100,4 @@ spec: - name: eggroll-confs configMap: name: eggroll-config ---- -apiVersion: v1 -kind: Service -metadata: - name: clustermanager - labels: - fateMoudle: clustermanager -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-clustermanager" - port: 4670 - targetPort: 4670 - protocol: TCP - type: {{ .Values.modules.clustermanager.type }} - clusterIP: None - selector: - fateMoudle: clustermanager -{{ include "fate.matchLabels" . | indent 4 }} ---- {{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/eggroll/clustermanager/service.yaml b/helm-charts/FATE/templates/backends/eggroll/clustermanager/service.yaml new file mode 100644 index 000000000..971a7887f --- /dev/null +++ b/helm-charts/FATE/templates/backends/eggroll/clustermanager/service.yaml @@ -0,0 +1,31 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.clustermanager.include }} +apiVersion: v1 +kind: Service +metadata: + name: clustermanager + labels: + fateMoudle: clustermanager +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-clustermanager" + port: 4670 + targetPort: 4670 + protocol: TCP + type: {{ .Values.modules.clustermanager.type }} + clusterIP: None + selector: + fateMoudle: clustermanager +{{ include "fate.matchLabels" . | indent 4 }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/eggroll/lb-rollsite/configmap.yaml b/helm-charts/FATE/templates/backends/eggroll/lb-rollsite/configmap.yaml new file mode 100644 index 000000000..afbd7c97d --- /dev/null +++ b/helm-charts/FATE/templates/backends/eggroll/lb-rollsite/configmap.yaml @@ -0,0 +1,109 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.lbrollsite.include }} +kind: ConfigMap +apiVersion: v1 +metadata: + name: rollsite-config + labels: + fateMoudle: rollsite +{{ include "fate.labels" . | indent 4 }} +data: + route_table.json: | + { + "route_table": { + "default": { + "default": [ + { + "ip": "exchange", + "port": 9390 + } + ] + }, + {{- range .Values.partyList }} + "{{ .partyId }}": { + "default": [ + { + "ip": "{{ .partyIp }}", + "port": {{ .partyPort }} + } + ] + }, + {{- end }} + "{{ .Values.partyId }}": { + "fateflow": [ + { + "ip": "fateflow", + "port": 9360 + } + ], + "default": [ + { + "ip": "rollsite", + "port": 9370 + } + ] + } + }, + "permission": { + "default_allow": true + } + } + nginx.conf: | + + #user nobody; + worker_processes 10; + + #error_log logs/error.log; + #error_log logs/error.log notice; + error_log /dev/stdout info; + + #pid logs/nginx.pid; + + + events { + worker_connections 1024; + } + + + http { + include mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /dev/stdout main; + + sendfile on; + client_max_body_size {{ .Values.modules.lbrollsite.size }}; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 65; + + #gzip on; + upstream exchange_services { + least_conn; + {{- range .Values.exchangeList }} + server {{ .ip }}:{{ .port }}; + {{- end }} + } + server { + listen 9390 http2; + location / { + grpc_pass grpc://exchange_services; + } + } + } +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/lb-rollsite-module.yaml b/helm-charts/FATE/templates/backends/eggroll/lb-rollsite/deployment.yaml similarity index 51% rename from helm-charts/FATE/templates/lb-rollsite-module.yaml rename to helm-charts/FATE/templates/backends/eggroll/lb-rollsite/deployment.yaml index e49132c84..7f15293c0 100644 --- a/helm-charts/FATE/templates/lb-rollsite-module.yaml +++ b/helm-charts/FATE/templates/backends/eggroll/lb-rollsite/deployment.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -10,103 +10,6 @@ # limitations under the License. {{ if .Values.modules.lbrollsite.include }} -kind: ConfigMap -apiVersion: v1 -metadata: - name: rollsite-config - labels: - fateMoudle: rollsite -{{ include "fate.labels" . | indent 4 }} -data: - route_table.json: | - { - "route_table": { - "default": { - "default": [ - { - "ip": "exchange", - "port": 9390 - } - ] - }, - {{- range .Values.partyList }} - "{{ .partyId }}": { - "default": [ - { - "ip": "{{ .partyIp }}", - "port": {{ .partyPort }} - } - ] - }, - {{- end }} - "{{ .Values.partyId }}": { - "fateflow": [ - { - "ip": "fateflow", - "port": 9360 - } - ], - "default": [ - { - "ip": "rollsite", - "port": 9370 - } - ] - } - }, - "permission": { - "default_allow": true - } - } - nginx.conf: | - - #user nobody; - worker_processes 10; - - #error_log logs/error.log; - #error_log logs/error.log notice; - error_log /dev/stdout info; - - #pid logs/nginx.pid; - - - events { - worker_connections 1024; - } - - - http { - include mime.types; - default_type application/octet-stream; - - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - access_log /dev/stdout main; - - sendfile on; - client_max_body_size {{ .Values.modules.lbrollsite.size }}; - #tcp_nopush on; - - #keepalive_timeout 0; - keepalive_timeout 65; - - #gzip on; - upstream exchange_services { - least_conn; - {{- range .Values.exchangeList }} - server {{ .ip }}:{{ .port }}; - {{- end }} - } - server { - listen 9390 http2; - location / { - grpc_pass grpc://exchange_services; - } - } - } ---- apiVersion: apps/v1 kind: Deployment metadata: @@ -197,50 +100,4 @@ spec: - name: eggroll-confs configMap: name: eggroll-config ---- -apiVersion: v1 -kind: Service -metadata: - name: rollsite - labels: - fateMoudle: rollsite -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-rollsite" - port: 9370 - targetPort: 9370 - {{- if eq .Values.modules.lbrollsite.type "NodePort" "LoadBalancer" }} - nodePort: {{ .Values.modules.lbrollsite.nodePort }} - {{- end }} - protocol: TCP - type: {{ .Values.modules.lbrollsite.type }} -{{- if .Values.modules.lbrollsite.loadBalancerIP }} - loadBalancerIP: "{{ .Values.modules.lbrollsite.loadBalancerIP }}" -{{- end }} - selector: - fateMoudle: rollsite -{{ include "fate.matchLabels" . | indent 4 }} ---- -apiVersion: v1 -kind: Service -metadata: - name: exchange - labels: - fateMoudle: rollsite -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "9390" - port: 9390 - targetPort: 9390 - # {{- if eq .Values.modules.lbrollsite.type "NodePort" "LoadBalancer" }} - # nodePort: {{ .Values.modules.lbrollsite.nodePort }} - # {{- end }} - protocol: TCP - type: {{ .Values.modules.lbrollsite.type }} - selector: - fateMoudle: rollsite -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/eggroll/lb-rollsite/service.yaml b/helm-charts/FATE/templates/backends/eggroll/lb-rollsite/service.yaml new file mode 100644 index 000000000..d732667c5 --- /dev/null +++ b/helm-charts/FATE/templates/backends/eggroll/lb-rollsite/service.yaml @@ -0,0 +1,58 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.lbrollsite.include }} +apiVersion: v1 +kind: Service +metadata: + name: rollsite + labels: + fateMoudle: rollsite +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-rollsite" + port: 9370 + targetPort: 9370 + {{- if eq .Values.modules.lbrollsite.type "NodePort" "LoadBalancer" }} + nodePort: {{ .Values.modules.lbrollsite.nodePort }} + {{- end }} + protocol: TCP + type: {{ .Values.modules.lbrollsite.type }} +{{- if .Values.modules.lbrollsite.loadBalancerIP }} + loadBalancerIP: "{{ .Values.modules.lbrollsite.loadBalancerIP }}" +{{- end }} + selector: + fateMoudle: rollsite +{{ include "fate.matchLabels" . | indent 4 }} +--- +apiVersion: v1 +kind: Service +metadata: + name: exchange + labels: + fateMoudle: rollsite +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "9390" + port: 9390 + targetPort: 9390 + # {{- if eq .Values.modules.lbrollsite.type "NodePort" "LoadBalancer" }} + # nodePort: {{ .Values.modules.lbrollsite.nodePort }} + # {{- end }} + protocol: TCP + type: {{ .Values.modules.lbrollsite.type }} + selector: + fateMoudle: rollsite +{{ include "fate.matchLabels" . | indent 4 }} +--- +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/eggroll/nodemanager/configmap.yaml b/helm-charts/FATE/templates/backends/eggroll/nodemanager/configmap.yaml new file mode 100644 index 000000000..b1d479f0b --- /dev/null +++ b/helm-charts/FATE/templates/backends/eggroll/nodemanager/configmap.yaml @@ -0,0 +1,105 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.nodemanager.include }} +{{- $root := . -}} +{{- range $nodemanager := .Values.modules.nodemanager.list }} +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: {{ $nodemanager.name }}-config + labels: + fateMoudle: {{ $nodemanager.name }} +{{ include "fate.labels" $root | indent 4 }} +data: + eggroll.properties: | + [eggroll] + eggroll.resourcemanager.clustermanager.jdbc.driver.class.name=com.mysql.cj.jdbc.Driver + eggroll.resourcemanager.clustermanager.jdbc.url=jdbc:mysql://{{ $root.Values.modules.mysql.ip }}:{{ $root.Values.modules.mysql.port }}/{{ $root.Values.modules.mysql.mysql_database }}?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true + eggroll.resourcemanager.clustermanager.jdbc.username={{ $root.Values.modules.mysql.mysql_user }} + eggroll.resourcemanager.clustermanager.jdbc.password={{ $root.Values.modules.mysql.mysql_password }} + + eggroll.data.dir=data/ + eggroll.logs.dir=logs/ + eggroll.resourcemanager.clustermanager.host=clustermanager + eggroll.resourcemanager.clustermanager.port=4670 + eggroll.resourcemanager.nodemanager.port=4671 + eggroll.resourcemanager.process.tag={{ $root.Values.partyId }} + + eggroll.bootstrap.root.script=bin/eggroll_boot.sh + + eggroll.resourcemanager.bootstrap.egg_pair.exepath=bin/roll_pair/egg_pair_bootstrap.sh + eggroll.resourcemanager.bootstrap.egg_pair.venv= + eggroll.resourcemanager.bootstrap.egg_pair.pythonpath=/data/projects/fate/python:/data/projects/fate/eggroll/python + eggroll.resourcemanager.bootstrap.egg_pair.filepath=python/eggroll/roll_pair/egg_pair.py + eggroll.resourcemanager.bootstrap.egg_pair.ld_library_path= + + eggroll.resourcemanager.bootstrap.egg_frame.exepath=bin/roll_pair/roll_pair_master_bootstrap.sh + eggroll.resourcemanager.bootstrap.egg_frame.javahome=/usr/lib/jvm/java-1.8.0-openjdk + eggroll.resourcemanager.bootstrap.egg_frame.classpath=conf/:lib/* + eggroll.resourcemanager.bootstrap.egg_frame.mainclass=com.webank.eggroll.rollframe.EggFrameBootstrap + eggroll.resourcemanager.bootstrap.egg_frame.jvm.options= + + eggroll.core.grpc.channel.keepalive.timeout.sec=20 + + # roll_frame + arrow.enable_unsafe_memory_access=true + + # hadoop + hadoop.fs.defaultFS=file:/// + + # hadoop HA mode + hadoop.dfs.nameservices= + hadoop.dfs.namenode.rpc-address.nn1= + hadoop.dfs.namenode.rpc-address.nn2= + + # session + eggroll.session.processors.per.node={{ $nodemanager.sessionProcessorsPerNode }} + eggroll.session.start.timeout.ms=180000 + + # rollpair + eggroll.rollpair.transferpair.sendbuf.size=250000 + + # rollsite + eggroll.rollsite.coordinator={{ $root.Values.partyName }} + eggroll.rollsite.host=rollsite + eggroll.rollsite.port=9370 + eggroll.rollsite.party.id={{ $root.Values.partyId }} + eggroll.rollsite.route.table.path=conf/route_table/route_table.json + eggroll.rollsite.route.table.key= + eggroll.rollsite.route.table.whitelist=127.0.0.1 + eggroll.rollsite.jvm.options=-XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:logs/eggroll/rollsite.gc.log + + eggroll.rollsite.push.max.retry=3 + eggroll.rollsite.push.long.retry=2 + eggroll.rollsite.push.batches.per.stream=10 + eggroll.rollsite.adapter.sendbuf.size=100000 + fluent.conf: | + + @type tail + path /data/projects/fate/eggroll/logs/*/*.* + exclude_path ["/data/projects/fate/eggroll/logs/eggroll/*", "/data/projects/fate/eggroll/logs/log.pos"] + pos_file /data/projects/fate/eggroll/logs/log.pos + tag eggroll + multiline_flush_interval 2s + refresh_interval 5s + + @type none + + + + + @type stdout + + +{{- end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/eggroll/nodemanager/deployment.yaml b/helm-charts/FATE/templates/backends/eggroll/nodemanager/deployment.yaml new file mode 100644 index 000000000..6fe7b84a2 --- /dev/null +++ b/helm-charts/FATE/templates/backends/eggroll/nodemanager/deployment.yaml @@ -0,0 +1,141 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.nodemanager.include }} +{{- $root := . -}} +{{- range $nodemanager := .Values.modules.nodemanager.list }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ $nodemanager.name }} + labels: + fateMoudle: {{ $nodemanager.name }} + app: nodemanager +{{ include "fate.labels" $root | indent 4 }} +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + fateMoudle: {{ $nodemanager.name }} +{{ include "fate.matchLabels" $root | indent 6 }} + template: + metadata: + labels: + fateMoudle: {{ $nodemanager.name }} + app: nodemanager +{{ include "fate.labels" $root | indent 8 }} + spec: + containers: + - name: {{ $nodemanager.name }}-eggrollpair + {{- if $root.Values.image.isThridParty }} + image: {{ $root.Values.image.registry }}/fluentd:v1.12 + {{- else }} + image: fluent/fluentd:v1.12 + {{- end }} + volumeMounts: + - name: eggroll-log + mountPath: /data/projects/fate/eggroll/logs/ + - name: fluentd-conf + subPath: fluent.conf + mountPath: /fluentd/etc/fluent.conf + - image: {{ $root.Values.image.registry }}/eggroll:{{ $root.Values.image.tag }} + imagePullPolicy: {{ $root.Values.image.pullPolicy }} + name: {{ $nodemanager.name }} + command: + - bash + - -c + - | + set -x + mkdir -p /data/projects/fate/eggroll/logs/eggroll/ + touch /data/projects/fate/eggroll/logs/eggroll/eggroll-audit.log + ln -sf /dev/stdout /data/projects/fate/eggroll/logs/eggroll/eggroll-audit.log + touch /data/projects/fate/eggroll/logs/eggroll/eggroll.jvm.log + ln -sf /dev/stdout /data/projects/fate/eggroll/logs/eggroll/eggroll.jvm.log + touch /data/projects/fate/eggroll/logs/eggroll/eggroll.jvm.err.log + ln -sf /dev/stderr /data/projects/fate/eggroll/logs/eggroll/eggroll.jvm.err.log + /tini -- java -Dlog4j.configurationFile=$${EGGROLL_HOME}/conf/log4j2.properties -cp $${EGGROLL_HOME}/lib/*: com.webank.eggroll.core.Bootstrap --bootstraps com.webank.eggroll.core.resourcemanager.NodeManagerBootstrap -c $${EGGROLL_HOME}/conf/eggroll.properties -p 4671 -s 'EGGROLL_DEAMON' + ports: + - containerPort: 4671 + livenessProbe: + tcpSocket: + port: 4671 + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + tcpSocket: + port: 4671 + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + tcpSocket: + port: 4671 + failureThreshold: 12 + periodSeconds: 10 + volumeMounts: + - name: eggroll-log + mountPath: /data/projects/fate/eggroll/logs/ + - mountPath: /data/projects/fate/eggroll/conf/eggroll.properties + name: nodemanager-confs + subPath: eggroll.properties + - mountPath: /data/projects/fate/conf/ + name: python-confs + - name: data-dir + mountPath: /data/projects/fate/eggroll/data + subPath: {{ $nodemanager.subPath }} + {{- with $nodemanager.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with $nodemanager.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with $nodemanager.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with $root.Values.image.imagePullSecrets }} + imagePullSecrets: +{{ toYaml . | indent 6 }} + {{- end }} + serviceAccountName: {{ template "serviceAccountName" $root }} + restartPolicy: Always + volumes: + - name: eggroll-log + emptyDir: {} + - name: fluentd-conf + configMap: + name: {{ $nodemanager.name }}-config + - name: nodemanager-confs + configMap: + name: {{ $nodemanager.name }}-config + - name: python-confs + configMap: + name: python-config + {{- if not $root.Values.persistence.enabled }} + - name: data-dir + emptyDir: {} + {{- else }} + - name: data-dir + persistentVolumeClaim: + claimName: {{ $nodemanager.existingClaim | default (printf "%s-data" $nodemanager.name) }} + {{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/eggroll/nodemanager/persistentvolumeclaim.yaml b/helm-charts/FATE/templates/backends/eggroll/nodemanager/persistentvolumeclaim.yaml new file mode 100644 index 000000000..82838f51e --- /dev/null +++ b/helm-charts/FATE/templates/backends/eggroll/nodemanager/persistentvolumeclaim.yaml @@ -0,0 +1,40 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.nodemanager.include }} +{{- $root := . -}} +{{- range $nodemanager := .Values.modules.nodemanager.list }} +--- +{{- if and $root.Values.persistence.enabled (not $nodemanager.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ $nodemanager.name }}-data + labels: + fateMoudle: {{ $nodemanager.name }} +{{ include "fate.labels" $root | indent 4 }} +spec: + accessModes: + - {{ $nodemanager.accessMode }} + resources: + requests: + storage: {{ $nodemanager.size }} + {{- if $nodemanager.storageClass }} + {{- if eq "-" $nodemanager.storageClass }} + storageClassName: "" + {{- else }} + storageClassName: {{ $nodemanager.storageClass }} + {{- end }} + {{- end }} +{{- end }} + +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/eggroll/nodemanager/service.yaml b/helm-charts/FATE/templates/backends/eggroll/nodemanager/service.yaml new file mode 100644 index 000000000..a49d3d83d --- /dev/null +++ b/helm-charts/FATE/templates/backends/eggroll/nodemanager/service.yaml @@ -0,0 +1,35 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.nodemanager.include }} +{{- $root := . -}} +{{- range $nodemanager := .Values.modules.nodemanager.list }} +--- +apiVersion: v1 +kind: Service +metadata: + labels: + fateMoudle: {{ $nodemanager.name }} +{{ include "fate.labels" $root | indent 4 }} + name: {{ $nodemanager.name }} +spec: + ports: + - name: "tcp-nodemanager" + port: 4671 + targetPort: 4671 + protocol: TCP + clusterIP: None + selector: + fateMoudle: {{ $nodemanager.name }} +{{ include "fate.matchLabels" $root | indent 4 }} + +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/eggroll/rollsite/configmap.yaml b/helm-charts/FATE/templates/backends/eggroll/rollsite/configmap.yaml new file mode 100644 index 000000000..f25ba0bec --- /dev/null +++ b/helm-charts/FATE/templates/backends/eggroll/rollsite/configmap.yaml @@ -0,0 +1,94 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.rollsite.include }} +kind: ConfigMap +apiVersion: v1 +metadata: + name: rollsite-config + labels: + fateMoudle: rollsite +{{ include "fate.labels" . | indent 4 }} +data: + route_table.json: | + { + "route_table": { + "default": { + "default": [ + { + {{- if .Values.exchange }} + "ip": "{{ .Values.exchange.partyIp }}", + "port": {{ .Values.exchange.partyPort }} + {{- else }} + + {{- if and .Values.modules.rollsite.polling.enabled ( eq (print .Values.modules.rollsite.polling.type) "client" ) }} + + {{- with .Values.modules.rollsite.polling.server }} + "ip": "{{ .ip }}", + "port": {{ .port }} + {{- end }} + + {{- else }} + "ip": "rollsite", + "port": 9370 + {{- end }} + + {{- end }} + } + ] + }, + {{- range .Values.partyList }} + "{{ .partyId }}": { + "default": [ + { + "ip": "{{ .partyIp }}", + "port": {{ .partyPort }} + } + ] + }, + {{- end }} + + {{- if and .Values.modules.rollsite.polling.enabled ( eq (print .Values.modules.rollsite.polling.type) "server" ) }} + + {{- range .Values.modules.rollsite.polling.clientList}} + "{{ .partID }}": + { + "default": [ + { + "port": -1, + "ip": "", + "is_polling": true + } + ] + }, + {{- end }} + + {{- end }} + "{{ .Values.partyId }}": { + "fateflow": [ + { + "ip": "fateflow", + "port": 9360 + } + ], + "default": [ + { + "ip": "rollsite", + "port": 9370 + } + ] + } + }, + "permission": { + "default_allow": true + } + } +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/rollsite-module.yaml b/helm-charts/FATE/templates/backends/eggroll/rollsite/deployment.yaml similarity index 50% rename from helm-charts/FATE/templates/rollsite-module.yaml rename to helm-charts/FATE/templates/backends/eggroll/rollsite/deployment.yaml index d429a85e3..0dc2210b8 100644 --- a/helm-charts/FATE/templates/rollsite-module.yaml +++ b/helm-charts/FATE/templates/backends/eggroll/rollsite/deployment.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -10,88 +10,6 @@ # limitations under the License. {{ if .Values.modules.rollsite.include }} -kind: ConfigMap -apiVersion: v1 -metadata: - name: rollsite-config - labels: - fateMoudle: rollsite -{{ include "fate.labels" . | indent 4 }} -data: - route_table.json: | - { - "route_table": { - "default": { - "default": [ - { - {{- if .Values.exchange }} - "ip": "{{ .Values.exchange.partyIp }}", - "port": {{ .Values.exchange.partyPort }} - {{- else }} - - {{- if and .Values.modules.rollsite.polling.enabled ( eq (print .Values.modules.rollsite.polling.type) "client" ) }} - - {{- with .Values.modules.rollsite.polling.server }} - "ip": "{{ .ip }}", - "port": {{ .port }} - {{- end }} - - {{- else }} - "ip": "rollsite", - "port": 9370 - {{- end }} - - {{- end }} - } - ] - }, - {{- range .Values.partyList }} - "{{ .partyId }}": { - "default": [ - { - "ip": "{{ .partyIp }}", - "port": {{ .partyPort }} - } - ] - }, - {{- end }} - - {{- if and .Values.modules.rollsite.polling.enabled ( eq (print .Values.modules.rollsite.polling.type) "server" ) }} - - {{- range .Values.modules.rollsite.polling.clientList}} - "{{ .partID }}": - { - "default": [ - { - "port": -1, - "ip": "", - "is_polling": true - } - ] - }, - {{- end }} - - {{- end }} - "{{ .Values.partyId }}": { - "fateflow": [ - { - "ip": "fateflow", - "port": 9360 - } - ], - "default": [ - { - "ip": "rollsite", - "port": 9370 - } - ] - } - }, - "permission": { - "default_allow": true - } - } ---- apiVersion: apps/v1 kind: Deployment metadata: @@ -139,6 +57,27 @@ spec: java -Dlog4j.configurationFile=$${EGGROLL_HOME}/conf/log4j2.properties -cp $${EGGROLL_HOME}/lib/*:$${EGGROLL_HOME}/conf/ com.webank.eggroll.rollsite.EggSiteBootstrap -c $${EGGROLL_HOME}/conf/eggroll.properties ports: - containerPort: 9370 + livenessProbe: + tcpSocket: + port: 9370 + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + tcpSocket: + port: 9370 + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + tcpSocket: + port: 9370 + failureThreshold: 12 + periodSeconds: 10 volumeMounts: - mountPath: /data/projects/fate/eggroll/conf/route_table/ name: rollsite-confs @@ -170,29 +109,4 @@ spec: - name: eggroll-confs configMap: name: eggroll-config ---- -apiVersion: v1 -kind: Service -metadata: - name: rollsite - labels: - fateMoudle: rollsite -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-rollsite" - port: 9370 - targetPort: 9370 - {{- if eq .Values.modules.rollsite.type "NodePort" "LoadBalancer" }} - nodePort: {{ .Values.modules.rollsite.nodePort }} - {{- end }} - protocol: TCP - type: {{ .Values.modules.rollsite.type }} - {{- if .Values.modules.rollsite.loadBalancerIP }} - loadBalancerIP: "{{ .Values.modules.rollsite.loadBalancerIP }}" - {{- end }} - selector: - fateMoudle: rollsite -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/eggroll/rollsite/service.yaml b/helm-charts/FATE/templates/backends/eggroll/rollsite/service.yaml new file mode 100644 index 000000000..0216d4dd2 --- /dev/null +++ b/helm-charts/FATE/templates/backends/eggroll/rollsite/service.yaml @@ -0,0 +1,36 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.rollsite.include }} +apiVersion: v1 +kind: Service +metadata: + name: rollsite + labels: + fateMoudle: rollsite +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-rollsite" + port: 9370 + targetPort: 9370 + {{- if eq .Values.modules.rollsite.type "NodePort" "LoadBalancer" }} + nodePort: {{ .Values.modules.rollsite.nodePort }} + {{- end }} + protocol: TCP + type: {{ .Values.modules.rollsite.type }} + {{- if .Values.modules.rollsite.loadBalancerIP }} + loadBalancerIP: "{{ .Values.modules.rollsite.loadBalancerIP }}" + {{- end }} + selector: + fateMoudle: rollsite +{{ include "fate.matchLabels" . | indent 4 }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/hdfs-dn.yaml b/helm-charts/FATE/templates/backends/spark/hdfs/configmap.yaml similarity index 53% rename from helm-charts/FATE/templates/hdfs-dn.yaml rename to helm-charts/FATE/templates/backends/spark/hdfs/configmap.yaml index 4a3c9c584..2468b224d 100644 --- a/helm-charts/FATE/templates/hdfs-dn.yaml +++ b/helm-charts/FATE/templates/backends/spark/hdfs/configmap.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -13,9 +13,25 @@ kind: ConfigMap apiVersion: v1 metadata: - name: datanode-env + name: namenode-config labels: - fateMoudle: datanode + fateMoudle: namenode +{{ include "fate.labels" . | indent 4 }} +data: + core-site.xml: | + + + fs.default.name + hdfs://0.0.0.0:9000 + + +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: namenode-env + labels: + fateMoudle: namenode {{ include "fate.labels" . | indent 4 }} data: CORE_CONF_fs_defaultFS: "hdfs://namenode:9000" @@ -59,117 +75,52 @@ data: MAPRED_CONF_mapreduce_map_env: HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/ MAPRED_CONF_mapreduce_reduce_env: HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/ --- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: datanode - labels: - fateMoudle: datanode -{{ include "fate.labels" . | indent 4 }} -spec: - replicas: 1 - strategy: - type: Recreate - selector: - matchLabels: - fateMoudle: datanode -{{ include "fate.matchLabels" . | indent 6 }} - template: - metadata: - labels: - fateMoudle: datanode -{{ include "fate.labels" . | indent 8 }} - spec: - containers: - - name: datanode - image: {{ .Values.image.registry }}/hadoop-datanode:2.0.0-hadoop2.7.4-java8 - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: SERVICE_PRECONDITION - value: "namenode:9000" - envFrom: - - configMapRef: - name: datanode-env - ports: - - containerPort: 9000 - - containerPort: 9870 - - containerPort: 50070 - volumeMounts: - - name: dfs - mountPath: /hadoop/dfs/data - {{- with .Values.modules.hdfs.datanode.nodeSelector }} - nodeSelector: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.hdfs.datanode.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.hdfs.datanode.affinity }} - affinity: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.image.imagePullSecrets }} - imagePullSecrets: -{{ toYaml . | indent 6 }} - {{- end }} - serviceAccountName: {{ template "serviceAccountName" . }} - restartPolicy: Always - volumes: - - name: dfs - {{ if .Values.persistence.enabled }} - persistentVolumeClaim: - claimName: {{ .Values.modules.hdfs.datanode.existingClaim | default "datanode-data" }} - {{ else }} - emptyDir: {} - {{ end }} ---- -apiVersion: v1 -kind: Service -metadata: - name: datanode - labels: - fateMoudle: datanode -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-9000" - port: 9000 - targetPort: 9000 - protocol: TCP - - name: "tcp-9870" - port: 9870 - targetPort: 9870 - protocol: TCP - - name: "tcp-50070" - port: 50070 - targetPort: 50070 - protocol: TCP - type: {{ .Values.modules.hdfs.datanode.type }} - selector: - fateMoudle: datanode -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{ if and .Values.persistence.enabled (not .Values.modules.hdfs.datanode.existingClaim) }} -kind: PersistentVolumeClaim +kind: ConfigMap apiVersion: v1 metadata: - name: datanode-data + name: datanode-env labels: fateMoudle: datanode {{ include "fate.labels" . | indent 4 }} -spec: - accessModes: - - {{ .Values.modules.hdfs.datanode.accessMode }} - resources: - requests: - storage: {{ .Values.modules.hdfs.datanode.size }} - {{ if .Values.modules.hdfs.datanode.storageClass }} - {{ if eq "-" .Values.modules.hdfs.datanode.storageClass }} - storageClassName: "" - {{ else }} - storageClassName: {{ .Values.modules.hdfs.datanode.storageClass }} - {{ end }} - {{ end }} -{{ end }} -{{ end }} +data: + CORE_CONF_fs_defaultFS: "hdfs://namenode:9000" + CORE_CONF_hadoop_http_staticuser_user: "root" + CORE_CONF_hadoop_proxyuser_hue_hosts: "*" + CORE_CONF_hadoop_proxyuser_hue_groups: "*" + CORE_CONF_io_compression_codecs: org.apache.hadoop.io.compress.SnappyCodec + HDFS_CONF_dfs_webhdfs_enabled: 'true' + HDFS_CONF_dfs_permissions_enabled: 'false' + HDFS_CONF_dfs_namenode_datanode_registration_ip___hostname___check: 'false' + YARN_CONF_yarn_log___aggregation___enable: 'true' + YARN_CONF_yarn_log_server_url: "http://historyserver:8188/applicationhistory/logs/" + YARN_CONF_yarn_resourcemanager_recovery_enabled: 'true' + YARN_CONF_yarn_resourcemanager_store_class: org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore + YARN_CONF_yarn_resourcemanager_scheduler_class: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler + YARN_CONF_yarn_scheduler_capacity_root_default_maximum___allocation___mb: '8192' + YARN_CONF_yarn_scheduler_capacity_root_default_maximum___allocation___vcores: '4' + YARN_CONF_yarn_resourcemanager_fs_state___store_uri: /rmstate + YARN_CONF_yarn_resourcemanager_system___metrics___publisher_enabled: 'true' + YARN_CONF_yarn_resourcemanager_hostname: resourcemanager + YARN_CONF_yarn_resourcemanager_address: resourcemanager:8032 + YARN_CONF_yarn_resourcemanager_scheduler_address: resourcemanager:8030 + YARN_CONF_yarn_resourcemanager_resource__tracker_address: resourcemanager:8031 + YARN_CONF_yarn_timeline___service_enabled: 'true' + YARN_CONF_yarn_timeline___service_generic___application___history_enabled: 'true' + YARN_CONF_yarn_timeline___service_hostname: historyserver + YARN_CONF_mapreduce_map_output_compress: 'true' + YARN_CONF_mapred_map_output_compress_codec: org.apache.hadoopac.io.compress.SnappyCodec + YARN_CONF_yarn_nodemanager_resource_memory___mb: '16384' + YARN_CONF_yarn_nodemanager_resource_cpu___vcores: '8' + YARN_CONF_yarn_nodemanager_disk___health___checker_max___disk___utilization___per___disk___percentage: '98.5' + YARN_CONF_yarn_nodemanager_remote___app___log___dir: /app-logs + YARN_CONF_yarn_nodemanager_aux___services: mapreduce_shuffle + MAPRED_CONF_mapreduce_framework_name: yarn + MAPRED_CONF_mapred_child_java_opts: '-Xmx4096m' + MAPRED_CONF_mapreduce_map_memory_mb: '4096' + MAPRED_CONF_mapreduce_reduce_memory_mb: '8192' + MAPRED_CONF_mapreduce_map_java_opts: '-Xmx3072m' + MAPRED_CONF_mapreduce_reduce_java_opts: '-Xmx6144m' + MAPRED_CONF_yarn_app_mapreduce_am_env: HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/ + MAPRED_CONF_mapreduce_map_env: HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/ + MAPRED_CONF_mapreduce_reduce_env: HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/ +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/hdfs/deployment.yaml b/helm-charts/FATE/templates/backends/spark/hdfs/deployment.yaml new file mode 100644 index 000000000..938bed3c7 --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/hdfs/deployment.yaml @@ -0,0 +1,217 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.hdfs.include }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: namenode + labels: + fateMoudle: namenode +{{ include "fate.labels" . | indent 4 }} +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + fateMoudle: namenode +{{ include "fate.matchLabels" . | indent 6 }} + template: + metadata: + labels: + fateMoudle: namenode +{{ include "fate.labels" . | indent 8 }} + spec: + {{ if .Values.persistence.enabled }} + initContainers: + - name: delete-lost-found + image: busybox + command: ["sh", "-c", "rm -rf /hadoop/dfs/name/lost+found"] + volumeMounts: + - name: dfs + mountPath: /hadoop/dfs/name + {{ end }} + containers: + - name: namenode + image: {{ .Values.image.registry }}/hadoop-namenode:2.0.0-hadoop2.7.4-java8 + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: CLUSTER_NAME + value: fate + envFrom: + - configMapRef: + name: namenode-env + ports: + - containerPort: 9000 + - containerPort: 9870 + - containerPort: 50070 + livenessProbe: + exec: + command: + - /bin/bash + - -c + - curl -f localhost:50070 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + exec: + command: + - /bin/bash + - -c + - curl -f localhost:50070 + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 1 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + exec: + command: + - /bin/bash + - -c + - curl -f localhost:50070 + failureThreshold: 12 + periodSeconds: 10 + volumeMounts: + - mountPath: /etc/hadoop/core-site.xml + subPath: core-site.xml + name: namenode-confs + - name: dfs + mountPath: /hadoop/dfs/name + {{- with .Values.modules.hdfs.namenode.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.hdfs.namenode.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.hdfs.namenode.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.image.imagePullSecrets }} + imagePullSecrets: +{{ toYaml . | indent 6 }} + {{- end }} + serviceAccountName: {{ template "serviceAccountName" . }} + restartPolicy: Always + volumes: + - name: namenode-confs + configMap: + name: namenode-config + - name: dfs + {{ if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.modules.hdfs.namenode.existingClaim | default "namenode-data" }} + {{ else }} + emptyDir: {} + {{ end }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: datanode + labels: + fateMoudle: datanode +{{ include "fate.labels" . | indent 4 }} +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + fateMoudle: datanode +{{ include "fate.matchLabels" . | indent 6 }} + template: + metadata: + labels: + fateMoudle: datanode +{{ include "fate.labels" . | indent 8 }} + spec: + containers: + - name: datanode + image: {{ .Values.image.registry }}/hadoop-datanode:2.0.0-hadoop2.7.4-java8 + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: SERVICE_PRECONDITION + value: "namenode:9000" + envFrom: + - configMapRef: + name: datanode-env + ports: + - containerPort: 9000 + - containerPort: 9870 + - containerPort: 50075 + livenessProbe: + exec: + command: + - /bin/bash + - -c + - curl -f localhost:50075 + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + exec: + command: + - /bin/bash + - -c + - curl -f localhost:50075 + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + exec: + command: + - /bin/bash + - -c + - curl -f localhost:50075 + failureThreshold: 12 + periodSeconds: 10 + volumeMounts: + - name: dfs + mountPath: /hadoop/dfs/data + {{- with .Values.modules.hdfs.datanode.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.hdfs.datanode.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.hdfs.datanode.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.image.imagePullSecrets }} + imagePullSecrets: +{{ toYaml . | indent 6 }} + {{- end }} + serviceAccountName: {{ template "serviceAccountName" . }} + restartPolicy: Always + volumes: + - name: dfs + {{ if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.modules.hdfs.datanode.existingClaim | default "datanode-data" }} + {{ else }} + emptyDir: {} + {{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/hdfs/persistentvolumeclaim.yaml b/helm-charts/FATE/templates/backends/spark/hdfs/persistentvolumeclaim.yaml new file mode 100644 index 000000000..5284bf503 --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/hdfs/persistentvolumeclaim.yaml @@ -0,0 +1,59 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.hdfs.include }} +{{ if and .Values.persistence.enabled (not .Values.modules.hdfs.namenode.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: namenode-data + labels: + fateMoudle: namenode +{{ include "fate.labels" . | indent 4 }} +spec: + accessModes: + - {{ .Values.modules.hdfs.namenode.accessMode }} + resources: + requests: + storage: {{ .Values.modules.hdfs.namenode.size }} + {{ if .Values.modules.hdfs.namenode.storageClass }} + {{ if eq "-" .Values.modules.hdfs.namenode.storageClass }} + storageClassName: "" + {{ else }} + storageClassName: {{ .Values.modules.hdfs.namenode.storageClass }} + {{ end }} + {{ end }} +{{ end }} +--- +{{ if and .Values.persistence.enabled (not .Values.modules.hdfs.datanode.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: datanode-data + labels: + fateMoudle: datanode +{{ include "fate.labels" . | indent 4 }} +spec: + accessModes: + - {{ .Values.modules.hdfs.datanode.accessMode }} + resources: + requests: + storage: {{ .Values.modules.hdfs.datanode.size }} + {{ if .Values.modules.hdfs.datanode.storageClass }} + {{ if eq "-" .Values.modules.hdfs.datanode.storageClass }} + storageClassName: "" + {{ else }} + storageClassName: {{ .Values.modules.hdfs.datanode.storageClass }} + {{ end }} + {{ end }} +{{ end }} + +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/hdfs/service.yaml b/helm-charts/FATE/templates/backends/spark/hdfs/service.yaml new file mode 100644 index 000000000..9922b02e6 --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/hdfs/service.yaml @@ -0,0 +1,68 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.hdfs.include }} +apiVersion: v1 +kind: Service +metadata: + name: datanode + labels: + fateMoudle: datanode +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-9000" + port: 9000 + targetPort: 9000 + protocol: TCP + - name: "tcp-9870" + port: 9870 + targetPort: 9870 + protocol: TCP + - name: "tcp-50075" + port: 50075 + targetPort: 50075 + protocol: TCP + type: {{ .Values.modules.hdfs.datanode.type }} + selector: + fateMoudle: datanode +{{ include "fate.matchLabels" . | indent 4 }} +--- +apiVersion: v1 +kind: Service +metadata: + name: namenode + labels: + fateMoudle: namenode +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-9000" + port: 9000 + targetPort: 9000 + protocol: TCP + {{- if eq .Values.modules.hdfs.namenode.type "NodePort" "LoadBalancer" }} + nodePort: {{ .Values.modules.hdfs.namenode.nodePort }} + {{- end }} + - name: "tcp-9870" + port: 9870 + targetPort: 9870 + protocol: TCP + - name: "tcp-50070" + port: 50070 + targetPort: 50070 + protocol: TCP + type: {{ .Values.modules.hdfs.namenode.type }} + selector: + fateMoudle: namenode +{{ include "fate.matchLabels" . | indent 4 }} + +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/nginx.yaml b/helm-charts/FATE/templates/backends/spark/nginx/configmap.yaml similarity index 54% rename from helm-charts/FATE/templates/nginx.yaml rename to helm-charts/FATE/templates/backends/spark/nginx/configmap.yaml index c5d69e5ef..eeb4716df 100644 --- a/helm-charts/FATE/templates/nginx.yaml +++ b/helm-charts/FATE/templates/backends/spark/nginx/configmap.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -107,102 +107,4 @@ data: } } ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx - labels: - fateMoudle: nginx -{{ include "fate.labels" . | indent 4 }} -spec: - replicas: 1 - strategy: - type: Recreate - selector: - matchLabels: - fateMoudle: nginx -{{ include "fate.matchLabels" . | indent 6 }} - template: - metadata: - labels: - fateMoudle: nginx -{{ include "fate.labels" . | indent 8 }} - spec: - containers: - - name: nginx - image: {{ .Values.image.registry }}/nginx:{{ .Values.image.tag }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - command: - - /bin/bash - - -c - - | - sed -i "s#conf/route_table.yaml#conf/modifiable/route_table.yaml#g" nginx/lua/route_table.lua; - echo "change path of route_table.yaml success!" - openresty -g 'daemon off;' - ports: - - containerPort: 9300 - - containerPort: 9310 - volumeMounts: - - mountPath: /data/projects/fate/proxy/nginx/conf/nginx.conf - name: nginx-confs - subPath: nginx.conf - - mountPath: /data/projects/fate/proxy/nginx/conf/modifiable/ - name: nginx-confs - {{- with .Values.modules.nginx.nodeSelector }} - nodeSelector: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.nginx.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.nginx.affinity }} - affinity: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.image.imagePullSecrets }} - imagePullSecrets: -{{ toYaml . | indent 6 }} - {{- end }} - serviceAccountName: {{ template "serviceAccountName" . }} - restartPolicy: Always - volumes: - - name: nginx-confs - configMap: - name: nginx-config ---- -apiVersion: v1 -kind: Service -metadata: - name: nginx - labels: - fateMoudle: nginx -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "http" - port: 9300 - targetPort: 9300 - {{- if eq .Values.modules.nginx.type "NodePort" "LoadBalancer" }} - nodePort: {{ .Values.modules.nginx.httpNodePort }} - {{- end }} - protocol: TCP - - name: "grpc" - port: 9310 - targetPort: 9310 - {{- if eq .Values.modules.nginx.type "NodePort" "LoadBalancer" }} - nodePort: {{ .Values.modules.nginx.grpcNodePort }} - {{- end }} - protocol: TCP - type: {{ .Values.modules.nginx.type }} - - {{- if .Values.modules.nginx.loadBalancerIP }} - loadBalancerIP: "{{ .Values.modules.nginx.loadBalancerIP }}" - {{- end }} - - selector: - fateMoudle: nginx -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/nginx/deployment.yaml b/helm-charts/FATE/templates/backends/spark/nginx/deployment.yaml new file mode 100644 index 000000000..1f97865e8 --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/nginx/deployment.yaml @@ -0,0 +1,111 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.nginx.include }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx + labels: + fateMoudle: nginx +{{ include "fate.labels" . | indent 4 }} +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + fateMoudle: nginx +{{ include "fate.matchLabels" . | indent 6 }} + template: + metadata: + labels: + fateMoudle: nginx +{{ include "fate.labels" . | indent 8 }} + spec: + containers: + - name: nginx + image: {{ .Values.image.registry }}/nginx:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: + - /bin/bash + - -c + - | + sed -i "s#conf/route_table.yaml#conf/modifiable/route_table.yaml#g" nginx/lua/route_table.lua; + echo "change path of route_table.yaml success!" + openresty -g 'daemon off;' + ports: + - name: http-port + containerPort: 9300 + - name: grpc-port + containerPort: 9310 + livenessProbe: + httpGet: + path: /test + port: 9302 + httpHeaders: + - name: X-Custom-Header + value: livenessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + httpGet: + path: /test + port: 9302 + httpHeaders: + - name: X-Custom-Header + value: readinessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + httpGet: + path: /test + port: 9302 + httpHeaders: + - name: X-Custom-Header + value: readinessProbe + failureThreshold: 12 + periodSeconds: 10 + volumeMounts: + - mountPath: /data/projects/fate/proxy/nginx/conf/nginx.conf + name: nginx-confs + subPath: nginx.conf + - mountPath: /data/projects/fate/proxy/nginx/conf/modifiable/ + name: nginx-confs + {{- with .Values.modules.nginx.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.nginx.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.nginx.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.image.imagePullSecrets }} + imagePullSecrets: +{{ toYaml . | indent 6 }} + {{- end }} + serviceAccountName: {{ template "serviceAccountName" . }} + restartPolicy: Always + volumes: + - name: nginx-confs + configMap: + name: nginx-config +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/nginx/service.yaml b/helm-charts/FATE/templates/backends/spark/nginx/service.yaml new file mode 100644 index 000000000..a931405b4 --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/nginx/service.yaml @@ -0,0 +1,45 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.nginx.include }} +apiVersion: v1 +kind: Service +metadata: + name: nginx + labels: + fateMoudle: nginx +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "http" + port: 9300 + targetPort: 9300 + {{- if eq .Values.modules.nginx.type "NodePort" "LoadBalancer" }} + nodePort: {{ .Values.modules.nginx.httpNodePort }} + {{- end }} + protocol: TCP + - name: "grpc" + port: 9310 + targetPort: 9310 + {{- if eq .Values.modules.nginx.type "NodePort" "LoadBalancer" }} + nodePort: {{ .Values.modules.nginx.grpcNodePort }} + {{- end }} + protocol: TCP + type: {{ .Values.modules.nginx.type }} + + {{- if .Values.modules.nginx.loadBalancerIP }} + loadBalancerIP: "{{ .Values.modules.nginx.loadBalancerIP }}" + {{- end }} + + selector: + fateMoudle: nginx +{{ include "fate.matchLabels" . | indent 4 }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/pulsar.yaml b/helm-charts/FATE/templates/backends/spark/pulsar/configmap.yaml similarity index 90% rename from helm-charts/FATE/templates/pulsar.yaml rename to helm-charts/FATE/templates/backends/spark/pulsar/configmap.yaml index 293d5fc68..62541c95d 100644 --- a/helm-charts/FATE/templates/pulsar.yaml +++ b/helm-charts/FATE/templates/backends/spark/pulsar/configmap.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -375,115 +375,115 @@ data: # Whether internal client use KeyStore type to authenticate with Pulsar brokers brokerClientTlsEnabledWithKeyStore=false - + # The TLS Provider used by internal client to authenticate with other Pulsar brokers brokerClientSslProvider= - + # TLS TrustStore type configuration for internal client: JKS, PKCS12 # used by the internal client to authenticate with Pulsar brokers brokerClientTlsTrustStoreType=JKS - + # TLS TrustStore path for internal client # used by the internal client to authenticate with Pulsar brokers brokerClientTlsTrustStore= - + # TLS TrustStore password for internal client, # used by the internal client to authenticate with Pulsar brokers brokerClientTlsTrustStorePassword= - + # Specify the tls cipher the internal client will use to negotiate during TLS Handshake # (a comma-separated list of ciphers) # e.g. [TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256]. # used by the internal client to authenticate with Pulsar brokers brokerClientTlsCiphers= - + # Specify the tls protocols the broker will use to negotiate during TLS handshake # (a comma-separated list of protocol names). # e.g. [TLSv1.2, TLSv1.1, TLSv1] # used by the internal client to authenticate with Pulsar brokers brokerClientTlsProtocols= - + # Enable or disable system topic systemTopicEnabled=false - + # Enable or disable topic level policies, topic level policies depends on the system topic # Please enable the system topic first. topicLevelPoliciesEnabled=false - + # If a topic remains fenced for this number of seconds, it will be closed forcefully. # If it is set to 0 or a negative number, the fenced topic will not be closed. topicFencingTimeoutSeconds=0 - + ### --- Authentication --- ### # Role names that are treated as "proxy roles". If the broker sees a request with #role as proxyRoles - it will demand to see a valid original principal. proxyRoles= - + # If this flag is set then the broker authenticates the original Auth data # else it just accepts the originalPrincipal and authorizes it (if required). authenticateOriginalAuthData=false - + # Enable authentication authenticationEnabled=false - + # Autentication provider name list, which is comma separated list of class names authenticationProviders= - + # Enforce authorization authorizationEnabled=false - + # Authorization provider fully qualified class-name authorizationProvider=org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider - + # Allow wildcard matching in authorization # (wildcard matching only applicable if wildcard-char: # * presents at first or last position eg: *.pulsar.service, pulsar.service.*) authorizationAllowWildcardsMatching=false - + # Role names that are treated as "super-user", meaning they will be able to do all admin # operations and publish/consume from all topics superUserRoles= - + # Authentication settings of the broker itself. Used when the broker connects to other brokers, # either in same or other clusters brokerClientAuthenticationPlugin= brokerClientAuthenticationParameters= - + # Supported Athenz provider domain names(comma separated) for authentication athenzDomainNames= - + # When this parameter is not empty, unauthenticated users perform as anonymousUserRole anonymousUserRole= - + # The token "claim" that will be interpreted as the authentication "role" or "principal" by AuthenticationProviderToken (defaults to "sub" if blank) tokenAuthClaim= - + # The token audience "claim" name, e.g. "aud", that will be used to get the audience from token. # If not set, audience will not be verified. tokenAudienceClaim= - + # The token audience stands for this broker. The field `tokenAudienceClaim` of a valid token, need contains this. tokenAudience= - + ### --- BookKeeper Client --- ### - + # Authentication plugin to use when connecting to bookies bookkeeperClientAuthenticationPlugin= - + # BookKeeper auth plugin implementatation specifics parameters name and values bookkeeperClientAuthenticationParametersName= bookkeeperClientAuthenticationParameters= - + # Timeout for BK add / read operations bookkeeperClientTimeoutInSeconds=30 - + # Speculative reads are initiated if a read request doesn't complete within a certain time # Using a value of 0, is disabling the speculative reads bookkeeperClientSpeculativeReadTimeoutInMillis=0 - + # Number of channels per bookie bookkeeperNumberOfChannelsPerBookie=16 - + # Enable bookies health check. Bookies that have more than the configured number of failure within # the interval will be quarantined for some time. During this period, new ledgers won't be created # on these bookies @@ -491,159 +491,159 @@ data: bookkeeperClientHealthCheckIntervalSeconds=60 bookkeeperClientHealthCheckErrorThresholdPerInterval=5 bookkeeperClientHealthCheckQuarantineTimeInSeconds=1800 - + #bookie quarantine ratio to avoid all clients quarantine the high pressure bookie servers at the same time bookkeeperClientQuarantineRatio=1.0 - + # Enable rack-aware bookie selection policy. BK will chose bookies from different racks when # forming a new bookie ensemble # This parameter related to ensemblePlacementPolicy in conf/bookkeeper.conf, if enabled, ensemblePlacementPolicy # should be set to org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicy bookkeeperClientRackawarePolicyEnabled=true - + # Enable region-aware bookie selection policy. BK will chose bookies from # different regions and racks when forming a new bookie ensemble. # If enabled, the value of bookkeeperClientRackawarePolicyEnabled is ignored # This parameter related to ensemblePlacementPolicy in conf/bookkeeper.conf, if enabled, ensemblePlacementPolicy # should be set to org.apache.bookkeeper.client.RegionAwareEnsemblePlacementPolicy bookkeeperClientRegionawarePolicyEnabled=false - + # Minimum number of racks per write quorum. BK rack-aware bookie selection policy will try to # get bookies from at least 'bookkeeperClientMinNumRacksPerWriteQuorum' racks for a write quorum. bookkeeperClientMinNumRacksPerWriteQuorum=1 - + # Enforces rack-aware bookie selection policy to pick bookies from 'bookkeeperClientMinNumRacksPerWriteQuorum' # racks for a writeQuorum. # If BK can't find bookie then it would throw BKNotEnoughBookiesException instead of picking random one. bookkeeperClientEnforceMinNumRacksPerWriteQuorum=false - + # Enable/disable reordering read sequence on reading entries. bookkeeperClientReorderReadSequenceEnabled=false - + # Enable bookie isolation by specifying a list of bookie groups to choose from. Any bookie # outside the specified groups will not be used by the broker bookkeeperClientIsolationGroups= - + # Enable bookie secondary-isolation group if bookkeeperClientIsolationGroups doesn't # have enough bookie available. bookkeeperClientSecondaryIsolationGroups= - + # Minimum bookies that should be available as part of bookkeeperClientIsolationGroups # else broker will include bookkeeperClientSecondaryIsolationGroups bookies in isolated list. bookkeeperClientMinAvailableBookiesInIsolationGroups= - + # Set the client security provider factory class name. # Default: org.apache.bookkeeper.tls.TLSContextFactory bookkeeperTLSProviderFactoryClass=org.apache.bookkeeper.tls.TLSContextFactory - + # Enable tls authentication with bookie bookkeeperTLSClientAuthentication=false - + # Supported type: PEM, JKS, PKCS12. Default value: PEM bookkeeperTLSKeyFileType=PEM - + #Supported type: PEM, JKS, PKCS12. Default value: PEM bookkeeperTLSTrustCertTypes=PEM - + # Path to file containing keystore password, if the client keystore is password protected. bookkeeperTLSKeyStorePasswordPath= - + # Path to file containing truststore password, if the client truststore is password protected. bookkeeperTLSTrustStorePasswordPath= - + # Path for the TLS private key file bookkeeperTLSKeyFilePath= - + # Path for the TLS certificate file bookkeeperTLSCertificateFilePath= - + # Path for the trusted TLS certificate file bookkeeperTLSTrustCertsFilePath=/opt/pulsar/certs/ca.cert.pem - + # Enable/disable disk weight based placement. Default is false bookkeeperDiskWeightBasedPlacementEnabled=false - + # Set the interval to check the need for sending an explicit LAC # A value of '0' disables sending any explicit LACs. Default is 0. bookkeeperExplicitLacIntervalInMills=0 - + # Use older Bookkeeper wire protocol with bookie bookkeeperUseV2WireProtocol=true - + # Expose bookkeeper client managed ledger stats to prometheus. default is false # bookkeeperClientExposeStatsToPrometheus=false - + ### --- Managed Ledger --- ### - + # Number of bookies to use when creating a ledger managedLedgerDefaultEnsembleSize=1 - + # Number of copies to store for each message managedLedgerDefaultWriteQuorum=1 - + # Number of guaranteed copies (acks to wait before write is complete) managedLedgerDefaultAckQuorum=1 - + # How frequently to flush the cursor positions that were accumulated due to rate limiting. (seconds). # Default is 60 seconds managedLedgerCursorPositionFlushSeconds = 60 - + # Default type of checksum to use when writing to BookKeeper. Default is "CRC32C" # Other possible options are "CRC32", "MAC" or "DUMMY" (no checksum). managedLedgerDigestType=CRC32C - + # Number of threads to be used for managed ledger tasks dispatching managedLedgerNumWorkerThreads=4 - + # Number of threads to be used for managed ledger scheduled tasks managedLedgerNumSchedulerThreads=4 - + # Amount of memory to use for caching data payload in managed ledger. This memory # is allocated from JVM direct memory and it's shared across all the topics # running in the same broker. By default, uses 1/5th of available direct memory managedLedgerCacheSizeMB= - + # Whether we should make a copy of the entry payloads when inserting in cache managedLedgerCacheCopyEntries=false - + # Threshold to which bring down the cache level when eviction is triggered managedLedgerCacheEvictionWatermark=0.9 - + # Configure the cache eviction frequency for the managed ledger cache (evictions/sec) managedLedgerCacheEvictionFrequency=100.0 - + # All entries that have stayed in cache for more than the configured time, will be evicted managedLedgerCacheEvictionTimeThresholdMillis=1000 - + # Configure the threshold (in number of entries) from where a cursor should be considered 'backlogged' # and thus should be set as inactive. managedLedgerCursorBackloggedThreshold=1000 - + # Rate limit the amount of writes generated by consumer acking the messages managedLedgerDefaultMarkDeleteRateLimit=0.1 - + # Max number of entries to append to a ledger before triggering a rollover # A ledger rollover is triggered on these conditions # * Either the max rollover time has been reached # * or max entries have been written to the ledged and at least min-time # has passed managedLedgerMaxEntriesPerLedger=50000 - + # Minimum time between ledger rollover for a topic managedLedgerMinLedgerRolloverTimeMinutes=10 - + # Maximum time before forcing a ledger rollover for a topic managedLedgerMaxLedgerRolloverTimeMinutes=240 - + # Max number of entries to append to a cursor ledger managedLedgerCursorMaxEntriesPerLedger=50000 - + # Max time before triggering a rollover on a cursor ledger managedLedgerCursorRolloverTimeInSeconds=14400 - + # Maximum ledger size before triggering a rollover for a topic (MB) managedLedgerMaxSizePerLedgerMbytes=2048 - + # Max number of "acknowledgment holes" that are going to be persistently stored. # When acknowledging out of order, a consumer will leave holes that are supposed # to be quickly filled by acking all the messages. The information of which @@ -652,227 +652,227 @@ data: # will only be tracked in memory and messages will be redelivered in case of # crashes. managedLedgerMaxUnackedRangesToPersist=10000 - + # Max number of "acknowledgment holes" that can be stored in Zookeeper. If number of unack message range is higher # than this limit then broker will persist unacked ranges into bookkeeper to avoid additional data overhead into # zookeeper. managedLedgerMaxUnackedRangesToPersistInZooKeeper=1000 - + # Skip reading non-recoverable/unreadable data-ledger under managed-ledger's list. It helps when data-ledgers gets # corrupted at bookkeeper and managed-cursor is stuck at that ledger. autoSkipNonRecoverableData=false - + # operation timeout while updating managed-ledger metadata. managedLedgerMetadataOperationsTimeoutSeconds=60 - + # Read entries timeout when broker tries to read messages from bookkeeper. managedLedgerReadEntryTimeoutSeconds=0 - + # Add entry timeout when broker tries to publish message to bookkeeper (0 to disable it). managedLedgerAddEntryTimeoutSeconds=0 - + # New entries check delay for the cursor under the managed ledger. # If no new messages in the topic, the cursor will try to check again after the delay time. # For consumption latency sensitive scenario, can set to a smaller value or set to 0. # Of course, use a smaller value may degrade consumption throughput. Default is 10ms. managedLedgerNewEntriesCheckDelayInMillis=10 - + # Use Open Range-Set to cache unacked messages managedLedgerUnackedRangesOpenCacheSetEnabled=true - + # Managed ledger prometheus stats latency rollover seconds (default: 60s) managedLedgerPrometheusStatsLatencyRolloverSeconds=60 - + # Whether trace managed ledger task execution time managedLedgerTraceTaskExecution=true - + ### --- Load balancer --- ### - + loadManagerClassName=org.apache.pulsar.broker.loadbalance.NoopLoadManager - + # Enable load balancer loadBalancerEnabled=false - + # Percentage of change to trigger load report update loadBalancerReportUpdateThresholdPercentage=10 - + # maximum interval to update load report loadBalancerReportUpdateMaxIntervalMinutes=15 - + # Frequency of report to collect loadBalancerHostUsageCheckIntervalMinutes=1 - + # Load shedding interval. Broker periodically checks whether some traffic should be offload from # some over-loaded broker to other under-loaded brokers loadBalancerSheddingIntervalMinutes=1 - + # Prevent the same topics to be shed and moved to other broker more that once within this timeframe loadBalancerSheddingGracePeriodMinutes=30 - + # Usage threshold to allocate max number of topics to broker loadBalancerBrokerMaxTopics=50000 - + # Interval to flush dynamic resource quota to ZooKeeper loadBalancerResourceQuotaUpdateIntervalMinutes=15 - + # enable/disable namespace bundle auto split loadBalancerAutoBundleSplitEnabled=true - + # enable/disable automatic unloading of split bundles loadBalancerAutoUnloadSplitBundlesEnabled=true - + # maximum topics in a bundle, otherwise bundle split will be triggered loadBalancerNamespaceBundleMaxTopics=1000 - + # maximum sessions (producers + consumers) in a bundle, otherwise bundle split will be triggered loadBalancerNamespaceBundleMaxSessions=1000 - + # maximum msgRate (in + out) in a bundle, otherwise bundle split will be triggered loadBalancerNamespaceBundleMaxMsgRate=30000 - + # maximum bandwidth (in + out) in a bundle, otherwise bundle split will be triggered loadBalancerNamespaceBundleMaxBandwidthMbytes=100 - + # maximum number of bundles in a namespace loadBalancerNamespaceMaximumBundles=128 - + # The broker resource usage threshold. # When the broker resource usage is gratter than the pulsar cluster average resource usge, # the threshold shedder will be triggered to offload bundles from the broker. # It only take effect in ThresholdSheddler strategy. loadBalancerBrokerThresholdShedderPercentage=10 - + # When calculating new resource usage, the history usage accounts for. # It only take effect in ThresholdSheddler strategy. loadBalancerHistoryResourcePercentage=0.9 - + # The BandWithIn usage weight when calculating new resourde usage. # It only take effect in ThresholdShedder strategy. loadBalancerBandwithInResourceWeight=1.0 - + # The BandWithOut usage weight when calculating new resourde usage. # It only take effect in ThresholdShedder strategy. loadBalancerBandwithOutResourceWeight=1.0 - + # The CPU usage weight when calculating new resourde usage. # It only take effect in ThresholdShedder strategy. loadBalancerCPUResourceWeight=1.0 - + # The heap memory usage weight when calculating new resourde usage. # It only take effect in ThresholdShedder strategy. loadBalancerMemoryResourceWeight=1.0 - + # The direct memory usage weight when calculating new resourde usage. # It only take effect in ThresholdShedder strategy. loadBalancerDirectMemoryResourceWeight=1.0 - + # Bundle unload minimum throughput threshold (MB), avoding bundle unload frequently. # It only take effect in ThresholdShedder strategy. loadBalancerBundleUnloadMinThroughputThreshold=10 - + ### --- Replication --- ### - + # Enable replication metrics replicationMetricsEnabled=true - + # Max number of connections to open for each broker in a remote cluster # More connections host-to-host lead to better throughput over high-latency # links. replicationConnectionsPerBroker=16 - + # Replicator producer queue size replicationProducerQueueSize=1000 - + # Duration to check replication policy to avoid replicator inconsistency # due to missing ZooKeeper watch (disable with value 0) replicationPolicyCheckDurationSeconds=600 - + # Default message retention time defaultRetentionTimeInMinutes=0 - + # Default retention size defaultRetentionSizeInMB=0 - + # How often to check whether the connections are still alive keepAliveIntervalSeconds=30 - + ### --- WebSocket --- ### - + # Enable the WebSocket API service in broker webSocketServiceEnabled=true - + # Number of IO threads in Pulsar Client used in WebSocket proxy webSocketNumIoThreads=8 - + # Number of connections per Broker in Pulsar Client used in WebSocket proxy webSocketConnectionsPerBroker=8 - + # Time in milliseconds that idle WebSocket session times out webSocketSessionIdleTimeoutMillis=300000 - + # The maximum size of a text message during parsing in WebSocket proxy webSocketMaxTextFrameSize=1048576 - + ### --- Metrics --- ### - + # Enable topic level metrics exposeTopicLevelMetricsInPrometheus=true - + # Classname of Pluggable JVM GC metrics logger that can log GC specific metrics # jvmGCMetricsLoggerClassName= - + ### --- Broker Web Stats --- ### - + # Enable topic level metrics exposePublisherStats=true - + # Enable expose the precise backlog stats. # Set false to use published counter and consumed counter to calculate, this would be more efficient but may be inaccurate. # Default is false. exposePreciseBacklogInPrometheus=false - + ### --- Deprecated config variables --- ### - + # Deprecated. Use configurationStoreServers globalZookeeperServers= - + # Deprecated. Use brokerDeleteInactiveTopicsFrequencySeconds brokerServicePurgeInactiveFrequencyInSeconds=60 - + ### --- BookKeeper Configuration --- ##### - + ledgerStorageClass=org.apache.bookkeeper.bookie.storage.ldb.DbLedgerStorage - + # The maximum netty frame size in bytes. Any message received larger than this will be rejected. The default value is 5MB. nettyMaxFrameSizeBytes=134217728 - + # Size of Write Cache. Memory is allocated from JVM direct memory. # Write cache is used to buffer entries before flushing into the entry log # For good performance, it should be big enough to hold a substantial amount # of entries in the flush interval # By default it will be allocated to 1/4th of the available direct memory dbStorage_writeCacheMaxSizeMb= - + # Size of Read cache. Memory is allocated from JVM direct memory. # This read cache is pre-filled doing read-ahead whenever a cache miss happens # By default it will be allocated to 1/4th of the available direct memory dbStorage_readAheadCacheMaxSizeMb= - + # How many entries to pre-fill in cache after a read cache miss dbStorage_readAheadCacheBatchSize=1000 - + flushInterval=60000 - + ## RocksDB specific configurations ## DbLedgerStorage uses RocksDB to store the indexes from ## (ledgerId, entryId) -> (entryLog, offset) - + # Size of RocksDB block-cache. For best performance, this cache # should be big enough to hold a significant portion of the index # database which can reach ~2GB in some cases # Default is to use 10% of the direct memory size dbStorage_rocksDB_blockCacheSize= - + # Other RocksDB specific tunables dbStorage_rocksDB_writeBufferSizeMB=4 dbStorage_rocksDB_sstSizeInMB=4 @@ -881,14 +881,14 @@ data: dbStorage_rocksDB_numLevels=-1 dbStorage_rocksDB_numFilesInLevel0=4 dbStorage_rocksDB_maxSizeInLevel1MB=256 - + # Maximum latency to impose on a journal write to achieve grouping journalMaxGroupWaitMSec=1 - + # Should the data be fsynced on journal before acknowledgment. journalSyncData=false - - + + # For each ledger dir, maximum disk space which can be used. # Default is 0.95f. i.e. 95% of disk can be used at most after which nothing will # be written to that partition. If all ledger dir partions are full, then bookie @@ -896,7 +896,7 @@ data: # shutdown. # Valid values should be in between 0 and 1 (exclusive). diskUsageThreshold=0.99 - + # The disk free space low water mark threshold. # Disk is considered full when usage threshold is exceeded. # Disk returns back to non-full state when usage is below low water mark threshold. @@ -904,7 +904,7 @@ data: # when concurrent writes and compaction are happening. This also prevent bookie from # switching frequently between read-only and read-writes states in the same cases. diskUsageWarnThreshold=0.99 - + # Whether the bookie allowed to use a loopback interface as its primary # interface(i.e. the interface it uses to establish its identity)? # By default, loopback interfaces are not allowed as the primary @@ -917,190 +917,26 @@ data: # to join the cluster. For VPSs configured like this, you should explicitly # set the listening interface. allowLoopback=true - + # How long the interval to trigger next garbage collection, in milliseconds # Since garbage collection is running in background, too frequent gc # will heart performance. It is better to give a higher number of gc # interval if there is enough disk capacity. gcWaitTime=300000 - + # Enable topic auto creation if new producer or consumer connected (disable auto creation with value false) allowAutoTopicCreation=true - + # The type of topic that is allowed to be automatically created.(partitioned/non-partitioned) allowAutoTopicCreationType=non-partitioned - + # Enable subscription auto creation if new consumer connected (disable auto creation with value false) allowAutoSubscriptionCreation=true - + # The number of partitioned topics that is allowed to be automatically created if allowAutoTopicCreationType is partitioned. defaultNumPartitions=1 - + ### --- Transaction config variables --- ### transactionMetadataStoreProviderClassName=org.apache.pulsar.transaction.coordinator.impl.InMemTransactionMetadataStoreProvider ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: pulsar - labels: - fateMoudle: pulsar -{{ include "fate.labels" . | indent 4 }} -spec: - replicas: 1 - strategy: - type: Recreate - selector: - matchLabels: - fateMoudle: pulsar -{{ include "fate.matchLabels" . | indent 6 }} - template: - metadata: - labels: - fateMoudle: pulsar -{{ include "fate.labels" . | indent 8 }} - spec: - containers: - - name: pulsar - image: {{ .Values.image.registry }}/pulsar:2.7.0 - imagePullPolicy: {{ .Values.image.pullPolicy }} - command: - - /bin/bash - - -c - - "bin/pulsar standalone -nss" - env: - ports: - - containerPort: 6650 - - containerPort: 6651 - - containerPort: 8080 - - containerPort: 8081 - volumeMounts: - - mountPath: /pulsar/conf/standalone.conf - name: pulsar-confs - subPath: standalone.conf - - mountPath: /pulsar/data - name: pulsar-data - {{- with .Values.modules.pulsar.exchange }} - - mountPath: /opt/pulsar/certs/ - name: pulsar-cert - {{- end }} - {{- with .Values.modules.pulsar.nodeSelector }} - nodeSelector: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.pulsar.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.pulsar.affinity }} - affinity: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.image.imagePullSecrets }} - imagePullSecrets: -{{ toYaml . | indent 6 }} - {{- end }} - serviceAccountName: {{ template "serviceAccountName" . }} - restartPolicy: Always - volumes: - - name: pulsar-confs - configMap: - name: pulsar-config - {{- with .Values.modules.pulsar.exchange }} - - name: pulsar-cert - secret: - secretName: pulsar-cert - {{- end }} - - name: pulsar-data - {{ if .Values.persistence.enabled }} - persistentVolumeClaim: - claimName: {{ .Values.modules.pulsar.existingClaim | default "pulsar-data" }} - {{ else }} - emptyDir: {} - {{ end }} ---- -apiVersion: v1 -kind: Service -metadata: - name: pulsar - labels: - fateMoudle: pulsar -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "http-port" - port: 6650 - targetPort: 6650 - {{- if eq .Values.modules.pulsar.type "NodePort" "LoadBalancer" }} - nodePort: {{ .Values.modules.pulsar.httpNodePort }} - {{- end }} - protocol: TCP - - name: "https-port" - port: 6651 - targetPort: 6651 - {{- if eq .Values.modules.pulsar.type "NodePort" "LoadBalancer" }} - nodePort: {{ .Values.modules.pulsar.httpsNodePort }} - {{- end }} - protocol: TCP - - name: "mng-port" - port: 8080 - targetPort: 8080 - protocol: TCP - - name: "mngs-port" - port: 8081 - targetPort: 8081 - protocol: TCP - type: {{ .Values.modules.pulsar.type }} - - {{- if .Values.modules.pulsar.loadBalancerIP }} - loadBalancerIP: "{{ .Values.modules.pulsar.loadBalancerIP }}" - {{- end }} - - selector: - fateMoudle: pulsar -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{ if .Values.modules.pulsar.publicLB.enabled }} -apiVersion: v1 -kind: Service -metadata: - name: pulsar-public-tls - labels: - fateMoudle: pulsar -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tls-port" - port: 6651 - targetPort: 6651 - protocol: TCP - type: LoadBalancer - selector: - fateMoudle: pulsar -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{ end }} -{{ if and .Values.persistence.enabled (not .Values.modules.pulsar.existingClaim) }} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: pulsar-data - labels: - fateMoudle: pulsar -{{ include "fate.labels" . | indent 4 }} -spec: - accessModes: - - {{ .Values.modules.pulsar.accessMode }} - resources: - requests: - storage: {{ .Values.modules.pulsar.size }} - {{ if .Values.modules.pulsar.storageClass }} - {{ if eq "-" .Values.modules.pulsar.storageClass }} - storageClassName: "" - {{ else }} - storageClassName: {{ .Values.modules.pulsar.storageClass }} - {{ end }} - {{ end }} -{{ end }} -{{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/pulsar/deployment.yaml b/helm-charts/FATE/templates/backends/spark/pulsar/deployment.yaml new file mode 100644 index 000000000..9f3a0a06c --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/pulsar/deployment.yaml @@ -0,0 +1,125 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.pulsar.include }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: pulsar + labels: + fateMoudle: pulsar +{{ include "fate.labels" . | indent 4 }} +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + fateMoudle: pulsar +{{ include "fate.matchLabels" . | indent 6 }} + template: + metadata: + labels: + fateMoudle: pulsar +{{ include "fate.labels" . | indent 8 }} + spec: + containers: + - name: pulsar + image: {{ .Values.image.registry }}/pulsar:2.7.0 + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: + - /bin/bash + - -c + - "bin/pulsar standalone -nss" + env: + ports: + - containerPort: 6650 + - containerPort: 6651 + - containerPort: 8080 + - containerPort: 8081 + livenessProbe: + tcpSocket: + {{- if .Values.modules.pulsar.exchange }} + port: 8081 + {{- else }} + port: 8080 + {{- end }} + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + tcpSocket: + {{- if .Values.modules.pulsar.exchange }} + port: 8081 + {{- else }} + port: 8080 + {{- end }} + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + tcpSocket: + {{- if .Values.modules.pulsar.exchange }} + port: 8081 + {{- else }} + port: 8080 + {{- end }} + failureThreshold: 12 + periodSeconds: 10 + volumeMounts: + - mountPath: /pulsar/conf/standalone.conf + name: pulsar-confs + subPath: standalone.conf + - mountPath: /pulsar/data + name: pulsar-data + {{- with .Values.modules.pulsar.exchange }} + - mountPath: /opt/pulsar/certs/ + name: pulsar-cert + {{- end }} + {{- with .Values.modules.pulsar.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.pulsar.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.pulsar.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.image.imagePullSecrets }} + imagePullSecrets: +{{ toYaml . | indent 6 }} + {{- end }} + serviceAccountName: {{ template "serviceAccountName" . }} + restartPolicy: Always + volumes: + - name: pulsar-confs + configMap: + name: pulsar-config + {{- with .Values.modules.pulsar.exchange }} + - name: pulsar-cert + secret: + secretName: pulsar-cert + {{- end }} + - name: pulsar-data + {{ if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.modules.pulsar.existingClaim | default "pulsar-data" }} + {{ else }} + emptyDir: {} + {{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/pulsar/ingress.yaml b/helm-charts/FATE/templates/backends/spark/pulsar/ingress.yaml new file mode 100644 index 000000000..6b10d44fb --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/pulsar/ingress.yaml @@ -0,0 +1,43 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.pulsar.include }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: pulsar + labels: + fateMoudle: pulsar +{{ include "fate.labels" . | indent 4 }} +{{- if .Values.ingress.pulsar.annotations }} + annotations: +{{ toYaml .Values.ingress.pulsar.annotations | indent 4 }} +{{- end }} +spec: + ingressClassName: {{ .Values.ingressClassName }} + rules: + {{- range .Values.ingress.pulsar.hosts }} + - host: {{ .name }} + http: + paths: + - path: {{ default "/" .path }} + pathType: Prefix + backend: + service: + name: pulsar + port: + number: 8080 + {{- end }} + {{- if .Values.ingress.pulsar.tls }} + tls: +{{ toYaml .Values.ingress.pulsar.tls | indent 4 }} + {{- end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/pulsar/persistentvolumeclaim.yaml b/helm-charts/FATE/templates/backends/spark/pulsar/persistentvolumeclaim.yaml new file mode 100644 index 000000000..5ac735ef8 --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/pulsar/persistentvolumeclaim.yaml @@ -0,0 +1,35 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.pulsar.include }} +{{- if and .Values.persistence.enabled (not .Values.modules.pulsar.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: pulsar-data + labels: + fateMoudle: pulsar +{{ include "fate.labels" . | indent 4 }} +spec: + accessModes: + - {{ .Values.modules.pulsar.accessMode }} + resources: + requests: + storage: {{ .Values.modules.pulsar.size }} + {{ if .Values.modules.pulsar.storageClass }} + {{ if eq "-" .Values.modules.pulsar.storageClass }} + storageClassName: "" + {{ else }} + storageClassName: {{ .Values.modules.pulsar.storageClass }} + {{ end }} + {{ end }} +{{- end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/pulsar/service.yaml b/helm-charts/FATE/templates/backends/spark/pulsar/service.yaml new file mode 100644 index 000000000..52064b836 --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/pulsar/service.yaml @@ -0,0 +1,76 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.pulsar.include }} +apiVersion: v1 +kind: Service +metadata: + name: pulsar + labels: + fateMoudle: pulsar +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "http-port" + port: 6650 + targetPort: 6650 + {{- if eq .Values.modules.pulsar.type "NodePort" "LoadBalancer" }} + nodePort: {{ .Values.modules.pulsar.httpNodePort }} + {{- end }} + protocol: TCP + - name: "https-port" + port: 6651 + targetPort: 6651 + {{- if eq .Values.modules.pulsar.type "NodePort" "LoadBalancer" }} + nodePort: {{ .Values.modules.pulsar.httpsNodePort }} + {{- end }} + protocol: TCP + - name: "mng-port" + port: 8080 + targetPort: 8080 + protocol: TCP + - name: "mngs-port" + port: 8081 + targetPort: 8081 + protocol: TCP + type: {{ .Values.modules.pulsar.type }} + + {{- if .Values.modules.pulsar.loadBalancerIP }} + loadBalancerIP: "{{ .Values.modules.pulsar.loadBalancerIP }}" + {{- end }} + + selector: + fateMoudle: pulsar +{{ include "fate.matchLabels" . | indent 4 }} + +--- + +{{- if .Values.modules.pulsar.publicLB.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: pulsar-public-tls + labels: + fateMoudle: pulsar +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tls-port" + port: 6651 + targetPort: 6651 + protocol: TCP + type: LoadBalancer + selector: + fateMoudle: pulsar +{{ include "fate.matchLabels" . | indent 4 }} +{{- end }} + +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/rabbitmq/configmap.yaml b/helm-charts/FATE/templates/backends/spark/rabbitmq/configmap.yaml new file mode 100644 index 000000000..ab63ac95c --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/rabbitmq/configmap.yaml @@ -0,0 +1,23 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.rabbitmq.include }} +kind: ConfigMap +apiVersion: v1 +metadata: + name: rabbitmq-config + labels: + fateMoudle: rabbitmq +{{ include "fate.labels" . | indent 4 }} +data: + enabled_plugins: | + [rabbitmq_federation_management,rabbitmq_federation]. +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/rabbitmq.yaml b/helm-charts/FATE/templates/backends/spark/rabbitmq/deployment.yaml similarity index 71% rename from helm-charts/FATE/templates/rabbitmq.yaml rename to helm-charts/FATE/templates/backends/spark/rabbitmq/deployment.yaml index ca00ea3b4..cfed8b0d9 100644 --- a/helm-charts/FATE/templates/rabbitmq.yaml +++ b/helm-charts/FATE/templates/backends/spark/rabbitmq/deployment.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -10,17 +10,6 @@ # limitations under the License. {{ if .Values.modules.rabbitmq.include }} -kind: ConfigMap -apiVersion: v1 -metadata: - name: rabbitmq-config - labels: - fateMoudle: rabbitmq -{{ include "fate.labels" . | indent 4 }} -data: - enabled_plugins: | - [rabbitmq_federation_management,rabbitmq_federation]. ---- apiVersion: apps/v1 kind: Deployment metadata: @@ -60,6 +49,39 @@ spec: ports: - containerPort: 5672 - containerPort: 15672 + livenessProbe: + httpGet: + path: / + port: 15672 + httpHeaders: + - name: X-Custom-Header + value: livenessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + httpGet: + path: / + port: 15672 + httpHeaders: + - name: X-Custom-Header + value: readinessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + httpGet: + path: / + port: 15672 + httpHeaders: + - name: X-Custom-Header + value: startupProbe + failureThreshold: 12 + periodSeconds: 10 volumeMounts: - mountPath: /etc/rabbitmq/enabled_plugins name: rabbitmq-confs @@ -90,33 +112,4 @@ spec: name: rabbitmq-config - name: rabbitmq-data emptyDir: {} ---- -apiVersion: v1 -kind: Service -metadata: - name: rabbitmq - labels: - fateMoudle: rabbitmq -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-rabbitmq" - port: 5672 - targetPort: 5672 - {{- if eq .Values.modules.rabbitmq.type "NodePort" "LoadBalancer" }} - nodePort: {{ .Values.modules.rabbitmq.nodePort }} - {{- end }} - protocol: TCP - - name: "tcp-rabbitmq1" - port: 15672 - targetPort: 15672 - protocol: TCP - type: {{ .Values.modules.rabbitmq.type }} - {{- if .Values.modules.rabbitmq.loadBalancerIP }} - loadBalancerIP: "{{ .Values.modules.rabbitmq.loadBalancerIP }}" - {{- end }} - selector: - fateMoudle: rabbitmq -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/rabbitmq/ingress.yaml b/helm-charts/FATE/templates/backends/spark/rabbitmq/ingress.yaml new file mode 100644 index 000000000..91d2988cd --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/rabbitmq/ingress.yaml @@ -0,0 +1,44 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.rabbitmq.include }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: rabbitmq + labels: + fateMoudle: rabbitmq +{{ include "fate.labels" . | indent 4 }} +{{- if .Values.ingress.rabbitmq.annotations }} + annotations: +{{ toYaml .Values.ingress.rabbitmq.annotations | indent 4 }} +{{- end }} +spec: + ingressClassName: {{ .Values.ingressClassName }} + rules: + {{- range .Values.ingress.rabbitmq.hosts }} + - host: {{ .name }} + http: + paths: + - path: {{ default "/" .path }} + pathType: Prefix + backend: + service: + name: rabbitmq + port: + number: 15672 + {{- end }} +{{- if .Values.ingress.rabbitmq.tls }} + tls: +{{ toYaml .Values.ingress.rabbitmq.tls | indent 4 }} +{{- end }} +--- +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/rabbitmq/service.yaml b/helm-charts/FATE/templates/backends/spark/rabbitmq/service.yaml new file mode 100644 index 000000000..d161a168f --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/rabbitmq/service.yaml @@ -0,0 +1,41 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.rabbitmq.include }} +apiVersion: v1 +kind: Service +metadata: + name: rabbitmq + labels: + fateMoudle: rabbitmq +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-rabbitmq" + port: 5672 + targetPort: 5672 + {{- if eq .Values.modules.rabbitmq.type "NodePort" "LoadBalancer" }} + nodePort: {{ .Values.modules.rabbitmq.nodePort }} + {{- end }} + protocol: TCP + - name: "tcp-rabbitmq1" + port: 15672 + targetPort: 15672 + protocol: TCP + type: {{ .Values.modules.rabbitmq.type }} + {{- if .Values.modules.rabbitmq.loadBalancerIP }} + loadBalancerIP: "{{ .Values.modules.rabbitmq.loadBalancerIP }}" + {{- end }} + selector: + fateMoudle: rabbitmq +{{ include "fate.matchLabels" . | indent 4 }} +--- +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/spark-worker.yaml b/helm-charts/FATE/templates/backends/spark/spark/configmap.yaml similarity index 67% rename from helm-charts/FATE/templates/spark-worker.yaml rename to helm-charts/FATE/templates/backends/spark/spark/configmap.yaml index 3d804e3a8..8ec16b28f 100644 --- a/helm-charts/FATE/templates/spark-worker.yaml +++ b/helm-charts/FATE/templates/backends/spark/spark/configmap.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -166,85 +166,4 @@ data: host: 127.0.0.1 port: 8001 federatedId: 0 - ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: spark-worker - labels: - fateMoudle: spark-worker -{{ include "fate.labels" . | indent 4 }} -spec: - replicas: {{ default 2 .Values.modules.spark.worker.replicas }} - strategy: - type: Recreate - selector: - matchLabels: - fateMoudle: spark-worker -{{ include "fate.matchLabels" . | indent 6 }} - template: - metadata: - labels: - fateMoudle: spark-worker -{{ include "fate.labels" . | indent 8 }} - spec: - containers: - - name: spark-worker - image: {{ if .Values.modules.spark.worker.Image }}{{ .Values.modules.spark.worker.Image }}{{ else }}{{ .Values.image.registry }}/spark-worker{{ end }}:{{ default .Values.image.tag .Values.modules.spark.worker.ImageTag }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - {{- if .Values.modules.spark.worker.resources }} - resources: - {{- range $key, $val := .Values.modules.spark.worker.resources }} - {{ $key }}: -{{ toYaml $val | indent 14 }} - {{- end }} - {{- end }} - volumeMounts: - - mountPath: /data/projects/fate/conf/ - name: spark-worker-confs - ports: - - containerPort: 8081 - {{- with .Values.modules.spark.worker.nodeSelector }} - nodeSelector: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.spark.worker.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.spark.worker.affinity }} - affinity: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.image.imagePullSecrets }} - imagePullSecrets: -{{ toYaml . | indent 6 }} - {{- end }} - serviceAccountName: {{ template "serviceAccountName" . }} - restartPolicy: Always - volumes: - - name: spark-worker-confs - configMap: - name: spark-worker-config ---- -apiVersion: v1 -kind: Service -metadata: - name: spark-worker-1 - labels: - fateMoudle: spark-worker -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-spark" - port: 8081 - targetPort: 8081 - protocol: TCP - type: {{ .Values.modules.spark.worker.type }} - clusterIP: None - selector: - fateMoudle: spark-worker -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/spark/deployment.yaml b/helm-charts/FATE/templates/backends/spark/spark/deployment.yaml new file mode 100644 index 000000000..c0e314e27 --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/spark/deployment.yaml @@ -0,0 +1,193 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.spark.include }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: spark-master + labels: + fateMoudle: spark-master +{{ include "fate.labels" . | indent 4 }} +spec: + replicas: {{ default 1 .Values.modules.spark.master.replicas }} + strategy: + type: Recreate + selector: + matchLabels: + fateMoudle: spark-master +{{ include "fate.matchLabels" . | indent 6 }} + template: + metadata: + labels: + fateMoudle: spark-master +{{ include "fate.labels" . | indent 8 }} + spec: + containers: + - name: spark-master + image: {{ if .Values.modules.spark.master.Image }}{{ .Values.modules.spark.master.Image }}{{ else }}{{ .Values.image.registry }}/spark-master{{ end }}:{{ default .Values.image.tag .Values.modules.spark.master.ImageTag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.modules.spark.master.resources}} + resources: + {{- range $key, $val := .Values.modules.spark.master.resources }} + {{ $key }}: +{{ toYaml $val | indent 14 }} + {{- end }} + {{- end }} + ports: + - containerPort: 8080 + - containerPort: 7077 + - containerPort: 6066 + livenessProbe: + httpGet: + path: / + port: 8080 + httpHeaders: + - name: X-Custom-Header + value: livenessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + httpGet: + path: / + port: 8080 + httpHeaders: + - name: X-Custom-Header + value: readinessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + httpGet: + path: / + port: 8080 + httpHeaders: + - name: X-Custom-Header + value: startupProbe + failureThreshold: 12 + periodSeconds: 10 + {{- with .Values.modules.spark.master.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.spark.master.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.spark.master.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.image.imagePullSecrets }} + imagePullSecrets: +{{ toYaml . | indent 6 }} + {{- end }} + serviceAccountName: {{ template "serviceAccountName" . }} + restartPolicy: Always +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: spark-worker + labels: + fateMoudle: spark-worker +{{ include "fate.labels" . | indent 4 }} +spec: + replicas: {{ default 2 .Values.modules.spark.worker.replicas }} + strategy: + type: Recreate + selector: + matchLabels: + fateMoudle: spark-worker +{{ include "fate.matchLabels" . | indent 6 }} + template: + metadata: + labels: + fateMoudle: spark-worker +{{ include "fate.labels" . | indent 8 }} + spec: + containers: + - name: spark-worker + image: {{ if .Values.modules.spark.worker.Image }}{{ .Values.modules.spark.worker.Image }}{{ else }}{{ .Values.image.registry }}/spark-worker{{ end }}:{{ default .Values.image.tag .Values.modules.spark.worker.ImageTag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.modules.spark.worker.resources }} + resources: + {{- range $key, $val := .Values.modules.spark.worker.resources }} + {{ $key }}: +{{ toYaml $val | indent 14 }} + {{- end }} + {{- end }} + volumeMounts: + - mountPath: /data/projects/fate/conf/ + name: spark-worker-confs + ports: + - containerPort: 8081 + livenessProbe: + httpGet: + path: / + port: 8081 + httpHeaders: + - name: X-Custom-Header + value: livenessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + httpGet: + path: / + port: 8081 + httpHeaders: + - name: X-Custom-Header + value: readinessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + httpGet: + path: / + port: 8081 + httpHeaders: + - name: X-Custom-Header + value: startupProbe + failureThreshold: 12 + periodSeconds: 10 + {{- with .Values.modules.spark.worker.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.spark.worker.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.spark.worker.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.image.imagePullSecrets }} + imagePullSecrets: +{{ toYaml . | indent 6 }} + {{- end }} + serviceAccountName: {{ template "serviceAccountName" . }} + restartPolicy: Always + volumes: + - name: spark-worker-confs + configMap: + name: spark-worker-config +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/backends/spark/spark/ingress.yaml b/helm-charts/FATE/templates/backends/spark/spark/ingress.yaml new file mode 100644 index 000000000..947bd466e --- /dev/null +++ b/helm-charts/FATE/templates/backends/spark/spark/ingress.yaml @@ -0,0 +1,44 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.spark.include }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: spark + labels: + fateMoudle: spark +{{ include "fate.labels" . | indent 4 }} +{{- if .Values.ingress.spark.annotations }} + annotations: +{{ toYaml .Values.ingress.spark.annotations | indent 4 }} +{{- end }} +spec: + ingressClassName: {{ .Values.ingressClassName }} + rules: + {{- range .Values.ingress.spark.hosts }} + - host: {{ .name }} + http: + paths: + - path: {{ default "/" .path }} + pathType: Prefix + backend: + service: + name: spark-master + port: + number: 8080 + {{- end }} +{{- if .Values.ingress.spark.tls }} + tls: +{{ toYaml .Values.ingress.spark.tls | indent 4 }} +{{- end }} +--- +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/spark-master.yaml b/helm-charts/FATE/templates/backends/spark/spark/service.yaml similarity index 51% rename from helm-charts/FATE/templates/spark-master.yaml rename to helm-charts/FATE/templates/backends/spark/spark/service.yaml index 881704bb2..8430c771b 100644 --- a/helm-charts/FATE/templates/spark-master.yaml +++ b/helm-charts/FATE/templates/backends/spark/spark/service.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -10,61 +10,6 @@ # limitations under the License. {{ if .Values.modules.spark.include }} -apiVersion: apps/v1 -kind: Deployment -metadata: - name: spark-master - labels: - fateMoudle: spark-master -{{ include "fate.labels" . | indent 4 }} -spec: - replicas: {{ default 1 .Values.modules.spark.master.replicas }} - strategy: - type: Recreate - selector: - matchLabels: - fateMoudle: spark-master -{{ include "fate.matchLabels" . | indent 6 }} - template: - metadata: - labels: - fateMoudle: spark-master -{{ include "fate.labels" . | indent 8 }} - spec: - containers: - - name: spark-master - image: {{ if .Values.modules.spark.master.Image }}{{ .Values.modules.spark.master.Image }}{{ else }}{{ .Values.image.registry }}/spark-master{{ end }}:{{ default .Values.image.tag .Values.modules.spark.master.ImageTag }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - {{- if .Values.modules.spark.master.resources}} - resources: - {{- range $key, $val := .Values.modules.spark.master.resources }} - {{ $key }}: -{{ toYaml $val | indent 14 }} - {{- end }} - {{- end }} - ports: - - containerPort: 8080 - - containerPort: 7077 - - containerPort: 6066 - {{- with .Values.modules.spark.master.nodeSelector }} - nodeSelector: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.spark.master.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.spark.master.affinity }} - affinity: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.image.imagePullSecrets }} - imagePullSecrets: -{{ toYaml . | indent 6 }} - {{- end }} - serviceAccountName: {{ template "serviceAccountName" . }} - restartPolicy: Always ---- apiVersion: v1 kind: Service metadata: @@ -121,4 +66,24 @@ spec: selector: fateMoudle: spark-master {{ include "fate.matchLabels" . | indent 4 }} -{{ end }} +--- +apiVersion: v1 +kind: Service +metadata: + name: spark-worker-1 + labels: + fateMoudle: spark-worker +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-spark" + port: 8081 + targetPort: 8081 + protocol: TCP + type: {{ .Values.modules.spark.worker.type }} + clusterIP: None + selector: + fateMoudle: spark-worker +{{ include "fate.matchLabels" . | indent 4 }} +--- +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/client.yaml b/helm-charts/FATE/templates/core/client/deployment.yaml similarity index 71% rename from helm-charts/FATE/templates/client.yaml rename to helm-charts/FATE/templates/core/client/deployment.yaml index 761218e74..fcc546d4c 100644 --- a/helm-charts/FATE/templates/client.yaml +++ b/helm-charts/FATE/templates/core/client/deployment.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2021 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -46,6 +46,39 @@ spec: value: "{{.Values.modules.serving.ip}}:{{.Values.modules.serving.port}}" ports: - containerPort: 20000 + livenessProbe: + httpGet: + path: / + port: 20000 + httpHeaders: + - name: X-Custom-Header + value: livenessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + httpGet: + path: / + port: 20000 + httpHeaders: + - name: X-Custom-Header + value: readinessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + httpGet: + path: / + port: 20000 + httpHeaders: + - name: X-Custom-Header + value: startupProbe + failureThreshold: 12 + periodSeconds: 10 volumeMounts: - mountPath: /data/projects/fate/persistence/ name: persistence @@ -77,45 +110,4 @@ spec: persistentVolumeClaim: claimName: {{ .Values.modules.client.existingClaim | default "client-data" }} {{- end }} ---- -apiVersion: v1 -kind: Service -metadata: - name: notebook - labels: - fateMoudle: client -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-notebook" - port: 20000 - targetPort: 20000 - protocol: TCP - type: {{ .Values.modules.client.type }} - selector: - fateMoudle: client -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{- if and .Values.persistence.enabled (not .Values.modules.client.existingClaim) }} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: client-data - labels: - fateMoudle: client -{{ include "fate.labels" . | indent 4 }} -spec: - accessModes: - - {{ .Values.modules.client.accessMode }} - resources: - requests: - storage: {{ .Values.modules.client.size }} - {{- if .Values.modules.client.storageClass }} - {{- if eq "-" .Values.modules.client.storageClass }} - storageClassName: "" - {{- else }} - storageClassName: {{ .Values.modules.client.storageClass }} - {{- end }} - {{- end }} -{{- end }} -{{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/client/ingress.yaml b/helm-charts/FATE/templates/core/client/ingress.yaml new file mode 100644 index 000000000..d15ca015c --- /dev/null +++ b/helm-charts/FATE/templates/core/client/ingress.yaml @@ -0,0 +1,44 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.client.include }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: client + labels: + fateMoudle: client +{{ include "fate.labels" . | indent 4 }} + {{- if .Values.ingress.client.annotations }} + annotations: +{{ toYaml .Values.ingress.client.annotations | indent 4 }} + {{- end }} +spec: + ingressClassName: {{ .Values.ingressClassName }} + rules: + {{- range .Values.ingress.client.hosts }} + - host: {{ .name }} + http: + paths: + - path: {{ default "/" .path }} + pathType: Prefix + backend: + service: + name: notebook + port: + number: 20000 + {{- end }} + {{- if .Values.ingress.client.tls }} + tls: +{{ toYaml .Values.ingress.client.tls | indent 4 }} + {{- end }} + +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/client/istio.yaml b/helm-charts/FATE/templates/core/client/istio.yaml new file mode 100644 index 000000000..a678d61fe --- /dev/null +++ b/helm-charts/FATE/templates/core/client/istio.yaml @@ -0,0 +1,34 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.istio.enabled }} +{{ if .Values.modules.client.include }} +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: notebook + labels: +{{ include "fate.labels" . | indent 4 }} +spec: + hosts: + {{- range .Values.ingress.client.hosts }} + - {{ .name }} + {{- end }} + gateways: + - {{ .Values.partyName }}-gateway + http: + - route: + - destination: + host: notebook + port: + number: 20000 +{{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/client/persistentvolumeclaim.yaml b/helm-charts/FATE/templates/core/client/persistentvolumeclaim.yaml new file mode 100644 index 000000000..d13d640d7 --- /dev/null +++ b/helm-charts/FATE/templates/core/client/persistentvolumeclaim.yaml @@ -0,0 +1,35 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.client.include }} +{{- if and .Values.persistence.enabled (not .Values.modules.client.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: client-data + labels: + fateMoudle: client +{{ include "fate.labels" . | indent 4 }} +spec: + accessModes: + - {{ .Values.modules.client.accessMode }} + resources: + requests: + storage: {{ .Values.modules.client.size }} + {{- if .Values.modules.client.storageClass }} + {{- if eq "-" .Values.modules.client.storageClass }} + storageClassName: "" + {{- else }} + storageClassName: {{ .Values.modules.client.storageClass }} + {{- end }} + {{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/client/service.yaml b/helm-charts/FATE/templates/core/client/service.yaml new file mode 100644 index 000000000..072c9b1fd --- /dev/null +++ b/helm-charts/FATE/templates/core/client/service.yaml @@ -0,0 +1,30 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.client.include }} +apiVersion: v1 +kind: Service +metadata: + name: notebook + labels: + fateMoudle: client +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-notebook" + port: 20000 + targetPort: 20000 + protocol: TCP + type: {{ .Values.modules.client.type }} + selector: + fateMoudle: client +{{ include "fate.matchLabels" . | indent 4 }} +{{- end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/fateboard/configmap.yaml b/helm-charts/FATE/templates/core/fateboard/configmap.yaml new file mode 100644 index 000000000..023372cd8 --- /dev/null +++ b/helm-charts/FATE/templates/core/fateboard/configmap.yaml @@ -0,0 +1,42 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.fateboard.include }} +kind: ConfigMap +apiVersion: v1 +metadata: + name: fateboard-config + labels: + fateMoudle: fateboard +{{ include "fate.labels" . | indent 4 }} +data: + application.properties: | + server.port=8080 + fateflow.url=http://{{ if .Values.istio.enabled }}127.0.0.1{{ else }}fateflow{{ end }}:9380 + fateflow.http_app_key= + fateflow.http_secret_key= + spring.http.encoding.charset=UTF-8 + spring.http.encoding.enabled=true + server.tomcat.uri-encoding=UTF-8 + fateboard.front_end.cors=false + fateboard.front_end.url=http://localhost:8028 + server.tomcat.max-threads=1000 + server.tomcat.max-connections=20000 + spring.servlet.multipart.max-file-size=10MB + spring.servlet.multipart.max-request-size=100MB + server.compression.enabled=true + server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain + server.board.login.username={{ .Values.modules.fateboard.username }} + server.board.login.password={{ .Values.modules.fateboard.password }} + server.servlet.session.timeout=4h + server.servlet.session.cookie.max-age=4h + management.endpoints.web.exposure.exclude=* +{{- end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/fateboard/ingress.yaml b/helm-charts/FATE/templates/core/fateboard/ingress.yaml new file mode 100644 index 000000000..a24e57787 --- /dev/null +++ b/helm-charts/FATE/templates/core/fateboard/ingress.yaml @@ -0,0 +1,44 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.fateboard.include }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: fateboard + labels: + fateMoudle: fateboard +{{ include "fate.labels" . | indent 4 }} +{{- if .Values.ingress.fateboard.annotations }} + annotations: +{{ toYaml .Values.ingress.fateboard.annotations | indent 4 }} +{{- end }} +spec: + ingressClassName: {{ .Values.ingressClassName }} + rules: + {{- range .Values.ingress.fateboard.hosts }} + - host: {{ .name }} + http: + paths: + - path: {{ default "/" .path }} + pathType: Prefix + backend: + service: + name: fateboard + port: + number: 8080 + {{- end }} + {{- if .Values.ingress.fateboard.tls }} + tls: +{{ toYaml .Values.ingress.fateboard.tls | indent 4 }} + {{- end }} + +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/fateboard/istio.yaml b/helm-charts/FATE/templates/core/fateboard/istio.yaml new file mode 100644 index 000000000..5158000dd --- /dev/null +++ b/helm-charts/FATE/templates/core/fateboard/istio.yaml @@ -0,0 +1,34 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.istio.enabled }} +{{ if .Values.modules.fateboard.include }} +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: fateboard + labels: +{{ include "fate.labels" . | indent 4 }} +spec: + hosts: + {{- range .Values.ingress.fateboard.hosts }} + - {{ .name }} + {{- end }} + gateways: + - fate-9999-gateway + http: + - route: + - destination: + host: fateboard + port: + number: 8080 +{{ end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/fateboard/service.yaml b/helm-charts/FATE/templates/core/fateboard/service.yaml new file mode 100644 index 000000000..5059f5bc0 --- /dev/null +++ b/helm-charts/FATE/templates/core/fateboard/service.yaml @@ -0,0 +1,30 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.fateboard.include }} +apiVersion: v1 +kind: Service +metadata: + name: fateboard + labels: + fateMoudle: python +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-fateboard" + port: 8080 + targetPort: 8080 + protocol: TCP + type: {{ .Values.modules.fateboard.type }} + selector: + fateMoudle: python +{{ include "fate.matchLabels" . | indent 4 }} +{{- end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/fateflow/configmap.yaml b/helm-charts/FATE/templates/core/fateflow/configmap.yaml new file mode 100644 index 000000000..41aec9ecc --- /dev/null +++ b/helm-charts/FATE/templates/core/fateflow/configmap.yaml @@ -0,0 +1,300 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.python.include }} +kind: ConfigMap +apiVersion: v1 +metadata: + name: python-config + labels: + fateMoudle: python +{{ include "fate.labels" . | indent 4 }} +data: + spark-defaults.conf: | + spark.master {{ if eq .Values.modules.python.backend "spark_local_pulsar" }}local[*]{{ else }}{{ .Values.modules.python.spark.master | default "spark://spark-master:7077"}}{{ end }} + spark.driver.host {{ .Values.modules.python.spark.driverHost | default "fateflow" }} + {{- if .Values.modules.python.spark.driverStartPort }} + spark.driver.port {{ .Values.modules.python.spark.driverStartPort }} + {{- end }} + + {{- if .Values.modules.python.spark.portMaxRetries }} + spark.port.maxRetries {{ .Values.modules.python.spark.portMaxRetries }} + {{- end }} + + {{- if .Values.modules.python.spark.blockManagerStartPort }} + spark.blockManager.port {{ .Values.modules.python.spark.blockManagerStartPort }} + {{- end }} + + {{- if .Values.modules.python.spark.blockManagerStartPort }} + spark.driver.bindAddress 0.0.0.0 + {{- end }} + + {{- if .Values.modules.python.spark.pysparkPython }} + spark.pyspark.python {{ .Values.modules.python.spark.pysparkPython }} + spark.pyspark.driver.python python + {{- end }} + service_conf.yaml: | + use_registry: {{ .Values.modules.serving.useRegistry | default false }} + use_deserialize_safe_module: false + dependent_distribution: false + encrypt_password: false + encrypt_module: fate_arch.common.encrypt_utils#pwdecrypt + private_key: + fateflow: + # you must set real ip address, 127.0.0.1 and 0.0.0.0 is not supported + host: {{ if .Values.istio.enabled }}127.0.0.1{{ else }}fateflow{{ end }} + http_port: 9380 + grpc_port: 9360 + # http_app_key: + # http_secret_key: + # support rollsite/nginx/fateflow as a coordination proxy + # rollsite support fate on eggroll, use grpc protocol + # nginx support fate on eggroll and fate on spark, use http or grpc protocol, default is http + # fateflow support fate on eggroll and fate on spark, use http protocol, but not support exchange network mode + + # format(proxy: rollsite) means rollsite use the rollsite configuration of fate_one_eggroll and nginx use the nginx configuration of fate_one_spark + # you also can customize the config like this(set fateflow of the opposite party as proxy): + # proxy: + # name: fateflow + # host: xx + # http_port: xx + # grpc_port: xx + {{- if eq .Values.modules.python.backend "spark_pulsar" "spark_rabbitmq" "spark_local_pulsar" }} + proxy: nginx + {{- else }} + proxy: rollsite + {{- end }} + # support default/http/grpc + protocol: default + # It can also be specified in the job configuration using the federated_status_collect_type parameter + default_federated_status_collect_type: PULL + database: + name: '{{ .Values.externalMysqlDatabase | default .Values.modules.mysql.database | default "eggroll_meta" }}' + user: '{{ .Values.externalMysqlUser | default .Values.modules.mysql.user | default "fate" }}' + passwd: '{{ .Values.externalMysqlPassword | default .Values.modules.mysql.password | default "fate_dev" }}' + host: '{{ .Values.externalMysqlIp | default .Values.modules.mysql.ip | default "mysql" }}' + port: {{ .Values.externalMysqlPort | default .Values.modules.mysql.port | default "3306" }} + max_connections: 100 + stale_timeout: 30 + zookeeper: + hosts: + - "serving-zookeeper:2181" + # use_acl: false + # user: fate + # password: fate + # engine services + default_engines: + {{- if eq .Values.modules.python.backend "spark_pulsar" }} + computing: spark + federation: pulsar + storage: hdfs + {{- else if eq .Values.modules.python.backend "spark_rabbitmq" }} + computing: spark + federation: rabbitmq + storage: hdfs + {{- else if eq .Values.modules.python.backend "spark_local_pulsar" }} + computing: spark + federation: pulsar + storage: localfs + {{- else }} + computing: eggroll + federation: eggroll + storage: eggroll + {{- end }} + fate_on_standalone: + standalone: + cores_per_node: 20 + nodes: 1 + fate_on_eggroll: + clustermanager: + cores_per_node: {{ .Values.modules.python.clustermanager.cores_per_node | default 16 }} + nodes: {{ .Values.modules.python.clustermanager.nodes | default 2 }} + rollsite: + host: {{ .Values.modules.rollsite.ip }} + port: 9370 + fate_on_spark: + spark: + # default use SPARK_HOME environment variable + home: /data/projects/spark-2.4.1-bin-hadoop2.7/ + cores_per_node: {{ .Values.modules.python.spark.cores_per_node }} + nodes: {{ .Values.modules.python.spark.nodes }} + linkis_spark: + cores_per_node: 20 + nodes: 2 + host: 127.0.0.1 + port: 9001 + token_code: MLSS + python_path: /data/projects/fate/python + hive: + host: 127.0.0.1 + port: 10000 + auth_mechanism: + username: + password: + linkis_hive: + host: 127.0.0.1 + port: 9001 + hdfs: + name_node: {{ .Values.modules.python.hdfs.name_node | default "hdfs://namenode:9000" }} + # default / + path_prefix: {{ .Values.modules.python.hdfs.path_prefix }} + rabbitmq: + host: {{ .Values.modules.python.rabbitmq.host }} + mng_port: {{ .Values.modules.python.rabbitmq.mng_port }} + port: {{ .Values.modules.python.rabbitmq.port }} + user: {{ .Values.modules.python.rabbitmq.user }} + password: {{ .Values.modules.python.rabbitmq.password }} + # default conf/rabbitmq_route_table.yaml + route_table: conf/rabbitmq_route_table/rabbitmq_route_table.yaml + pulsar: + host: {{ .Values.modules.python.pulsar.host }} + port: {{ .Values.modules.python.pulsar.port }} + mng_port: {{ .Values.modules.python.pulsar.mng_port }} + topic_ttl: 3 + # default conf/pulsar_route_table.yaml + route_table: conf/pulsar_route_table/pulsar_route_table.yaml + nginx: + host: {{ .Values.modules.python.nginx.host }} + http_port: {{ .Values.modules.python.nginx.http_port }} + grpc_port: {{ .Values.modules.python.nginx.grpc_port }} + fateboard: + host: fateboard + port: 8080 + # on API `/model/load` and `/model/load/do` + # automatic upload models to the model store if it exists locally but does not exist in the model storage + # or download models from the model store if it does not exist locally but exists in the model storage + # this config will not affect API `/model/store` or `/model/restore` + enable_model_store: false + model_store_address: + storage: mysql + name: {{ .Values.externalMysqlDatabase | default .Values.modules.mysql.database | default "eggroll_meta" }} + host: '{{ .Values.externalMysqlIp | default .Values.modules.mysql.ip | default "mysql" }}' + port: {{ .Values.externalMysqlPort | default .Values.modules.mysql.port | default "3306" }} + user: '{{ .Values.externalMysqlUser | default .Values.modules.mysql.user | default "fate" }}' + passwd: '{{ .Values.externalMysqlPassword | default .Values.modules.mysql.password | default "fate_dev" }}' + max_connections: 10 + stale_timeout: 10 + {{- with .Values.modules.serving }} + servings: + hosts: + {{- if and .ip .port}} + - '{{ .ip }}:{{ .port }}' + {{- else }} + - '' + {{- end }} + {{- if and .useRegistry .zookeeper }} + zookeeper: +{{ toYaml .zookeeper | indent 6 }} + {{- end }} + {{- end }} + transfer_conf.yaml: | + paths: # dir or path + - "python/federatedml/transfer_variable/auth_conf" + component_registry.json: | + { + "components": { + }, + "providers": { + }, + "default_settings": { + "fate_flow":{ + "default_version_key": "FATEFlow" + }, + "fate": { + "default_version_key": "FATE" + }, + "class_path": { + "interface": "components.components.Components", + "feature_instance": "feature.instance.Instance", + "feature_vector": "feature.sparse_vector.SparseVector", + "model": "protobuf.generated", + "model_migrate": "protobuf.model_migrate.model_migrate", + "homo_model_convert": "protobuf.homo_model_convert.homo_model_convert" + } + } + } + job_default_config.yaml: | + # component provider, relative path to get_fate_python_directory + default_component_provider_path: federatedml + + # resource + total_cores_overweight_percent: 1 # 1 means no overweight + total_memory_overweight_percent: 1 # 1 means no overweight + task_parallelism: 1 + task_cores: 4 + task_memory: 0 # mb + max_cores_percent_per_job: 1 # 1 means total + + # scheduling + job_timeout: 259200 # s + remote_request_timeout: 30000 # ms + federated_command_trys: 3 + end_status_job_scheduling_time_limit: 300000 # ms + end_status_job_scheduling_updates: 1 + auto_retries: 0 + auto_retry_delay: 1 #seconds + # It can also be specified in the job configuration using the federated_status_collect_type parameter + federated_status_collect_type: PUSH + + # upload + upload_max_bytes: 4194304000 # bytes + + #component output + output_data_summary_count_limit: 100 +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: pulsar-route-table + labels: + fateMoudle: python +{{ include "fate.labels" . | indent 4 }} +data: + pulsar_route_table.yaml: | + {{- with .Values.modules.pulsar.exchange }} + default: + proxy: "{{ .ip }}:{{ .port }}" + domain: "{{ .domain }}" + {{- end }} + {{- if .Values.modules.pulsar.route_table }} + {{- range $key, $val := .Values.modules.pulsar.route_table }} + {{ $key }}: +{{ toYaml . | indent 6 }} + {{- end }} + {{- else }} + {{ .Values.partyId }}: + host: pulsar + port: 6650 + sslPort: 6651 + proxy: "" + {{- end}} +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: rabbitmq-route-table + labels: + fateMoudle: python +{{ include "fate.labels" . | indent 4 }} +data: + rabbitmq_route_table.yaml: | + {{- if .Values.modules.rabbitmq.route_table }} + {{- range $key, $val := .Values.modules.rabbitmq.route_table }} + {{ $key }}: +{{ toYaml . | indent 6 }} + {{- end }} + {{- else }} + {{ .Values.partyId }}: + host: rabbitmq + port: 5672 + {{- end}} + +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/fateflow/persistentvolumeclaim.yaml b/helm-charts/FATE/templates/core/fateflow/persistentvolumeclaim.yaml new file mode 100644 index 000000000..3b8d39b86 --- /dev/null +++ b/helm-charts/FATE/templates/core/fateflow/persistentvolumeclaim.yaml @@ -0,0 +1,34 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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 and .Values.persistence.enabled (not .Values.modules.python.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: python-data + labels: + fateMoudle: python +{{ include "fate.labels" . | indent 4 }} +spec: + accessModes: + - {{ .Values.modules.python.accessMode }} + resources: + requests: + storage: {{ .Values.modules.python.size }} + {{- if .Values.modules.python.storageClass }} + {{- if eq "-" .Values.modules.python.storageClass }} + storageClassName: "" + {{- else }} + storageClassName: {{ .Values.modules.python.storageClass }} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/fateflow/service.yaml b/helm-charts/FATE/templates/core/fateflow/service.yaml new file mode 100644 index 000000000..e2d7bce37 --- /dev/null +++ b/helm-charts/FATE/templates/core/fateflow/service.yaml @@ -0,0 +1,102 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.python.include }} +apiVersion: v1 +kind: Service +metadata: + name: fateflow + labels: + fateMoudle: fateflow +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-grpc" + port: 9360 + targetPort: 9360 + protocol: TCP + - name: "tcp-http" + port: 9380 + targetPort: 9380 + protocol: TCP + type: ClusterIP + clusterIP: None + selector: + fateMoudle: python +{{ include "fate.matchLabels" . | indent 4 }} +--- +apiVersion: v1 +kind: Service +metadata: + name: fateflow-client + labels: + fateMoudle: fateflow +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-grpc" + port: 9360 + targetPort: 9360 + {{- if eq .Values.modules.python.type "NodePort" "LoadBalancer" }} + nodePort: {{ .Values.modules.python.grpcNodePort }} + {{- end }} + protocol: TCP + - name: "tcp-http" + port: 9380 + targetPort: 9380 + {{- if eq .Values.modules.python.type "NodePort" "LoadBalancer" }} + nodePort: {{ .Values.modules.python.httpNodePort }} + {{- end }} + protocol: TCP + type: {{ .Values.modules.python.type }} + + {{- if .Values.modules.python.loadBalancerIP }} + loadBalancerIP: "{{ .Values.modules.python.loadBalancerIP }}" + {{- end }} + + selector: + fateMoudle: python +{{ include "fate.matchLabels" . | indent 4 }} +--- +{{- if and .Values.modules.python.spark.portMaxRetries (ne (print .Values.modules.python.spark.driverHost) "fateflow") }} +apiVersion: v1 +kind: Service +metadata: + name: fateflow-sparkdriver + labels: + fateMoudle: python +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + {{ $spark := .Values.modules.python.spark }} + {{- range .Values.modules.python.spark.portMaxRetries | int | until }} + - name: "spark-driver-port-{{ . }}" + port: {{ $spark.driverStartPort | int | add . }} + targetPort: {{ $spark.driverStartPort | int | add . }} + {{- if eq $spark.driverHostType "NodePort" "LoadBalancer" }} + nodePort: {{ $spark.driverStartPort | int | add . }} + {{- end }} + protocol: TCP + - name: "spark-block-manager-port-{{ . }}" + port: {{ $spark.blockManagerStartPort | int | add . }} + targetPort: {{ $spark.blockManagerStartPort | int | add . }} + {{- if eq $spark.driverHostType "NodePort" "LoadBalancer" }} + nodePort: {{ $spark.blockManagerStartPort | int | add . }} + {{- end }} + protocol: TCP + {{- end }} + type: {{ .Values.modules.python.spark.driverHostType }} + selector: + fateMoudle: python +{{ include "fate.matchLabels" . | indent 4 }} +--- +{{- end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/istio.yaml b/helm-charts/FATE/templates/core/istio.yaml similarity index 52% rename from helm-charts/FATE/templates/istio.yaml rename to helm-charts/FATE/templates/core/istio.yaml index 1d6d388c9..8aa0f853c 100644 --- a/helm-charts/FATE/templates/istio.yaml +++ b/helm-charts/FATE/templates/core/istio.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -8,6 +8,7 @@ # 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.istio.enabled }} apiVersion: networking.istio.io/v1alpha3 kind: Gateway @@ -25,44 +26,4 @@ spec: protocol: HTTP hosts: - "*" -{{ if .Values.modules.fateboard.include }} ---- -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: fateboard - labels: -{{ include "fate.labels" . | indent 4 }} -spec: - hosts: - - {{ .Values.host.fateboard }} - gateways: - - fate-9999-gateway - http: - - route: - - destination: - host: fateboard - port: - number: 8080 -{{ end }} -{{ if .Values.modules.client.include }} ---- -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: notebook - labels: -{{ include "fate.labels" . | indent 4 }} -spec: - hosts: - - {{ .Values.host.client }} - gateways: - - {{ .Values.partyName }}-gateway - http: - - route: - - destination: - host: notebook - port: - number: 20000 -{{ end }} {{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/mysql-module.yaml b/helm-charts/FATE/templates/core/mysql/configmap.yaml similarity index 67% rename from helm-charts/FATE/templates/mysql-module.yaml rename to helm-charts/FATE/templates/core/mysql/configmap.yaml index 8188e7707..db11b54bb 100644 --- a/helm-charts/FATE/templates/mysql-module.yaml +++ b/helm-charts/FATE/templates/core/mysql/configmap.yaml @@ -1,4 +1,4 @@ -# Copyright 2019-2020 VMware, Inc. +# Copyright 2019-2022 VMware, Inc. # Licensed 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 @@ -43,7 +43,7 @@ data: `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; - CREATE UNIQUE INDEX `idx_u_store_loinsert-node.sqlcator_ns_n` ON `store_locator` (`namespace`(120), `name`(640)); + CREATE UNIQUE INDEX `idx_u_store_locator_ns_n` ON `store_locator` (`namespace`(120), `name`(640)); CREATE INDEX `idx_store_locator_st` ON `store_locator` (`store_type`(255)); CREATE INDEX `idx_store_locator_ns` ON `store_locator` (`namespace`(767)); CREATE INDEX `idx_store_locator_n` ON `store_locator` (`name`(767)); @@ -155,122 +155,4 @@ data: select * from server_node; {{- end }} --- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: mysql - labels: - fateMoudle: mysql -{{ include "fate.labels" . | indent 4 }} -spec: - replicas: 1 - strategy: - type: Recreate - selector: - matchLabels: - fateMoudle: mysql -{{ include "fate.matchLabels" . | indent 6 }} - template: - metadata: - labels: - fateMoudle: mysql -{{ include "fate.labels" . | indent 8 }} - spec: - containers: - {{- if .Values.image.isThridParty }} - - image: {{ .Values.image.registry }}/mysql:8.0.28 - {{- else }} - - image: mysql:8.0.28 - {{- end }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - name: mysql - env: - - name: MYSQL_ALLOW_EMPTY_PASSWORD - value: "1" - - name: MYSQL_DATABASE - value: {{ .Values.modules.mysql.database | quote }} - - name: MYSQL_USER - value: {{ .Values.modules.mysql.user | quote }} - - name: MYSQL_PASSWORD - value: {{ .Values.modules.mysql.password | quote }} - - name: user - value: root - ports: - - containerPort: 3306 - volumeMounts: - - name: mysql-confs - mountPath: /docker-entrypoint-initdb.d/ - - name: data - mountPath: /var/lib/mysql - subPath: {{ .Values.modules.mysql.subPath }} - {{- with .Values.modules.mysql.nodeSelector }} - nodeSelector: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.mysql.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.mysql.affinity }} - affinity: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.image.imagePullSecrets }} - imagePullSecrets: -{{ toYaml . | indent 6 }} - {{- end }} - serviceAccountName: {{ template "serviceAccountName" . }} - volumes: - - name: mysql-confs - configMap: - name: mysql-config - {{- if not .Values.persistence.enabled }} - - name: data - emptyDir: {} - {{- else }} - - name: data - persistentVolumeClaim: - claimName: {{ .Values.modules.mysql.existingClaim | default "mysql-data" }} - {{- end }} ---- -apiVersion: v1 -kind: Service -metadata: - name: mysql - labels: - fateMoudle: mysql -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-mysql" - port: 3306 - targetPort: 3306 - protocol: TCP - type: {{ .Values.modules.mysql.type }} - selector: - fateMoudle: mysql -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{- if and .Values.persistence.enabled (not .Values.modules.mysql.existingClaim) }} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: mysql-data - labels: - fateMoudle: mysql -{{ include "fate.labels" . | indent 4 }} -spec: - accessModes: - - {{ .Values.modules.mysql.accessMode }} - resources: - requests: - storage: {{ .Values.modules.mysql.size }} - {{- if .Values.modules.mysql.storageClass }} - {{- if eq "-" .Values.modules.mysql.storageClass }} - storageClassName: "" - {{- else }} - storageClassName: {{ .Values.modules.mysql.storageClass }} - {{- end }} - {{- end }} -{{- end }} -{{ end }} \ No newline at end of file +{{- end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/mysql/deployment.yaml b/helm-charts/FATE/templates/core/mysql/deployment.yaml new file mode 100644 index 000000000..a0b1c98fe --- /dev/null +++ b/helm-charts/FATE/templates/core/mysql/deployment.yaml @@ -0,0 +1,118 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.mysql.include }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mysql + labels: + fateMoudle: mysql +{{ include "fate.labels" . | indent 4 }} +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + fateMoudle: mysql +{{ include "fate.matchLabels" . | indent 6 }} + template: + metadata: + labels: + fateMoudle: mysql +{{ include "fate.labels" . | indent 8 }} + spec: + containers: + {{- if .Values.image.isThridParty }} + - image: {{ .Values.image.registry }}/mysql:8.0.28 + {{- else }} + - image: mysql:8.0.28 + {{- end }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + name: mysql + env: + - name: MYSQL_ALLOW_EMPTY_PASSWORD + value: "1" + - name: MYSQL_DATABASE + value: {{ .Values.modules.mysql.database | quote }} + - name: MYSQL_USER + value: {{ .Values.modules.mysql.user | quote }} + - name: MYSQL_PASSWORD + value: {{ .Values.modules.mysql.password | quote }} + - name: user + value: root + ports: + - containerPort: 3306 + livenessProbe: + exec: + command: + - mysqladmin + - ping + initialDelaySeconds: 60 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + exec: + command: + - mysqladmin + - ping + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + exec: + command: + - mysqladmin + - ping + failureThreshold: 12 + periodSeconds: 10 + volumeMounts: + - name: mysql-confs + mountPath: /docker-entrypoint-initdb.d/ + - name: data + mountPath: /var/lib/mysql + subPath: {{ .Values.modules.mysql.subPath }} + {{- with .Values.modules.mysql.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.mysql.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.mysql.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.image.imagePullSecrets }} + imagePullSecrets: +{{ toYaml . | indent 6 }} + {{- end }} + serviceAccountName: {{ template "serviceAccountName" . }} + volumes: + - name: mysql-confs + configMap: + name: mysql-config + {{- if not .Values.persistence.enabled }} + - name: data + emptyDir: {} + {{- else }} + - name: data + persistentVolumeClaim: + claimName: {{ .Values.modules.mysql.existingClaim | default "mysql-data" }} + {{- end }} +--- +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/mysql/persistentvolumeclaim.yaml b/helm-charts/FATE/templates/core/mysql/persistentvolumeclaim.yaml new file mode 100644 index 000000000..7299ff18d --- /dev/null +++ b/helm-charts/FATE/templates/core/mysql/persistentvolumeclaim.yaml @@ -0,0 +1,35 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.mysql.include }} +{{- if and .Values.persistence.enabled (not .Values.modules.mysql.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: mysql-data + labels: + fateMoudle: mysql +{{ include "fate.labels" . | indent 4 }} +spec: + accessModes: + - {{ .Values.modules.mysql.accessMode }} + resources: + requests: + storage: {{ .Values.modules.mysql.size }} + {{- if .Values.modules.mysql.storageClass }} + {{- if eq "-" .Values.modules.mysql.storageClass }} + storageClassName: "" + {{- else }} + storageClassName: {{ .Values.modules.mysql.storageClass }} + {{- end }} + {{- end }} +{{- end }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/mysql/service.yaml b/helm-charts/FATE/templates/core/mysql/service.yaml new file mode 100644 index 000000000..22da1527c --- /dev/null +++ b/helm-charts/FATE/templates/core/mysql/service.yaml @@ -0,0 +1,30 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.mysql.include }} +apiVersion: v1 +kind: Service +metadata: + name: mysql + labels: + fateMoudle: mysql +{{ include "fate.labels" . | indent 4 }} +spec: + ports: + - name: "tcp-mysql" + port: 3306 + targetPort: 3306 + protocol: TCP + type: {{ .Values.modules.mysql.type }} + selector: + fateMoudle: mysql +{{ include "fate.matchLabels" . | indent 4 }} +{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/core/python-spark.yaml b/helm-charts/FATE/templates/core/python-spark.yaml new file mode 100644 index 000000000..4bb5ec9e5 --- /dev/null +++ b/helm-charts/FATE/templates/core/python-spark.yaml @@ -0,0 +1,290 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.modules.python.include }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: python + labels: + fateMoudle: python +{{ include "fate.labels" . | indent 4 }} +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + fateMoudle: python +{{ include "fate.matchLabels" . | indent 6 }} + template: + metadata: + labels: + fateMoudle: python +{{ include "fate.labels" . | indent 8 }} + spec: + {{- if .Values.istio.enabled }} + {{- else }} + initContainers: + {{- if .Values.image.isThridParty }} + - image: {{ .Values.image.registry }}/mysql:8.0.28 + {{- else }} + - image: mysql:8.0.28 + {{- end }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + name: ping-mysql + env: + - name: MYSQL_DATABASE + value: "{{ .Values.externalMysqlDatabase | default .Values.modules.mysql.database | default "eggroll_meta" }}" + - name: MYSQL_USER + value: "{{ .Values.externalMysqlUser | default .Values.modules.mysql.user | default "fate" }}" + - name: MYSQL_PASSWORD + value: "{{ .Values.externalMysqlPassword | default .Values.modules.mysql.password | default "fate_dev" }}" + - name: MYSQL_HOST + value: "{{ .Values.externalMysqlIp | default .Values.modules.mysql.ip | default "mysql" }}" + - name: MYSQL_PORT + value: "{{ .Values.externalMysqlPort | default .Values.modules.mysql.port | default "3306" | }}" + command: + - /bin/bash + - -c + - | + set -x + function checkMySQL(){ + checkMySQLCount=0 + while true ; do + checkMySQLCount=$[checkMySQLCount+1] + echo "Waiting for mysql started. check count: $checkMySQLCount" + sleep 2 + + state=`mysqladmin ping -h ${MYSQL_HOST} --port=${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD}| awk '{print $3}'` + if [ "$state" == "alive" ]; then + echo "mysql server has been already started." + break + fi + done + } + echo "Waiting for mysql started..." + checkMySQL + {{- end }} + containers: + - name: python + {{- if eq .Values.modules.python.backend "spark_pulsar" "spark_rabbitmq" "spark_local_pulsar" }} + image: {{ .Values.image.registry }}/python-spark:{{ .Values.image.tag }} + {{- else }} + image: {{ .Values.image.registry }}/{{ if .Values.modules.python.enabledNN }}python-nn{{ else }}python{{ end }}:{{ .Values.image.tag }} + {{- end }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.modules.python.resources}} + resources: + {{- range $key, $val := .Values.modules.python.resources }} + {{ $key }}: +{{ toYaml $val | indent 14 }} + {{- end }} + {{- end }} + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + {{- if .Values.modules.python.logLevel }} + - name: FATE_LOG_LEVEL + value: {{ .Values.modules.python.logLevel }} + {{- end }} + - name: PYTHONPATH + value: "$PYTHONPATH:/data/projects/fate/fate/python:/data/projects/fate/eggroll/python:/data/projects/fate/fateflow/python:/data/projects/fate/fate/python/fate_client" + - name: FATE_PROJECT_BASE + value: "/data/projects/fate" + {{- if eq .Values.modules.python.backend "spark_pulsar" "spark_rabbitmq" }} + - name: FATE_FLOW_UPLOAD_MAX_NUM + value: "1000000" + - name: FATE_FLOW_UPLOAD_MAX_BYTES + value: "104868093952" + {{- end }} + ports: + - name: grpc-port + containerPort: 9360 + - name: http-port + containerPort: 9380 + command: + - /bin/bash + - -c + - | + set -x + mkdir -p /data/projects/fate/conf/ + cp /data/projects/fate/conf-tmp/transfer_conf.yaml /data/projects/fate/conf/transfer_conf.yaml + cp /data/projects/fate/conf-tmp/service_conf.yaml /data/projects/fate/conf/service_conf.yaml + cp /data/projects/fate/conf-tmp/component_registry.json /data/projects/fate/conf/component_registry.json + cp /data/projects/fate/conf-tmp/job_default_config.yaml /data/projects/fate/conf/job_default_config.yaml + # fix fateflow conf must use IP + sed -i "s/host: fateflow/host: ${POD_IP}/g" /data/projects/fate/conf/service_conf.yaml + + cp /data/projects/spark-2.4.1-bin-hadoop2.7/conf/spark-defaults-template.conf /data/projects/spark-2.4.1-bin-hadoop2.7/conf/spark-defaults.conf + sed -i "s/fateflow/${POD_IP}/g" /data/projects/spark-2.4.1-bin-hadoop2.7/conf/spark-defaults.conf + + # logs + mkdir -p /data/projects/fate/fateflow/logs/fate_flow/ + touch /data/projects/fate/fateflow/logs/fate_flow/INFO.log + ln -sf /dev/stdout /data/projects/fate/fateflow/logs/fate_flow/INFO.log + + sleep 5 && python fateflow/python/fate_flow/fate_flow_server.py + livenessProbe: + tcpSocket: + port: 9380 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + tcpSocket: + port: 9380 + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + tcpSocket: + port: 9380 + failureThreshold: 12 + periodSeconds: 10 + volumeMounts: + {{- if eq .Values.modules.python.backend "eggroll" }} + - mountPath: /data/projects/fate/eggroll/conf/eggroll.properties + name: eggroll-confs + subPath: eggroll.properties + {{- end }} + - name: python-data + mountPath: /data/projects/fate/fateflow/logs + subPath: logs + - mountPath: /data/projects/fate/conf-tmp/ + name: python-confs + - mountPath: /data/projects/spark-2.4.1-bin-hadoop2.7/conf/spark-defaults-template.conf + name: python-confs + subPath: spark-defaults.conf + {{- if eq .Values.modules.python.backend "spark_rabbitmq" }} + - mountPath: /data/projects/fate/conf/rabbitmq_route_table + name: rabbitmq-route-table + {{- end }} + {{- if eq .Values.modules.python.backend "spark_pulsar" "spark_local_pulsar" }} + - mountPath: /data/projects/fate/conf/pulsar_route_table + name: pulsar-route-table + {{- end }} + # TODO add mountPath of job and model-cache + - mountPath: /data/projects/fate/jobs + name: python-data + subPath: jobs + - mountPath: /data/projects/fate/model_local_cache + name: python-data + subPath: model-local-cache + {{- if .Values.modules.fateboard.include }} + - image: {{ .Values.image.registry }}/fateboard:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + name: fateboard + ports: + - containerPort: 8080 + livenessProbe: + httpGet: + path: / + port: 8080 + httpHeaders: + - name: X-Custom-Header + value: livenessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + httpGet: + path: / + port: 8080 + httpHeaders: + - name: X-Custom-Header + value: readinessProbe + initialDelaySeconds: 1 + periodSeconds: 10 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + httpGet: + path: / + port: 8080 + httpHeaders: + - name: X-Custom-Header + value: startupProbe + failureThreshold: 12 + periodSeconds: 10 + volumeMounts: + - mountPath: /data/projects/fate/fateboard/conf/application.properties + name: fateboard-confs + subPath: application.properties + - name: python-data + mountPath: /data/projects/fate/fateflow/logs + subPath: logs + {{- end }} + {{- with .Values.modules.python.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.python.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.modules.python.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.image.imagePullSecrets }} + imagePullSecrets: +{{ toYaml . | indent 6 }} + {{- end }} + {{- if .Values.modules.python.serviceAccountName }} + serviceAccountName: {{ .Values.modules.python.serviceAccountName }} + {{- else }} + serviceAccountName: {{ template "serviceAccountName" . }} + {{- end }} + restartPolicy: Always + volumes: + {{- if eq .Values.modules.python.backend "eggroll" }} + - name: eggroll-confs + configMap: + name: eggroll-config + {{- end }} + - name: python-confs + configMap: + name: python-config + {{- if eq .Values.modules.python.backend "spark_rabbitmq" }} + - name: rabbitmq-route-table + configMap: + name: rabbitmq-route-table + {{- end }} + {{- if eq .Values.modules.python.backend "spark_pulsar" "spark_local_pulsar" }} + - name: pulsar-route-table + configMap: + name: pulsar-route-table + {{- end }} + {{- if .Values.modules.fateboard.include }} + - name: fateboard-confs + configMap: + name: fateboard-config + {{- end }} + {{- if not .Values.persistence.enabled }} + - name: python-data + emptyDir: {} + {{- else }} + - name: python-data + persistentVolumeClaim: + claimName: {{ .Values.modules.python.existingClaim | default "python-data" }} + {{- end }} + +{{ end }} diff --git a/helm-charts/FATE/templates/hdfs-nn.yaml b/helm-charts/FATE/templates/hdfs-nn.yaml deleted file mode 100644 index b446c75c6..000000000 --- a/helm-charts/FATE/templates/hdfs-nn.yaml +++ /dev/null @@ -1,209 +0,0 @@ -# Copyright 2019-2020 VMware, Inc. -# Licensed 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.modules.hdfs.include }} -kind: ConfigMap -apiVersion: v1 -metadata: - name: namenode-config - labels: - fateMoudle: namenode -{{ include "fate.labels" . | indent 4 }} -data: - core-site.xml: | - - - fs.default.name - hdfs://0.0.0.0:9000 - - ---- -kind: ConfigMap -apiVersion: v1 -metadata: - name: namenode-env - labels: - fateMoudle: namenode -{{ include "fate.labels" . | indent 4 }} -data: - CORE_CONF_fs_defaultFS: "hdfs://namenode:9000" - CORE_CONF_hadoop_http_staticuser_user: "root" - CORE_CONF_hadoop_proxyuser_hue_hosts: "*" - CORE_CONF_hadoop_proxyuser_hue_groups: "*" - CORE_CONF_io_compression_codecs: org.apache.hadoop.io.compress.SnappyCodec - HDFS_CONF_dfs_webhdfs_enabled: 'true' - HDFS_CONF_dfs_permissions_enabled: 'false' - HDFS_CONF_dfs_namenode_datanode_registration_ip___hostname___check: 'false' - YARN_CONF_yarn_log___aggregation___enable: 'true' - YARN_CONF_yarn_log_server_url: "http://historyserver:8188/applicationhistory/logs/" - YARN_CONF_yarn_resourcemanager_recovery_enabled: 'true' - YARN_CONF_yarn_resourcemanager_store_class: org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore - YARN_CONF_yarn_resourcemanager_scheduler_class: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler - YARN_CONF_yarn_scheduler_capacity_root_default_maximum___allocation___mb: '8192' - YARN_CONF_yarn_scheduler_capacity_root_default_maximum___allocation___vcores: '4' - YARN_CONF_yarn_resourcemanager_fs_state___store_uri: /rmstate - YARN_CONF_yarn_resourcemanager_system___metrics___publisher_enabled: 'true' - YARN_CONF_yarn_resourcemanager_hostname: resourcemanager - YARN_CONF_yarn_resourcemanager_address: resourcemanager:8032 - YARN_CONF_yarn_resourcemanager_scheduler_address: resourcemanager:8030 - YARN_CONF_yarn_resourcemanager_resource__tracker_address: resourcemanager:8031 - YARN_CONF_yarn_timeline___service_enabled: 'true' - YARN_CONF_yarn_timeline___service_generic___application___history_enabled: 'true' - YARN_CONF_yarn_timeline___service_hostname: historyserver - YARN_CONF_mapreduce_map_output_compress: 'true' - YARN_CONF_mapred_map_output_compress_codec: org.apache.hadoopac.io.compress.SnappyCodec - YARN_CONF_yarn_nodemanager_resource_memory___mb: '16384' - YARN_CONF_yarn_nodemanager_resource_cpu___vcores: '8' - YARN_CONF_yarn_nodemanager_disk___health___checker_max___disk___utilization___per___disk___percentage: '98.5' - YARN_CONF_yarn_nodemanager_remote___app___log___dir: /app-logs - YARN_CONF_yarn_nodemanager_aux___services: mapreduce_shuffle - MAPRED_CONF_mapreduce_framework_name: yarn - MAPRED_CONF_mapred_child_java_opts: '-Xmx4096m' - MAPRED_CONF_mapreduce_map_memory_mb: '4096' - MAPRED_CONF_mapreduce_reduce_memory_mb: '8192' - MAPRED_CONF_mapreduce_map_java_opts: '-Xmx3072m' - MAPRED_CONF_mapreduce_reduce_java_opts: '-Xmx6144m' - MAPRED_CONF_yarn_app_mapreduce_am_env: HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/ - MAPRED_CONF_mapreduce_map_env: HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/ - MAPRED_CONF_mapreduce_reduce_env: HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: namenode - labels: - fateMoudle: namenode -{{ include "fate.labels" . | indent 4 }} -spec: - replicas: 1 - strategy: - type: Recreate - selector: - matchLabels: - fateMoudle: namenode -{{ include "fate.matchLabels" . | indent 6 }} - template: - metadata: - labels: - fateMoudle: namenode -{{ include "fate.labels" . | indent 8 }} - spec: - {{ if .Values.persistence.enabled }} - initContainers: - - name: delete-lost-found - image: busybox - command: ["sh", "-c", "rm -rf /hadoop/dfs/name/lost+found"] - volumeMounts: - - name: dfs - mountPath: /hadoop/dfs/name - {{ end }} - containers: - - name: namenode - image: {{ .Values.image.registry }}/hadoop-namenode:2.0.0-hadoop2.7.4-java8 - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: CLUSTER_NAME - value: fate - envFrom: - - configMapRef: - name: namenode-env - ports: - - containerPort: 9000 - - containerPort: 9870 - - containerPort: 50070 - volumeMounts: - - mountPath: /etc/hadoop/core-site.xml - subPath: core-site.xml - name: namenode-confs - - name: dfs - mountPath: /hadoop/dfs/name - {{- with .Values.modules.hdfs.namenode.nodeSelector }} - nodeSelector: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.hdfs.namenode.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.hdfs.namenode.affinity }} - affinity: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.image.imagePullSecrets }} - imagePullSecrets: -{{ toYaml . | indent 6 }} - {{- end }} - serviceAccountName: {{ template "serviceAccountName" . }} - restartPolicy: Always - volumes: - - name: namenode-confs - configMap: - name: namenode-config - - name: dfs - {{ if .Values.persistence.enabled }} - persistentVolumeClaim: - claimName: {{ .Values.modules.hdfs.namenode.existingClaim | default "namenode-data" }} - {{ else }} - emptyDir: {} - {{ end }} ---- -apiVersion: v1 -kind: Service -metadata: - name: namenode - labels: - fateMoudle: namenode -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-9000" - port: 9000 - targetPort: 9000 - protocol: TCP - {{- if eq .Values.modules.hdfs.namenode.type "NodePort" "LoadBalancer" }} - nodePort: {{ .Values.modules.hdfs.namenode.nodePort }} - {{- end }} - - name: "tcp-9870" - port: 9870 - targetPort: 9870 - protocol: TCP - - name: "tcp-50070" - port: 50070 - targetPort: 50070 - protocol: TCP - type: {{ .Values.modules.hdfs.namenode.type }} - selector: - fateMoudle: namenode -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{ if and .Values.persistence.enabled (not .Values.modules.hdfs.namenode.existingClaim) }} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: namenode-data - labels: - fateMoudle: namenode -{{ include "fate.labels" . | indent 4 }} -spec: - accessModes: - - {{ .Values.modules.hdfs.namenode.accessMode }} - resources: - requests: - storage: {{ .Values.modules.hdfs.namenode.size }} - {{ if .Values.modules.hdfs.namenode.storageClass }} - {{ if eq "-" .Values.modules.hdfs.namenode.storageClass }} - storageClassName: "" - {{ else }} - storageClassName: {{ .Values.modules.hdfs.namenode.storageClass }} - {{ end }} - {{ end }} -{{ end }} -{{ end }} diff --git a/helm-charts/FATE/templates/ingress.yaml b/helm-charts/FATE/templates/ingress.yaml deleted file mode 100644 index 12ca27e22..000000000 --- a/helm-charts/FATE/templates/ingress.yaml +++ /dev/null @@ -1,177 +0,0 @@ -# Copyright 2019-2020 VMware, Inc. -# Licensed 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.istio.enabled }} -{{ else }} -{{ if .Values.modules.fateboard.include }} -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: fateboard - labels: - fateMoudle: fateboard -{{ include "fate.labels" . | indent 4 }} -{{- if .Values.ingress.fateboard.annotations }} - annotations: -{{ toYaml .Values.ingress.fateboard.annotations | indent 4 }} -{{- end }} -spec: - rules: - {{- range .Values.ingress.fateboard.hosts }} - - host: {{ .name }} - http: - paths: - - path: {{ default "/" .path }} - pathType: Prefix - backend: - service: - name: fateboard - port: - number: 8080 - {{- end }} -{{- if .Values.ingress.fateboard.tls }} - tls: -{{ toYaml .Values.ingress.fateboard.tls | indent 4 }} -{{- end }} ---- -{{ end }} - -{{ if .Values.modules.client.include }} -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: client - labels: - fateMoudle: client -{{ include "fate.labels" . | indent 4 }} -{{- if .Values.ingress.client.annotations }} - annotations: -{{ toYaml .Values.ingress.client.annotations | indent 4 }} -{{- end }} -spec: - rules: - {{- range .Values.ingress.client.hosts }} - - host: {{ .name }} - http: - paths: - - path: {{ default "/" .path }} - pathType: Prefix - backend: - service: - name: notebook - port: - number: 20000 - {{- end }} -{{- if .Values.ingress.client.tls }} - tls: -{{ toYaml .Values.ingress.client.tls | indent 4 }} -{{- end }} ---- -{{ end }} - -{{ if .Values.modules.spark.include }} -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: spark - labels: - fateMoudle: spark -{{ include "fate.labels" . | indent 4 }} -{{- if .Values.ingress.spark.annotations }} - annotations: -{{ toYaml .Values.ingress.spark.annotations | indent 4 }} -{{- end }} -spec: - rules: - {{- range .Values.ingress.spark.hosts }} - - host: {{ .name }} - http: - paths: - - path: {{ default "/" .path }} - pathType: Prefix - backend: - service: - name: spark-master - port: - number: 8080 - {{- end }} -{{- if .Values.ingress.spark.tls }} - tls: -{{ toYaml .Values.ingress.spark.tls | indent 4 }} -{{- end }} ---- -{{ end }} - -{{ if .Values.modules.rabbitmq.include }} -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: rabbitmq - labels: - fateMoudle: rabbitmq -{{ include "fate.labels" . | indent 4 }} -{{- if .Values.ingress.rabbitmq.annotations }} - annotations: -{{ toYaml .Values.ingress.rabbitmq.annotations | indent 4 }} -{{- end }} -spec: - rules: - {{- range .Values.ingress.rabbitmq.hosts }} - - host: {{ .name }} - http: - paths: - - path: {{ default "/" .path }} - pathType: Prefix - backend: - service: - name: rabbitmq - port: - number: 15672 - {{- end }} -{{- if .Values.ingress.rabbitmq.tls }} - tls: -{{ toYaml .Values.ingress.rabbitmq.tls | indent 4 }} -{{- end }} ---- -{{ end }} - -{{ if .Values.modules.pulsar.include }} -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: pulsar - labels: - fateMoudle: pulsar -{{ include "fate.labels" . | indent 4 }} -{{- if .Values.ingress.pulsar.annotations }} - annotations: -{{ toYaml .Values.ingress.pulsar.annotations | indent 4 }} -{{- end }} -spec: - rules: - {{- range .Values.ingress.pulsar.hosts }} - - host: {{ .name }} - http: - paths: - - path: {{ default "/" .path }} - pathType: Prefix - backend: - service: - name: pulsar - port: - number: 8080 - {{- end }} -{{- if .Values.ingress.pulsar.tls }} - tls: -{{ toYaml .Values.ingress.pulsar.tls | indent 4 }} -{{- end }} ---- -{{ end }} -{{ end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/nodemanager-module.yaml b/helm-charts/FATE/templates/nodemanager-module.yaml deleted file mode 100644 index a8536821e..000000000 --- a/helm-charts/FATE/templates/nodemanager-module.yaml +++ /dev/null @@ -1,250 +0,0 @@ -# Copyright 2019-2020 VMware, Inc. -# Licensed 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.modules.nodemanager.include }} -{{- $root := . -}} -{{- range $nodemanager := .Values.modules.nodemanager.list }} -kind: ConfigMap -apiVersion: v1 -metadata: - name: {{ $nodemanager.name }}-config - labels: - fateMoudle: {{ $nodemanager.name }} -{{ include "fate.labels" $root | indent 4 }} -data: - eggroll.properties: | - [eggroll] - eggroll.resourcemanager.clustermanager.jdbc.driver.class.name=com.mysql.cj.jdbc.Driver - eggroll.resourcemanager.clustermanager.jdbc.url=jdbc:mysql://{{ $root.Values.modules.mysql.ip }}:{{ $root.Values.modules.mysql.port }}/{{ $root.Values.modules.mysql.mysql_database }}?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true - eggroll.resourcemanager.clustermanager.jdbc.username={{ $root.Values.modules.mysql.mysql_user }} - eggroll.resourcemanager.clustermanager.jdbc.password={{ $root.Values.modules.mysql.mysql_password }} - - eggroll.data.dir=data/ - eggroll.logs.dir=logs/ - eggroll.resourcemanager.clustermanager.host=clustermanager - eggroll.resourcemanager.clustermanager.port=4670 - eggroll.resourcemanager.nodemanager.port=4671 - eggroll.resourcemanager.process.tag={{ $root.Values.partyId }} - - eggroll.bootstrap.root.script=bin/eggroll_boot.sh - - eggroll.resourcemanager.bootstrap.egg_pair.exepath=bin/roll_pair/egg_pair_bootstrap.sh - eggroll.resourcemanager.bootstrap.egg_pair.venv= - eggroll.resourcemanager.bootstrap.egg_pair.pythonpath=/data/projects/fate/python:/data/projects/fate/eggroll/python - eggroll.resourcemanager.bootstrap.egg_pair.filepath=python/eggroll/roll_pair/egg_pair.py - eggroll.resourcemanager.bootstrap.egg_pair.ld_library_path= - - eggroll.resourcemanager.bootstrap.egg_frame.exepath=bin/roll_pair/roll_pair_master_bootstrap.sh - eggroll.resourcemanager.bootstrap.egg_frame.javahome=/usr/lib/jvm/java-1.8.0-openjdk - eggroll.resourcemanager.bootstrap.egg_frame.classpath=conf/:lib/* - eggroll.resourcemanager.bootstrap.egg_frame.mainclass=com.webank.eggroll.rollframe.EggFrameBootstrap - eggroll.resourcemanager.bootstrap.egg_frame.jvm.options= - - eggroll.core.grpc.channel.keepalive.timeout.sec=20 - - # roll_frame - arrow.enable_unsafe_memory_access=true - - # hadoop - hadoop.fs.defaultFS=file:/// - - # hadoop HA mode - hadoop.dfs.nameservices= - hadoop.dfs.namenode.rpc-address.nn1= - hadoop.dfs.namenode.rpc-address.nn2= - - # session - eggroll.session.processors.per.node={{ $nodemanager.sessionProcessorsPerNode }} - eggroll.session.start.timeout.ms=180000 - - # rollpair - eggroll.rollpair.transferpair.sendbuf.size=250000 - - # rollsite - eggroll.rollsite.coordinator={{ $root.Values.partyName }} - eggroll.rollsite.host=rollsite - eggroll.rollsite.port=9370 - eggroll.rollsite.party.id={{ $root.Values.partyId }} - eggroll.rollsite.route.table.path=conf/route_table/route_table.json - eggroll.rollsite.route.table.key= - eggroll.rollsite.route.table.whitelist=127.0.0.1 - eggroll.rollsite.jvm.options=-XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:logs/eggroll/rollsite.gc.log - - eggroll.rollsite.push.max.retry=3 - eggroll.rollsite.push.long.retry=2 - eggroll.rollsite.push.batches.per.stream=10 - eggroll.rollsite.adapter.sendbuf.size=100000 - fluent.conf: | - - @type tail - path /data/projects/fate/eggroll/logs/*/*.* - exclude_path ["/data/projects/fate/eggroll/logs/eggroll/*", "/data/projects/fate/eggroll/logs/log.pos"] - pos_file /data/projects/fate/eggroll/logs/log.pos - tag eggroll - multiline_flush_interval 2s - refresh_interval 5s - - @type none - - - - - @type stdout - ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ $nodemanager.name }} - labels: - fateMoudle: {{ $nodemanager.name }} - app: nodemanager -{{ include "fate.labels" $root | indent 4 }} -spec: - replicas: 1 - strategy: - type: Recreate - selector: - matchLabels: - fateMoudle: {{ $nodemanager.name }} -{{ include "fate.matchLabels" $root | indent 6 }} - template: - metadata: - labels: - fateMoudle: {{ $nodemanager.name }} - app: nodemanager -{{ include "fate.labels" $root | indent 8 }} - spec: - containers: - - name: {{ $nodemanager.name }}-eggrollpair - {{- if $root.Values.image.isThridParty }} - image: {{ $root.Values.image.registry }}/fluentd:v1.12 - {{- else }} - image: fluent/fluentd:v1.12 - {{- end }} - volumeMounts: - - name: eggroll-log - mountPath: /data/projects/fate/eggroll/logs/ - - name: fluentd-conf - subPath: fluent.conf - mountPath: /fluentd/etc/fluent.conf - - image: {{ $root.Values.image.registry }}/eggroll:{{ $root.Values.image.tag }} - imagePullPolicy: {{ $root.Values.image.pullPolicy }} - name: {{ $nodemanager.name }} - command: - - bash - - -c - - | - set -x - mkdir -p /data/projects/fate/eggroll/logs/eggroll/ - touch /data/projects/fate/eggroll/logs/eggroll/eggroll-audit.log - ln -sf /dev/stdout /data/projects/fate/eggroll/logs/eggroll/eggroll-audit.log - touch /data/projects/fate/eggroll/logs/eggroll/eggroll.jvm.log - ln -sf /dev/stdout /data/projects/fate/eggroll/logs/eggroll/eggroll.jvm.log - touch /data/projects/fate/eggroll/logs/eggroll/eggroll.jvm.err.log - ln -sf /dev/stderr /data/projects/fate/eggroll/logs/eggroll/eggroll.jvm.err.log - /tini -- java -Dlog4j.configurationFile=$${EGGROLL_HOME}/conf/log4j2.properties -cp $${EGGROLL_HOME}/lib/*: com.webank.eggroll.core.Bootstrap --bootstraps com.webank.eggroll.core.resourcemanager.NodeManagerBootstrap -c $${EGGROLL_HOME}/conf/eggroll.properties -p 4671 -s 'EGGROLL_DEAMON' - ports: - - containerPort: 4671 - volumeMounts: - - name: eggroll-log - mountPath: /data/projects/fate/eggroll/logs/ - - mountPath: /data/projects/fate/eggroll/conf/eggroll.properties - name: nodemanager-confs - subPath: eggroll.properties - - mountPath: /data/projects/fate/fate/conf/ - name: python-confs - - name: data-dir - mountPath: /data/projects/fate/eggroll/data - subPath: {{ $nodemanager.subPath }} - {{- with $nodemanager.nodeSelector }} - nodeSelector: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with $nodemanager.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with $nodemanager.affinity }} - affinity: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with $root.Values.image.imagePullSecrets }} - imagePullSecrets: -{{ toYaml . | indent 6 }} - {{- end }} - serviceAccountName: {{ template "serviceAccountName" $root }} - restartPolicy: Always - volumes: - - name: eggroll-log - emptyDir: {} - - name: fluentd-conf - configMap: - name: {{ $nodemanager.name }}-config - - name: nodemanager-confs - configMap: - name: {{ $nodemanager.name }}-config - - name: python-confs - configMap: - name: python-config - {{- if not $root.Values.persistence.enabled }} - - name: data-dir - emptyDir: {} - {{- else }} - - name: data-dir - persistentVolumeClaim: - claimName: {{ $nodemanager.existingClaim | default (printf "%s-data" $nodemanager.name) }} - {{- end }} ---- -apiVersion: v1 -kind: Service -metadata: - labels: - fateMoudle: {{ $nodemanager.name }} -{{ include "fate.labels" $root | indent 4 }} - name: {{ $nodemanager.name }} -spec: - ports: - - name: "tcp-nodemanager" - port: 4671 - targetPort: 4671 - protocol: TCP - clusterIP: None - selector: - fateMoudle: {{ $nodemanager.name }} -{{ include "fate.matchLabels" $root | indent 4 }} ---- -{{- if and $root.Values.persistence.enabled (not $nodemanager.existingClaim) }} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: {{ $nodemanager.name }}-data - labels: - fateMoudle: {{ $nodemanager.name }} -{{ include "fate.labels" $root | indent 4 }} -spec: - accessModes: - - {{ $nodemanager.accessMode }} - resources: - requests: - storage: {{ $nodemanager.size }} - {{- if $nodemanager.storageClass }} - {{- if eq "-" $nodemanager.storageClass }} - storageClassName: "" - {{- else }} - storageClassName: {{ $nodemanager.storageClass }} - {{- end }} - {{- end }} -{{- end }} - ---- -{{- end }} -{{- end }} \ No newline at end of file diff --git a/helm-charts/FATE/templates/psp.yaml b/helm-charts/FATE/templates/psp.yaml index fbd76dc5a..30c3dfb3c 100644 --- a/helm-charts/FATE/templates/psp.yaml +++ b/helm-charts/FATE/templates/psp.yaml @@ -1,3 +1,14 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.podSecurityPolicy.enabled -}} apiVersion: policy/v1beta1 kind: PodSecurityPolicy diff --git a/helm-charts/FATE/templates/python-spark.yaml b/helm-charts/FATE/templates/python-spark.yaml deleted file mode 100644 index 12e0125dd..000000000 --- a/helm-charts/FATE/templates/python-spark.yaml +++ /dev/null @@ -1,670 +0,0 @@ -# Copyright 2019-2020 VMware, Inc. -# Licensed 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.modules.python.include }} -kind: ConfigMap -apiVersion: v1 -metadata: - name: python-config - labels: - fateMoudle: python -{{ include "fate.labels" . | indent 4 }} -data: - spark-defaults.conf: | - spark.master {{ if eq .Values.modules.python.backend "spark_local_pulsar" }}local[*]{{ else }}{{ .Values.modules.python.spark.master | default "spark://spark-master:7077"}}{{ end }} - spark.driver.host {{ .Values.modules.python.spark.driverHost | default "fateflow" }} - {{- if .Values.modules.python.spark.driverStartPort }} - spark.driver.port {{ .Values.modules.python.spark.driverStartPort }} - {{- end }} - - {{- if .Values.modules.python.spark.portMaxRetries }} - spark.port.maxRetries {{ .Values.modules.python.spark.portMaxRetries }} - {{- end }} - - {{- if .Values.modules.python.spark.blockManagerStartPort }} - spark.blockManager.port {{ .Values.modules.python.spark.blockManagerStartPort }} - {{- end }} - - {{- if .Values.modules.python.spark.blockManagerStartPort }} - spark.driver.bindAddress 0.0.0.0 - {{- end }} - - {{- if .Values.modules.python.spark.pysparkPython }} - spark.pyspark.python {{ .Values.modules.python.spark.pysparkPython }} - spark.pyspark.driver.python python - {{- end }} - service_conf.yaml: | - use_registry: {{ .Values.modules.serving.useRegistry | default false }} - use_deserialize_safe_module: false - dependent_distribution: false - encrypt_password: false - encrypt_module: fate_arch.common.encrypt_utils#pwdecrypt - private_key: - fateflow: - # you must set real ip address, 127.0.0.1 and 0.0.0.0 is not supported - host: {{ if .Values.istio.enabled }}127.0.0.1{{ else }}fateflow{{ end }} - http_port: 9380 - grpc_port: 9360 - # http_app_key: - # http_secret_key: - # support rollsite/nginx/fateflow as a coordination proxy - # rollsite support fate on eggroll, use grpc protocol - # nginx support fate on eggroll and fate on spark, use http or grpc protocol, default is http - # fateflow support fate on eggroll and fate on spark, use http protocol, but not support exchange network mode - - # format(proxy: rollsite) means rollsite use the rollsite configuration of fate_one_eggroll and nginx use the nginx configuration of fate_one_spark - # you also can customize the config like this(set fateflow of the opposite party as proxy): - # proxy: - # name: fateflow - # host: xx - # http_port: xx - # grpc_port: xx - {{- if eq .Values.modules.python.backend "spark_pulsar" "spark_rabbitmq" "spark_local_pulsar" }} - proxy: nginx - {{- else }} - proxy: rollsite - {{- end }} - # support default/http/grpc - protocol: default - # It can also be specified in the job configuration using the federated_status_collect_type parameter - default_federated_status_collect_type: PULL - database: - name: '{{ .Values.externalMysqlDatabase | default .Values.modules.mysql.database | default "eggroll_meta" }}' - user: '{{ .Values.externalMysqlUser | default .Values.modules.mysql.user | default "fate" }}' - passwd: '{{ .Values.externalMysqlPassword | default .Values.modules.mysql.password | default "fate_dev" }}' - host: '{{ .Values.externalMysqlIp | default .Values.modules.mysql.ip | default "mysql" }}' - port: {{ .Values.externalMysqlPort | default .Values.modules.mysql.port | default "3306" }} - max_connections: 100 - stale_timeout: 30 - zookeeper: - hosts: - - "serving-zookeeper:2181" - # use_acl: false - # user: fate - # password: fate - # engine services - default_engines: - {{- if eq .Values.modules.python.backend "spark_pulsar" }} - computing: spark - federation: pulsar - storage: hdfs - {{- else if eq .Values.modules.python.backend "spark_rabbitmq" }} - computing: spark - federation: rabbitmq - storage: hdfs - {{- else if eq .Values.modules.python.backend "spark_local_pulsar" }} - computing: spark - federation: pulsar - storage: localfs - {{- else }} - computing: eggroll - federation: eggroll - storage: eggroll - {{- end }} - fate_on_standalone: - standalone: - cores_per_node: 20 - nodes: 1 - fate_on_eggroll: - clustermanager: - cores_per_node: {{ .Values.modules.python.clustermanager.cores_per_node | default 16 }} - nodes: {{ .Values.modules.python.clustermanager.nodes | default 2 }} - rollsite: - host: {{ .Values.modules.rollsite.ip }} - port: 9370 - fate_on_spark: - spark: - # default use SPARK_HOME environment variable - home: /data/projects/spark-2.4.1-bin-hadoop2.7/ - cores_per_node: {{ .Values.modules.python.spark.cores_per_node }} - nodes: {{ .Values.modules.python.spark.nodes }} - linkis_spark: - cores_per_node: 20 - nodes: 2 - host: 127.0.0.1 - port: 9001 - token_code: MLSS - python_path: /data/projects/fate/python - hive: - host: 127.0.0.1 - port: 10000 - auth_mechanism: - username: - password: - linkis_hive: - host: 127.0.0.1 - port: 9001 - hdfs: - name_node: {{ .Values.modules.python.hdfs.name_node | default "hdfs://namenode:9000" }} - # default / - path_prefix: {{ .Values.modules.python.hdfs.path_prefix }} - rabbitmq: - host: {{ .Values.modules.python.rabbitmq.host }} - mng_port: {{ .Values.modules.python.rabbitmq.mng_port }} - port: {{ .Values.modules.python.rabbitmq.port }} - user: {{ .Values.modules.python.rabbitmq.user }} - password: {{ .Values.modules.python.rabbitmq.password }} - # default conf/rabbitmq_route_table.yaml - route_table: conf/rabbitmq_route_table/rabbitmq_route_table.yaml - pulsar: - host: {{ .Values.modules.python.pulsar.host }} - port: {{ .Values.modules.python.pulsar.port }} - mng_port: {{ .Values.modules.python.pulsar.mng_port }} - topic_ttl: 3 - # default conf/pulsar_route_table.yaml - route_table: conf/pulsar_route_table/pulsar_route_table.yaml - nginx: - host: {{ .Values.modules.python.nginx.host }} - http_port: {{ .Values.modules.python.nginx.http_port }} - grpc_port: {{ .Values.modules.python.nginx.grpc_port }} - fateboard: - host: fateboard - port: 8080 - # on API `/model/load` and `/model/load/do` - # automatic upload models to the model store if it exists locally but does not exist in the model storage - # or download models from the model store if it does not exist locally but exists in the model storage - # this config will not affect API `/model/store` or `/model/restore` - enable_model_store: false - model_store_address: - storage: mysql - name: {{ .Values.externalMysqlDatabase | default .Values.modules.mysql.database | default "eggroll_meta" }} - host: '{{ .Values.externalMysqlIp | default .Values.modules.mysql.ip | default "mysql" }}' - port: {{ .Values.externalMysqlPort | default .Values.modules.mysql.port | default "3306" }} - user: '{{ .Values.externalMysqlUser | default .Values.modules.mysql.user | default "fate" }}' - passwd: '{{ .Values.externalMysqlPassword | default .Values.modules.mysql.password | default "fate_dev" }}' - max_connections: 10 - stale_timeout: 10 - {{- with .Values.modules.serving }} - servings: - hosts: - {{- if and .ip .port}} - - '{{ .ip }}:{{ .port }}' - {{- else }} - - '' - {{- end }} - {{- if and .useRegistry .zookeeper }} - zookeeper: -{{ toYaml .zookeeper | indent 6 }} - {{- end }} - {{- end }} - transfer_conf.yaml: | - paths: # dir or path - - "python/federatedml/transfer_variable/auth_conf" - component_registry.json: | - { - "components": { - }, - "providers": { - }, - "default_settings": { - "fate_flow":{ - "default_version_key": "FATEFlow" - }, - "fate": { - "default_version_key": "FATE" - }, - "class_path": { - "interface": "components.components.Components", - "feature_instance": "feature.instance.Instance", - "feature_vector": "feature.sparse_vector.SparseVector", - "model": "protobuf.generated", - "model_migrate": "protobuf.model_migrate.model_migrate", - "homo_model_convert": "protobuf.homo_model_convert.homo_model_convert" - } - } - } - job_default_config.yaml: | - # component provider, relative path to get_fate_python_directory - default_component_provider_path: federatedml - - # resource - total_cores_overweight_percent: 1 # 1 means no overweight - total_memory_overweight_percent: 1 # 1 means no overweight - task_parallelism: 1 - task_cores: 4 - task_memory: 0 # mb - max_cores_percent_per_job: 1 # 1 means total - - # scheduling - job_timeout: 259200 # s - remote_request_timeout: 30000 # ms - federated_command_trys: 3 - end_status_job_scheduling_time_limit: 300000 # ms - end_status_job_scheduling_updates: 1 - auto_retries: 0 - auto_retry_delay: 1 #seconds - # It can also be specified in the job configuration using the federated_status_collect_type parameter - federated_status_collect_type: PUSH - - # upload - upload_max_bytes: 4194304000 # bytes - - #component output - output_data_summary_count_limit: 100 ---- -kind: ConfigMap -apiVersion: v1 -metadata: - name: fateboard-config - labels: - fateMoudle: fateboard -{{ include "fate.labels" . | indent 4 }} -data: - application.properties: | - server.port=8080 - fateflow.url=http://{{ if .Values.istio.enabled }}127.0.0.1{{ else }}fateflow{{ end }}:9380 - spring.datasource.driver-Class-Name=com.mysql.cj.jdbc.Driver - spring.http.encoding.charset=UTF-8 - spring.http.encoding.enabled=true - server.tomcat.uri-encoding=UTF-8 - fateboard.datasource.jdbc-url=jdbc:mysql://{{ .Values.externalMysqlIp | default .Values.modules.mysql.ip | default "mysql" }}:{{ .Values.externalMysqlPort | default .Values.modules.mysql.port | default "3306" }}/{{ .Values.externalMysqlDatabase | default .Values.modules.mysql.database | default "eggroll_meta" }}?characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8 - fateboard.datasource.username={{ .Values.externalMysqlUser | default .Values.modules.mysql.user | default "fate" }} - fateboard.datasource.password={{ .Values.externalMysqlPassword | default .Values.modules.mysql.password | default "fate_dev" }} - server.tomcat.max-threads=1000 - server.tomcat.max-connections=20000 - spring.servlet.multipart.max-file-size=10MB - spring.servlet.multipart.max-request-size=100MB - spring.datasource.druid.filter.config.enabled=false - spring.datasource.druid.web-stat-filter.enabled=false - spring.datasource.druid.stat-view-servlet.enabled=false - server.compression.enabled=true - server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain - server.board.login.username={{ .Values.modules.fateboard.username }} - server.board.login.password={{ .Values.modules.fateboard.password }} - #server.ssl.key-store=classpath: - #server.ssl.key-store-password= - #server.ssl.key-password= - #server.ssl.key-alias= - spring.session.store-type=jdbc - spring.session.jdbc.initialize-schema=always - #HTTP_APP_KEY= - #HTTP_SECRET_KEY= ---- -kind: ConfigMap -apiVersion: v1 -metadata: - name: pulsar-route-table - labels: - fateMoudle: python -{{ include "fate.labels" . | indent 4 }} -data: - pulsar_route_table.yaml: | - {{- with .Values.modules.pulsar.exchange }} - default: - proxy: "{{ .ip }}:{{ .port }}" - domain: "{{ .domain }}" - {{- end }} -{{- if .Values.modules.pulsar.route_table }} -{{- range $key, $val := .Values.modules.pulsar.route_table }} - {{ $key }}: -{{ toYaml . | indent 6 }} -{{- end }} -{{- else }} - {{ .Values.partyId }}: - host: pulsar - port: 6650 - sslPort: 6651 - proxy: "" -{{- end}} ---- -kind: ConfigMap -apiVersion: v1 -metadata: - name: rabbitmq-route-table - labels: - fateMoudle: python -{{ include "fate.labels" . | indent 4 }} -data: - rabbitmq_route_table.yaml: | -{{- if .Values.modules.rabbitmq.route_table }} -{{- range $key, $val := .Values.modules.rabbitmq.route_table }} - {{ $key }}: -{{ toYaml . | indent 6 }} -{{- end }} -{{- else }} - {{ .Values.partyId }}: - host: rabbitmq - port: 5672 -{{- end}} ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: python - labels: - fateMoudle: python -{{ include "fate.labels" . | indent 4 }} -spec: - replicas: 1 - strategy: - type: Recreate - selector: - matchLabels: - fateMoudle: python -{{ include "fate.matchLabels" . | indent 6 }} - template: - metadata: - labels: - fateMoudle: python -{{ include "fate.labels" . | indent 8 }} - spec: - {{- if .Values.istio.enabled }} - {{- else }} - initContainers: - {{- if .Values.image.isThridParty }} - - image: {{ .Values.image.registry }}/mysql:8 - {{- else }} - - image: mysql:8 - {{- end }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - name: ping-mysql - env: - - name: MYSQL_DATABASE - value: "{{ .Values.externalMysqlDatabase | default .Values.modules.mysql.database | default "eggroll_meta" }}" - - name: MYSQL_USER - value: "{{ .Values.externalMysqlUser | default .Values.modules.mysql.user | default "fate" }}" - - name: MYSQL_PASSWORD - value: "{{ .Values.externalMysqlPassword | default .Values.modules.mysql.password | default "fate_dev" }}" - - name: MYSQL_HOST - value: "{{ .Values.externalMysqlIp | default .Values.modules.mysql.ip | default "mysql" }}" - - name: MYSQL_PORT - value: "{{ .Values.externalMysqlPort | default .Values.modules.mysql.port | default "3306" | }}" - command: - - /bin/bash - - -c - - | - set -x - function checkMySQL(){ - checkMySQLCount=0 - while true ; do - checkMySQLCount=$[checkMySQLCount+1] - echo "Waiting for mysql started. check count: $checkMySQLCount" - sleep 2 - - state=`mysqladmin ping -h ${MYSQL_HOST} --port=${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD}| awk '{print $3}'` - if [ "$state" == "alive" ]; then - echo "mysql server has been already started." - break - fi - done - } - echo "Waiting for mysql started..." - checkMySQL - {{- end }} - containers: - - name: python - {{- if eq .Values.modules.python.backend "spark_pulsar" "spark_rabbitmq" "spark_local_pulsar" }} - image: {{ .Values.image.registry }}/python-spark:{{ .Values.image.tag }} - {{- else }} - image: {{ .Values.image.registry }}/{{ if .Values.modules.python.enabledNN }}python-nn{{ else }}python{{ end }}:{{ .Values.image.tag }} - {{- end }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - {{- if .Values.modules.python.resources}} - resources: - {{- range $key, $val := .Values.modules.python.resources }} - {{ $key }}: -{{ toYaml $val | indent 14 }} - {{- end }} - {{- end }} - env: - - name: POD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP - - name: FATE_LOG_LEVEL - value: {{ .Values.modules.python.logLevel }} - - name: PYTHONPATH - value: "$PYTHONPATH:/data/projects/fate/fate/python:/data/projects/fate/eggroll/python:/data/projects/fate/fateflow/python:/data/projects/fate/fate/python/fate_client" - - name: FATE_PROJECT_BASE - value: "/data/projects/fate" - {{- if eq .Values.modules.python.backend "spark_pulsar" "spark_rabbitmq" }} - - name: FATE_FLOW_UPLOAD_MAX_NUM - value: "1000000" - - name: FATE_FLOW_UPLOAD_MAX_BYTES - value: "104868093952" - {{- end }} - ports: - - containerPort: 9360 - - containerPort: 9380 - command: - - /bin/bash - - -c - - | - set -x - mkdir -p /data/projects/fate/conf/ - cp /data/projects/fate/conf-tmp/transfer_conf.yaml /data/projects/fate/conf/transfer_conf.yaml - cp /data/projects/fate/conf-tmp/service_conf.yaml /data/projects/fate/conf/service_conf.yaml - cp /data/projects/fate/conf-tmp/component_registry.json /data/projects/fate/conf/component_registry.json - cp /data/projects/fate/conf-tmp/job_default_config.yaml /data/projects/fate/conf/job_default_config.yaml - # fix fateflow conf must use IP - sed -i "s/host: fateflow/host: ${POD_IP}/g" /data/projects/fate/conf/service_conf.yaml - - cp /data/projects/spark-2.4.1-bin-hadoop2.7/conf/spark-defaults-template.conf /data/projects/spark-2.4.1-bin-hadoop2.7/conf/spark-defaults.conf - sed -i "s/fateflow/${POD_IP}/g" /data/projects/spark-2.4.1-bin-hadoop2.7/conf/spark-defaults.conf - - sleep 5 && python fateflow/python/fate_flow/fate_flow_server.py - volumeMounts: - - mountPath: /data/projects/fate/eggroll/conf/eggroll.properties - name: eggroll-confs - subPath: eggroll.properties - - name: python-data - mountPath: /data/projects/fate/fateflow/logs - subPath: logs - - mountPath: /data/projects/fate/conf-tmp/ - name: python-confs - - mountPath: /data/projects/spark-2.4.1-bin-hadoop2.7/conf/spark-defaults-template.conf - name: python-confs - subPath: spark-defaults.conf - - mountPath: /data/projects/fate/conf/rabbitmq_route_table - name: rabbitmq-route-table - - mountPath: /data/projects/fate/conf/pulsar_route_table - name: pulsar-route-table - # TODO add mountPath of job and model-cache - - mountPath: /data/projects/fate/jobs - name: python-data - subPath: jobs - - mountPath: /data/projects/fate/model_local_cache - name: python-data - subPath: model-local-cache - {{- if .Values.modules.fateboard.include }} - - image: {{ .Values.image.registry }}/fateboard:{{ .Values.image.tag }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - name: fateboard - ports: - - containerPort: 8080 - volumeMounts: - - mountPath: /data/projects/fate/fateboard/conf/application.properties - name: fateboard-confs - subPath: application.properties - - name: python-data - mountPath: /data/projects/fate/fateflow/logs - subPath: logs - {{- end }} - {{- with .Values.modules.python.nodeSelector }} - nodeSelector: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.python.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.modules.python.affinity }} - affinity: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.image.imagePullSecrets }} - imagePullSecrets: -{{ toYaml . | indent 6 }} - {{- end }} -{{- if .Values.modules.python.serviceAccountName }} - serviceAccountName: {{ .Values.modules.python.serviceAccountName }} -{{- else }} - serviceAccountName: {{ template "serviceAccountName" . }} -{{- end }} - restartPolicy: Always - volumes: - - name: eggroll-confs - configMap: - name: eggroll-config - - name: python-confs - configMap: - name: python-config - - name: rabbitmq-route-table - configMap: - name: rabbitmq-route-table - - name: pulsar-route-table - configMap: - name: pulsar-route-table - - name: fateboard-confs - configMap: - name: fateboard-config - {{- if not .Values.persistence.enabled }} - - name: python-data - emptyDir: {} - {{- else }} - - name: python-data - persistentVolumeClaim: - claimName: {{ .Values.modules.python.existingClaim | default "python-data" }} - {{- end }} ---- -apiVersion: v1 -kind: Service -metadata: - name: fateflow - labels: - fateMoudle: fateflow -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-grpc" - port: 9360 - targetPort: 9360 - protocol: TCP - - name: "tcp-http" - port: 9380 - targetPort: 9380 - protocol: TCP - type: ClusterIP - clusterIP: None - selector: - fateMoudle: python -{{ include "fate.matchLabels" . | indent 4 }} ---- -apiVersion: v1 -kind: Service -metadata: - name: fateflow-client - labels: - fateMoudle: fateflow -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-grpc" - port: 9360 - targetPort: 9360 - {{- if eq .Values.modules.python.type "NodePort" "LoadBalancer" }} - nodePort: {{ .Values.modules.python.grpcNodePort }} - {{- end }} - protocol: TCP - - name: "tcp-http" - port: 9380 - targetPort: 9380 - {{- if eq .Values.modules.python.type "NodePort" "LoadBalancer" }} - nodePort: {{ .Values.modules.python.httpNodePort }} - {{- end }} - protocol: TCP - type: {{ .Values.modules.python.type }} - - {{- if .Values.modules.python.loadBalancerIP }} - loadBalancerIP: "{{ .Values.modules.python.loadBalancerIP }}" - {{- end }} - - selector: - fateMoudle: python -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{- if and .Values.modules.python.spark.portMaxRetries (ne (print .Values.modules.python.spark.driverHost) "fateflow") }} -apiVersion: v1 -kind: Service -metadata: - name: fateflow-sparkdriver - labels: - fateMoudle: python -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - {{ $spark := .Values.modules.python.spark }} - {{- range .Values.modules.python.spark.portMaxRetries | int | until }} - - name: "spark-driver-port-{{ . }}" - port: {{ $spark.driverStartPort | int | add . }} - targetPort: {{ $spark.driverStartPort | int | add . }} - {{- if eq $spark.driverHostType "NodePort" "LoadBalancer" }} - nodePort: {{ $spark.driverStartPort | int | add . }} - {{- end }} - protocol: TCP - - name: "spark-block-manager-port-{{ . }}" - port: {{ $spark.blockManagerStartPort | int | add . }} - targetPort: {{ $spark.blockManagerStartPort | int | add . }} - {{- if eq $spark.driverHostType "NodePort" "LoadBalancer" }} - nodePort: {{ $spark.blockManagerStartPort | int | add . }} - {{- end }} - protocol: TCP - {{- end }} - type: {{ .Values.modules.python.spark.driverHostType }} - selector: - fateMoudle: python -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{- end }} - -{{- if .Values.modules.fateboard.include }} -apiVersion: v1 -kind: Service -metadata: - name: fateboard - labels: - fateMoudle: python -{{ include "fate.labels" . | indent 4 }} -spec: - ports: - - name: "tcp-fateboard" - port: 8080 - targetPort: 8080 - protocol: TCP - type: {{ .Values.modules.fateboard.type }} - selector: - fateMoudle: python -{{ include "fate.matchLabels" . | indent 4 }} ---- -{{- end }} -{{- if and .Values.persistence.enabled (not .Values.modules.python.existingClaim) }} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: python-data - labels: - fateMoudle: python -{{ include "fate.labels" . | indent 4 }} -spec: - accessModes: - - {{ .Values.modules.python.accessMode }} - resources: - requests: - storage: {{ .Values.modules.python.size }} - {{- if .Values.modules.python.storageClass }} - {{- if eq "-" .Values.modules.python.storageClass }} - storageClassName: "" - {{- else }} - storageClassName: {{ .Values.modules.python.storageClass }} - {{- end }} - {{- end }} -{{- end }} -{{ end }} diff --git a/helm-charts/FATE/templates/role.yaml b/helm-charts/FATE/templates/role.yaml index bc32aac6f..aa038761e 100644 --- a/helm-charts/FATE/templates/role.yaml +++ b/helm-charts/FATE/templates/role.yaml @@ -1,3 +1,14 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.podSecurityPolicy.enabled -}} apiVersion: rbac.authorization.k8s.io/v1 kind: Role diff --git a/helm-charts/FATE/templates/rolebinding.yaml b/helm-charts/FATE/templates/rolebinding.yaml index 04cd276aa..217dec72c 100644 --- a/helm-charts/FATE/templates/rolebinding.yaml +++ b/helm-charts/FATE/templates/rolebinding.yaml @@ -1,3 +1,14 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.podSecurityPolicy.enabled -}} apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding diff --git a/helm-charts/FATE/templates/serviceaccount.yaml b/helm-charts/FATE/templates/serviceaccount.yaml index da81ad95a..d03e186c2 100644 --- a/helm-charts/FATE/templates/serviceaccount.yaml +++ b/helm-charts/FATE/templates/serviceaccount.yaml @@ -1,3 +1,14 @@ +# Copyright 2019-2022 VMware, Inc. +# Licensed 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.podSecurityPolicy.enabled -}} apiVersion: v1 kind: ServiceAccount diff --git a/helm-charts/FATE/values-template-example.yaml b/helm-charts/FATE/values-template-example.yaml index d385e2b7a..4362a48d9 100644 --- a/helm-charts/FATE/values-template-example.yaml +++ b/helm-charts/FATE/values-template-example.yaml @@ -1,10 +1,10 @@ name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 9999 registry: "" -imageTag: "1.7.2-release" +imageTag: "1.8.0-release" pullPolicy: imagePullSecrets: - name: myregistrykey @@ -13,6 +13,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - rollsite - clustermanager @@ -31,7 +32,7 @@ modules: backend: eggroll # ingress: - # fateboard: + # fateboard: # annotations: # hosts: # - name: party9999.fateboard.example.com @@ -337,4 +338,3 @@ backend: eggroll # port: 30105 # sslPort: 30109 # proxy: "" - \ No newline at end of file diff --git a/helm-charts/FATE/values-template.yaml b/helm-charts/FATE/values-template.yaml index daf546e67..aba25def6 100644 --- a/helm-charts/FATE/values-template.yaml +++ b/helm-charts/FATE/values-template.yaml @@ -2,7 +2,7 @@ image: registry: {{ .registry | default "federatedai" }} isThridParty: {{ empty .registry | ternary "false" "true" }} - tag: {{ .imageTag | default "1.7.2-release" }} + tag: {{ .imageTag | default "1.8.0-release" }} pullPolicy: {{ .pullPolicy | default "IfNotPresent" }} {{- with .imagePullSecrets }} imagePullSecrets: @@ -17,9 +17,9 @@ partyName: {{ .name }} {{- with .ingress }} ingress: {{- with .fateboard }} - fateboard: + fateboard: {{- with .annotations }} - annotations: + annotations: {{ toYaml . | indent 6 }} {{- end }} {{- with .hosts }} @@ -33,9 +33,9 @@ ingress: {{- end }} {{- with .client }} - client: + client: {{- with .annotations }} - annotations: + annotations: {{ toYaml . | indent 6 }} {{- end }} {{- with .hosts }} @@ -49,9 +49,9 @@ ingress: {{- end }} {{- with .spark }} - spark: + spark: {{- with .annotations }} - annotations: + annotations: {{ toYaml . | indent 6 }} {{- end }} {{- with .hosts }} @@ -65,9 +65,9 @@ ingress: {{- end }} {{- with .rabbitmq }} - rabbitmq: + rabbitmq: {{- with .annotations }} - annotations: + annotations: {{ toYaml . | indent 6 }} {{- end }} {{- with .hosts }} @@ -81,9 +81,9 @@ ingress: {{- end }} {{- with .pulsar }} - pulsar: + pulsar: {{- with .annotations }} - annotations: + annotations: {{ toYaml . | indent 6 }} {{- end }} {{- with .hosts }} @@ -108,6 +108,8 @@ podSecurityPolicy: enabled: {{ .enabled | default false }} {{- end }} +ingressClassName: {{ .ingressClassName | default "nginx"}} + exchange: {{- with .rollsite }} {{- with .exchange }} diff --git a/helm-charts/FATE/values.yaml b/helm-charts/FATE/values.yaml index de2aa5a42..519711c70 100644 --- a/helm-charts/FATE/values.yaml +++ b/helm-charts/FATE/values.yaml @@ -2,7 +2,7 @@ image: registry: federatedai isThridParty: - tag: 1.7.2-release + tag: 1.8.0-release pullPolicy: IfNotPresent imagePullSecrets: # - name: @@ -16,9 +16,11 @@ istio: podSecurityPolicy: enabled: false +ingressClassName: nginx + ingress: - fateboard: - # annotations: + fateboard: + # annotations: hosts: - name: fateboard.example.com path: / @@ -26,25 +28,25 @@ ingress: # - secretName: my-tls-secret # hosts: # - fateboard.example.com - client: - # annotations: + client: + # annotations: hosts: - name: notebook.example.com path: / tls: [] - spark: - # annotations: + spark: + # annotations: hosts: - name: spark.example.com path: / tls: [] - rabbitmq: - # annotations: + rabbitmq: + # annotations: hosts: - name: rabbitmq.example.com path: / tls: [] - pulsar: + pulsar: # annotations: hosts: - name: pulsar.example.com diff --git a/helm-charts/Images_list.md b/helm-charts/Images_list.md new file mode 100644 index 000000000..d27510697 --- /dev/null +++ b/helm-charts/Images_list.md @@ -0,0 +1,33 @@ +# All images required to deploy the chart are recorded here. + +## FATE + +- federatedai/python:${version-tag} +- mysql:8 +- federatedai/fateboard:${version-tag} +- federatedai/client:${version-tag} +- federatedai/eggroll:${version-tag} +- fluent/fluentd:v1.12 +- federatedai/python-spark:${version-tag} +- federatedai/spark-master:${version-tag} +- federatedai/spark-worker:${version-tag} +- federatedai/hadoop-datanode:2.0.0-hadoop2.7.4-java8 +- federatedai/hadoop-namenode:2.0.0-hadoop2.7.4-java8 +- nginx:1.17 +- federatedai/nginx:${version-tag} +- federatedai/rabbitmq:3.8.3-management +- federatedai/pulsar:2.7.0 + +## FATE-Serving + +- federatedai/serving-server:${version-tag} +- federatedai/serving-proxy:${version-tag} +- redis:5 +- federatedai/serving-admin:${version-tag} +- bitnami/zookeeper:3.7.0 + +## FATE-Exchange + +- federatedai/eggroll:${version-tag} +- federatedai/trafficserver +- federatedai/nginx:${version-tag} diff --git a/k8s-deploy/.gitignore b/k8s-deploy/.gitignore new file mode 100644 index 000000000..5657f6ea7 --- /dev/null +++ b/k8s-deploy/.gitignore @@ -0,0 +1 @@ +vendor \ No newline at end of file diff --git a/k8s-deploy/Makefile b/k8s-deploy/Makefile index 17db76bc2..8b166d04c 100644 --- a/k8s-deploy/Makefile +++ b/k8s-deploy/Makefile @@ -1,5 +1,5 @@ NAME ?= federatedai/kubefate -VERSION ?= v1.4.3 +VERSION ?= v1.4.4 IMG ?= ${NAME}:${VERSION} ifeq (,$(shell go env GOBIN)) @@ -63,7 +63,7 @@ vet: go vet ./... # Generate swag API file swag: swag-bin - $(SWAG_BIN) init --parseDependency --parseInternal -g pkg/api/service.go + $(SWAG_BIN) init --parseDependency --parseInternal --parseDepth 1 -g pkg/api/service.go package: kubefate-without-swag mkdir -p tmp/kubefate; @@ -85,7 +85,7 @@ ifeq (, $(shell which swag)) SWAG_BIN_TMP_DIR=$$(mktemp -d) ;\ cd $$SWAG_BIN_TMP_DIR ;\ go mod init tmp ;\ - go install github.com/swaggo/swag/cmd/swag@latest ;\ + go install github.com/swaggo/swag/cmd/swag@v1.8.0 ;\ rm -rf $$SWAG_BIN_TMP_DIR ;\ } SWAG_BIN=$(GOBIN)/swag diff --git a/k8s-deploy/README.md b/k8s-deploy/README.md index be2c91a7e..5e95b694c 100644 --- a/k8s-deploy/README.md +++ b/k8s-deploy/README.md @@ -1,10 +1,10 @@ # Kubernetes Deployment -We recommend using [Kubernetes](https://kubernetes.io/) as a underlying infrastructure to create and manage the FATE clusters in a production environment. KubeFATE supports deploying multiple FATE clusters in an instance of Kubernetes with different namespaces for the purposes of development, testing and production. Considering the different IT designs and standards in each company, the actual deployment should be customized. KubeFATE is flexibile for the FATE configuration. +We recommend using [Kubernetes](https://kubernetes.io/) as an underlying infrastructure to create and manage the FATE clusters in a production environment. KubeFATE supports deploying multiple FATE clusters in an instance of Kubernetes with different namespaces for the purposes of development, testing and production. Considering the different IT designs and standards in each company, the actual deployment should be customized. KubeFATE is flexibile for the FATE configuration. If you focus on how to quickly use KubeFATE, please jump to [Use Scenarios](#use-scenarios). ## High-level architecture of multiple federated learning parties -The hig-hlevel architecture of a multi-party federated learning deployment (e.g. two parties) is shown as follows: +The high-level architecture of a multi-party federated learning deployment (e.g. two parties) is shown as follows:
@@ -37,7 +37,7 @@ KubeFATE is designed to handle different versions FATE. Normally, KubeFATE CLI a ## User scenarios Suppose in an organization, there are two roles: -* System Admin: who is responisble for the infrastructure management as well as Kubernetes administration +* System Admin: who is responsible for the infrastructure management as well as Kubernetes administration * ML Infrastructure Operators: who is responsible for managing the machine learning cluster like FATE
@@ -47,12 +47,12 @@ Suppose in an organization, there are two roles: Recommended version of dependent software: -Kubernetes: [v1.21.7](https://github.com/kubernetes/kubernetes/releases/tag/v1.21.7) +Kubernetes: [v1.23.5](https://github.com/kubernetes/kubernetes/releases/tag/v1.23.5) -Ingress-nginx: [v1.0.5](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.0.5) +Ingress-nginx: [v1.1.3](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.1.3) #### Creating role, namespace and other resource in Kubernetes -The sample yaml can be found in [rbac-config.yaml](./rbac-config.yaml). In this sample, we create a kube-fate namespace for KubeFATE service. Resource constraints can be applied to kube-fate namespace, refer to [Kubernetes Namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/), [Configure Memory and CPU Quotas for Namespace](https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/). +The example yaml can be found in [rbac-config.yaml](./rbac-config.yaml). In this example, we create a kube-fate namespace for KubeFATE service. Resource constraints can be applied to kube-fate namespace, refer to [Kubernetes Namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/), [Configure Memory and CPU Quotas for Namespace](https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/). Run the following command to create the namespace: ``` @@ -67,7 +67,7 @@ stringData: ``` #### Preparing domain name and deploying KubeFATE in Kubernetes -Because KubeFATE service exposes RESTful APIs for external access, system admin needs to prepare a domain name for KubeFATE service. In our sample, the domain name is `example.com` . Moreover, system admin should create a namespace (e.g. fate-9999) for FATE deployment. +Because KubeFATE service exposes RESTful APIs for external access, system admin needs to prepare a domain name for KubeFATE service. In our example, the domain name is `example.com` . Moreover, system admin should create a namespace (e.g. fate-9999) for FATE deployment. ``` $ kubectl apply -f ./kubefate.yaml $ kubectl create namespace fate-9999 @@ -95,7 +95,7 @@ serviceurl: example.com Create a `cluster.yaml` for FATE cluster configuration. The details of configuration can be found here: [FATE Cluster Configuration Guide](../docs/configurations/FATE_cluster_configuration.md). -**NOTE:** For Chinese user, specifying a local image registry in `cluster.yaml` can accelerate the download of images. The details is as follows: +**NOTE:** For Chinese user, specifying a local image registry in `cluster.yaml` can accelerate the download of images. The details are as follows: ``` registry: "hub.c.163.com/federatedai" ``` @@ -104,72 +104,127 @@ Next, install the FATE cluster, ``` $ kubefate cluster install -f ./cluster.yaml -create job success, job id=fe846176-0787-4879-9d27-622692ce181c +create job success, job id=d92d7a56-7002-46a4-9363-da9c7346e05a ``` *NOTE: If you want to deploy **FATE on Spark**, you can use `cluster-spark.yaml`.* #### Checking the status of "Installing Cluster" job -After the above command has finished, a job is created for installing a FATE cluster. Run the command `kubefate job describe` to check the status of the job, util the "Status" turns to `Success`. - -``` -$ kubefate job describe fe846176-0787-4879-9d27-622692ce181c -StartTime 2020-11-13 07:22:53 -EndTime 2020-11-13 07:23:35 -Duration 42s -Status Success -Creator admin -ClusterId 27e37a60-fffb-4031-a76f-990b2ff43cf2 -States - update job status to Running - - create cluster in DB Success - - overwrite current installation - - helm install success - - checkout cluster status [28] - - job run Success -SubJobs clustermanager PodStatus: Running, SubJobStatus: Success, Duration: 6s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:22:59 - fateboard PodStatus: Running, SubJobStatus: Success, Duration: 1s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:22:55 - mysql PodStatus: Running, SubJobStatus: Success, Duration: 8s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:23:01 - nodemanager-0 PodStatus: Running, SubJobStatus: Success, Duration: 8s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:23:01 - nodemanager-1 PodStatus: Running, SubJobStatus: Success, Duration: 8s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:23:01 - python PodStatus: Running, SubJobStatus: Success, Duration: 1s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:22:55 - rollsite PodStatus: Running, SubJobStatus: Success, Duration: 8s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:23:01 - client PodStatus: Running, SubJobStatus: Success, Duration: 42s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:23:35 +After the above command has finished, a job is created for installing a FATE cluster. Run the command `kubefate job describe` to check the status of the job, until the "Status" turns to `Success`. + +```bash +$ kubefate job describe d92d7a56-7002-46a4-9363-da9c7346e05a +UUID d92d7a56-7002-46a4-9363-da9c7346e05a +StartTime 2022-04-12 07:34:09 +EndTime 2022-04-12 07:48:14 +Duration 14m +Status Success +Creator admin +ClusterId 24bb75ff-f636-4c64-8c04-1b9073f89a2f +States - update job status to Running + - create Cluster in DB Success + - helm install Success + - checkout Cluster status [794] + - job run Success + +SubJobs nodemanager-0 ModuleStatus: Available, SubJobStatus: Success, Duration: 13m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:47:26 + nodemanager-1 ModuleStatus: Available, SubJobStatus: Success, Duration: 13m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:47:18 + python ModuleStatus: Available, SubJobStatus: Success, Duration: 14m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:48:14 + rollsite ModuleStatus: Available, SubJobStatus: Success, Duration: 13m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:47:24 + client ModuleStatus: Available, SubJobStatus: Success, Duration: 11m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:45:22 + clustermanager ModuleStatus: Available, SubJobStatus: Success, Duration: 13m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:47:11 + mysql ModuleStatus: Available, SubJobStatus: Success, Duration: 13m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:47:11 ``` #### Describing the cluster and finding FATE access information After the `installing cluster` job succeeded, use `kubefate cluster describe` to check the FATE access information: -``` -$ kubefate cluster describe 27e37a60-fffb-4031-a76f-990b2ff43cf2 -UUID 27e37a60-fffb-4031-a76f-990b2ff43cf2 -Name fate-9999 -NameSpace fate-9999 -ChartName fate -ChartVersion v1.5.0 -REVISION 1 -Age 92s -Status Running -Spec name: fate-9999 - namespace: fate-9999 - chartName: fate - chartVersion: v1.5.0 - partyId: 9999 - ...... - -Info dashboard: - - party9999.notebook.example.com - - party9999.fateboard.example.com - ip: 192.168.0.1 - pod: - - clustermanager-78f98b85bf-ph2hv - ...... - status: - modules: - client: Running - clustermanager: Running - fateboard: Running - mysql: Running - nodemanager-0: Running - nodemanager-1: Running - python: Running - rollsite: Running +```bash +$ kubefate cluster describe 24bb75ff-f636-4c64-8c04-1b9073f89a2f +UUID 24bb75ff-f636-4c64-8c04-1b9073f89a2f +Name fate-9999 +NameSpace fate-9999 +ChartName fate +ChartVersion v1.8.0 +Revision 1 +Age 44h +Status Running +Spec backend: eggroll + chartName: fate + chartVersion: v1.8.0 + imagePullSecrets: + - name: myregistrykey + imageTag: 1.8.0-release + ingress: + client: + hosts: + - name: party9999.notebook.example.com + fateboard: + hosts: + - name: party9999.fateboard.example.com + ingressClassName: nginx + istio: + enabled: false + modules: + - rollsite + - clustermanager + - nodemanager + - mysql + - python + - fateboard + - client + name: fate-9999 + namespace: fate-9999 + partyId: 9999 + persistence: false + podSecurityPolicy: + enabled: false + pullPolicy: null + python: + grpcNodePort: 30092 + httpNodePort: 30097 + logLevel: INFO + type: NodePort + registry: "" + rollsite: + nodePort: 30091 + partyList: + - partyId: 10000 + partyIp: 192.168.10.1 + partyPort: 30101 + type: NodePort + servingIp: 192.168.9.2 + servingPort: 30095 + +Info dashboard: + - party9999.notebook.example.com + - party9999.fateboard.example.com + ip: 192.168.9.1 + port: 30091 + status: + containers: + client: Running + clustermanager: Running + fateboard: Running + mysql: Running + nodemanager-0: Running + nodemanager-0-eggrollpair: Running + nodemanager-1: Running + nodemanager-1-eggrollpair: Running + python: Running + rollsite: Running + deployments: + client: Available + clustermanager: Available + mysql: Available + nodemanager-0: Available + nodemanager-1: Available + python: Available + rollsite: Available ``` #### Access the UI of FATEBoard and Notebook diff --git a/k8s-deploy/README_zh.md b/k8s-deploy/README_zh.md index b221199e3..9ae44c30f 100644 --- a/k8s-deploy/README_zh.md +++ b/k8s-deploy/README_zh.md @@ -46,9 +46,9 @@ KubeFATE在设计上分离了服务与FATE集群的配置(基于Helm Chart), 依赖软件的建议版本: -Kubernetes: [v1.21.7](https://github.com/kubernetes/kubernetes/releases/tag/v1.21.7) +Kubernetes: [v1.23.5](https://github.com/kubernetes/kubernetes/releases/tag/v1.23.5) -Ingress-nginx: [v1.0.5](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.0.5) +Ingress-nginx: [v1.1.3](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.1.3) #### 创建Kubernetes服务账号、namespace等 我们的发布包提供了[rbac-config.yaml](./rbac-config.yaml)作为样例。但是现实使用请与系统管理员确认权限问题,以及商量资源配额。更多请参考[Kubernetes Namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/)和[Configure Memory and CPU Quotas for Namespace](https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/)。 @@ -106,7 +106,7 @@ registry: "hub.c.163.com/federatedai" ``` $ kubefate cluster install -f ./cluster.yaml -create job success, job id=fe846176-0787-4879-9d27-622692ce181c +create job success, job id=d92d7a56-7002-46a4-9363-da9c7346e05a ``` *如果想要部署使用 **Spark** 计算引擎的FATE集群,可以使用`cluster-spark.yaml`。* @@ -114,66 +114,121 @@ create job success, job id=fe846176-0787-4879-9d27-622692ce181c #### 检查安装集群任务的状态 上面的命令会创建一个安装FATE集群的任务,用于异步部署。使用```kubefate job describe```命令可以检查任务的状态,直到看到结果为`install success` -``` -$ kubefate job describe fe846176-0787-4879-9d27-622692ce181c -StartTime 2020-11-13 07:22:53 -EndTime 2020-11-13 07:23:35 -Duration 42s -Status Success -Creator admin -ClusterId 27e37a60-fffb-4031-a76f-990b2ff43cf2 -States - update job status to Running - - create cluster in DB Success - - overwrite current installation - - helm install success - - checkout cluster status [28] - - job run Success -SubJobs clustermanager PodStatus: Running, SubJobStatus: Success, Duration: 6s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:22:59 - fateboard PodStatus: Running, SubJobStatus: Success, Duration: 1s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:22:55 - mysql PodStatus: Running, SubJobStatus: Success, Duration: 8s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:23:01 - nodemanager-0 PodStatus: Running, SubJobStatus: Success, Duration: 8s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:23:01 - nodemanager-1 PodStatus: Running, SubJobStatus: Success, Duration: 8s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:23:01 - python PodStatus: Running, SubJobStatus: Success, Duration: 1s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:22:55 - rollsite PodStatus: Running, SubJobStatus: Success, Duration: 8s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:23:01 - client PodStatus: Running, SubJobStatus: Success, Duration: 42s, StartTime: 2020-11-13 07:22:53, EndTime: 2020-11-13 07:23:35 +```bash +$ kubefate job describe d92d7a56-7002-46a4-9363-da9c7346e05a +UUID d92d7a56-7002-46a4-9363-da9c7346e05a +StartTime 2022-04-12 07:34:09 +EndTime 2022-04-12 07:48:14 +Duration 14m +Status Success +Creator admin +ClusterId 24bb75ff-f636-4c64-8c04-1b9073f89a2f +States - update job status to Running + - create Cluster in DB Success + - helm install Success + - checkout Cluster status [794] + - job run Success + +SubJobs nodemanager-0 ModuleStatus: Available, SubJobStatus: Success, Duration: 13m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:47:26 + nodemanager-1 ModuleStatus: Available, SubJobStatus: Success, Duration: 13m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:47:18 + python ModuleStatus: Available, SubJobStatus: Success, Duration: 14m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:48:14 + rollsite ModuleStatus: Available, SubJobStatus: Success, Duration: 13m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:47:24 + client ModuleStatus: Available, SubJobStatus: Success, Duration: 11m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:45:22 + clustermanager ModuleStatus: Available, SubJobStatus: Success, Duration: 13m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:47:11 + mysql ModuleStatus: Available, SubJobStatus: Success, Duration: 13m, StartTime: + 2022-04-12 07:34:09, EndTime: 2022-04-12 07:47:11 ``` #### 描述集群的情况,以及FATE集群访问信息 当我们看到上面命令的返回结果出现`install success`,就可以使用```kubefate cluster describe```查看FATE集群的访问信息 -``` -$ kubefate cluster describe 27e37a60-fffb-4031-a76f-990b2ff43cf2 -UUID 27e37a60-fffb-4031-a76f-990b2ff43cf2 -Name fate-9999 -NameSpace fate-9999 -ChartName fate -ChartVersion v1.5.0 -REVISION 1 -Age 92s -Status Running -Spec name: fate-9999 - namespace: fate-9999 - chartName: fate - chartVersion: v1.5.0 - partyId: 9999 - ...... - -Info dashboard: - - party9999.notebook.example.com - - party9999.fateboard.example.com - ip: 192.168.0.1 - pod: - - clustermanager-78f98b85bf-ph2hv - ...... - status: - modules: - client: Running - clustermanager: Running - fateboard: Running - mysql: Running - nodemanager-0: Running - nodemanager-1: Running - python: Running - rollsite: Running +```bash +$ kubefate cluster describe 24bb75ff-f636-4c64-8c04-1b9073f89a2f +UUID 24bb75ff-f636-4c64-8c04-1b9073f89a2f +Name fate-9999 +NameSpace fate-9999 +ChartName fate +ChartVersion v1.8.0 +Revision 1 +Age 44h +Status Running +Spec backend: eggroll + chartName: fate + chartVersion: v1.8.0 + imagePullSecrets: + - name: myregistrykey + imageTag: 1.8.0-release + ingress: + client: + hosts: + - name: party9999.notebook.example.com + fateboard: + hosts: + - name: party9999.fateboard.example.com + ingressClassName: nginx + istio: + enabled: false + modules: + - rollsite + - clustermanager + - nodemanager + - mysql + - python + - fateboard + - client + name: fate-9999 + namespace: fate-9999 + partyId: 9999 + persistence: false + podSecurityPolicy: + enabled: false + pullPolicy: null + python: + grpcNodePort: 30092 + httpNodePort: 30097 + logLevel: INFO + type: NodePort + registry: "" + rollsite: + nodePort: 30091 + partyList: + - partyId: 10000 + partyIp: 192.168.10.1 + partyPort: 30101 + type: NodePort + servingIp: 192.168.9.2 + servingPort: 30095 + +Info dashboard: + - party9999.notebook.example.com + - party9999.fateboard.example.com + ip: 192.168.9.1 + port: 30091 + status: + containers: + client: Running + clustermanager: Running + fateboard: Running + mysql: Running + nodemanager-0: Running + nodemanager-0-eggrollpair: Running + nodemanager-1: Running + nodemanager-1-eggrollpair: Running + python: Running + rollsite: Running + deployments: + client: Available + clustermanager: Available + mysql: Available + nodemanager-0: Available + nodemanager-1: Available + python: Available + rollsite: Available ``` #### 访问 FATEBoard 和 Notebook UI diff --git a/k8s-deploy/cluster-spark-pulsar.yaml b/k8s-deploy/cluster-spark-pulsar.yaml index a01c916b3..2df64d707 100644 --- a/k8s-deploy/cluster-spark-pulsar.yaml +++ b/k8s-deploy/cluster-spark-pulsar.yaml @@ -1,10 +1,10 @@ name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 9999 registry: "" -imageTag: "1.7.2-release" +imageTag: "1.8.0-release" pullPolicy: imagePullSecrets: - name: myregistrykey @@ -13,6 +13,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - mysql - python @@ -29,28 +30,18 @@ backend: spark_pulsar # Specify domain name for service # ingress: # fateboard: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.fateboard.example.com - # client: - # annotations: - # kubernetes.io/ingress.class: "nginx" + # client: # hosts: # - name: party9999.notebook.example.com - # spark: - # annotations: - # kubernetes.io/ingress.class: "nginx" + # spark: # hosts: # - name: party9999.spark.example.com - # rabbitmq: - # annotations: - # kubernetes.io/ingress.class: "nginx" + # rabbitmq: # hosts: # - name: party9999.rabbitmq.example.com - # pulsar: - # annotations: - # kubernetes.io/ingress.class: "nginx" + # pulsar: # hosts: # - name: party9999.pulsar.example.com diff --git a/k8s-deploy/cluster-spark-rabbitmq.yaml b/k8s-deploy/cluster-spark-rabbitmq.yaml index 54479e49c..9b42eac54 100644 --- a/k8s-deploy/cluster-spark-rabbitmq.yaml +++ b/k8s-deploy/cluster-spark-rabbitmq.yaml @@ -1,10 +1,10 @@ name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 9999 registry: "" -imageTag: "1.7.2-release" +imageTag: "1.8.0-release" pullPolicy: imagePullSecrets: - name: myregistrykey @@ -13,6 +13,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - mysql - python @@ -29,28 +30,18 @@ backend: spark_rabbitmq # Specify domain name for service # ingress: # fateboard: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.fateboard.example.com # client: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.notebook.example.com # spark: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.spark.example.com # rabbitmq: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.rabbitmq.example.com # pulsar: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.pulsar.example.com diff --git a/k8s-deploy/cluster-spark-slim.yaml b/k8s-deploy/cluster-spark-slim.yaml index d56f274be..57cd4a953 100644 --- a/k8s-deploy/cluster-spark-slim.yaml +++ b/k8s-deploy/cluster-spark-slim.yaml @@ -1,10 +1,10 @@ name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 9999 registry: "" -imageTag: "1.7.2-release" +imageTag: "1.8.0-release" pullPolicy: imagePullSecrets: - name: myregistrykey @@ -13,6 +13,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - mysql - python @@ -27,28 +28,18 @@ backend: spark_local_pulsar # Specify domain name for service # ingress: # fateboard: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.fateboard.example.com # client: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.notebook.example.com # spark: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.spark.example.com # rabbitmq: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.rabbitmq.example.com # pulsar: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.pulsar.example.com diff --git a/k8s-deploy/cluster.yaml b/k8s-deploy/cluster.yaml index f96a6123f..f19220a52 100644 --- a/k8s-deploy/cluster.yaml +++ b/k8s-deploy/cluster.yaml @@ -1,10 +1,10 @@ name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 9999 registry: "" -imageTag: "1.7.2-release" +imageTag: "1.8.0-release" pullPolicy: imagePullSecrets: - name: myregistrykey @@ -13,6 +13,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - rollsite - clustermanager @@ -29,28 +30,18 @@ backend: eggroll # Specify domain name for service # ingress: # fateboard: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.fateboard.example.com # client: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.notebook.example.com # spark: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.spark.example.com # rabbitmq: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.rabbitmq.example.com # pulsar: - # annotations: - # kubernetes.io/ingress.class: "nginx" # hosts: # - name: party9999.pulsar.example.com @@ -168,4 +159,4 @@ backend: eggroll # Specify serving configuration # servingIp: 192.168.0.1 -# servingPort: 30095 \ No newline at end of file +# servingPort: 30095 diff --git a/k8s-deploy/docs/docs.go b/k8s-deploy/docs/docs.go index a476886be..71c406446 100644 --- a/k8s-deploy/docs/docs.go +++ b/k8s-deploy/docs/docs.go @@ -4,13 +4,12 @@ package docs import "github.com/swaggo/swag" -const docTemplate_swagger = `{ +const docTemplate = `{ "schemes": {{ marshal .Schemes }}, "swagger": "2.0", "info": { "description": "{{escape .Description}}", "title": "{{.Title}}", - "termsOfService": "http://swagger.io/terms/", "contact": { "name": "API Support", "url": "https://github.com/FederatedAI/KubeFATE" @@ -1502,6 +1501,74 @@ const docTemplate_swagger = `{ }, "/user/{userId}": { "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "User" + ], + "summary": "Get user by userId", + "parameters": [ + { + "type": "string", + "description": "User", + "name": "userId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Authentication header", + "name": "Authorization", + "in": "header", + "required": true + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/api.JSONResult" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/modules.User" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/api.JSONERRORResult" + } + }, + "401": { + "description": "Unauthorized operation", + "schema": { + "$ref": "#/definitions/api.JSONERRORResult" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/api.JSONERRORResult" + } + } + } + }, + "delete": { "security": [ { "ApiKeyAuth": [] @@ -1975,8 +2042,8 @@ const docTemplate_swagger = `{ } }` -// SwaggerInfo_swagger holds exported Swagger Info so clients can modify it -var SwaggerInfo_swagger = &swag.Spec{ +// SwaggerInfo holds exported Swagger Info so clients can modify it +var SwaggerInfo = &swag.Spec{ Version: "v1", Host: "", BasePath: "/v1", @@ -1984,9 +2051,9 @@ var SwaggerInfo_swagger = &swag.Spec{ Title: "KubeFATE service API", Description: "This is a KubeFATE.", InfoInstanceName: "swagger", - SwaggerTemplate: docTemplate_swagger, + SwaggerTemplate: docTemplate, } func init() { - swag.Register(SwaggerInfo_swagger.InstanceName(), SwaggerInfo_swagger) + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) } diff --git a/k8s-deploy/docs/swagger.json b/k8s-deploy/docs/swagger.json index 63d8d9df6..d08ef1b26 100644 --- a/k8s-deploy/docs/swagger.json +++ b/k8s-deploy/docs/swagger.json @@ -3,7 +3,6 @@ "info": { "description": "This is a KubeFATE.", "title": "KubeFATE service API", - "termsOfService": "http://swagger.io/terms/", "contact": { "name": "API Support", "url": "https://github.com/FederatedAI/KubeFATE" @@ -1494,6 +1493,74 @@ }, "/user/{userId}": { "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "User" + ], + "summary": "Get user by userId", + "parameters": [ + { + "type": "string", + "description": "User", + "name": "userId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Authentication header", + "name": "Authorization", + "in": "header", + "required": true + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/api.JSONResult" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/modules.User" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/api.JSONERRORResult" + } + }, + "401": { + "description": "Unauthorized operation", + "schema": { + "$ref": "#/definitions/api.JSONERRORResult" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/api.JSONERRORResult" + } + } + } + }, + "delete": { "security": [ { "ApiKeyAuth": [] diff --git a/k8s-deploy/docs/swagger.yaml b/k8s-deploy/docs/swagger.yaml index 0af899f4f..407da5adb 100644 --- a/k8s-deploy/docs/swagger.yaml +++ b/k8s-deploy/docs/swagger.yaml @@ -256,7 +256,6 @@ info: license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html - termsOfService: http://swagger.io/terms/ title: KubeFATE service API version: v1 paths: @@ -1116,7 +1115,7 @@ paths: tags: - User /user/{userId}: - get: + delete: parameters: - description: User in: path @@ -1152,6 +1151,47 @@ paths: summary: Delete user by userId tags: - User + get: + parameters: + - description: User + in: path + name: userId + required: true + type: string + - description: Authentication header + in: header + name: Authorization + required: true + type: string + produces: + - application/json + responses: + "200": + description: Success + schema: + allOf: + - $ref: '#/definitions/api.JSONResult' + - properties: + data: + $ref: '#/definitions/modules.User' + type: object + "400": + description: Bad Request + schema: + $ref: '#/definitions/api.JSONERRORResult' + "401": + description: Unauthorized operation + schema: + $ref: '#/definitions/api.JSONERRORResult' + "500": + description: Internal server error + schema: + $ref: '#/definitions/api.JSONERRORResult' + security: + - ApiKeyAuth: [] + summary: Get user by userId + tags: + - User /user/login: post: consumes: diff --git a/k8s-deploy/examples/config.sh b/k8s-deploy/examples/config.sh index 25a1b45cd..6598d50c3 100644 --- a/k8s-deploy/examples/config.sh +++ b/k8s-deploy/examples/config.sh @@ -2,82 +2,100 @@ source party.config -echo ${fate_chartVersion} -echo ${fate_imageTAG} -echo ${fate_serving_chartVersion} -echo ${fate_serving_imageTAG} -echo ${party_9999_IP} -echo ${party_10000_IP} -echo ${party_exchange_IP} - +echo "FATE chartVersion: "${fate_chartVersion} +echo "FATE imageTAG: "${fate_imageTAG} +echo "FATE-Serving chartVersion: "${fate_serving_chartVersion} +echo "FATE-Serving_imageTAG: "${fate_serving_imageTAG} +echo "Party 9999 IP: "${party_9999_IP} +echo "Party 10000 IP: "${party_10000_IP} +echo "Party exchange IP: "${party_exchange_IP} + +# Compatible with Mac +SED=sed +unamestr=`uname` +if [[ "$unamestr" == "Darwin" ]] ; then + SED=gsed + type $SED >/dev/null 2>&1 || { + echo >&2 "$SED it's not installed. Try: brew install gnu-sed" ; + exit 1; + } +fi # 9999 config -sed -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-9999/cluster.yaml -sed -i "s/chartVersion: .*/chartVersion: ${fate_serving_chartVersion}/g" ./party-9999/cluster-serving.yaml -sed -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-9999/cluster-spark-rabbitmq.yaml -sed -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-9999/cluster-spark-pulsar.yaml - -sed -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-9999/cluster.yaml -sed -i "s/imageTag: .*/imageTag: ${fate_serving_imageTAG}/g" ./party-9999/cluster-serving.yaml -sed -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-9999/cluster-spark-rabbitmq.yaml -sed -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-9999/cluster-spark-pulsar.yaml - - -sed -i "s/192.168.9.1/${party_9999_IP}/g" ./party-9999/cluster.yaml -sed -i "s/192.168.9.1/${party_9999_IP}/g" ./party-9999/cluster-serving.yaml -sed -i "s/192.168.9.1/${party_9999_IP}/g" ./party-9999/cluster-spark-rabbitmq.yaml -sed -i "s/192.168.9.1/${party_9999_IP}/g" ./party-9999/cluster-spark-pulsar.yaml - -sed -i "s/192.168.10.1/${party_10000_IP}/g" ./party-9999/cluster.yaml -sed -i "s/192.168.10.1/${party_10000_IP}/g" ./party-9999/cluster-serving.yaml -sed -i "s/192.168.10.1/${party_10000_IP}/g" ./party-9999/cluster-spark-rabbitmq.yaml -sed -i "s/192.168.10.1/${party_10000_IP}/g" ./party-9999/cluster-spark-pulsar.yaml - -sed -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-9999/cluster.yaml -sed -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-9999/cluster-serving.yaml -sed -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-9999/cluster-spark-rabbitmq.yaml -sed -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-9999/cluster-spark-pulsar.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" party-9999/cluster.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${fate_serving_chartVersion}/g" ./party-9999/cluster-serving.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-9999/cluster-spark-rabbitmq.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-9999/cluster-spark-pulsar.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-9999/cluster-spark-local-pulsar.yaml + +$SED -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-9999/cluster.yaml +$SED -i "s/imageTag: .*/imageTag: ${fate_serving_imageTAG}/g" ./party-9999/cluster-serving.yaml +$SED -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-9999/cluster-spark-rabbitmq.yaml +$SED -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-9999/cluster-spark-pulsar.yaml +$SED -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-9999/cluster-spark-local-pulsar.yaml + +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-9999/cluster.yaml +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-9999/cluster-serving.yaml +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-9999/cluster-spark-rabbitmq.yaml +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-9999/cluster-spark-pulsar.yaml +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-9999/cluster-spark-local-pulsar.yaml + +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-9999/cluster.yaml +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-9999/cluster-serving.yaml +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-9999/cluster-spark-rabbitmq.yaml +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-9999/cluster-spark-pulsar.yaml +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-9999/cluster-spark-local-pulsar.yaml + +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-9999/cluster.yaml +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-9999/cluster-serving.yaml +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-9999/cluster-spark-rabbitmq.yaml +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-9999/cluster-spark-pulsar.yaml +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-9999/cluster-spark-local-pulsar.yaml # 10000 config -sed -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-10000/cluster.yaml -sed -i "s/chartVersion: .*/chartVersion: ${fate_serving_chartVersion}/g" ./party-10000/cluster-serving.yaml -sed -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-10000/cluster-spark-rabbitmq.yaml -sed -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-10000/cluster-spark-pulsar.yaml - -sed -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-10000/cluster.yaml -sed -i "s/imageTag: .*/imageTag: ${fate_serving_imageTAG}/g" ./party-10000/cluster-serving.yaml -sed -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-10000/cluster-spark-rabbitmq.yaml -sed -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-10000/cluster-spark-pulsar.yaml - -sed -i "s/192.168.9.1/${party_9999_IP}/g" ./party-10000/cluster.yaml -sed -i "s/192.168.9.1/${party_9999_IP}/g" ./party-10000/cluster-serving.yaml -sed -i "s/192.168.9.1/${party_9999_IP}/g" ./party-10000/cluster-spark-rabbitmq.yaml -sed -i "s/192.168.9.1/${party_9999_IP}/g" ./party-10000/cluster-spark-pulsar.yaml - -sed -i "s/192.168.10.1/${party_10000_IP}/g" ./party-10000/cluster.yaml -sed -i "s/192.168.10.1/${party_10000_IP}/g" ./party-10000/cluster-serving.yaml -sed -i "s/192.168.10.1/${party_10000_IP}/g" ./party-10000/cluster-spark-rabbitmq.yaml -sed -i "s/192.168.10.1/${party_10000_IP}/g" ./party-10000/cluster-spark-pulsar.yaml - -sed -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-10000/cluster.yaml -sed -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-10000/cluster-serving.yaml -sed -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-10000/cluster-spark-rabbitmq.yaml -sed -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-10000/cluster-spark-pulsar.yaml - +$SED -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-10000/cluster.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${fate_serving_chartVersion}/g" ./party-10000/cluster-serving.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-10000/cluster-spark-rabbitmq.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-10000/cluster-spark-pulsar.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${fate_chartVersion}/g" ./party-10000/cluster-spark-local-pulsar.yaml + +$SED -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-10000/cluster.yaml +$SED -i "s/imageTag: .*/imageTag: ${fate_serving_imageTAG}/g" ./party-10000/cluster-serving.yaml +$SED -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-10000/cluster-spark-rabbitmq.yaml +$SED -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-10000/cluster-spark-pulsar.yaml +$SED -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-10000/cluster-spark-local-pulsar.yaml + +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-10000/cluster.yaml +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-10000/cluster-serving.yaml +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-10000/cluster-spark-rabbitmq.yaml +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-10000/cluster-spark-pulsar.yaml +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-10000/cluster-spark-local-pulsar.yaml + +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-10000/cluster.yaml +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-10000/cluster-serving.yaml +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-10000/cluster-spark-rabbitmq.yaml +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-10000/cluster-spark-pulsar.yaml +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-10000/cluster-spark-local-pulsar.yaml + +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-10000/cluster.yaml +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-10000/cluster-serving.yaml +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-10000/cluster-spark-rabbitmq.yaml +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-10000/cluster-spark-pulsar.yaml +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-10000/cluster-spark-local-pulsar.yaml # exchange config -sed -i "s/chartVersion: .*/chartVersion: ${chartVersion}/g" ./party-exchange/rollsite.yaml -sed -i "s/chartVersion: .*/chartVersion: ${chartVersion}/g" ./party-exchange/trafficServer.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${chartVersion}/g" ./party-exchange/rollsite.yaml +$SED -i "s/chartVersion: .*/chartVersion: ${chartVersion}/g" ./party-exchange/trafficServer.yaml -sed -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-exchange/rollsite.yaml -sed -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-exchange/trafficServer.yaml +$SED -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-exchange/rollsite.yaml +$SED -i "s/imageTag: .*/imageTag: ${fate_imageTAG}/g" ./party-exchange/trafficServer.yaml -sed -i "s/192.168.9.1/${party_9999_IP}/g" ./party-exchange/rollsite.yaml -sed -i "s/192.168.9.1/${party_9999_IP}/g" ./party-exchange/trafficServer.yaml +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-exchange/rollsite.yaml +$SED -i "s/192.168.9.1/${party_9999_IP}/g" ./party-exchange/trafficServer.yaml -sed -i "s/192.168.10.1/${party_10000_IP}/g" ./party-exchange/rollsite.yaml -sed -i "s/192.168.10.1/${party_10000_IP}/g" ./party-exchange/trafficServer.yaml +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-exchange/rollsite.yaml +$SED -i "s/192.168.10.1/${party_10000_IP}/g" ./party-exchange/trafficServer.yaml -sed -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-exchange/rollsite.yaml -sed -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-exchange/trafficServer.yaml +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-exchange/rollsite.yaml +$SED -i "s/192.168.0.1/${party_exchange_IP}/g" ./party-exchange/trafficServer.yaml diff --git a/k8s-deploy/examples/party-10000/cluster-serving.yaml b/k8s-deploy/examples/party-10000/cluster-serving.yaml index d4d870bd5..67643c6cf 100644 --- a/k8s-deploy/examples/party-10000/cluster-serving.yaml +++ b/k8s-deploy/examples/party-10000/cluster-serving.yaml @@ -4,7 +4,7 @@ chartName: fate-serving chartVersion: v2.0.4 partyId: 10000 registry: "" -imageTag: "2.0.4-release" +imageTag: 2.0.4-release pullPolicy: imagePullSecrets: - name: myregistrykey diff --git a/k8s-deploy/examples/party-10000/cluster-spark-local-pulsar.yaml b/k8s-deploy/examples/party-10000/cluster-spark-local-pulsar.yaml index b95b196a5..af6aac46a 100644 --- a/k8s-deploy/examples/party-10000/cluster-spark-local-pulsar.yaml +++ b/k8s-deploy/examples/party-10000/cluster-spark-local-pulsar.yaml @@ -1,16 +1,17 @@ name: fate-10000 namespace: fate-10000 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 10000 registry: "" -imageTag: "1.7.2-release" +imageTag: 1.8.0-release pullPolicy: imagePullSecrets: - name: myregistrykey persistence: false istio: enabled: false +ingressClassName: nginx podSecurityPolicy: enabled: false modules: @@ -25,23 +26,15 @@ backend: spark_local_pulsar ingress: fateboard: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.fateboard.example.com client: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.notebook.example.com spark: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.spark.example.com pulsar: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.pulsar.example.com @@ -49,6 +42,7 @@ python: type: NodePort httpNodePort: 30107 grpcNodePort: 30102 + logLevel: INFO servingIp: 192.168.10.1 servingPort: 30105 diff --git a/k8s-deploy/examples/party-10000/cluster-spark-pulsar.yaml b/k8s-deploy/examples/party-10000/cluster-spark-pulsar.yaml index 8bb3aa910..2c5104327 100644 --- a/k8s-deploy/examples/party-10000/cluster-spark-pulsar.yaml +++ b/k8s-deploy/examples/party-10000/cluster-spark-pulsar.yaml @@ -1,16 +1,17 @@ name: fate-10000 namespace: fate-10000 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 10000 registry: "" -imageTag: "1.7.2-release" +imageTag: 1.8.0-release pullPolicy: imagePullSecrets: - name: myregistrykey persistence: false istio: enabled: false +ingressClassName: nginx podSecurityPolicy: enabled: false modules: @@ -27,23 +28,15 @@ backend: spark_pulsar ingress: fateboard: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.fateboard.example.com client: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.notebook.example.com spark: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.spark.example.com pulsar: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.pulsar.example.com @@ -51,6 +44,7 @@ python: type: NodePort httpNodePort: 30107 grpcNodePort: 30102 + logLevel: INFO servingIp: 192.168.10.1 servingPort: 30105 diff --git a/k8s-deploy/examples/party-10000/cluster-spark-rabbitmq.yaml b/k8s-deploy/examples/party-10000/cluster-spark-rabbitmq.yaml index e6c65e904..59db94247 100644 --- a/k8s-deploy/examples/party-10000/cluster-spark-rabbitmq.yaml +++ b/k8s-deploy/examples/party-10000/cluster-spark-rabbitmq.yaml @@ -1,16 +1,17 @@ name: fate-10000 namespace: fate-10000 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 10000 registry: "" -imageTag: "1.7.2-release" +imageTag: 1.8.0-release pullPolicy: imagePullSecrets: - name: myregistrykey persistence: false istio: enabled: false +ingressClassName: nginx podSecurityPolicy: enabled: false modules: @@ -27,23 +28,15 @@ backend: spark_rabbitmq ingress: fateboard: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.fateboard.example.com client: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.notebook.example.com spark: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.spark.example.com rabbitmq: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.rabbitmq.example.com @@ -51,6 +44,7 @@ python: type: NodePort httpNodePort: 30107 grpcNodePort: 30102 + logLevel: INFO servingIp: 192.168.10.1 servingPort: 30105 diff --git a/k8s-deploy/examples/party-10000/cluster.yaml b/k8s-deploy/examples/party-10000/cluster.yaml index 11af5322d..29d14a795 100644 --- a/k8s-deploy/examples/party-10000/cluster.yaml +++ b/k8s-deploy/examples/party-10000/cluster.yaml @@ -1,10 +1,10 @@ name: fate-10000 namespace: fate-10000 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 10000 registry: "" -imageTag: "1.7.2-release" +imageTag: 1.8.0-release pullPolicy: imagePullSecrets: - name: myregistrykey @@ -13,6 +13,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - rollsite - clustermanager @@ -26,13 +27,9 @@ backend: eggroll ingress: fateboard: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.fateboard.example.com client: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party10000.notebook.example.com @@ -48,6 +45,7 @@ python: type: NodePort httpNodePort: 30107 grpcNodePort: 30102 + logLevel: INFO servingIp: 192.168.10.1 servingPort: 30105 diff --git a/k8s-deploy/examples/party-9999/cluster-serving.yaml b/k8s-deploy/examples/party-9999/cluster-serving.yaml index 2c2ff7367..778b1ff57 100644 --- a/k8s-deploy/examples/party-9999/cluster-serving.yaml +++ b/k8s-deploy/examples/party-9999/cluster-serving.yaml @@ -4,7 +4,7 @@ chartName: fate-serving chartVersion: v2.0.4 partyId: 9999 registry: "" -imageTag: "2.0.4-release" +imageTag: 2.0.4-release pullPolicy: imagePullSecrets: - name: myregistrykey diff --git a/k8s-deploy/examples/party-9999/cluster-spark-local-pulsar.yaml b/k8s-deploy/examples/party-9999/cluster-spark-local-pulsar.yaml index 017525484..3f03d6584 100644 --- a/k8s-deploy/examples/party-9999/cluster-spark-local-pulsar.yaml +++ b/k8s-deploy/examples/party-9999/cluster-spark-local-pulsar.yaml @@ -1,10 +1,10 @@ name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 9999 registry: "" -imageTag: "1.7.2-release" +imageTag: 1.8.0-release pullPolicy: imagePullSecrets: - name: myregistrykey @@ -13,6 +13,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - python - mysql @@ -25,23 +26,15 @@ backend: spark_local_pulsar ingress: fateboard: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.fateboard.example.com client: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.notebook.example.com spark: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.spark.example.com pulsar: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.pulsar.example.com @@ -49,6 +42,7 @@ python: type: NodePort httpNodePort: 30097 grpcNodePort: 30092 + logLevel: INFO servingIp: 192.168.9.1 servingPort: 30095 diff --git a/k8s-deploy/examples/party-9999/cluster-spark-pulsar.yaml b/k8s-deploy/examples/party-9999/cluster-spark-pulsar.yaml index cdfe28827..71c3c7cb5 100644 --- a/k8s-deploy/examples/party-9999/cluster-spark-pulsar.yaml +++ b/k8s-deploy/examples/party-9999/cluster-spark-pulsar.yaml @@ -1,10 +1,10 @@ name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 9999 registry: "" -imageTag: "1.7.2-release" +imageTag: 1.8.0-release pullPolicy: imagePullSecrets: - name: myregistrykey @@ -13,6 +13,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - python - mysql @@ -27,23 +28,15 @@ backend: spark_pulsar ingress: fateboard: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.fateboard.example.com client: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.notebook.example.com spark: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.spark.example.com pulsar: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.pulsar.example.com @@ -51,6 +44,7 @@ python: type: NodePort httpNodePort: 30097 grpcNodePort: 30092 + logLevel: INFO servingIp: 192.168.9.1 servingPort: 30095 diff --git a/k8s-deploy/examples/party-9999/cluster-spark-rabbitmq.yaml b/k8s-deploy/examples/party-9999/cluster-spark-rabbitmq.yaml index ff62bb225..a08f4f1a9 100644 --- a/k8s-deploy/examples/party-9999/cluster-spark-rabbitmq.yaml +++ b/k8s-deploy/examples/party-9999/cluster-spark-rabbitmq.yaml @@ -1,10 +1,10 @@ name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 9999 registry: "" -imageTag: 1.7.2-release +imageTag: 1.8.0-release pullPolicy: imagePullSecrets: - name: myregistrykey @@ -13,6 +13,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - python - mysql @@ -27,23 +28,15 @@ backend: spark_rabbitmq ingress: fateboard: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.fateboard.example.com client: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.notebook.example.com spark: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.spark.example.com rabbitmq: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.rabbitmq.example.com @@ -51,6 +44,7 @@ python: type: NodePort httpNodePort: 30097 grpcNodePort: 30092 + logLevel: INFO servingIp: 192.168.9.1 servingPort: 30095 diff --git a/k8s-deploy/examples/party-9999/cluster.yaml b/k8s-deploy/examples/party-9999/cluster.yaml index 8d6e21828..3ba8312f1 100644 --- a/k8s-deploy/examples/party-9999/cluster.yaml +++ b/k8s-deploy/examples/party-9999/cluster.yaml @@ -1,10 +1,10 @@ name: fate-9999 namespace: fate-9999 chartName: fate -chartVersion: v1.7.2 +chartVersion: v1.8.0 partyId: 9999 registry: "" -imageTag: "1.7.2-release" +imageTag: 1.8.0-release pullPolicy: imagePullSecrets: - name: myregistrykey @@ -13,6 +13,7 @@ istio: enabled: false podSecurityPolicy: enabled: false +ingressClassName: nginx modules: - rollsite - clustermanager @@ -25,14 +26,10 @@ modules: backend: eggroll ingress: - fateboard: - annotations: - kubernetes.io/ingress.class: "nginx" + fateboard: hosts: - name: party9999.fateboard.example.com client: - annotations: - kubernetes.io/ingress.class: "nginx" hosts: - name: party9999.notebook.example.com @@ -48,6 +45,7 @@ python: type: NodePort httpNodePort: 30097 grpcNodePort: 30092 + logLevel: INFO servingIp: 192.168.9.1 servingPort: 30095 diff --git a/k8s-deploy/examples/party-9999/toy-test.sh b/k8s-deploy/examples/party-9999/toy-test.sh deleted file mode 100644 index 74899562d..000000000 --- a/k8s-deploy/examples/party-9999/toy-test.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - - - -kubectl exec -n fate-9999 -it svc/fateflow -c python -- bash -cd ../examples/toy_example/ -python run_toy_example.py 9999 10000 1 - - -# party Id 9999 - -kubectl -n fate-9999 exec -it svc/fateboard -c python -- bash - - -cd ../examples/toy_example/ -sed -i 's/ "backend": 0,/ "backend": 0,"spark_run": { "total-executor-cores": 12 },/g' toy_example_conf.json -sed -i 's/"partition": 48,/"partition": 4,/g' toy_example_conf.json -python run_toy_example.py 9999 10000 1 -b 1 - - - - -# serving - -kubectl -n fate-10000 exec -it svc/fateboard -c python -- bash - -cd fate_flow; -sed -i "s/\"work_mode\": .*/\"work_mode\": 1,/g" examples/upload_host.json; -sed -i "s/\"backend\": .*/\"backend\": 1,/g" examples/upload_host.json; -python fate_flow_client.py -f upload -c examples/upload_host.json - - -kubectl exec -it svc/fateflow -n fate-9999 -c python -- bash - - -cd fate_flow; -sed -i "s/\"work_mode\": .*/\"work_mode\": 1,/g" examples/upload_guest.json; -sed -i "s/\"backend\": .*/\"backend\": 1,/g" examples/upload_guest.json; -python fate_flow_client.py -f upload -c examples/upload_guest.json diff --git a/k8s-deploy/examples/party-exchange/rollsite.yaml b/k8s-deploy/examples/party-exchange/rollsite.yaml index c01b4fd47..0c045ac32 100644 --- a/k8s-deploy/examples/party-exchange/rollsite.yaml +++ b/k8s-deploy/examples/party-exchange/rollsite.yaml @@ -1,10 +1,10 @@ name: fate-exchange namespace: fate-exchange chartName: fate-exchange -chartVersion: v1.7.2 +chartVersion: partyId: 1 registry: "" -imageTag: "1.7.2-release" +imageTag: 1.8.0-release pullPolicy: imagePullSecrets: - name: myregistrykey diff --git a/k8s-deploy/examples/party-exchange/trafficServer.yaml b/k8s-deploy/examples/party-exchange/trafficServer.yaml index 1b287bdad..136f5ec66 100644 --- a/k8s-deploy/examples/party-exchange/trafficServer.yaml +++ b/k8s-deploy/examples/party-exchange/trafficServer.yaml @@ -1,10 +1,10 @@ name: fate-exchange namespace: fate-exchange chartName: fate-exchange -chartVersion: v1.7.2 +chartVersion: partyId: 1 registry: "" -imageTag: "1.7.2-release" +imageTag: 1.8.0-release pullPolicy: imagePullSecrets: - name: myregistrykey diff --git a/k8s-deploy/examples/party.config b/k8s-deploy/examples/party.config new file mode 100644 index 000000000..9ea87a215 --- /dev/null +++ b/k8s-deploy/examples/party.config @@ -0,0 +1,7 @@ +fate_chartVersion=v1.8.0 +fate_imageTAG=1.8.0-release +fate_serving_chartVersion=v2.0.4 +fate_serving_imageTAG=2.0.4-release +party_9999_IP=192.168.9.1 +party_10000_IP=192.168.10.1 +party_exchange_IP=192.168.0.1 \ No newline at end of file diff --git a/k8s-deploy/go.mod b/k8s-deploy/go.mod index cfa483859..49124c888 100644 --- a/k8s-deploy/go.mod +++ b/k8s-deploy/go.mod @@ -5,7 +5,7 @@ go 1.17 require ( github.com/Masterminds/sprig/v3 v3.2.2 github.com/appleboy/gin-jwt/v2 v2.8.0 - github.com/gin-contrib/logger v0.2.1 + github.com/gin-contrib/logger v0.2.2 github.com/gin-gonic/gin v1.7.7 github.com/gofrs/flock v0.8.1 github.com/gosuri/uitable v0.0.4 @@ -17,19 +17,19 @@ require ( github.com/spf13/viper v1.10.1 github.com/swaggo/files v0.0.0-20210815190702-a29dd2bc99b2 github.com/swaggo/gin-swagger v1.4.1 - github.com/swaggo/swag v1.7.9 + github.com/swaggo/swag v1.8.0 github.com/urfave/cli/v2 v2.3.0 - golang.org/x/crypto v0.0.0-20220208050332-20e1d8d225ab - golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd + golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70 + golang.org/x/net v0.0.0-20220225172249-27dd8689420f gopkg.in/yaml.v2 v2.4.0 - gorm.io/driver/mysql v1.2.3 - gorm.io/driver/sqlite v1.2.6 - gorm.io/gorm v1.22.5 + gorm.io/driver/mysql v1.3.2 + gorm.io/driver/sqlite v1.3.1 + gorm.io/gorm v1.23.2 helm.sh/helm/v3 v3.8.0 - k8s.io/api v0.23.3 - k8s.io/apimachinery v0.23.3 - k8s.io/cli-runtime v0.23.3 - k8s.io/client-go v0.23.3 + k8s.io/api v0.23.4 + k8s.io/apimachinery v0.23.4 + k8s.io/cli-runtime v0.23.4 + k8s.io/client-go v0.23.4 sigs.k8s.io/yaml v1.3.0 ) @@ -41,19 +41,18 @@ require ( github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.1.1 // indirect github.com/Masterminds/squirrel v1.5.2 // indirect - github.com/Microsoft/hcsshim v0.9.2 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect - github.com/containerd/containerd v1.5.9 // indirect + github.com/containerd/containerd v1.6.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect github.com/cyphar/filepath-securejoin v0.2.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/cli v20.10.12+incompatible // indirect - github.com/docker/distribution v2.8.0+incompatible // indirect + github.com/docker/distribution v2.8.1+incompatible // indirect github.com/docker/docker v20.10.12+incompatible // indirect github.com/docker/docker-credential-helpers v0.6.4 // indirect github.com/docker/go-connections v0.4.0 // indirect @@ -73,11 +72,11 @@ require ( github.com/go-openapi/swag v0.21.1 // indirect github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.0 // indirect + github.com/go-playground/validator/v10 v10.10.1 // indirect github.com/go-sql-driver/mysql v1.6.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.2.0 // indirect + github.com/golang-jwt/jwt/v4 v4.3.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/btree v1.0.1 // indirect github.com/google/go-cmp v0.5.7 // indirect @@ -95,19 +94,19 @@ require ( github.com/jinzhu/now v1.1.4 // indirect github.com/jmoiron/sqlx v1.3.4 // indirect github.com/josharian/intern v1.0.0 // indirect - github.com/klauspost/compress v1.14.2 // indirect + github.com/klauspost/compress v1.15.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/lib/pq v1.10.4 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect - github.com/magiconair/properties v1.8.5 // indirect + github.com/magiconair/properties v1.8.6 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/mattn/go-sqlite3 v1.14.11 // indirect + github.com/mattn/go-sqlite3 v1.14.12 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect @@ -131,7 +130,7 @@ require ( github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/rivo/uniseg v0.2.0 // indirect - github.com/rubenv/sql-migrate v1.1.0 // indirect + github.com/rubenv/sql-migrate v1.1.1 // indirect github.com/russross/blackfriday v1.6.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shopspring/decimal v1.3.1 // indirect @@ -143,36 +142,36 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.7.0 // indirect github.com/subosito/gotenv v1.2.0 // indirect - github.com/ugorji/go/codec v1.2.6 // indirect + github.com/ugorji/go/codec v1.2.7 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xlab/treeprint v1.1.0 // indirect - go.starlark.net v0.0.0-20220203230714-bb14e151c28f // indirect - golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect + go.starlark.net v0.0.0-20220302181546-5411bad688d1 // indirect + golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20220207234003-57398862261d // indirect + golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect + golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 // indirect golang.org/x/tools v0.1.9 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220207185906-7721543eae58 // indirect - google.golang.org/grpc v1.44.0 // indirect + google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548 // indirect + google.golang.org/grpc v1.45.0 // indirect google.golang.org/protobuf v1.27.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/ini.v1 v1.66.3 // indirect + gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/apiextensions-apiserver v0.23.3 // indirect - k8s.io/apiserver v0.23.3 // indirect - k8s.io/component-base v0.23.3 // indirect + k8s.io/apiextensions-apiserver v0.23.4 // indirect + k8s.io/apiserver v0.23.4 // indirect + k8s.io/component-base v0.23.4 // indirect k8s.io/klog/v2 v2.40.1 // indirect k8s.io/kube-openapi v0.0.0-20220124234850-424119656bbf // indirect - k8s.io/kubectl v0.23.3 // indirect - k8s.io/utils v0.0.0-20220127004650-9b3446523e65 // indirect + k8s.io/kubectl v0.23.4 // indirect + k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect oras.land/oras-go v1.1.0 // indirect sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect - sigs.k8s.io/kustomize/api v0.11.1 // indirect + sigs.k8s.io/kustomize/api v0.11.2 // indirect sigs.k8s.io/kustomize/kyaml v0.13.3 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect ) diff --git a/k8s-deploy/go.sum b/k8s-deploy/go.sum index 3b89018ac..7d50fbc35 100644 --- a/k8s-deploy/go.sum +++ b/k8s-deploy/go.sum @@ -1,4 +1,5 @@ bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -51,6 +52,7 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v56.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -117,6 +119,7 @@ github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg3 github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= +github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= github.com/Microsoft/hcsshim v0.9.1/go.mod h1:Y/0uV2jUab5kBI7SQgl62at0AVX7uaruzADAVmxm3eM= @@ -143,6 +146,7 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= +github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= github.com/appleboy/gin-jwt/v2 v2.8.0 h1:Glo7cb9eBR+hj8Y7WzgfkOlqCaNLjP+RV4dNO3fpdps= @@ -170,7 +174,6 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= @@ -181,6 +184,7 @@ github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= @@ -188,6 +192,7 @@ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0Bsq github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= @@ -201,6 +206,7 @@ github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41 github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -209,6 +215,7 @@ github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLI github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= @@ -240,13 +247,15 @@ github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4S github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/cgroups v1.0.2 h1:mZBclaSgNDfPWtfhj2xJY28LZ9nYIgzB0pwSURPl6JM= github.com/containerd/cgroups v1.0.2/go.mod h1:qpbpJ1jmlqsR9f2IyaLPsdkCdnt0rbDVqIDlhuu5tRY= +github.com/containerd/cgroups v1.0.3 h1:ADZftAkglvCiD44c77s5YmMqaP2pzVCFZvBmAlBdAP4= +github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= @@ -262,25 +271,28 @@ github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09Zvgq github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= -github.com/containerd/containerd v1.5.9 h1:rs6Xg1gtIxaeyG+Smsb/0xaSDu1VgFhOCKBXxMxbsF4= +github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ= +github.com/containerd/containerd v1.6.1 h1:oa2uY0/0G+JX4X7hpGCYvkp9FjUancz56kSNnb1sG3o= +github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.1.0 h1:UFRRY5JemiAhPZrr/uE0n8fMTLcZsUvySPr1+D7pgr8= github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= +github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU= github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= +github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= @@ -290,6 +302,7 @@ github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= +github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4= github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= @@ -299,12 +312,10 @@ github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDG github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= @@ -314,16 +325,20 @@ github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNR github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= +github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE= github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -370,8 +385,8 @@ github.com/docker/cli v20.10.12+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hH github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.8.0+incompatible h1:l9EaZDICImO1ngI+uTifW+ZYvvz7fKISBAKpg+MbWbY= -github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v20.10.11+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v20.10.12+incompatible h1:CEeNmFM0QZIsJCZKMkZx0ZcahTiewkrgiwfYD+dfl1U= @@ -441,8 +456,8 @@ github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2H github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/gzip v0.0.3 h1:etUaeesHhEORpZMp18zoOhepboiWnFtXrBZxszWUn4k= github.com/gin-contrib/gzip v0.0.3/go.mod h1:YxxswVZIqOvcHEQpsSn+QF5guQtO1dCfy0shBPy4jFc= -github.com/gin-contrib/logger v0.2.1 h1:Wu9JyQRuv4a7ZgqNlcbTC+RpElIwAueyv/wrFUIm6pE= -github.com/gin-contrib/logger v0.2.1/go.mod h1:6uKBteCGZF6VtxSfO1MKWl7aEu1sPSOhwCEAFPFxnnI= +github.com/gin-contrib/logger v0.2.2 h1:xIoUvRdmfID02X09wfq7wuWmevBTdMK1T6TQjbv5r+4= +github.com/gin-contrib/logger v0.2.2/go.mod h1:6uKBteCGZF6VtxSfO1MKWl7aEu1sPSOhwCEAFPFxnnI= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= @@ -466,9 +481,13 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= @@ -502,19 +521,23 @@ github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/j github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= +github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobuffalo/logger v1.0.3 h1:YaXOTHNPCvkqqA7w05A4v0k2tCdpr+sgFlgINbQ6gqc= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobuffalo/logger v1.0.3/go.mod h1:SoeejUwldiS7ZsyCBphOGURmWdwUFXs0J7TCjEhjKxM= -github.com/gobuffalo/packd v1.0.0 h1:6ERZvJHfe24rfFmA9OaoKBdC7+c9sydrytMg8SdFGBM= +github.com/gobuffalo/logger v1.0.6 h1:nnZNpxYo0zx+Aj9RfMPBm+x9zAU2OayFh/xrAWi34HU= +github.com/gobuffalo/logger v1.0.6/go.mod h1:J31TBEHR1QLV2683OXTAItYIg8pv2JMHnF/quuAbMjs= github.com/gobuffalo/packd v1.0.0/go.mod h1:6VTc4htmJRFB7u1m/4LeMTWjFoYrUiBkU9Fdec9hrhI= -github.com/gobuffalo/packr/v2 v2.8.1 h1:tkQpju6i3EtMXJ9uoF5GT6kB+LMTimDWD8Xvbz6zDVA= +github.com/gobuffalo/packd v1.0.1 h1:U2wXfRr4E9DH8IdsDLlRFwTZTK7hLfq9qT/QHXGVe/0= +github.com/gobuffalo/packd v1.0.1/go.mod h1:PP2POP3p3RXGz7Jh6eYEf93S7vA2za6xM7QT85L4+VY= github.com/gobuffalo/packr/v2 v2.8.1/go.mod h1:c/PLlOuTU+p3SybaJATW3H6lX/iK7xEz5OeMf+NnJpg= +github.com/gobuffalo/packr/v2 v2.8.3 h1:xE1yzvnO56cUC0sTpKR3DIbxZgB54AftTFMhB2XEWlY= +github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXsOdiU5KwbKc= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= @@ -522,12 +545,12 @@ github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblf github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godror/godror v0.24.2/go.mod h1:wZv/9vPiUib6tkoDl+AZ/QLf5YZgMravZ7jxH2eQWAE= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= -github.com/gogo/googleapis v1.4.0 h1:zgVt4UpGxcqVOw97aRGxT4svlcmdK35fynLNctY32zI= github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= @@ -537,8 +560,9 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= +github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= @@ -672,6 +696,7 @@ github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyN github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= @@ -683,6 +708,7 @@ github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iP github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= @@ -721,11 +747,11 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= +github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/jinzhu/now v1.1.3/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas= github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -751,8 +777,9 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/karrick/godirwalk v1.15.8 h1:7+rWAZPn9zuRxaIqqT8Ohs2Q2Ac0msBqwRdxNCr2VVs= github.com/karrick/godirwalk v1.15.8/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= +github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= +github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -760,8 +787,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.14.2 h1:S0OHlFk/Gbon/yauFJ4FfJJF5V0fc5HbBTJazi28pRw= -github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.0 h1:xqfchp4whNFxn5A4XFyyYtitiWI8Hy5EW59jEwcyL6U= +github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -798,8 +825,9 @@ github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -840,8 +868,8 @@ github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lL github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.11 h1:gt+cp9c0XGqe9S/wAHTL3n/7MqY+siPWgWJgqdsFrzQ= -github.com/mattn/go-sqlite3 v1.14.11/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0= +github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -882,7 +910,9 @@ github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2J github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI= github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= +github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= @@ -910,8 +940,9 @@ github.com/naoina/toml v0.1.1 h1:PT/lllxVVN0gzzSqSlHEmP8MJB4MY2U7STGxiouV4X8= github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= @@ -925,8 +956,10 @@ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= +github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -934,8 +967,9 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= +github.com/onsi/gomega v1.15.0 h1:WjP/FQ/sk43MRmnEcT+MlDw2TFvkrXlprrPST/IudjU= +github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -944,6 +978,7 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= @@ -951,20 +986,19 @@ github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59P github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= -github.com/opencontainers/runc v1.0.2 h1:opHZMaswlyxz1OuGpBE53Dwe4/xF7EZTY0A2L/FpCOg= github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= +github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -github.com/opencontainers/selinux v1.8.2 h1:c4ca10UMgRcvZ6h0K4HtS15UaVSBEaE+iln2LVpAuGc= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/otiai10/copy v1.7.0 h1:hVoPiN+t+7d2nzzwMiDHPSOogsWAStewq3TwU05+clE= github.com/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U= @@ -1023,6 +1057,7 @@ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8b github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1054,8 +1089,8 @@ github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI91 github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc= github.com/rs/zerolog v1.26.1/go.mod h1:/wSSJWX7lVrsOwlbyTRSOJvqRlc+WjWlfes+CiJ+tmc= github.com/rubenv/sql-migrate v0.0.0-20210614095031-55d5740dbbcc/go.mod h1:HFLT6i9iR4QBOF5rdCyjddC9t59ArqWJV2xx+jwcCMo= -github.com/rubenv/sql-migrate v1.1.0 h1:Ib7Q31lUTsryEGKQGpzjq6hL/imvmMof7kDV4b7gVlc= -github.com/rubenv/sql-migrate v1.1.0/go.mod h1:XsKV+aiWNJpTDKtG1hh0C5hP+S6VQNcWwhLhqCLKJFk= +github.com/rubenv/sql-migrate v1.1.1 h1:haR5Hn8hbW9/SpAICrXoZqXnywS7Q5WijwkQENPeNWY= +github.com/rubenv/sql-migrate v1.1.1/go.mod h1:/7TZymwxN8VWumcIxw1jjHEcR1djpdkMHQPT4FWdnbQ= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= @@ -1064,13 +1099,16 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= @@ -1146,8 +1184,9 @@ github.com/swaggo/files v0.0.0-20210815190702-a29dd2bc99b2 h1:+iNTcqQJy0OZ5jk6a5 github.com/swaggo/files v0.0.0-20210815190702-a29dd2bc99b2/go.mod h1:lKJPbtWzJ9JhsTN1k1gZgleJWY/cqq0psdoMmaThG3w= github.com/swaggo/gin-swagger v1.4.1 h1:F2vJndw+Q+ZBOlsC6CaodqXJV3ZOf6hpg/4Y6MEx5BM= github.com/swaggo/gin-swagger v1.4.1/go.mod h1:hmJ1vPn+XjUvnbzjCdUAxVqgraxELxk8x5zAsjCE5mg= -github.com/swaggo/swag v1.7.9 h1:6vCG5mm43ebDzGlZPMGYrYI4zKFfOr5kicQX8qjeDwc= github.com/swaggo/swag v1.7.9/go.mod h1:gZ+TJ2w/Ve1RwQsA2IRoSOTidHz6DX+PIG8GWvbnoLU= +github.com/swaggo/swag v1.8.0 h1:80NNhvpJcuItNpBDqgJwDuKlMmaZ/OATOzhG3bhcM3w= +github.com/swaggo/swag v1.8.0/go.mod h1:gZ+TJ2w/Ve1RwQsA2IRoSOTidHz6DX+PIG8GWvbnoLU= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= @@ -1162,13 +1201,14 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go v1.2.6 h1:tGiWC9HENWE2tqYycIqFTNorMmFRVhNwCpDOpWqnk8E= -github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= +github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ= -github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= +github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= @@ -1179,9 +1219,11 @@ github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/X github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1238,23 +1280,33 @@ go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= +go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= -go.starlark.net v0.0.0-20220203230714-bb14e151c28f h1:aW4TkS39/naJa9wPSbIXtZUQOlvuUh8gxCsLRrJoByU= -go.starlark.net v0.0.0-20220203230714-bb14e151c28f/go.mod h1:t3mmBBPzAVvK0L0n1drDmrQsJ8FoIx4INCqVMTr/Zo0= +go.starlark.net v0.0.0-20220302181546-5411bad688d1 h1:i0Sz4b+qJi5xwOaFZqZ+RNHkIpaKLDofei/Glt+PMNc= +go.starlark.net v0.0.0-20220302181546-5411bad688d1/go.mod h1:t3mmBBPzAVvK0L0n1drDmrQsJ8FoIx4INCqVMTr/Zo0= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -1279,15 +1331,16 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20220208050332-20e1d8d225ab h1:lnZ4LoV0UMdibeCUfIB2a4uFwRu491WX/VB2reB8xNc= -golang.org/x/crypto v0.0.0-20220208050332-20e1d8d225ab/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70 h1:syTAU9FwmvzEoIYMqcPHOcVm4H3U5u90WsvuYgwpETU= +golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1379,7 +1432,9 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -1387,9 +1442,11 @@ golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220107192237-5cfca573fb4d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1407,8 +1464,9 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1499,6 +1557,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1526,19 +1585,24 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220207234003-57398862261d h1:Bm7BNOQt2Qv7ZqysjeLjgCBanX+88Z/OtdvsrEv1Djc= -golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 h1:y/woIyUBFbpQGKS0u1aHF/40WUDnek3fPOyD08H5Vng= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1560,8 +1624,8 @@ golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M= -golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs= +golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1621,6 +1685,7 @@ golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4X golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1756,8 +1821,8 @@ google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207185906-7721543eae58 h1:i67FGOy2/zGfhE3YgHdrOrcFbOBhqdcRoBrsDqSQrOI= -google.golang.org/genproto v0.0.0-20220207185906-7721543eae58/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548 h1:J5ZNG1QIdstOl8aaUoFoQJfp04FKTsFV+jwkBHEchqs= +google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1790,8 +1855,9 @@ google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9K google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1826,8 +1892,8 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.3 h1:jRskFVxYaMGAMUbN0UZ7niA9gzL9B49DOqE78vg0k3w= -gopkg.in/ini.v1 v1.66.3/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1849,14 +1915,13 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/mysql v1.2.3 h1:cZqzlOfg5Kf1VIdLC1D9hT6Cy9BgxhExLj/2tIgUe7Y= -gorm.io/driver/mysql v1.2.3/go.mod h1:qsiz+XcAyMrS6QY+X3M9R6b/lKM1imKmcuK9kac5LTo= -gorm.io/driver/sqlite v1.2.6 h1:SStaH/b+280M7C8vXeZLz/zo9cLQmIGwwj3cSj7p6l4= -gorm.io/driver/sqlite v1.2.6/go.mod h1:gyoX0vHiiwi0g49tv+x2E7l8ksauLK0U/gShcdUsjWY= -gorm.io/gorm v1.22.3/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= -gorm.io/gorm v1.22.4/go.mod h1:1aeVC+pe9ZmvKZban/gW4QPra7PRoTEssyc922qCAkk= -gorm.io/gorm v1.22.5 h1:lYREBgc02Be/5lSCTuysZZDb6ffL2qrat6fg9CFbvXU= -gorm.io/gorm v1.22.5/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/driver/mysql v1.3.2 h1:QJryWiqQ91EvZ0jZL48NOpdlPdMjdip1hQ8bTgo4H7I= +gorm.io/driver/mysql v1.3.2/go.mod h1:ChK6AHbHgDCFZyJp0F+BmVGb06PSIoh9uVYKAlRbb2U= +gorm.io/driver/sqlite v1.3.1 h1:bwfE+zTEWklBYoEodIOIBwuWHpnx52Z9zJFW5F33WLk= +gorm.io/driver/sqlite v1.3.1/go.mod h1:wJx0hJspfycZ6myN38x1O/AqLtNS6c5o9TndewFbELg= +gorm.io/gorm v1.23.1/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.23.2 h1:xmq9QRMWL8HTJyhAUBXy8FqIIQCYESeKfJL4DoGKiWQ= +gorm.io/gorm v1.23.2/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= @@ -1874,48 +1939,55 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= +k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs= k8s.io/api v0.23.1/go.mod h1:WfXnOnwSqNtG62Y1CdjoMxh7r7u9QXGCkA1u0na2jgo= -k8s.io/api v0.23.3 h1:KNrME8KHGr12Ozjf8ytOewKzZh6hl/hHUZeHddT3a38= -k8s.io/api v0.23.3/go.mod h1:w258XdGyvCmnBj/vGzQMj6kzdufJZVUwEM1U2fRJwSQ= +k8s.io/api v0.23.4 h1:85gnfXQOWbJa1SiWGpE9EEtHs0UVvDyIsSMpEtl2D4E= +k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= k8s.io/apiextensions-apiserver v0.23.1/go.mod h1:0qz4fPaHHsVhRApbtk3MGXNn2Q9M/cVWWhfHdY2SxiM= -k8s.io/apiextensions-apiserver v0.23.3 h1:JvPJA7hSEAqMRteveq4aj9semilAZYcJv+9HHFWfUdM= -k8s.io/apiextensions-apiserver v0.23.3/go.mod h1:/ZpRXdgKZA6DvIVPEmXDCZJN53YIQEUDF+hrpIQJL38= +k8s.io/apiextensions-apiserver v0.23.4 h1:AFDUEu/yEf0YnuZhqhIFhPLPhhcQQVuR1u3WCh0rveU= +k8s.io/apiextensions-apiserver v0.23.4/go.mod h1:TWYAKymJx7nLMxWCgWm2RYGXHrGlVZnxIlGnvtfYu+g= k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= +k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= +k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U= k8s.io/apimachinery v0.23.1/go.mod h1:SADt2Kl8/sttJ62RRsi9MIV4o8f5S3coArm0Iu3fBno= -k8s.io/apimachinery v0.23.3 h1:7IW6jxNzrXTsP0c8yXz2E5Yx/WTzVPTsHIx/2Vm0cIk= -k8s.io/apimachinery v0.23.3/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM= +k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= +k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= k8s.io/apiserver v0.23.1/go.mod h1:Bqt0gWbeM2NefS8CjWswwd2VNAKN6lUKR85Ft4gippY= -k8s.io/apiserver v0.23.3 h1:gWY1DmA0AdAGR/H+Q/1FtyGkFq8xqSaZOw7oLopmO8k= -k8s.io/apiserver v0.23.3/go.mod h1:3HhsTmC+Pn+Jctw+Ow0LHA4dQ4oXrQ4XJDzrVDG64T4= +k8s.io/apiserver v0.23.4 h1:zNvQlG+C/ERjuUz4p7eY/0IWHaMixRSBoxgmyIdwo9Y= +k8s.io/apiserver v0.23.4/go.mod h1:A6l/ZcNtxGfPSqbFDoxxOjEjSKBaQmE+UTveOmMkpNc= k8s.io/cli-runtime v0.23.1/go.mod h1:r9r8H/qfXo9w+69vwUL7LokKlLRKW5D6A8vUKCx+YL0= -k8s.io/cli-runtime v0.23.3 h1:aJiediw+uUbxkfO6BNulcAMTUoU9Om43g3R7rIkYqcw= -k8s.io/cli-runtime v0.23.3/go.mod h1:yA00O5pDqnjkBh8fkuugBbfIfjB1nOpz+aYLotbnOfc= +k8s.io/cli-runtime v0.23.4 h1:C3AFQmo4TK4dlVPLOI62gtHEHu0OfA2Cp4UVRZ1JXns= +k8s.io/cli-runtime v0.23.4/go.mod h1:7KywUNTUibmHPqmpDFuRO1kc9RhsufHv2lkjCm2YZyM= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= +k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y= k8s.io/client-go v0.23.1/go.mod h1:6QSI8fEuqD4zgFK0xbdwfB/PthBsIxCJMa3s17WlcO0= -k8s.io/client-go v0.23.3 h1:23QYUmCQ/W6hW78xIwm3XqZrrKZM+LWDqW2zfo+szJs= -k8s.io/client-go v0.23.3/go.mod h1:47oMd+YvAOqZM7pcQ6neJtBiFH7alOyfunYN48VsmwE= +k8s.io/client-go v0.23.4 h1:YVWvPeerA2gpUudLelvsolzH7c2sFoXXR5wM/sWqNFU= +k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= k8s.io/code-generator v0.23.1/go.mod h1:V7yn6VNTCWW8GqodYCESVo95fuiEg713S8B7WacWZDA= -k8s.io/code-generator v0.23.3/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= +k8s.io/code-generator v0.23.4/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= +k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= k8s.io/component-base v0.23.1/go.mod h1:6llmap8QtJIXGDd4uIWJhAq0Op8AtQo6bDW2RrNMTeo= -k8s.io/component-base v0.23.3 h1:q+epprVdylgecijVGVdf4MbizEL2feW4ssd7cdo6LVY= -k8s.io/component-base v0.23.3/go.mod h1:1Smc4C60rWG7d3HjSYpIwEbySQ3YWg0uzH5a2AtaTLg= +k8s.io/component-base v0.23.4 h1:SziYh48+QKxK+ykJ3Ejqd98XdZIseVBG7sBaNLPqy6M= +k8s.io/component-base v0.23.4/go.mod h1:8o3Gg8i2vnUXGPOwciiYlkSaZT+p+7gA9Scoz8y4W4E= k8s.io/component-helpers v0.23.1/go.mod h1:ZK24U+2oXnBPcas2KolLigVVN9g5zOzaHLkHiQMFGr0= -k8s.io/component-helpers v0.23.3/go.mod h1:SH+W/WPTaTenbWyDEeY7iytAQiMh45aqKxkvlqQ57cg= +k8s.io/component-helpers v0.23.4/go.mod h1:1Pl7L4zukZ054ElzRbvmZ1FJIU8roBXFOeRFu8zipa4= k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= +k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= @@ -1923,27 +1995,30 @@ k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAE k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.40.1 h1:P4RRucWk/lFOlDdkAr3mc7iWFkgKrZY9qZMAgek06S4= k8s.io/klog/v2 v2.40.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/kube-openapi v0.0.0-20220124234850-424119656bbf h1:M9XBsiMslw2lb2ZzglC0TOkBPK5NQi0/noUrdnoFwUg= k8s.io/kube-openapi v0.0.0-20220124234850-424119656bbf/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/kubectl v0.23.1/go.mod h1:Ui7dJKdUludF8yWAOSN7JZEkOuYixX5yF6E6NjoukKE= -k8s.io/kubectl v0.23.3 h1:gJsF7cahkWDPYlNvYKK+OrBZLAJUBzCym+Zsi+dfi1E= -k8s.io/kubectl v0.23.3/go.mod h1:VBeeXNgLhSabu4/k0O7Q0YujgnA3+CLTUE0RcmF73yY= +k8s.io/kubectl v0.23.4 h1:mAa+zEOlyZieecEy+xSrhjkpMcukYyHWzcNdX28dzMY= +k8s.io/kubectl v0.23.4/go.mod h1:Dgb0Rvx/8JKS/C2EuvsNiQc6RZnX0SbHJVG3XUzH6ok= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= k8s.io/metrics v0.23.1/go.mod h1:qXvsM1KANrc+ZZeFwj6Phvf0NLiC+d3RwcsLcdGc+xs= -k8s.io/metrics v0.23.3/go.mod h1:Ut8TvkbsO4oMVeUzaTArvPrcw9QRFLs2XNzUlORjdYE= +k8s.io/metrics v0.23.4/go.mod h1:cl6sY9BdVT3DubbpqnkPIKi6mn/F2ltkU4yH1tEJ3Bo= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220127004650-9b3446523e65 h1:ONWS0Wgdg5wRiQIAui7L/023aC9+IxrIrydY7l8llsE= -k8s.io/utils v0.0.0-20220127004650-9b3446523e65/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= +k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= oras.land/oras-go v1.1.0 h1:tfWM1RT7PzUwWphqHU6ptPU3ZhwVnSw/9nEGf519rYg= oras.land/oras-go v1.1.0/go.mod h1:1A7vR/0KknT2UkJVWh+xMi95I/AhK8ZrxrnUSmXN0bQ= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -1951,14 +2026,15 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.27/go.mod h1:tq2nT0Kx7W+/f2JVE+zxYtUhdjuELJkVpNz+x/QN5R4= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/kustomize/api v0.10.1/go.mod h1:2FigT1QN6xKdcnGS2Ppp1uIWrtWN28Ms8A3OZUZhwr8= -sigs.k8s.io/kustomize/api v0.11.1 h1:/Vutu+gAqVo8skw1xCZrsZD39SN4Adg+z7FrSTw9pds= -sigs.k8s.io/kustomize/api v0.11.1/go.mod h1:GZuhith5YcqxIDe0GnRJNx5xxPTjlwaLTt/e+ChUtJA= +sigs.k8s.io/kustomize/api v0.11.2 h1:6YvCJHFDwsLwAX7zNHBxMZi3k7dGIXI8G9l0saYQI0E= +sigs.k8s.io/kustomize/api v0.11.2/go.mod h1:GZuhith5YcqxIDe0GnRJNx5xxPTjlwaLTt/e+ChUtJA= sigs.k8s.io/kustomize/cmd/config v0.10.2/go.mod h1:K2aW7nXJ0AaT+VA/eO0/dzFLxmpFcTzudmAgDwPY1HQ= sigs.k8s.io/kustomize/kustomize/v4 v4.4.1/go.mod h1:qOKJMMz2mBP+vcS7vK+mNz4HBLjaQSWRY22EF6Tb7Io= sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E= diff --git a/k8s-deploy/kubefate.yaml b/k8s-deploy/kubefate.yaml index 83d173bb2..d7221f682 100644 --- a/k8s-deploy/kubefate.yaml +++ b/k8s-deploy/kubefate.yaml @@ -19,7 +19,7 @@ spec: spec: serviceAccountName: kubefate-admin containers: - - image: federatedai/kubefate:v1.4.3 + - image: federatedai/kubefate:v1.4.4 imagePullPolicy: IfNotPresent name: kubefate env: @@ -72,6 +72,39 @@ spec: requests: memory: 512Mi cpu: "0.5" + livenessProbe: + httpGet: + path: / + port: 8080 + httpHeaders: + - name: X-Custom-Header + value: livenessProbe + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + httpGet: + path: / + port: 8080 + httpHeaders: + - name: X-Custom-Header + value: readinessProbe + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 1 + successThreshold: 1 + failureThreshold: 3 + startupProbe: + httpGet: + path: / + port: 8080 + httpHeaders: + - name: X-Custom-Header + value: startupProbe + failureThreshold: 30 + periodSeconds: 10 restartPolicy: Always --- apiVersion: apps/v1 @@ -125,6 +158,26 @@ spec: volumeMounts: - name: mariadb-data mountPath: /var/lib/mysql + livenessProbe: + exec: + command: + - mysqladmin + - ping + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + exec: + command: + - mysqladmin + - ping + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 1 + successThreshold: 1 + failureThreshold: 3 restartPolicy: Always volumes: - name: mariadb-data @@ -188,9 +241,8 @@ kind: Ingress metadata: name: kubefate namespace: kube-fate - annotations: - kubernetes.io/ingress.class: "nginx" spec: + ingressClassName: nginx rules: - host: example.com http: @@ -200,5 +252,5 @@ spec: backend: service: name: kubefate - port: - number: 8080 + port: + number: 8080 \ No newline at end of file diff --git a/k8s-deploy/pkg/api/service.go b/k8s-deploy/pkg/api/service.go index 476465e23..a2ec2c94e 100644 --- a/k8s-deploy/pkg/api/service.go +++ b/k8s-deploy/pkg/api/service.go @@ -77,7 +77,6 @@ func initTables() error { // @title KubeFATE service API // @version v1 // @description This is a KubeFATE. -// @termsOfService http://swagger.io/terms/ // @contact.name API Support // @contact.url https://github.com/FederatedAI/KubeFATE // @license.name Apache 2.0 diff --git a/k8s-deploy/pkg/api/user.go b/k8s-deploy/pkg/api/user.go index 2757b95cb..1da16ccfc 100644 --- a/k8s-deploy/pkg/api/user.go +++ b/k8s-deploy/pkg/api/user.go @@ -240,7 +240,7 @@ func getUserFindByUUID(uuid string) (modules.User, error) { // @Failure 400 {object} JSONERRORResult "Bad Request" // @Failure 401 {object} JSONERRORResult "Unauthorized operation" // @Failure 500 {object} JSONERRORResult "Internal server error" -// @Router /user/{userId} [get] +// @Router /user/{userId} [delete] // @Param Authorization header string true "Authentication header" // @Security ApiKeyAuth func (*User) deleteUser(c *gin.Context) { diff --git a/k8s-deploy/pkg/api/version.go b/k8s-deploy/pkg/api/version.go index 0cde7c42b..2aff0369c 100644 --- a/k8s-deploy/pkg/api/version.go +++ b/k8s-deploy/pkg/api/version.go @@ -20,7 +20,7 @@ import ( ) // ServiceVersion code release version -const ServiceVersion = "v1.4.3" +const ServiceVersion = "v1.4.4" // Version API struct type Version struct { diff --git a/k8s-deploy/pkg/service/info.go b/k8s-deploy/pkg/service/info.go index 71f35f467..a8151140e 100644 --- a/k8s-deploy/pkg/service/info.go +++ b/k8s-deploy/pkg/service/info.go @@ -21,20 +21,24 @@ import "github.com/rs/zerolog/log" func GetClusterInfo(name, namespace string) (map[string]interface{}, error) { ip, err := GetNodeIP() if err != nil { + log.Error().Str("func", "GetNodeIP()").Err(err).Msg("GetNodeIP error") return nil, err } port, err := GetProxySvcNodePorts(name, getDefaultNamespace(namespace)) if err != nil { + log.Error().Str("func", "GetProxySvcNodePorts()").Err(err).Msg("GetProxySvcNodePorts error") return nil, err } containerList, err := GetPodContainersStatus(name, getDefaultNamespace(namespace)) if err != nil { + log.Error().Str("func", "GetPodContainersStatus()").Err(err).Msg("GetPodContainersStatus error") return nil, err } deploymentList, err := GetClusterDeployStatus(name, getDefaultNamespace(namespace)) if err != nil { + log.Error().Str("func", "GetClusterDeployStatus()").Err(err).Msg("GetClusterDeployStatus error") return nil, err } @@ -45,6 +49,7 @@ func GetClusterInfo(name, namespace string) (map[string]interface{}, error) { ingressURLList, err := GetIngressURLList(name, getDefaultNamespace(namespace)) if err != nil { + log.Error().Str("func", "GetIngressURLList()").Err(err).Msg("GetIngressURLList error") return nil, err } diff --git a/k8s-deploy/pkg/service/kube/ingress.go b/k8s-deploy/pkg/service/kube/ingress.go index c2392b95f..33aa2b1e8 100644 --- a/k8s-deploy/pkg/service/kube/ingress.go +++ b/k8s-deploy/pkg/service/kube/ingress.go @@ -18,23 +18,23 @@ package kube import ( "context" - networkingv1beta1 "k8s.io/api/networking/v1beta1" + networkingv1 "k8s.io/api/networking/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // Ingress interface type Ingress interface { - GetIngress(ingressName, namespace string) (*networkingv1beta1.Ingress, error) - GetIngresses(namespace, labelSelector string) (*networkingv1beta1.IngressList, error) + GetIngress(ingressName, namespace string) (*networkingv1.Ingress, error) + GetIngresses(namespace, labelSelector string) (*networkingv1.IngressList, error) } // GetIngress is get a Ingress -func (e *Kube) GetIngress(ingressName, namespace string) (*networkingv1beta1.Ingress, error) { - ingress, err := e.client.NetworkingV1beta1().Ingresses(namespace).Get(context.Background(), ingressName, metav1.GetOptions{}) +func (e *Kube) GetIngress(ingressName, namespace string) (*networkingv1.Ingress, error) { + ingress, err := e.client.NetworkingV1().Ingresses(namespace).Get(context.Background(), ingressName, metav1.GetOptions{}) return ingress, err } // GetIngresses is get list of Ingress -func (e *Kube) GetIngresses(namespace, labelSelector string) (*networkingv1beta1.IngressList, error) { - return e.client.NetworkingV1beta1().Ingresses(namespace).List(e.ctx, metav1.ListOptions{LabelSelector: labelSelector}) +func (e *Kube) GetIngresses(namespace, labelSelector string) (*networkingv1.IngressList, error) { + return e.client.NetworkingV1().Ingresses(namespace).List(e.ctx, metav1.ListOptions{LabelSelector: labelSelector}) } diff --git a/k8s-deploy/pkg/service/kube_deploy.go b/k8s-deploy/pkg/service/kube_deploy.go index e66443196..321836fc1 100644 --- a/k8s-deploy/pkg/service/kube_deploy.go +++ b/k8s-deploy/pkg/service/kube_deploy.go @@ -72,34 +72,31 @@ func CheckDeploys(deploys *v1.DeploymentList) bool { } // GetDeployStatus GetDeployStatus -func GetDeployStatus(deploy *v1.Deployment) (string, string, error) { +func GetDeployStatus(deploy *v1.Deployment) (string, string) { for _, v := range deploy.Status.Conditions { if v.Type == v1.DeploymentAvailable && v.Status == corev1.ConditionTrue { - return fmt.Sprint(v1.DeploymentAvailable), v.Message, nil + return fmt.Sprint(v1.DeploymentAvailable), v.Message } } for _, v := range deploy.Status.Conditions { if v.Type == v1.DeploymentProgressing && v.Status == corev1.ConditionTrue { - return fmt.Sprint(v1.DeploymentProgressing), v.Message, nil + return fmt.Sprint(v1.DeploymentProgressing), v.Message } } for _, v := range deploy.Status.Conditions { if v.Type == v1.DeploymentReplicaFailure && v.Status == corev1.ConditionTrue { - return fmt.Sprint(v1.DeploymentReplicaFailure), v.Message, nil + return fmt.Sprint(v1.DeploymentReplicaFailure), v.Message } } - return "", "", fmt.Errorf("Deployment of '%s' not type, please try again", deploy.Name) + return "Undefined", fmt.Sprintf("please use kubectl cli check deploy status of %s", deploy.Name) } //GetDeploymentStatus GetDeploymentStatus func GetDeploymentStatusInfo(deploys *v1.DeploymentList) (map[string]string, error) { status := make(map[string]string) for _, v := range deploys.Items { - Type, message, err := GetDeployStatus(&v) - if err != nil { - return nil, err - } + Type, message := GetDeployStatus(&v) status[v.Name] = fmt.Sprintf("%s, %s", Type, message) } return status, nil @@ -108,10 +105,7 @@ func GetDeploymentStatusInfo(deploys *v1.DeploymentList) (map[string]string, err func GetDeploymentStatus(deploys *v1.DeploymentList) (map[string]string, error) { status := make(map[string]string) for _, v := range deploys.Items { - Type, _, err := GetDeployStatus(&v) - if err != nil { - return nil, err - } + Type, _ := GetDeployStatus(&v) status[v.Name] = fmt.Sprintf("%s", Type) } return status, nil diff --git a/k8s-deploy/pkg/service/kube_ingress.go b/k8s-deploy/pkg/service/kube_ingress.go index 95c87db41..c4646d2af 100644 --- a/k8s-deploy/pkg/service/kube_ingress.go +++ b/k8s-deploy/pkg/service/kube_ingress.go @@ -15,17 +15,12 @@ package service -import ( - "fmt" -) - // GetIngressURLList is Get Ingress Url list func GetIngressURLList(name, namespace string) ([]string, error) { var urls []string labelSelector := getLabelSelector(namespace, name) ingressList, err := KubeClient.GetIngresses(namespace, labelSelector) if err != nil { - fmt.Println(err) return nil, err } for _, ingress := range ingressList.Items {