From 2ba40a311205d6d30e3fca25872c81770f14be55 Mon Sep 17 00:00:00 2001 From: enlin <648240260@qq.com> Date: Tue, 13 Sep 2022 15:53:16 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=8F=96=E6=B6=88=E5=9F=9F=E5=90=8D?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=95=9C=E5=83=8F=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dubhe-server/README.md | 6 +- .../client/fallback/AuthServiceFallback.java | 1 - .../admin/service/impl/UserServiceImpl.java | 4 + .../admin/src/main/resources/bootstrap.yml | 8 +- .../dubhe/admin/AdminApplicationTests.java | 17 -- .../auth/src/main/resources/bootstrap.yml | 8 +- .../org/dubhe/auth/AuthApplicationTests.java | 17 -- .../biz/base/constant/HarborProperties.java | 37 --- .../dubhe/biz/base/constant/Permissions.java | 2 +- .../biz/base/constant/StringConstant.java | 3 - .../biz/base/enums/BaseErrorCodeEnum.java | 4 +- .../dubhe/biz/base/enums/ImageStateEnum.java | 53 ---- .../main/resources/bootstrap-clod-prod.yml | 10 - .../main/resources/bootstrap-cloud-dev.yml | 12 + .../resources/bootstrap-cloud-open-dev.yml | 12 + .../resources/bootstrap-cloud-opendev.yaml | 12 + .../main/resources/bootstrap-cloud-pre.yml | 9 + .../main/resources/bootstrap-cloud-test.yml | 12 + .../main/resources/bootstrap-istio-dev.yml | 7 + .../main/resources/bootstrap-istio-test.yml | 7 + .../src/main/resources/bootstrap-prod.yml | 10 - .../main/java/org/dubhe/k8s/api/NodeApi.java | 7 + .../k8s/api/impl/JupyterResourceApiImpl.java | 18 +- .../k8s/api/impl/ModelServingApiImpl.java | 41 +-- .../org/dubhe/k8s/api/impl/NodeApiImpl.java | 20 ++ .../org/dubhe/k8s/api/impl/PodApiImpl.java | 7 +- .../dubhe/k8s/api/impl/TerminalApiImpl.java | 2 +- .../dubhe/k8s/constant/K8sParamConstants.java | 1 + .../BaseK8sDeploymentCallbackCreateDTO.java | 8 +- .../k8s/domain/vo/PtJupyterDeployVO.java | 3 + .../k8s/properties/ClusterProperties.java | 4 - .../org/dubhe/k8s/utils/BizConvertUtils.java | 4 +- .../java/org/dubhe/k8s/utils/K8sUtils.java | 2 - .../src/main/resources/kubeconfig_dev | 20 ++ .../src/main/resources/kubeconfig_pre | 19 ++ .../src/main/resources/kubeconfig_prod | 19 ++ .../recycle/enums/RecycleResourceEnum.java | 5 - .../src/main/resources/bootstrap.yml | 8 +- .../src/main/resources/bootstrap.yml | 8 +- .../src/main/resources/bootstrap.yml | 8 +- .../task/DubheDataTaskApplicationTests.java | 17 -- .../dubhe/data/config/DataHarborConfig.java | 36 --- .../AutoLabelModelServiceServiceImpl.java | 30 +- .../src/main/resources/bootstrap.yml | 8 +- .../image/async/HarborImagePushAsync.java | 142 --------- .../image/domain/dto/PtImageQueryDTO.java | 3 - ...mageUploadDTO.java => PtImageSaveDTO.java} | 8 +- .../image/domain/dto/PtImageUpdateDTO.java | 28 +- .../dubhe/image/domain/entity/PtImage.java | 7 - .../dubhe/image/domain/vo/PtImageQueryVO.java | 6 +- .../dubhe/image/rest/PtImageController.java | 29 +- .../dubhe/image/service/PtImageService.java | 22 +- .../service/impl/PtImageServiceImpl.java | 249 ++++++---------- .../image/service/task/ImageRecycleFile.java | 77 ----- .../src/main/resources/bootstrap.yml | 8 +- .../java/org/dubhe/image/PtImageTest.java | 8 +- .../event/callback/DeploymentCallback.java | 2 +- .../dubhek8s/observer/TrainJobObserver.java | 15 +- .../service/impl/SystemNodeServiceImpl.java | 4 +- .../src/main/resources/bootstrap.yml | 8 +- .../dubhe/dubhek8s/k8s/PodCallbackTest.java | 2 +- .../impl/PtAtlasCameraServiceImpl.java | 2 +- .../src/main/resources/bootstrap.yml | 8 +- .../src/main/resources/bootstrap.yml | 8 +- .../service/impl/NoteBookServiceImpl.java | 19 +- .../src/main/resources/bootstrap.yml | 8 +- .../src/main/resources/bootstrap.yml | 8 +- .../config/PointCloudHarborConfig.java | 39 --- .../service/impl/PcDatasetServiceImpl.java | 6 +- .../src/main/resources/bootstrap.yml | 8 +- .../config/GatewayServiceHandler.java | 46 ++- .../config/MetricsGatewayFilterFactory.java | 2 +- .../src/main/resources/bootstrap.yml | 8 +- .../resources/mapper/GatewayRouteMapper.xml | 2 +- .../serving/config/TrainHarborConfig.java | 39 --- .../service/impl/BatchServingServiceImpl.java | 7 +- .../service/impl/ServingServiceImpl.java | 47 ++- .../serving/task/DeployServingAsyncTask.java | 18 +- .../org/dubhe/serving/utils/GrpcClient.java | 17 +- .../src/main/resources/bootstrap.yml | 8 +- .../src/main/resources/bootstrap.yml | 8 +- .../dubhe/terminal/domain/entity/PtImage.java | 7 - .../terminal/domain/entity/Terminal.java | 2 +- .../service/impl/TerminalServiceImpl.java | 16 +- .../src/main/resources/bootstrap.yml | 4 +- .../client/fallback/ImageClientFallback.java | 1 - .../dubhe/train/config/TrainHarborConfig.java | 39 --- .../service/impl/PtTrainJobServiceImpl.java | 48 ++- .../src/main/resources/bootstrap.yml | 8 +- .../gateway/src/main/resources/bootstrap.yml | 8 +- dubhe-server/sql/11-Dubhe-Patch-3.0.sql | 4 +- dubhe-server/yaml/admin.yaml | 4 +- dubhe-server/yaml/common-biz.yaml | 25 +- dubhe-server/yaml/common-k8s.yaml | 53 ++-- dubhe-server/yaml/common-shardingjdbc.yaml | 4 +- dubhe-server/yaml/dubhe-data-dcm.yaml | 2 +- dubhe-server/yaml/dubhe-data-task.yaml | 10 +- dubhe-server/yaml/dubhe-data.yaml | 12 +- dubhe-server/yaml/dubhe-notebook.yaml | 2 +- dubhe-server/yaml/dubhe-serving-gateway.yaml | 5 +- dubhe-server/yaml/dubhe-task.yaml | 52 ---- dubhe-server/yaml/dubhe-terminal.yaml | 2 +- dubhe-server/yaml/gateway.yaml | 282 +++++++++--------- dubhe-server/yaml/image.yaml | 12 +- dubhe-server/yaml/kubeconfig.yaml | 19 -- dubhe-server/yaml/measure.yaml | 10 +- 106 files changed, 826 insertions(+), 1277 deletions(-) delete mode 100644 dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/HarborProperties.java delete mode 100644 dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/enums/ImageStateEnum.java delete mode 100644 dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-clod-prod.yml create mode 100644 dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-dev.yml create mode 100644 dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-open-dev.yml create mode 100644 dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-opendev.yaml create mode 100644 dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-pre.yml create mode 100644 dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-test.yml create mode 100644 dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-istio-dev.yml create mode 100644 dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-istio-test.yml delete mode 100644 dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-prod.yml create mode 100644 dubhe-server/common-k8s/src/main/resources/kubeconfig_dev create mode 100644 dubhe-server/common-k8s/src/main/resources/kubeconfig_pre create mode 100644 dubhe-server/common-k8s/src/main/resources/kubeconfig_prod delete mode 100644 dubhe-server/dubhe-data/src/main/java/org/dubhe/data/config/DataHarborConfig.java delete mode 100644 dubhe-server/dubhe-image/src/main/java/org/dubhe/image/async/HarborImagePushAsync.java rename dubhe-server/dubhe-image/src/main/java/org/dubhe/image/domain/dto/{PtImageUploadDTO.java => PtImageSaveDTO.java} (92%) delete mode 100644 dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/task/ImageRecycleFile.java delete mode 100644 dubhe-server/dubhe-point-cloud/src/main/java/org/dubhe/pointcloud/config/PointCloudHarborConfig.java delete mode 100644 dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/config/TrainHarborConfig.java delete mode 100644 dubhe-server/dubhe-train/src/main/java/org/dubhe/train/config/TrainHarborConfig.java delete mode 100644 dubhe-server/yaml/dubhe-task.yaml delete mode 100644 dubhe-server/yaml/kubeconfig.yaml diff --git a/dubhe-server/README.md b/dubhe-server/README.md index 1f6a8ed..8d7e72f 100644 --- a/dubhe-server/README.md +++ b/dubhe-server/README.md @@ -11,8 +11,8 @@ Nacos + Fegin + Gateway + (Spring Security + JWT + OAuth2) 初始化sql位置 /sql -**地址:** 127.0.0.1:3306 -**用户名:** test **密码:** test +**地址:** 10.5.29.66:3306 +**用户名:** test **密码:** zj12345678 ### Nacos @@ -24,7 +24,7 @@ Nacos + Fegin + Gateway + (Spring Security + JWT + OAuth2) **详见:** https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html -**地址:** http://127.0.0.1:8848/nacos/#/login +**地址:** http://10.105.1.133:8848/nacos/#/login **用户名:** nacos **密码:** nacos diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/client/fallback/AuthServiceFallback.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/client/fallback/AuthServiceFallback.java index 5aa0c78..26de1e4 100644 --- a/dubhe-server/admin/src/main/java/org/dubhe/admin/client/fallback/AuthServiceFallback.java +++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/client/fallback/AuthServiceFallback.java @@ -27,7 +27,6 @@ import java.util.Map; * @description Feign 熔断处理类 * @date 2020-11-04 */ -@Component public class AuthServiceFallback implements AuthServiceClient { diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/service/impl/UserServiceImpl.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/service/impl/UserServiceImpl.java index 2eaae7e..7d601e0 100644 --- a/dubhe-server/admin/src/main/java/org/dubhe/admin/service/impl/UserServiceImpl.java +++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/service/impl/UserServiceImpl.java @@ -16,6 +16,7 @@ */ package org.dubhe.admin.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.asymmetric.KeyType; @@ -704,6 +705,9 @@ public class UserServiceImpl extends ServiceImpl implements Us Oauth2TokenDTO userDto = restResult.getData(); UserDTO user = findByName(authUserDTO.getUsername()); Set permissions = this.queryPermissionByUserId(user.getId()); + if (CollUtil.isEmpty(permissions)) { + throw new BusinessException(BaseErrorCodeEnum.SYSTEM_ROLE_NOT_EXISTS); + } // 返回 token 与 用户信息 authInfo.put("token", userDto.getTokenHead() + userDto.getToken()); authInfo.put("user", user); diff --git a/dubhe-server/admin/src/main/resources/bootstrap.yml b/dubhe-server/admin/src/main/resources/bootstrap.yml index 8c1abf5..720cc0f 100644 --- a/dubhe-server/admin/src/main/resources/bootstrap.yml +++ b/dubhe-server/admin/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enabled: true - server-addr: 127.0.0.1:8848 - namespace: dubhe-prod + server-addr: 10.105.1.133:8848 + namespace: dubhe-server-cloud-dev shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -35,7 +35,7 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/admin/src/test/java/org/dubhe/admin/AdminApplicationTests.java b/dubhe-server/admin/src/test/java/org/dubhe/admin/AdminApplicationTests.java index 0711ac7..b145a05 100644 --- a/dubhe-server/admin/src/test/java/org/dubhe/admin/AdminApplicationTests.java +++ b/dubhe-server/admin/src/test/java/org/dubhe/admin/AdminApplicationTests.java @@ -1,20 +1,3 @@ -/** - * Copyright 2020 Tianshu AI Platform. All Rights Reserved. - * - * 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. - * ============================================================= - */ - package org.dubhe.admin; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/dubhe-server/auth/src/main/resources/bootstrap.yml b/dubhe-server/auth/src/main/resources/bootstrap.yml index 393e707..5361c38 100644 --- a/dubhe-server/auth/src/main/resources/bootstrap.yml +++ b/dubhe-server/auth/src/main/resources/bootstrap.yml @@ -11,8 +11,8 @@ spring: nacos: config: enabled: true - server-addr: 127.0.0.1:8848 - namespace: dubhe-prod + server-addr: 10.105.1.133:8848 + namespace: dubhe-server-cloud-dev shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -23,7 +23,7 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/auth/src/test/java/org/dubhe/auth/AuthApplicationTests.java b/dubhe-server/auth/src/test/java/org/dubhe/auth/AuthApplicationTests.java index eeac482..fe4ff09 100644 --- a/dubhe-server/auth/src/test/java/org/dubhe/auth/AuthApplicationTests.java +++ b/dubhe-server/auth/src/test/java/org/dubhe/auth/AuthApplicationTests.java @@ -1,20 +1,3 @@ -/** - * Copyright 2020 Tianshu AI Platform. All Rights Reserved. - * - * 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. - * ============================================================= - */ - package org.dubhe.auth; import org.junit.jupiter.api.Test; diff --git a/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/HarborProperties.java b/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/HarborProperties.java deleted file mode 100644 index ed6ba31..0000000 --- a/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/HarborProperties.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright 2020 Tianshu AI Platform. All Rights Reserved. - * - * 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. - * ============================================================= - */ -package org.dubhe.biz.base.constant; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -/** - * @description harbor相关配置 - * @date 2020-07-17 - */ -@Data -@Component -@ConfigurationProperties(prefix = "harbor") -public class HarborProperties { - - private String address; - - private String username; - - private String password; -} diff --git a/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/Permissions.java b/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/Permissions.java index bfec32b..5db4a6d 100644 --- a/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/Permissions.java +++ b/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/Permissions.java @@ -110,7 +110,7 @@ public final class Permissions { * 镜像管理 */ public static final String IMAGE = "hasAuthority('ROLE_training:image')"; - public static final String IMAGE_UPLOAD = "hasAuthority('ROLE_training:image:upload')"; + public static final String IMAGE_SAVE = "hasAuthority('ROLE_training:image:save')"; public static final String IMAGE_EDIT = "hasAuthority('ROLE_training:image:edit')"; public static final String IMAGE_DELETE = "hasAuthority('ROLE_training:image:delete')"; public static final String IMAGE_EDIT_DEFAULT = "hasAuthority('ROLE_training:image:editDefault')"; diff --git a/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/StringConstant.java b/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/StringConstant.java index 4087d43..a7a534d 100644 --- a/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/StringConstant.java +++ b/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/constant/StringConstant.java @@ -126,9 +126,6 @@ public final class StringConstant { public static final String CACHE_TASK_ID ="task_id"; public static final String CACHE_TASK_NAME ="task_name"; - - public static final String DEFAULT_IMAGE_PROJECT ="dubhe"; - /** * python命令行参数格式 */ diff --git a/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/enums/BaseErrorCodeEnum.java b/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/enums/BaseErrorCodeEnum.java index f942768..bf6ec8f 100644 --- a/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/enums/BaseErrorCodeEnum.java +++ b/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/enums/BaseErrorCodeEnum.java @@ -54,8 +54,8 @@ public enum BaseErrorCodeEnum implements ErrorCode { SYSTEM_USER_EMAIL_NOT_EXISTS(20013, "该邮箱未注册!"), SYSTEM_USER_CANNOT_DELETE(20014, "系统默认用户不可删除!"), SYSTEM_ROLE_CANNOT_DELETE(20015, "系统默认角色不可删除!"), - - DATASET_ADMIN_PERMISSION_ERROR(1310,"无此权限,请联系管理员"), + SYSTEM_ROLE_NOT_EXISTS(20016, "用户绑定角色异常,请联系管理员!"), + DATASET_ADMIN_PERMISSION_ERROR(1310, "无此权限,请联系管理员"), ; diff --git a/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/enums/ImageStateEnum.java b/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/enums/ImageStateEnum.java deleted file mode 100644 index 27bdb8d..0000000 --- a/dubhe-server/common-biz/base/src/main/java/org/dubhe/biz/base/enums/ImageStateEnum.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Copyright 2020 Tianshu AI Platform. All Rights Reserved. - * - * 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. - * ============================================================= - */ - -package org.dubhe.biz.base.enums; - -/** - * @description 镜像运行状态枚举 - * @date 2020-07-15 - **/ -public enum ImageStateEnum { - - MAKING(0, "制作中"), - SUCCESS(1, "制作成功"), - FAIL(2, "制作失败"); - - - /** - * 编码 - */ - private Integer code; - - /** - * 描述 - */ - private String description; - - ImageStateEnum(int code, String description) { - this.code = code; - this.description = description; - } - - public Integer getCode() { - return code; - } - - public String getDescription() { - return description; - } -} diff --git a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-clod-prod.yml b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-clod-prod.yml deleted file mode 100644 index 01414a7..0000000 --- a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-clod-prod.yml +++ /dev/null @@ -1,10 +0,0 @@ -spring: - cloud: - nacos: - context-path: /nacos - config: - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 - discovery: - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 diff --git a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-dev.yml b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-dev.yml new file mode 100644 index 0000000..85610a8 --- /dev/null +++ b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-dev.yml @@ -0,0 +1,12 @@ +spring: + cloud: + nacos: + username: nacos + password: Tianshu + context-path: /nacos + config: + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.132:8848 + discovery: + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.132:8848 diff --git a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-open-dev.yml b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-open-dev.yml new file mode 100644 index 0000000..2881669 --- /dev/null +++ b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-open-dev.yml @@ -0,0 +1,12 @@ +spring: + cloud: + nacos: + username: root + password: zjlab + context-path: /nacos + config: + namespace: dubhe-server-cloud-open-dev + server-addr: 10.101.12.15:8848 + discovery: + namespace: dubhe-server-cloud-open-dev + server-addr: 10.101.12.15:8848 diff --git a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-opendev.yaml b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-opendev.yaml new file mode 100644 index 0000000..b53c1a1 --- /dev/null +++ b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-opendev.yaml @@ -0,0 +1,12 @@ +spring: + cloud: + nacos: + username: nacos + password: Tianshu + context-path: /nacos + config: + namespace: dubhe-server-cloud-open-dev + server-addr: 10.105.1.132:8848 + discovery: + namespace: dubhe-server-cloud-open-dev + server-addr: 10.105.1.132:8848 diff --git a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-pre.yml b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-pre.yml new file mode 100644 index 0000000..b8cc6ee --- /dev/null +++ b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-pre.yml @@ -0,0 +1,9 @@ +spring: + cloud: + nacos: + config: + namespace: dubhe-server-cloud-pre + server-addr: 10.105.1.133:8848 + discovery: + namespace: dubhe-server-cloud-pre + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-test.yml b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-test.yml new file mode 100644 index 0000000..9352755 --- /dev/null +++ b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-cloud-test.yml @@ -0,0 +1,12 @@ +spring: + cloud: + nacos: + username: nacos + password: Tianshu + context-path: /nacos + config: + namespace: dubhe-server-cloud-test + server-addr: 10.105.1.132:8848 + discovery: + namespace: dubhe-server-cloud-test + server-addr: 10.105.1.132:8848 diff --git a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-istio-dev.yml b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-istio-dev.yml new file mode 100644 index 0000000..f3895a8 --- /dev/null +++ b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-istio-dev.yml @@ -0,0 +1,7 @@ +spring: + cloud: + nacos: + config: + namespace: dubhe-server-istio-dev + discovery: + namespace: dubhe-server-istio-dev diff --git a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-istio-test.yml b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-istio-test.yml new file mode 100644 index 0000000..51c1cd8 --- /dev/null +++ b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-istio-test.yml @@ -0,0 +1,7 @@ +spring: + cloud: + nacos: + config: + namespace: dubhe-server-istio-test + discovery: + namespace: dubhe-server-istio-test diff --git a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-prod.yml b/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-prod.yml deleted file mode 100644 index 01414a7..0000000 --- a/dubhe-server/common-cloud/configuration/src/main/resources/bootstrap-prod.yml +++ /dev/null @@ -1,10 +0,0 @@ -spring: - cloud: - nacos: - context-path: /nacos - config: - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 - discovery: - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/NodeApi.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/NodeApi.java index d2b531a..1315693 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/NodeApi.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/NodeApi.java @@ -207,4 +207,11 @@ public interface NodeApi { * @return */ List geBizTaintListByUserId(); + + /** + * 获取一个可用node的ip + * + * @return String + */ + String getAvailableNodeIp(); } diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/JupyterResourceApiImpl.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/JupyterResourceApiImpl.java index 2d82e0a..8dc0256 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/JupyterResourceApiImpl.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/JupyterResourceApiImpl.java @@ -389,14 +389,11 @@ public class JupyterResourceApiImpl implements JupyterResourceApi { StatefulSet statefulSet = deployStatefulSet(); //部署svc Service service = deployService(); - //部署ingress - Ingress ingress = deployIngress(); if (delayDelete != null && delayDelete > ZERO) { taskYamlBO.append(secret); taskYamlBO.append(statefulSet); taskYamlBO.append(service); - taskYamlBO.append(ingress); long stopUnixTime = System.currentTimeMillis() / THOUSAND_LONG + delayDelete * SIXTY_LONG; Timestamp stopDisplayTime = new Timestamp(stopUnixTime * THOUSAND_LONG); @@ -412,7 +409,7 @@ public class JupyterResourceApiImpl implements JupyterResourceApi { k8sTaskService.createOrUpdateTask(k8sTask); } - return new PtJupyterDeployVO(secret, statefulSet, service, ingress); + return new PtJupyterDeployVO(secret, statefulSet, service, null); } /** @@ -440,7 +437,7 @@ public class JupyterResourceApiImpl implements JupyterResourceApi { .build(); LogUtil.info(LogEnum.BIZ_K8S, "Ready to deploy {}", secretName); - secret = client.secrets().create(secret); + secret = client.secrets().inNamespace(namespace).create(secret); LogUtil.info(LogEnum.BIZ_K8S, "{} deployed successfully", secretName); } @@ -647,7 +644,7 @@ public class JupyterResourceApiImpl implements JupyterResourceApi { .build(); LogUtil.info(LogEnum.BIZ_K8S, "Ready to deploy {}, yaml info is : {}", statefulSetName, YamlUtils.dumpAsYaml(statefulSet)); resourceIisolationApi.addIisolationInfo(statefulSet); - statefulSet = client.apps().statefulSets().create(statefulSet); + statefulSet = client.apps().statefulSets().inNamespace(namespace).create(statefulSet); LogUtil.info(LogEnum.BIZ_K8S, "{} deployed successfully", statefulSetName); return statefulSet; } @@ -678,22 +675,23 @@ public class JupyterResourceApiImpl implements JupyterResourceApi { .withTargetPort(new IntOrString(CONTAINER_PORT)) .withName(CONTAINER_NAME) .endPort() - .withClusterIP("None") .withSelector(podLabels) + .withType("NodePort") .endSpec() .build(); LogUtil.info(LogEnum.BIZ_K8S, "Ready to deploy {}, yaml info is : {}", svcName, YamlUtils.dumpAsYaml(svc)); - svc = client.services().create(svc); + svc = client.services().inNamespace(svc.getMetadata().getNamespace()).create(svc); LogUtil.info(LogEnum.BIZ_K8S, "{} deployed successfully", svcName); return svc; } /** - * 部署ingress + * 部署ingress,弃用泛域名,暴露方式由ingress改为 service nodePort * * @return Ingress 类 */ + @Deprecated private Ingress deployIngress() { Ingress ingress = null; IngressList list = client.extensions().ingresses().inNamespace(namespace).withLabels(LabelUtils.withEnvResourceName(baseName)).list(); @@ -727,7 +725,7 @@ public class JupyterResourceApiImpl implements JupyterResourceApi { .endSpec() .build(); LogUtil.info(LogEnum.BIZ_K8S, "Ready to deploy {}, yaml info is : {}", ingressName, YamlUtils.dumpAsYaml(ingress)); - ingress = client.extensions().ingresses().create(ingress); + ingress = client.extensions().ingresses().inNamespace(namespace).create(ingress); LogUtil.info(LogEnum.BIZ_K8S, "{} deployed successfully", ingressName); return ingress; } diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/ModelServingApiImpl.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/ModelServingApiImpl.java index 46a2582..00d7a1b 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/ModelServingApiImpl.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/ModelServingApiImpl.java @@ -65,6 +65,7 @@ import org.dubhe.k8s.enums.K8sKindEnum; import org.dubhe.k8s.enums.K8sResponseEnum; import org.dubhe.k8s.enums.LimitsOfResourcesEnum; import org.dubhe.k8s.enums.RestartPolicyEnum; +import org.dubhe.k8s.enums.ServiceTypeENum; import org.dubhe.k8s.enums.ShellCommandEnum; import org.dubhe.k8s.utils.BizConvertUtils; import org.dubhe.k8s.utils.K8sUtils; @@ -144,7 +145,6 @@ public class ModelServingApiImpl implements ModelServingApi { //名称生成 String deploymentName = StrUtil.format(K8sParamConstants.RESOURCE_NAME_TEMPLATE, bo.getResourceName(), RandomUtil.randomString(MagicNumConstant.EIGHT)); String svcName = StrUtil.format(K8sParamConstants.SUB_RESOURCE_NAME_TEMPLATE, bo.getResourceName(), K8sParamConstants.SVC_SUFFIX, RandomUtil.randomString(MagicNumConstant.FIVE)); - String ingressName = StrUtil.format(K8sParamConstants.SUB_RESOURCE_NAME_TEMPLATE, bo.getResourceName(), K8sParamConstants.INGRESS_SUFFIX, RandomUtil.randomString(MagicNumConstant.FIVE)); //标签生成 Map baseLabels = LabelUtils.getBaseLabels(bo.getResourceName(), bo.getBusinessLabel()); @@ -164,45 +164,12 @@ public class ModelServingApiImpl implements ModelServingApi { if (bo.getGrpcPort() != null) { buildServiceBO.addPort(ResourceBuildUtils.buildServicePort(bo.getGrpcPort(), bo.getGrpcPort(), SymbolConstant.GRPC)); } + buildServiceBO.setType(ServiceTypeENum.NODE_PORT.getType()); Service service = ResourceBuildUtils.buildService(buildServiceBO); LogUtil.info(LogEnum.BIZ_K8S, "Ready to deploy {}, yaml信息为{}", svcName, YamlUtils.dumpAsYaml(service)); - Service serviceResult = client.services().create(service); + Service serviceResult = client.services().inNamespace(bo.getNamespace()).create(service); - //部署ingress - BuildIngressBO buildIngressBO = new BuildIngressBO(bo.getNamespace(), ingressName, baseLabels); - if (StringUtils.isNotEmpty(buildIngressBO.getMaxUploadSize())) { - buildIngressBO.putAnnotation(K8sParamConstants.INGRESS_PROXY_BODY_SIZE_KEY, buildIngressBO.getMaxUploadSize()); - } - buildIngressBO.putAnnotation(K8sParamConstants.INGRESS_READ_TIMEOUT_KEY, String.valueOf(MagicNumConstant.TEN)); - buildIngressBO.putAnnotation(K8sParamConstants.INGRESS_NEXT_UPSTREAM_TIMEOUT_KEY, String.valueOf(MagicNumConstant.TEN)); - if (bo.getHttpPort() != null) { - String httpHost = RandomUtil.randomString(MagicNumConstant.SIX) + SymbolConstant.DOT + servingHost; - buildIngressBO.addIngressRule(ResourceBuildUtils.buildIngressRule(httpHost, svcName, SymbolConstant.HTTP)); - } - Secret secretResult = null; - if (bo.getGrpcPort() != null) { - String secretName = StrUtil.format(K8sParamConstants.SUB_RESOURCE_NAME_TEMPLATE, bo.getResourceName(), SymbolConstant.TOKEN, RandomUtil.randomString(MagicNumConstant.FIVE)); - Map data = new HashMap(MagicNumConstant.FOUR) { - { - put(K8sParamConstants.SECRET_TLS_TLS_CRT, servingTlsCrt); - put(K8sParamConstants.SECRET_TLS_TLS_KEY, servingTlsKey); - } - }; - Secret secret = ResourceBuildUtils.buildTlsSecret(bo.getNamespace(), secretName, baseLabels, data); - secretResult = client.secrets().create(secret); - - String grpcHost = RandomUtil.randomString(MagicNumConstant.SIX) + SymbolConstant.DOT + servingHost; - buildIngressBO.addIngressRule(ResourceBuildUtils.buildIngressRule(grpcHost, svcName, SymbolConstant.GRPC)); - buildIngressBO.addIngressTLS(ResourceBuildUtils.buildIngressTLS(secretName, grpcHost)); - buildIngressBO.putAnnotation(K8sParamConstants.INGRESS_CLASS_KEY, StringConstant.NGINX_LOWERCASE); - buildIngressBO.putAnnotation(K8sParamConstants.INGRESS_SSL_REDIRECT_KEY, StringConstant.TRUE_LOWERCASE); - buildIngressBO.putAnnotation(K8sParamConstants.INGRESS_BACKEND_PROTOCOL_KEY, StringConstant.GRPC_CAPITALIZE); - } - Ingress ingress = ResourceBuildUtils.buildIngress(buildIngressBO); - LogUtil.info(LogEnum.BIZ_K8S, "Ready to deploy {}, yaml信息为{}", ingressName, YamlUtils.dumpAsYaml(ingress)); - Ingress ingressResult = client.extensions().ingresses().create(ingress); - - return new ModelServingVO(BizConvertUtils.toBizSecret(secretResult), BizConvertUtils.toBizService(serviceResult), BizConvertUtils.toBizDeployment(deploymentResult), BizConvertUtils.toBizIngress(ingressResult)); + return new ModelServingVO(null, BizConvertUtils.toBizService(serviceResult), BizConvertUtils.toBizDeployment(deploymentResult), null); } catch (KubernetesClientException e) { LogUtil.error(LogEnum.BIZ_K8S, "ModelOptJobApiImpl.create error, param:{} error:", bo, e); return new ModelServingVO().error(String.valueOf(e.getCode()), e.getMessage()); diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/NodeApiImpl.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/NodeApiImpl.java index f362822..7328d0b 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/NodeApiImpl.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/NodeApiImpl.java @@ -41,6 +41,7 @@ import org.dubhe.k8s.constant.K8sLabelConstants; import org.dubhe.k8s.constant.K8sParamConstants; import org.dubhe.k8s.domain.PtBaseResult; import org.dubhe.k8s.domain.resource.BizNode; +import org.dubhe.k8s.domain.resource.BizNodeAddress; import org.dubhe.k8s.domain.resource.BizTaint; import org.dubhe.k8s.domain.vo.PtNodeMetricsVO; import org.dubhe.k8s.enums.K8sResponseEnum; @@ -560,6 +561,25 @@ public class NodeApiImpl implements NodeApi { return geBizTaintListByUserId(userContextService.getCurUserId()); } + /** + * 获取一个可用node的ip + * + * @return String + */ + @Override + public String getAvailableNodeIp(){ + List nodes = listAll(); + for (BizNode node : nodes){ + if (node.getReady() && !node.isUnschedulable()){ + for (BizNodeAddress address : node.getAddresses()){ + if (K8sParamConstants.INTERNAL_IP.equals(address.getType())){ + return address.getAddress(); + } + } + } + } + return ""; + } /** * 查询节点内存资源是否可分配 diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/PodApiImpl.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/PodApiImpl.java index 643ff26..8c4e1b6 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/PodApiImpl.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/PodApiImpl.java @@ -400,13 +400,16 @@ public class PodApiImpl implements PodApi { public String getUrlByResourceName(String namespace, String resourceName) { LogUtil.info(LogEnum.BIZ_K8S,"Start GetUrlByResourceName {} {}",namespace,resourceName); PtJupyterDeployVO info = jupyterResourceApi.get(namespace, resourceName); - if (info != null && info.getIngressInfo() != null && CollectionUtil.isNotEmpty(info.getIngressInfo().getRules())) { + if (info != null && info.getServiceInfo() != null && CollectionUtil.isNotEmpty(info.getServiceInfo().getPorts())) { String token = getTokenByResourceName(namespace, resourceName); if (StringUtils.isBlank(token)) { LogUtil.info(LogEnum.BIZ_K8S, "GetUrlByResourceName Jupyter Notebook token not generated,[namespace]={}, [resourceName]={}", namespace, resourceName); return ""; } - String url = StrUtil.format(POD_URL, info.getIngressInfo().getRules().get(0).getHost(), k8sUtils.getPort(), token); + + BizPod pod = getWithResourceName(namespace,resourceName); + + String url = StrUtil.format(POD_URL, pod.getHostIP(), info.getServiceInfo().getPorts().get(0).getNodePort(), token); return validateJupyterUrl(url); } LogUtil.info(LogEnum.BIZ_K8S, "GetUrlByResourceName Jupyter statefulset not created,[namespace]={}, [resourceName]={}",namespace,resourceName); diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/TerminalApiImpl.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/TerminalApiImpl.java index 74ff6af..bfd594a 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/TerminalApiImpl.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/api/impl/TerminalApiImpl.java @@ -148,7 +148,7 @@ public class TerminalApiImpl implements TerminalApi { } Service service = ResourceBuildUtils.buildService(buildServiceBO); LogUtil.info(LogEnum.BIZ_K8S, "Ready to deploy {}, yaml信息为{}", svcName, YamlUtils.dumpAsYaml(service)); - Service serviceResult = client.services().create(service); + Service serviceResult = client.services().inNamespace(service.getMetadata().getNamespace()).create(service); return new TerminalResourceVO(BizConvertUtils.toBizDeployment(deploymentResult),BizConvertUtils.toBizService(serviceResult)); }catch (KubernetesClientException e) { LogUtil.error(LogEnum.BIZ_K8S, "TerminalApiImpl.create error, param:{} error:", bo, e); diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/constant/K8sParamConstants.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/constant/K8sParamConstants.java index 9ecad21..ba0c1a5 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/constant/K8sParamConstants.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/constant/K8sParamConstants.java @@ -101,4 +101,5 @@ public class K8sParamConstants { public static final String WAITING_REASON_CONTAINER_CREATING = "ContainerCreating"; + public final static String INTERNAL_IP = "InternalIP"; } diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/domain/dto/BaseK8sDeploymentCallbackCreateDTO.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/domain/dto/BaseK8sDeploymentCallbackCreateDTO.java index bc779c8..805012d 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/domain/dto/BaseK8sDeploymentCallbackCreateDTO.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/domain/dto/BaseK8sDeploymentCallbackCreateDTO.java @@ -57,16 +57,21 @@ public class BaseK8sDeploymentCallbackCreateDTO { @NotNull(message = "replicas 不能为空!") private Integer replicas; + @ApiModelProperty(required = true, value = "action") + @NotBlank(message = "action 不能为空!") + private String action; + public BaseK8sDeploymentCallbackCreateDTO() { } - public BaseK8sDeploymentCallbackCreateDTO(String namespace, String resourceName, String deploymentName, Integer readyReplicas, Integer replicas) { + public BaseK8sDeploymentCallbackCreateDTO(String namespace, String resourceName, String deploymentName, Integer readyReplicas, Integer replicas,String action) { this.namespace = namespace; this.resourceName = resourceName; this.deploymentName = deploymentName; this.readyReplicas = readyReplicas; this.replicas = replicas; + this.action = action; } @Override @@ -77,6 +82,7 @@ public class BaseK8sDeploymentCallbackCreateDTO { ", deploymentName='" + deploymentName + '\'' + ", readyReplicas='" + readyReplicas + '\'' + ", replicas='" + replicas + '\'' + + ", action='" + action + '\'' + '}'; } } diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/domain/vo/PtJupyterDeployVO.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/domain/vo/PtJupyterDeployVO.java index e71f522..1572b10 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/domain/vo/PtJupyterDeployVO.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/domain/vo/PtJupyterDeployVO.java @@ -30,6 +30,7 @@ import org.dubhe.k8s.annotation.K8sField; import org.dubhe.k8s.constant.K8sParamConstants; import org.dubhe.k8s.domain.PtBaseResult; import org.dubhe.k8s.domain.resource.BizContainer; +import org.dubhe.k8s.domain.resource.BizServicePort; import org.dubhe.k8s.utils.MappingUtils; import java.util.List; @@ -105,6 +106,8 @@ public class PtJupyterDeployVO extends PtBaseResult { private String namespace; @K8sField("metadata:uid") private String uid; + @K8sField("spec:ports") + private List ports; } @Data diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/properties/ClusterProperties.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/properties/ClusterProperties.java index a2b3385..ee369cb 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/properties/ClusterProperties.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/properties/ClusterProperties.java @@ -33,10 +33,6 @@ public class ClusterProperties { private String nfs; - private String host; - - private String port; - private String kubeconfig; /** diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/utils/BizConvertUtils.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/utils/BizConvertUtils.java index 87636bf..65ab1ca 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/utils/BizConvertUtils.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/utils/BizConvertUtils.java @@ -218,7 +218,9 @@ public class BizConvertUtils { */ public static BizIngress toBizIngress(Ingress ingress) { BizIngress bizIngress = MappingUtils.mappingTo(ingress, BizIngress.class); - bizIngress.getRules().forEach(BizIngressRule::takeServicePort); + if (bizIngress != null){ + bizIngress.getRules().forEach(BizIngressRule::takeServicePort); + } return bizIngress; } diff --git a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/utils/K8sUtils.java b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/utils/K8sUtils.java index abcde76..8234120 100644 --- a/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/utils/K8sUtils.java +++ b/dubhe-server/common-k8s/src/main/java/org/dubhe/k8s/utils/K8sUtils.java @@ -98,8 +98,6 @@ public class K8sUtils implements ApplicationContextAware { nfs = clusterProperties.getNfs(); - host = clusterProperties.getHost(); - port = clusterProperties.getPort(); //打印集群信息 LogUtil.info(LogEnum.BIZ_K8S, "ApiVersion : {}", client.getApiVersion()); diff --git a/dubhe-server/common-k8s/src/main/resources/kubeconfig_dev b/dubhe-server/common-k8s/src/main/resources/kubeconfig_dev new file mode 100644 index 0000000..c6d4211 --- /dev/null +++ b/dubhe-server/common-k8s/src/main/resources/kubeconfig_dev @@ -0,0 +1,20 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1URXlPVEE0TXpNeE4xb1hEVE14TVRFeU56QTRNek14TjFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTmpCCmxkVWhGQkdqSDNsYXIxTW9wVUgvMW8xNVUwbEhvcGQzZjgyL0tWMlEyOU9BKzhjMkhXYTd3R01QSzhxL1JmSVAKTjlnYXJJd0FqZXFwNHFSMWhEcVhka05WN2NOZUZ2OGdoMUVYSzMyTUxoaFZJdXhkTnF6OW9GVm85RDZqTzQ5awpEOWQrM215eU4zamxsT2wyTWVRMUY0STlHSTFabjFCOG5LQVZWVjFIZTBPTGZjVTIrZG5mU0g4ZFdqV2RPQlBhCkJmbGU4UFRLQy9tOFVmcTQvanArVU92R04yVEhIaXk0V2UyTWFEK0xxWDIzekE0T1FlK3NrdlY4bHlqK0ppVUQKVVRiM2xzazlhTDMxblMxUmpnVStkbVIyR2xHQ1BHWEhNc2Z3MlVCZzljZEM5ZzhKc2dFeTJDa04xMitjeWx3dApDbHFQQ3o0MlNlNEJMNWF1ZGJFQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZCTmFSa0hpTzdvZDd2U3pUUm9qaHFTWStSNXpNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFDVnZGRUg0ZEYzUTQrRDlOeHBZdDM4ZG9mb0ExYjlYOWNndU5YYktvbGxHK1lQeWl4NwpBcGlMWkp2WFlsbk0rUU5BYjMyOU84VmNkQUp0aDZ4MjVHSVNUVjFGbXBWWHFlRVIvUFJOZURsaHFybzVwYUlVCkV1YUQzYldxaitWb2p6b1AyVzZMU21RdzQwNUIzV0JKRlJtdm51bW9LYStyUWEySVoralRNMVQ5bDV5bXR2YloKS0lXNGZFZ0N2VEhPSmtRLzBGWDg3dEc0VlVJZ3hHRXZJU2lUUkJYc3hnQXdVK0I5SnN4bEZSS3NHYTJ4QkE2bQprZXR1VFVlZkswTGZRMFlMWVVKSVA5Y0RsNm5QSld5U0NTcWFZUGRoaGxERWxEYUt4d2JZeHdBVkI0ZzV1cWhNCnZrMkN0RVFHOWg0b2ZxZjQ4VDFLVlJVRGo5UzdBL2xtbEZxNgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + server: https://10.5.26.91:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + namespace: default + user: kubernetes-admin + name: kubernetes-admin@kubernetes +current-context: kubernetes-admin@kubernetes +kind: Config +preferences: {} +users: +- name: kubernetes-admin + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lJT21TandKODdaUWt3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TVRFeE1qa3dPRE16TVRkYUZ3MHlNakV4TWprd09ETXpNVGhhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXdSWTJuYkJZc25KMWxlQ1MKS1lxbCtLSlBoOW5UdkxqanNRczJobEJrcmM0M1o5eUNEUTM5V1RWSkZHdHZzUDVQK1JNdzFOYUY5QlJUbTQ2dQpOQXBYTGt2bTRLZm1mL2taVUh5clpLYTllSnlkbTRWZTNjNWVWeXpidHRVUVgxQUNFOGZIM0VqY21hRHhPZGViCjBHa3dHc2FnVVJiQ1JxSWpZYmQ3V3BkK3F1OGRuUC9TbmJkaURuaU9sNVVoSlhMUEl6TmlLZTZnREt3NUN6VGgKbVVjZnc1azB4WFpwRFBIckwxOG4yMVB0dlRZSEhxYXo0ckx5MWZiWWsyOG54cXZEaHYzUVBXVldRNGhVR25tZQpNRXZlcTRuNU1sRGJOU2tZUHhaSDNUbUhrZldXR1Z2dGI1RDFLeStSbnFISUxNZEIvdHN3YisyaDVBQTE0WXJICjhBbnZ5UUlEQVFBQm8wZ3dSakFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0h3WURWUjBqQkJnd0ZvQVVFMXBHUWVJN3VoM3U5TE5OR2lPR3BKajVIbk13RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFNdVZaem5pdlhXeDV1dHl5cGppcHJQWkdxeXVYb1J1NVR0eEZwMVJFcHVIb0Z1NHg4VkNUYkplCnNzNmN2VitORmdIa3BLSHlWb2Y0YStRNHlOcGZmMWcrL3d3a05XcHlBQTZBUWdCbW00djBIV1ZVTzYwVVN0VEcKckFhQVUyZ1R6dGYvWll3RFpreFdIUmo0V3ZIRjZRaDhUYUdFVTdaL1dWbC9rOW82MkJGNGRza1pCRVZmcDFvMApMSkorcGxmdXpLOTNwN0t4ME9hSUhHUFRPcnBydEc1ZmR1U2NmRDFUck1nOE1zbmIyRG5XTHVXNzZPUi92cVRBCmVaRFI0Nis5aTllKytQMUh0eDZZMFJNVVpuS1o0MCtIc3dFUjZFZHFINmdJd3Zia2FvSXQydmF2Y2dxdXQ2bWUKZ1VoaVlYelljREhmRllFOUJVWU5UVm1zdmxNOSt1RT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBd1JZMm5iQllzbkoxbGVDU0tZcWwrS0pQaDluVHZMampzUXMyaGxCa3JjNDNaOXlDCkRRMzlXVFZKRkd0dnNQNVArUk13MU5hRjlCUlRtNDZ1TkFwWExrdm00S2ZtZi9rWlVIeXJaS2E5ZUp5ZG00VmUKM2M1ZVZ5emJ0dFVRWDFBQ0U4ZkgzRWpjbWFEeE9kZWIwR2t3R3NhZ1VSYkNScUlqWWJkN1dwZCtxdThkblAvUwpuYmRpRG5pT2w1VWhKWExQSXpOaUtlNmdES3c1Q3pUaG1VY2Z3NWsweFhacERQSHJMMThuMjFQdHZUWUhIcWF6CjRyTHkxZmJZazI4bnhxdkRodjNRUFdWV1E0aFVHbm1lTUV2ZXE0bjVNbERiTlNrWVB4WkgzVG1Ia2ZXV0dWdnQKYjVEMUt5K1JucUhJTE1kQi90c3diKzJoNUFBMTRZckg4QW52eVFJREFRQUJBb0lCQVFDQVA4cmpEbUM3bGo3Mwo0QVAxUjd4WjJ5Vk1MS2p3N3pWOVFOOWtjejJNSEM2ODg4QUYvOGJKWEJWQVZPUUpBY0lJeEhCb3pseUc5SUZjCkQzY3g1YlJtY2MvV1pHODdqUzc5UVBGdWx6bStSUGlDZGlHKzNmWFhuVm9LcEphTldFMG82a2ViejJHSFFWazQKZkRkb1JKWEpFeWtrOHlMelczcDR5ekJKeWRvK21oQmhZWjRCd2xwRVExeURQU0xoTnpSR0NRL0tUTm94T1ZQTQppcVJUdkR2MGhZMTFLdGk1dExMbk1RWnIvaDJRNTliT3VaQVg0NDFiWVJjSzNyU2R0TzFBSGhYVmpSMDlZWFZUCnJwbE44VkhGeE1wZjVaNHFRTW5idk1yb1B0cU5PTzlqWCtrWjQrY2p2UjlQbzNaK1Y5QU5tUHR1bEtMejhFbjYKcUZSYTVTc3BBb0dCQU0vTStvU2t1QVpsT1ZXR1JsdkNlbE0vMHJWUDFrRTdSeHl2NkZDT2EySTlFcTEvUThraQo0N05saHZ2ei9TcmZia040Ymg2Z1RXOUc3WGVpZGtWWEhiaVRmZGlNcXA4YzJ5QTByQVJrWGtZNStycUpZRWlGCmFpOE1jUUVhKzRObzdHOC9xSk5hZTFtVzBGNE5JUTFoRlRMNHMxTnJ5Z0pIaUxDeHhIdVg4cjVUQW9HQkFPM2YKaU9uSm5qY3IrTmltbytGVXYvaHp5SjMzQ2FjNWNjakF5bk0vUGpheGRhOXk4RW1mL2x2eURDQmsranRydlV3NQo4eG1lMHc3UXZJNzlZZkljc2JrYTRnb1dtREIySXZXeGlJRkZCcWwzOUd1eFRYVUpCb2R6MXF4TFJWL2tSekZYCkhIZFM2VTVVTDJINkRQMmo2aVk3NCtWOHhSVlBhQnpPRnQrdDlMM3pBb0dBVjZMVDJGTDdoVDcxWWh0QjJ2cjIKeWRzMXl0K0R0WGtCY1pqQ09nOEdQS1VURm5hQXFQZjgzYkNvcitOalZzeHAzU3lTREhxQWpiaDA5NnBkaExyTAp2d2I4NFBIYUYwWjlKMlR2VXQ3ZFgzS2VTa01iaHhvMUFPaVhVK2NFUVpSamVqdDNwY1ZZRmgxamZQYStoTHozCnlzcFdIbzFyNFhBM3RvVVNIeW1pNXg4Q2dZQlBmZTBXRzU5NDFvUUJlcWEzYllmOXNrdXZwbGVlZjQ3cnhLbWoKRzlaaGxxbzZhSkd1T1A1YW9hZTF4NmpyNUpSTS9leWtlalFUOW1PYzhVWWpENzNBbXlCQXVNNUJHNm1SSzdQdgpaeTdUd1ZkNENiZFZ6aDlWY3J1aHRrSEh5dFNUdzRXcXhwVmE3TDBzNDlBbGp2cDNybm41UGRucXhpK0h1TU5pCkdwTDRTd0tCZ1FET0hRZ1ZGeGV0eU5zVjRkSXd6UThzbVp2ZHF1QzRzRXZTakx4UXd6ZmZadU1aMHFBc1R6VkUKYkE2dk01WlNpQ3A5SUxTd3VKTUc1eGhqMXZUdGVDOHBCSmdsM3BmM1ArS0pXeGZ4S3lYRCtRai9STDN6V2lxcwpFaDd4SFN6UlFCcDJESjhqMWdtakd4em5IbnlDdnBNdFJlQzBzcGp2N0JVZzNqaFR4SVRRdFE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= \ No newline at end of file diff --git a/dubhe-server/common-k8s/src/main/resources/kubeconfig_pre b/dubhe-server/common-k8s/src/main/resources/kubeconfig_pre new file mode 100644 index 0000000..ce15511 --- /dev/null +++ b/dubhe-server/common-k8s/src/main/resources/kubeconfig_pre @@ -0,0 +1,19 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EY3hNekEzTlRNek5sb1hEVE14TURjeE1UQTNOVE16Tmxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTEZlCmp5KzlwTjNybnJpYTlpbDhzOEp0WWZoekVMUU1LbXVmb0Y0VEhjTnFObGtOVDJiL2pTcUUzbGdRYTR2Zm9oL1AKUFVOaWVkZEZvczFoRGNxRnF0QmRpaXJ5QXhSNERPeTJsMWpjSWVpVHJNaHYyd1JZc09ZMG4yanZITFdGdENCaQphY0lEeXFmNmhHM01SV2ZNUEhPVVdDQ0JIUmxLRFlnYkNDZXp5NWxxUEF4QXpmcUpEalUxWkNUVmNNa2Z3R1FDCmFSYVZ4aTFiRHhRSk9Ud2dTTGlJdEJIUGhrdGtOcnY1MU1XZzRSWkVUbWF3azg5Y09oWExpSEg3ZExFZjFvK0oKVE80Q3J1K2pyb3lIRkNvQmo0bGpKZHd4N0ZRS25XZFpEbWZiOFFoZEdyTkRuK21WR3BRNnZSRGN5YzloSVJsMwpyM3U4bkM2TS9mZ29UTHhWaTFFQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIbDZMYWpscFZLMk9PbG1JYzRVK3A4bTZoVGEKd2NCTW5MZjVJcExwME9CRmZ6M1hvVi9EVUlmTE1LU2k2bzY3a1Y0aFYzNDZMTnErU244elBUZEZkbDdjZUlvbQp2azc3YXE4c2VERk5xbTJMSytSUldmUWZQbFQrSGhiWFVpS1lOUUhmanlXdjh6QzFGaWpBQTBqaGVjWVBaSnU4ClpUb2JaenhPaS8yOGNwSmNOSFFDSW14OG16UkU2c3JTRjFsbE4yaWF0eTQ1cWhEZWwyZHpmSldaeTFzTXVwc2YKaTc4Z25qdlhFU3BYaGoweGZNbEdMNnA3QkVjdUw1YkgyN3Y3djJjelh2WVJnbk0vamhscGVzbVRsNzFiSE1KQQpnSzlpR2pqMHhoZ1Jnb3h2VHNQNVZLSUszTFZVbGxNNXJhNXYxTjdOOXpmQVZybnprRGRoaXNZQzZCUT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + server: https://10.105.0.29:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: kubernetes-admin + name: kubernetes-admin@kubernetes +current-context: kubernetes-admin@kubernetes +kind: Config +preferences: {} +users: +- name: kubernetes-admin + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJVjB5b2I4RnFSdGt3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TVRBM01UTXdOelV6TXpaYUZ3MHlNakEzTVRNd056VXpNemhhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXVPN0M2OWNlUjVVbmZuUDIKREZNR1M2RzZ2RkYxLzNxSU85ZVFTR0pZRU15dDhHWmo4QWNlbnMrQTNDS05jRHJ4dk5oQlpvazlPa2w4SnpzRQpZOFhKMTFmZVdPS0Zwb0dYVGtseHBuakcvRWVwbWh1d1JodUZhaTlsZ1BXQnUyei9JOG5meTdjSUhscW1EYW1UCkViaEJGWitSbzlPYjB5dTJ1MklhUWNUTVpPREc5eEdTRURIT1VYTkIzcG5oWGhYRmhZUTZyeUpVMkFzYy9TS0UKa1ZTN3RWY2hoVHZOSHVnWC9YQ1hwZ1dpSXJhMUZNbUNBMGMzY003NDJhNFI4QnhmKzBremNBV0ZqQUIwc2xFdQphcURSK3I2SWQyUWRyVjVBQXUra29rU1MyRnhKNzF6R3VtRnRQdlVyT1UzeXhreWFJbHZ1aFcxZEV5cHl4WjVJCkJvSUNWd0lEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFLKzRlV280b0g0K1RFS3doUU9ZSFJvWXhWcEVxWDBXZmoxSQp5US9Qbm9sTXh5ZmQxTkc4VzdyeW1FdWJZbEtIV3JjOTNKdHJBOTA3N01BRHMrWGcvWVZrbFdpVnF2b2Eva2xOCm9aY1pVc3Q2VEdMNVJ6QmE5NzFheCt3Q09xMXRiSng0ZGtwSDdmWVVWeXVaTUg0MXhxL1hIZEwzSnV3RzFSbU8KQnEvZWdmY3d0QzdhZGthRU1SbWxlRCtzelVBZkQxYjFmd29JNnpyV2ZyV0JnUTUwTmhFUzk0NldLOER1QU84cQovalFXRlVtd3M3Nzg0d3ZPR0JjTGpSeWNvWGpxSDZXeW5hSE9BRVdCakJaMUtyYjh3LzNucnNucTArOTdtbG1oCi9IMkpNQ1lIbDRZQi9Bb2pXUnhpVE50b3BsM0k1Sll4Vlkza1J1ZWF2c0pQNElmNmJ1MD0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdU83QzY5Y2VSNVVuZm5QMkRGTUdTNkc2dkZGMS8zcUlPOWVRU0dKWUVNeXQ4R1pqCjhBY2VucytBM0NLTmNEcnh2TmhCWm9rOU9rbDhKenNFWThYSjExZmVXT0tGcG9HWFRrbHhwbmpHL0VlcG1odXcKUmh1RmFpOWxnUFdCdTJ6L0k4bmZ5N2NJSGxxbURhbVRFYmhCRlorUm85T2IweXUydTJJYVFjVE1aT0RHOXhHUwpFREhPVVhOQjNwbmhYaFhGaFlRNnJ5SlUyQXNjL1NLRWtWUzd0VmNoaFR2Tkh1Z1gvWENYcGdXaUlyYTFGTW1DCkEwYzNjTTc0MmE0UjhCeGYrMGt6Y0FXRmpBQjBzbEV1YXFEUityNklkMlFkclY1QUF1K2tva1NTMkZ4SjcxekcKdW1GdFB2VXJPVTN5eGt5YUlsdnVoVzFkRXlweXhaNUlCb0lDVndJREFRQUJBb0lCQVFDaC9SSmtmdlFaQTcrcQpkbXpwOHJlcS9DbVQxMDhpei9RUlp3c05QSWVqZjRaRTg0dEtyeEhWVGpHem9kaCtuRU12aGNZVHlOY0cvV054CkFiTWdxaG5aTlRDZ2J4dGU5RmpTekdadXlaQ1RYenBpc1NwQTNzNklhcWZneEN3MVBvNW1qT2dwaTFQak1zZ04KWTZKZGZTWVZpTWFMMkVuQU9hUkFrdmdvNy9lUnpBeFowNkhZeEJ5WlM2dzZrRVhpQmJQYThCeUpkd0pIRzRqLwpHSU9yZkhXRWhldkdjcTU3SmF6c3hrTzczZXBYbW5IU21NQWVKcXY0RmF2czBtSUZ4THlRU1NjSmxZZ2xXWlJuCjRmekZVM2tLYmRaak9NdWJpbGY1ODluQUZ4cVpnMzhJblU0bGpzSjRsSFVhU0M1VlZ5UTFvc2pmaGlFeFg1NVMKQmJmSFU3MnhBb0dCQU91T2pHTTlwYi9rQ282ZXhaREZNSlRqbmZMQmtEQlAxNVN6NjByUjY5cjFRQ1hwZk1CWgppT0N1aHZTSnJvRGJQYVVvUXc4QkhvV01BT3d4VU1veXpUZDYwOC8xVWRmY1F2RUtsY0dXSXpGMWJxSTllcFNpCmQ3Q3dSZ2Vxd01rUTF6SHBsYU4rWkY3MEJsZ3RJYkx3Ymd6dWhuSWlZRjVRbi82dWVMQXkzQkhyQW9HQkFNajcKZWoybklVT1JxY2lpeUZwQlVERGUwT01GYWNiYkk2VzA3RUl4cElxRWpLejZPenVmZFBYSFpLVU44QmEwRjlBUgpsSzVBdXd1STErbnFqeTJJOWV3Lzk1QTQ1NGFBYjM0WjRqekUzUm8vS1N0dytQR0xUb0RSeEZneGVhQmYvUkdlClIvZlpTK2h2VHgrYy9pQjRQYU5sOGVpQ2ZFcVFhYS9MbW5WcitncEZBb0dBYnNWN0tWUWROTzdsTkFwZjkrTnoKSkNFaDdyMnRzN3BvTTZxa05Hd2hVTGRTTWtIcGczN1hTbWxvVjJqRG9oNzNqMG91dHNpYzlNcFF5TUdzTDFuUwpmWXVLUGRvc1lhbFg1WWhId21CN0xrLzk5ZGVaWkhvK2ROMkFJU3pnT2Uxc2RURldTQ3N3d2lKWk5YQUx6OTBXCnM0Z2J1MktGRlBVdk9CSU4rVFlCblg4Q2dZRUFyWEdBYTZaSXFaUVNMb2gwV0pkV3llWHY1SXJ1WHVNTW4xdEUKTEZmRkJKa2hBY0lzemVadFBCR29CRnpEM2dQckxPK1BITlhWMVQxeC8zY2h1bzBnbFpJYVpnY0ZudWhGejFBdApFbjVkeE9ITytLTlU0clp5dCs3Ty84RXFra0ZrRndrK1dHRFpCaXpRM3BwUUlOdERiamh6REZGWFM4M1d0eFFCCkp1Wlk4UFVDZ1lBOFlsZnNsQ2VmZktvTVBVK3pKZWF5SUlQNTR0M3NySkFwblNyc1BuNlNBSlB1WjU5ZkYrUTcKNGlvNk0weEw0dE5VckhPQ2ZpODJXSzlRQ29EbDRIYTJGZ0Y3YkNMTTQ1Qld5cVp5THg0b0JRYmFGNE5ybmVuTgpVUVVFbkU2V2ZyN1RFWWVBNngrOG10dXAvcDJzbTd2eWdkYngrRFB1OXYzV1JyZE1DZDBNWUE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= diff --git a/dubhe-server/common-k8s/src/main/resources/kubeconfig_prod b/dubhe-server/common-k8s/src/main/resources/kubeconfig_prod new file mode 100644 index 0000000..ee32ce4 --- /dev/null +++ b/dubhe-server/common-k8s/src/main/resources/kubeconfig_prod @@ -0,0 +1,19 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EVXdOekE0TURFME9Gb1hEVE14TURVd05UQTRNREUwT0Zvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTXU2CmRJYWVmOWQzYXByK3lKK3BLY0EyaU5NQXlQVWFsbFgyZHBwelprd282T0R2TW9FYmgrRWFaY0Y1aEdMVnhSWDYKbnhtcUQvVFNCWXdENFNzY1E3c0YzcWtxeWxBLzJXaTg1NTJKbGJQcXFSQm5CaEUwV211ZE9EVXZYYVF0N3BnWApzR1JKcDROcFBsd0tLMUVpZmhsdkJIMmRVWHFjZDRENmZKbWRSSWgrNEpOS3ZOL09Hait4WjNKUG5Cc0pKOUlICms4TWFsc3NuTTYvaFpna0tKVlplc2YvcVorN2I3dXpJSVJteEd3L0RBcmtNaGgvL1VCZUUzVEFsd1lWWisxZWkKU293eldEN3EzYzFhU3NJYkdrbXJWaXNQcVVZTk9sUEplcHJLTVFJRUJKVEdPWUYzSzk0eHNKaEtBMkI0Z0VCRgpOdkJxTzVqZFZ4RkM0SFdxM1VFQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFLV254YlZqTFRWZVVyZDB0Q004SE83ejk2QnQKQTBGS3pmclRSTkhtT0I2WVVSRnVRbWZJdE9GTkY4QnJoYVBCZVNKMFZrNVdNUXZBd1BkdnY2R2l1NU1VNU45TApHV3R2eXhsS0Z5aVkxR25RUy9sWjRjR1JaSE9kMmtMNFY3bVNLQmo3ZFpzcDN0dW42d3BQZWM3dUJ6Z1UvNzdxCjN1b3BGMGVzR21wY3ZFaVhNSlRrZUN1NTNhaTVFVHhSS0Q0V0xxUUFhbDViUlB4b0UwL3Mrams5SGI4b1JuNnQKa0RDaElpQnVjL3RDaHhwTmNFVWt6UUwyRjBHR2hRaVlQTFFQdkgzRml5S2tlWjBiYUNHdFdpODEvZG9lVVJKZQpOM21jU3pvZEM1SUhMc1Zta05HTzh3Y2pocjVZck0yVGxHS01sV1huRVk5QWFMUEl1blI0VmQ4ZU1iWT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + server: https://10.105.0.1:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: kubernetes-admin + name: kubernetes-admin@kubernetes +current-context: kubernetes-admin@kubernetes +kind: Config +preferences: {} +users: +- name: kubernetes-admin + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJSDByc3FWMTBudUF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TVRBMU1EY3dPREF4TkRoYUZ3MHlNakExTURjd09EQXhOVEJhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXUwVlR6ejIvK1VqbEtVRHkKL211bVYrbTBjejg1UURTUjU1aXN5QmNDTWVzbEJsSEYyVEhWQm9FRHhUMEFHQmF5ai8rdEx6c1J4Vjg4Z28vNQpkZFVZL0llNllNVmVlMVZuQ29CL2VvYStkUDBQZUlhZVl3amU3WTJhdFhpMDBOM3EzZ253Q1AvM3FodUpabDBTClQraTJHMktOQlRvbjYvSGUxRVBva0hlcTZaMU5yYm5aTWROTzBWM1VaTExzMXdhS2ZESDJHRStlang1QzU4VEQKSnVGdjN5QkFPWW5CblI0YTBObWJpTFJ2RmN3d1BFR24wamlHazZGY2oyK0RWRlVCQjYzbVFOV3puWGVlaDQzVwpodm9GQnZKUVg0OFZTeng0U2tHVURtaUU1Sktncms0T3dJNk9vR0Fsa0kvbU4wQnl2b3o4UjFFbENMY29jZzJWCkhvN1Rrd0lEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFNSGpQdnNNWDUyMjNzbTZTQTJzYlBzc3NaalJJSUhCSWloUwp6MlBVR0Q2R2NXZ0RRRXBzRWVRRDYzby9vLzVLcndBbHUveGlnVW9VK2dkRTQ0S29PTmM0Z05tdHdZOVhzcnZXCmZSamc3YXh2MGN5czBuSzBCdVJyYjBQVDZ0ZkVqb25yQXUvQ1NuSG9LZERuaVBweUNQSys5amZONGpJR1VobFkKU0Z4Qnh6N3ZGQlUrRlVZbjBYR3BHV3FnQjd6bVRwRllSVXNKOVc5eXJlaWlsZDVJcDdzSGljZG0za0NiYlJWagpmQ1k0eVV5elVSbFV2Q2xrOE8zQktEQkYxeWZIUGErUW1STStabzhEK3V2T2VHVVFqSW92eHdXNVNPM1RkNkE5Clk2WEoxbEpwRmtUWndrMk13N1N0RjhxK3MwMGFnNFB0RGJhKzNoM2FmWG1DWU9FOG5pUT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBdTBWVHp6Mi8rVWpsS1VEeS9tdW1WK20wY3o4NVFEU1I1NWlzeUJjQ01lc2xCbEhGCjJUSFZCb0VEeFQwQUdCYXlqLyt0THpzUnhWODhnby81ZGRVWS9JZTZZTVZlZTFWbkNvQi9lb2ErZFAwUGVJYWUKWXdqZTdZMmF0WGkwME4zcTNnbndDUC8zcWh1SlpsMFNUK2kyRzJLTkJUb242L0hlMUVQb2tIZXE2WjFOcmJuWgpNZE5PMFYzVVpMTHMxd2FLZkRIMkdFK2VqeDVDNThUREp1RnYzeUJBT1luQm5SNGEwTm1iaUxSdkZjd3dQRUduCjBqaUdrNkZjajIrRFZGVUJCNjNtUU5Xem5YZWVoNDNXaHZvRkJ2SlFYNDhWU3p4NFNrR1VEbWlFNUpLZ3JrNE8Kd0k2T29HQWxrSS9tTjBCeXZvejhSMUVsQ0xjb2NnMlZIbzdUa3dJREFRQUJBb0lCQUVYR0pOM1lZZ2lkY2xTVwprSExlNVJGb1VBV0lqdW92TEJXZ092QXFNblVxNlphYkxSNHBoUGR4WmxnOHpDWXRmc1pNT3RpWUo1emtTUVZVClkxdlYxQU56QnF3N25XSlNoWnZTR0swc094WVhtNFlLa2tUUDcwK1BMUTlrTStxR1pKWHFHZmNnZDhSM2toQUQKcVdrQWlhbFdaTGlIM0l2NmlFMktKOEo3ODhBcWFrM1liemJFR0xvUkxKbzZONjZzSm9CcHRUS3BOOENpcjF0bQozR1MvRllZK2ZzcVFudU8vWkNjOUl1ck5scVJkU0ZNdThRT2pRMFp6TkJqMVVEZFBNa24vWEhWN3BIQWF1NkVrCm5lLzlrSUNWMWxMZ2FuK0lLYW1kVElvZk5aVUhsL3k5QksvZ1U0SFRVMGo1Sit5WkV0bXI2VktmeGloQks5aWcKelZRM1R0RUNnWUVBNnh0b0RRd2dFRmNSdEJ3WXZQZWR5L0FZTjlwc0ZjaDhGRFJJUXlxUlhUWUVURlRjaXFNQwpwMHYyaXY2dHdoWUo1QmZVcHBJUU1kK2c3NjFiZHdqTHpweEJKZHpzakwySE5HMzhaeWxZTXc1LzBIT1FOTHFoCmt2VW9rMVJHQkxhOGFuOFA2eGdvNXptMHY3SW11MGs4RVQ0bjI5aDJJclVVSm1pWkZMM3dBMThDZ1lFQXkrbXEKUUR3NktJc1lDTU44NnBzSXAvQU5zTWErVlJ5cFJRMWYzQStSSjdnNkhYRGxqOVlLQWIxSEdobnMwKy80ZzRrRQpoTUczZmVNM2hoc281aVhCNjRPS3RkQkFodVA1UkF0RDU0eDY2MHhtYnZqY3YyVFJFS0pLMGs5SXBSU1ppa2pGCmVVTG1rbzZnUmU1aVI5NU5NQ0o5NFRBQW80SXNEZjJxQ0pqRU1FMENnWUJFRjZMeUxISFk2YTdKOEYxRjFaMlIKSkUrUFZhWjZSSitUSm5WTFpyZkZQRkRRWHIrbE00TWdPd01EekxFOGhpK0ZMVlc4akk4K01wdWs3eHVQaFMrcAovbDFyL3VsUDlkQ0Q0ZHI1Y2VNR25vdHNMeHd6K1YyMGQyYXlEUFZlaGlKWjRjVVZmT0RUMzBXM1EzeXVQNDZ6Ckc4SmxqUExpS0huV2lmTFVMQktvbHdLQmdBeU45Mmg3RE0yZ09ydVhaYUtBSnhsSDQxL2w3S1FLM3JVY3JMRTgKMkNBTTdLOFJXMkR1dWJEL3VWZjNEcWpCMXBncW9IZVlBYmNqZlRDcGpXd1dHUWxxRU9rK3lDcEY4UHZxZ2FUSQo5bXgwU0w0K1hrRCtjUXpJSVRrdm5uWmpmVXlSVEc4NTJqNWR2NnB1a2VpQTNGbkJWZVMrY3R1ZVVSNFBaeCtlCllEM2xBb0dBRWRId3VVa2ZBYWZJMFdkOXdlYXNDb1daTUlDTm1MK1ZDcXEzMEZyamVFMXg0cElTNjdFODJkU2UKKy9TbDNkWXpucHkxODJVdGJQNzlSYThoNXloOUVCTzVYMXlweGlCeCt3MmdwNWVJWG00aStOUWZxbjNOUm42awo2VW1RY1hCMXV4djNKWENuYWxVUk5tVWdudEFzaEQxaGd0Y1VvSzArS0NXT3VhUnFqSTQ9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg== diff --git a/dubhe-server/common-recycle/src/main/java/org/dubhe/recycle/enums/RecycleResourceEnum.java b/dubhe-server/common-recycle/src/main/java/org/dubhe/recycle/enums/RecycleResourceEnum.java index 6d3056d..0b00ced 100644 --- a/dubhe-server/common-recycle/src/main/java/org/dubhe/recycle/enums/RecycleResourceEnum.java +++ b/dubhe-server/common-recycle/src/main/java/org/dubhe/recycle/enums/RecycleResourceEnum.java @@ -69,11 +69,6 @@ public enum RecycleResourceEnum { */ MEASURE_RECYCLE_FILE("measureRecycleFile", "度量文件回收"), - /** - * 镜像回收 - */ - IMAGE_RECYCLE_FILE("imageRecycleFile", "镜像回收"), - /** * 算法文件回收 */ diff --git a/dubhe-server/dubhe-algorithm/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-algorithm/src/main/resources/bootstrap.yml index d34de31..d7edee4 100644 --- a/dubhe-server/dubhe-algorithm/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-algorithm/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -35,7 +35,7 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/dubhe-data-dcm/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-data-dcm/src/main/resources/bootstrap.yml index eedfcd3..530c1c0 100644 --- a/dubhe-server/dubhe-data-dcm/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-data-dcm/src/main/resources/bootstrap.yml @@ -13,8 +13,8 @@ spring: nacos: config: enabled: true - server-addr: 127.0.0.1:8848 - namespace: dubhe-prod + server-addr: 10.105.1.133:8848 + namespace: dubhe-server-cloud-dev shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -46,9 +46,9 @@ spring: discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 # 配置允许后面的Bean覆盖前面名称重复的Bean main: allow-bean-definition-overriding: true \ No newline at end of file diff --git a/dubhe-server/dubhe-data-task/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-data-task/src/main/resources/bootstrap.yml index b010f04..110cce6 100644 --- a/dubhe-server/dubhe-data-task/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-data-task/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -40,9 +40,9 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 # 配置允许后面的Bean覆盖前面名称重复的Bean main: allow-bean-definition-overriding: true \ No newline at end of file diff --git a/dubhe-server/dubhe-data-task/src/test/java/org/dubhe/task/DubheDataTaskApplicationTests.java b/dubhe-server/dubhe-data-task/src/test/java/org/dubhe/task/DubheDataTaskApplicationTests.java index e39cbf8..2f8ef52 100644 --- a/dubhe-server/dubhe-data-task/src/test/java/org/dubhe/task/DubheDataTaskApplicationTests.java +++ b/dubhe-server/dubhe-data-task/src/test/java/org/dubhe/task/DubheDataTaskApplicationTests.java @@ -1,20 +1,3 @@ -/** - * Copyright 2020 Tianshu AI Platform. All Rights Reserved. - * - * 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. - * ============================================================= - */ - package org.dubhe.task; import org.junit.jupiter.api.Test; diff --git a/dubhe-server/dubhe-data/src/main/java/org/dubhe/data/config/DataHarborConfig.java b/dubhe-server/dubhe-data/src/main/java/org/dubhe/data/config/DataHarborConfig.java deleted file mode 100644 index 82ee13e..0000000 --- a/dubhe-server/dubhe-data/src/main/java/org/dubhe/data/config/DataHarborConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Copyright 2020 Tianshu AI Platform. All Rights Reserved. - * - * 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. - * ============================================================= - */ - -package org.dubhe.data.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Data -@Component -@ConfigurationProperties(prefix = "harbor") -public class DataHarborConfig { - - private String address; - - private String username; - - private String password; - - private String modelName; -} diff --git a/dubhe-server/dubhe-data/src/main/java/org/dubhe/data/service/impl/AutoLabelModelServiceServiceImpl.java b/dubhe-server/dubhe-data/src/main/java/org/dubhe/data/service/impl/AutoLabelModelServiceServiceImpl.java index b1cfa29..ef6574c 100644 --- a/dubhe-server/dubhe-data/src/main/java/org/dubhe/data/service/impl/AutoLabelModelServiceServiceImpl.java +++ b/dubhe-server/dubhe-data/src/main/java/org/dubhe/data/service/impl/AutoLabelModelServiceServiceImpl.java @@ -28,9 +28,15 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.compress.utils.Lists; import org.dubhe.biz.base.constant.MagicNumConstant; -import org.dubhe.biz.base.constant.SymbolConstant; import org.dubhe.biz.base.context.UserContext; -import org.dubhe.biz.base.dto.*; +import org.dubhe.biz.base.dto.PtImageIdDTO; +import org.dubhe.biz.base.dto.PtImageIdsDTO; +import org.dubhe.biz.base.dto.PtModelBranchQueryByIdDTO; +import org.dubhe.biz.base.dto.PtModelBranchQueryByIdsDTO; +import org.dubhe.biz.base.dto.TrainAlgorithmSelectAllBatchIdDTO; +import org.dubhe.biz.base.dto.TrainAlgorithmSelectByIdDTO; +import org.dubhe.biz.base.dto.UserDTO; +import org.dubhe.biz.base.dto.UserSmallDTO; import org.dubhe.biz.base.enums.BizEnum; import org.dubhe.biz.base.enums.ResourcesPoolTypeEnum; import org.dubhe.biz.base.exception.BusinessException; @@ -49,13 +55,15 @@ import org.dubhe.cloud.authconfig.service.AdminClient; import org.dubhe.data.client.AlgorithmClient; import org.dubhe.data.client.ImageClient; import org.dubhe.data.client.ModelClient; -import org.dubhe.data.config.DataHarborConfig; import org.dubhe.data.config.DataRedisConfig; import org.dubhe.data.constant.AutoLabelModelServiceStatusEnum; import org.dubhe.data.constant.Constant; import org.dubhe.data.constant.ErrorEnum; import org.dubhe.data.dao.AutoLabelModelServiceMapper; -import org.dubhe.data.domain.dto.*; +import org.dubhe.data.domain.dto.AutoLabelModelServiceCreateDTO; +import org.dubhe.data.domain.dto.AutoLabelModelServiceQueryDTO; +import org.dubhe.data.domain.dto.AutoLabelModelServiceUpdateDTO; +import org.dubhe.data.domain.dto.DataK8sDeploymentCallbackCreateDTO; import org.dubhe.data.domain.entity.AutoLabelModelService; import org.dubhe.data.domain.vo.AutoLabelModelServicePodVO; import org.dubhe.data.domain.vo.AutoLabelModelServiceVO; @@ -75,9 +83,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; + import javax.annotation.Resource; import java.sql.Timestamp; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @@ -116,9 +131,6 @@ public class AutoLabelModelServiceServiceImpl extends ServiceImpl ids; - - @ApiModelProperty("镜像描述") - @Length(max = MagicNumConstant.BINARY_TEN_EXP, message = "镜像描述-输入长度不能超过1024个字符") - private String remark; + private Long id; @ApiModelProperty(value = "镜像用途", required = true) @NotEmpty(message = "镜像用途(0:notebook , 1:train , 2:serving, 3:terminal, 4:point-cloud)不能为空") private List imageTypes; + @ApiModelProperty(value = "镜像路径", required = true) + @NotBlank(message = "镜像路径不能为空") + private String imageUrl; + + @ApiModelProperty(value = "镜像名称", required = true) + @NotBlank(message = "源镜像名称不能为空") + @Length(min = MagicNumConstant.ONE, max = MagicNumConstant.SIXTY_FOUR, message = "镜像名称长度在1-64个字符") + @Pattern(regexp = StringConstant.REGEXP_NAME, message = "镜像名称支持字母、数字、英文横杠和下划线") + private String imageName; + + @ApiModelProperty(value = "镜像版本号", required = true) + @NotBlank(message = "镜像版本号不能为空") + @Length(max = MagicNumConstant.SIXTY_FOUR, message = "镜像版本号长度在1-64个字符") + @Pattern(regexp = StringConstant.REGEXP_TAG, message = "镜像版本号支持字母、数字、英文横杠、英文.号和下划线") + private String imageTag; + + @ApiModelProperty("镜像描述") + @Length(max = MagicNumConstant.BINARY_TEN_EXP, message = "镜像描述-输入长度不能超过1024个字符") + private String remark; } diff --git a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/domain/entity/PtImage.java b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/domain/entity/PtImage.java index 7ee38ff..c78f037 100644 --- a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/domain/entity/PtImage.java +++ b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/domain/entity/PtImage.java @@ -80,13 +80,6 @@ public class PtImage extends BaseEntity { @TableField(value = "image_resource") private Integer imageResource; - - /** - * 镜像状态 - */ - @TableField(value = "image_status") - private Integer imageStatus; - /** * 资源拥有者ID */ diff --git a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/domain/vo/PtImageQueryVO.java b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/domain/vo/PtImageQueryVO.java index 48d4d51..e2a4311 100644 --- a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/domain/vo/PtImageQueryVO.java +++ b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/domain/vo/PtImageQueryVO.java @@ -41,9 +41,6 @@ public class PtImageQueryVO implements Serializable { @ApiModelProperty("镜像版本") private String imageTag; - @ApiModelProperty("镜像状态(0:上传中,1:上传成功,2:上传失败)") - private Integer imageStatus; - @ApiModelProperty("备注") private String remark; @@ -58,4 +55,7 @@ public class PtImageQueryVO implements Serializable { @ApiModelProperty("镜像用途") private List imageTypes; + + @ApiModelProperty("镜像地址") + private String imageUrl; } diff --git a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/rest/PtImageController.java b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/rest/PtImageController.java index 97ab606..35ad575 100644 --- a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/rest/PtImageController.java +++ b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/rest/PtImageController.java @@ -24,12 +24,25 @@ import org.dubhe.biz.base.dto.PtImageIdDTO; import org.dubhe.biz.base.dto.PtImageIdsDTO; import org.dubhe.biz.base.vo.DataResponseBody; import org.dubhe.biz.base.vo.PtImageVO; -import org.dubhe.image.domain.dto.*; +import org.dubhe.image.domain.dto.PtImageDeleteDTO; +import org.dubhe.image.domain.dto.PtImageQueryDTO; +import org.dubhe.image.domain.dto.PtImageQueryImageDTO; +import org.dubhe.image.domain.dto.PtImageQueryNameDTO; +import org.dubhe.image.domain.dto.PtImageQueryUrlDTO; +import org.dubhe.image.domain.dto.PtImageSaveDTO; +import org.dubhe.image.domain.dto.PtImageUpdateDTO; import org.dubhe.image.service.PtImageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -45,7 +58,7 @@ public class PtImageController { @Autowired private PtImageService ptImageService; - @GetMapping("/info") + @GetMapping("/list") @ApiOperation("查询镜像") @PreAuthorize(Permissions.IMAGE) public DataResponseBody getImage(PtImageQueryDTO ptImageQueryDTO) { @@ -58,11 +71,11 @@ public class PtImageController { return new DataResponseBody(ptImageService.searchImages(ptImageQueryImageDTO)); } - @PostMapping("uploadImage") - @ApiOperation("上传镜像包到harbor") - @PreAuthorize(Permissions.IMAGE_UPLOAD) - public DataResponseBody uploadImage(@Validated @RequestBody PtImageUploadDTO ptImageUploadDTO) { - ptImageService.uploadImage(ptImageUploadDTO); + @PostMapping + @ApiOperation("保存镜像信息") + @PreAuthorize(Permissions.IMAGE_SAVE) + public DataResponseBody saveImageInfo(@Validated @RequestBody PtImageSaveDTO ptImageSaveDTO) { + ptImageService.saveImageInfo(ptImageSaveDTO); return new DataResponseBody(); } diff --git a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/PtImageService.java b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/PtImageService.java index 3484f5d..4ce4224 100644 --- a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/PtImageService.java +++ b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/PtImageService.java @@ -18,9 +18,14 @@ package org.dubhe.image.service; import org.dubhe.biz.base.vo.PtImageVO; -import org.dubhe.image.domain.dto.*; +import org.dubhe.image.domain.dto.PtImageDeleteDTO; +import org.dubhe.image.domain.dto.PtImageQueryDTO; +import org.dubhe.image.domain.dto.PtImageQueryImageDTO; +import org.dubhe.image.domain.dto.PtImageQueryNameDTO; +import org.dubhe.image.domain.dto.PtImageQueryUrlDTO; +import org.dubhe.image.domain.dto.PtImageSaveDTO; +import org.dubhe.image.domain.dto.PtImageUpdateDTO; import org.dubhe.image.domain.entity.PtImage; -import org.dubhe.recycle.domain.dto.RecycleCreateDTO; import java.util.List; import java.util.Map; @@ -42,11 +47,11 @@ public interface PtImageService { /** - * 上传镜像到harbor + * 保存镜像信息 * - * @param ptImageUploadDTO 上传条件 + * @param ptImageSaveDTO 镜像信息DTO */ - void uploadImage(PtImageUploadDTO ptImageUploadDTO); + void saveImageInfo(PtImageSaveDTO ptImageSaveDTO); /** @@ -98,13 +103,6 @@ public interface PtImageService { */ String getImageUrl(PtImageQueryUrlDTO imageQueryUrlDTO); - /** - * 镜像回收还原 - * - * @param dto 还原DTO对象 - */ - void recycleRollback(RecycleCreateDTO dto); - /** * 获取终端镜像列表 * diff --git a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/impl/PtImageServiceImpl.java b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/impl/PtImageServiceImpl.java index 4aa8e3d..18be390 100644 --- a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/impl/PtImageServiceImpl.java +++ b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/impl/PtImageServiceImpl.java @@ -27,12 +27,14 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.compress.utils.Lists; -import org.dubhe.biz.base.constant.*; +import org.dubhe.biz.base.constant.MagicNumConstant; +import org.dubhe.biz.base.constant.NumberConstant; +import org.dubhe.biz.base.constant.ResponseCode; +import org.dubhe.biz.base.constant.StringConstant; import org.dubhe.biz.base.context.DataContext; import org.dubhe.biz.base.context.UserContext; import org.dubhe.biz.base.enums.DatasetTypeEnum; import org.dubhe.biz.base.enums.ImageSourceEnum; -import org.dubhe.biz.base.enums.ImageStateEnum; import org.dubhe.biz.base.enums.ImageTypeEnum; import org.dubhe.biz.base.exception.BusinessException; import org.dubhe.biz.base.service.UserContextService; @@ -40,31 +42,34 @@ import org.dubhe.biz.base.utils.ReflectionUtils; import org.dubhe.biz.base.utils.StringUtils; import org.dubhe.biz.base.vo.PtImageVO; import org.dubhe.biz.db.utils.PageUtil; -import org.dubhe.biz.file.config.NfsConfig; import org.dubhe.biz.log.enums.LogEnum; import org.dubhe.biz.log.utils.LogUtil; import org.dubhe.biz.permission.annotation.DataPermissionMethod; import org.dubhe.biz.permission.base.BaseService; -import org.dubhe.image.async.HarborImagePushAsync; import org.dubhe.image.dao.PtImageMapper; -import org.dubhe.image.domain.dto.*; +import org.dubhe.image.domain.dto.PtImageDeleteDTO; +import org.dubhe.image.domain.dto.PtImageQueryDTO; +import org.dubhe.image.domain.dto.PtImageQueryImageDTO; +import org.dubhe.image.domain.dto.PtImageQueryNameDTO; +import org.dubhe.image.domain.dto.PtImageQueryUrlDTO; +import org.dubhe.image.domain.dto.PtImageSaveDTO; +import org.dubhe.image.domain.dto.PtImageUpdateDTO; import org.dubhe.image.domain.entity.PtImage; import org.dubhe.image.domain.vo.PtImageQueryVO; import org.dubhe.image.service.PtImageService; -import org.dubhe.recycle.config.RecycleConfig; -import org.dubhe.recycle.domain.dto.RecycleCreateDTO; -import org.dubhe.recycle.domain.dto.RecycleDetailCreateDTO; -import org.dubhe.recycle.enums.RecycleModuleEnum; -import org.dubhe.recycle.enums.RecycleResourceEnum; -import org.dubhe.recycle.enums.RecycleTypeEnum; -import org.dubhe.recycle.service.RecycleService; -import org.dubhe.recycle.utils.RecycleTool; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.TreeSet; import java.util.stream.Collectors; /** @@ -77,25 +82,9 @@ public class PtImageServiceImpl implements PtImageService { @Autowired private PtImageMapper ptImageMapper; - - @Autowired - private NfsConfig nfsConfig; - - @Autowired - private HarborImagePushAsync imagePushAsync; - - @Autowired - private HarborProperties harborProperties; - @Autowired private UserContextService userContextService; - @Autowired - private RecycleService recycleService; - - @Autowired - private RecycleConfig recycleConfig; - public final static List FIELD_NAMES; @@ -119,9 +108,7 @@ public class PtImageServiceImpl implements PtImageService { QueryWrapper query = new QueryWrapper<>(); query.eq("deleted", NumberConstant.NUMBER_0); - if (ptImageQueryDTO.getImageStatus() != null) { - query.eq("image_status", ptImageQueryDTO.getImageStatus()); - } + if (ptImageQueryDTO.getImageResource() != null) { query.eq("image_resource", ptImageQueryDTO.getImageResource()); } @@ -166,67 +153,55 @@ public class PtImageServiceImpl implements PtImageService { } /** - * 上传镜像到harbor + * 保存镜像信息 * - * @param ptImageUploadDTO 上传条件 + * @param ptImageSaveDTO 镜像信息DTO */ @Override @Transactional(rollbackFor = Exception.class) - public void uploadImage(PtImageUploadDTO ptImageUploadDTO) { + public void saveImageInfo(PtImageSaveDTO ptImageSaveDTO) { UserContext user = userContextService.getCurUser(); - //普通用户不支持上传预置镜像 - if (ImageSourceEnum.PRE.getCode().equals(ptImageUploadDTO.getImageResource()) && + validImageInfo(ptImageSaveDTO.getImageUrl(), ptImageSaveDTO.getImageName(), ptImageSaveDTO.getImageTag()); + + //普通用户不支持预置镜像信息的保存 + if (ImageSourceEnum.PRE.getCode().equals(ptImageSaveDTO.getImageResource()) && !BaseService.isAdmin(user)) { - throw new BusinessException(ResponseCode.UNAUTHORIZED, "普通用户不支持上传预置镜像!"); + throw new BusinessException(ResponseCode.UNAUTHORIZED, "普通用户不支持保存预置镜像!"); } //校验用户自定义镜像不能和预置镜像重名 - List resList = checkUploadImage(ptImageUploadDTO, null, ImageSourceEnum.PRE.getCode()); + List resList = checkSaveImage(ptImageSaveDTO, null, ImageSourceEnum.PRE.getCode()); if (CollUtil.isNotEmpty(resList)) { - throw new BusinessException(ResponseCode.BADREQUEST, "不允许和预置镜像信息重复,请重新上传!"); + throw new BusinessException(ResponseCode.BADREQUEST, "不允许和预置镜像信息重复!"); } //同一用户上传镜像的(userId+imageName+imageTag)存在的情况下是不能重复上传的 - List imageList = checkUploadImage(ptImageUploadDTO, user, ImageSourceEnum.MINE.getCode()); - if (CollUtil.isNotEmpty(imageList) && ImageStateEnum.SUCCESS.getCode().equals(imageList.get(0).getImageStatus())) { - throw new BusinessException(ResponseCode.BADREQUEST, "镜像信息已存在,不允许重复上传!"); + List imageList = checkSaveImage(ptImageSaveDTO, user, ImageSourceEnum.MINE.getCode()); + if (CollUtil.isNotEmpty(imageList)) { + throw new BusinessException(ResponseCode.BADREQUEST, "镜像信息已存在!"); } - String harborImagePath = StringConstant.DEFAULT_IMAGE_PROJECT + StrUtil.SLASH + ptImageUploadDTO.getImageName() + StrUtil.DASHED + user.getId() + - StrUtil.COLON + ptImageUploadDTO.getImageTag(); + //存储镜像信息 PtImage ptImage = new PtImage(); - ptImage.setImageName(ptImageUploadDTO.getImageName()) - .setImageUrl(harborImagePath) - .setImageResource(ptImageUploadDTO.getImageResource()) - .setImageStatus(ImageStateEnum.MAKING.getCode()) - .setRemark(ptImageUploadDTO.getRemark()) - .setImageTag(ptImageUploadDTO.getImageTag()) + ptImage.setImageName(ptImageSaveDTO.getImageName()) + .setImageUrl(ptImageSaveDTO.getImageUrl()) + .setImageResource(ptImageSaveDTO.getImageResource()) + .setRemark(ptImageSaveDTO.getRemark()) + .setImageTag(ptImageSaveDTO.getImageTag()) .setCreateUserId(user.getId()); - if (ImageSourceEnum.PRE.getCode().equals(ptImageUploadDTO.getImageResource())) { + if (ImageSourceEnum.PRE.getCode().equals(ptImageSaveDTO.getImageResource())) { ptImage.setOriginUserId(MagicNumConstant.ZERO_LONG); } else { ptImage.setOriginUserId(user.getId()); } - int count = ptImageMapper.insert(ptImage); - if (count < 1) { - imagePushAsync.updateImageStatus(ptImage, ImageStateEnum.FAIL.getCode()); - throw new BusinessException("内部错误!"); - } - for (Integer imageType : ptImageUploadDTO.getImageTypes()) { + ptImageMapper.insert(ptImage); + + for (Integer imageType : ptImageSaveDTO.getImageTypes()) { ptImageMapper.insertImageType(ptImage.getId(), imageType); } - //shell脚本上传镜像 - try { - String imagePath = nfsConfig.getRootDir() + nfsConfig.getBucket().substring(1) + ptImageUploadDTO.getImagePath(); - String imageNameAndTag = ptImageUploadDTO.getImageName() + StrUtil.DASHED + user.getId() + StrUtil.COLON + ptImageUploadDTO.getImageTag(); - imagePushAsync.execShell(imagePath, imageNameAndTag, ptImage); - } catch (Exception e) { - LogUtil.error(LogEnum.IMAGE, "Image upload exception {}", e); - throw new BusinessException("镜像上传失败!"); - } } /** @@ -240,9 +215,8 @@ public class PtImageServiceImpl implements PtImageService { public List searchImages(PtImageQueryImageDTO ptImageQueryImageDTO) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(PtImage::getImageName, ptImageQueryImageDTO.getImageName()) - .eq(PtImage::getImageStatus, ImageStateEnum.SUCCESS.getCode()) .eq(PtImage::getDeleted, NumberConstant.NUMBER_0); - List ptImages = new ArrayList<>(); + List ptImages; if (ptImageQueryImageDTO.getImageResource() != null) { queryWrapper.eq(PtImage::getImageResource, ptImageQueryImageDTO.getImageResource()); } @@ -252,18 +226,13 @@ public class PtImageServiceImpl implements PtImageService { ptImages = ptImageMapper.getImagesByTypes(queryWrapper, ptImageQueryImageDTO.getImageTypes()); } - List list = new ArrayList<>(); if (CollUtil.isEmpty(ptImages)) { throw new BusinessException(ResponseCode.BADREQUEST, "未查询到镜像信息!"); } ptImages = ptImages.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(PtImage::getImageTag))), ArrayList::new)); - ptImages.stream().forEach(ptImage -> { - ptImage.setImageUrl(harborProperties.getAddress() + StrUtil.SLASH + ptImage.getImageUrl()); - list.add(ptImage); - }); - return list; + return ptImages; } @@ -282,37 +251,9 @@ public class PtImageServiceImpl implements PtImageService { //删除本地镜像 imageList.forEach(image -> { ptImageMapper.deleteById(image.getId()); - //创建镜像回收任务 - createRecycleTask(image); }); } - /** - * 文件定时清理 - * - * @param ptImage 镜像实体对象 - */ - private void createRecycleTask(PtImage ptImage) { - - String imageUrl = ImageStateEnum.SUCCESS.getCode().equals(ptImage.getImageStatus()) ? ptImage.getImageUrl() : ""; - RecycleCreateDTO recycleCreateDTO = RecycleCreateDTO.builder() - .recycleModule(RecycleModuleEnum.BIZ_IMAGE.getValue()) - .recycleDelayDate(recycleConfig.getImageValid()) - .recycleNote(RecycleTool.generateRecycleNote("删除镜像", ptImage.getImageName(), ptImage.getId())) - .recycleCustom(RecycleResourceEnum.IMAGE_RECYCLE_FILE.getClassName()) - .restoreCustom(RecycleResourceEnum.IMAGE_RECYCLE_FILE.getClassName()) - .remark(String.valueOf(ptImage.getId())) - .build(); - recycleCreateDTO.addRecycleDetailCreateDTO(RecycleDetailCreateDTO.builder() - .recycleCondition(imageUrl) - .recycleType(RecycleTypeEnum.FILE.getCode()) - .recycleNote(RecycleTool.generateRecycleNote("删除镜像", ptImage.getImageName(), ptImage.getId())) - .remark(String.valueOf(ptImage.getId())) - .build() - ); - recycleService.createRecycleTask(recycleCreateDTO); - } - /** * 修改镜像信息 * @@ -324,29 +265,33 @@ public class PtImageServiceImpl implements PtImageService { public void updateTrainImage(PtImageUpdateDTO imageUpdateDTO) { UserContext curUser = userContextService.getCurUser(); - List imageList = ptImageMapper.selectList(new LambdaQueryWrapper() - .in(PtImage::getId, imageUpdateDTO.getIds())); + PtImage image = ptImageMapper.selectById(imageUpdateDTO.getId()); - if (CollUtil.isEmpty(imageList)) { - throw new BusinessException("内部错误"); + if (image == null) { + throw new BusinessException("镜像不存在!"); } - for (PtImage image : imageList) { - //非管理员禁止修改预置镜像 - if (ImageSourceEnum.PRE.getCode().equals(image.getImageResource()) && !BaseService.isAdmin(curUser)) { - throw new BusinessException("非管理员无权限修改预置镜像信息"); - } - image.setRemark(imageUpdateDTO.getRemark()); - ptImageMapper.updateById(image); - List imageTypes = ptImageMapper.selectImageType(image.getId()); - for (Integer imageType : imageUpdateDTO.getImageTypes()) { - if (!CollectionUtil.contains(imageTypes, imageType)) { - ptImageMapper.insertImageType(image.getId(), imageType); - } + + validImageInfo(imageUpdateDTO.getImageUrl(), imageUpdateDTO.getImageName(), imageUpdateDTO.getImageTag()); + + //非管理员禁止修改预置镜像 + if (ImageSourceEnum.PRE.getCode().equals(image.getImageResource()) && !BaseService.isAdmin(curUser)) { + throw new BusinessException("非管理员无权限修改预置镜像信息"); + } + image.setImageTypes(imageUpdateDTO.getImageTypes()) + .setImageName(imageUpdateDTO.getImageName()) + .setImageUrl(imageUpdateDTO.getImageUrl()) + .setImageTag(imageUpdateDTO.getImageTag()) + .setRemark(imageUpdateDTO.getRemark()); + ptImageMapper.updateById(image); + List imageTypes = ptImageMapper.selectImageType(image.getId()); + for (Integer imageType : imageUpdateDTO.getImageTypes()) { + if (!CollectionUtil.contains(imageTypes, imageType)) { + ptImageMapper.insertImageType(image.getId(), imageType); } - for (Integer imageType : imageTypes) { - if (!CollectionUtil.contains(imageUpdateDTO.getImageTypes(), imageType)) { - ptImageMapper.deleteImageType(image.getId(), imageType); - } + } + for (Integer imageType : imageTypes) { + if (!CollectionUtil.contains(imageUpdateDTO.getImageTypes(), imageType)) { + ptImageMapper.deleteImageType(image.getId(), imageType); } } } @@ -362,10 +307,8 @@ public class PtImageServiceImpl implements PtImageService { //从会话中获取用户信息 UserContext user = userContextService.getCurUser(); QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("image_status", ImageStateEnum.SUCCESS.getCode()); queryWrapper.eq("deleted", NumberConstant.NUMBER_0); if (!BaseService.isAdmin(user)) { - queryWrapper.in("origin_user_id", user.getId(), 0L); } if (ptImageQueryNameDTO.getImageResource() != null) { @@ -403,12 +346,8 @@ public class PtImageServiceImpl implements PtImageService { throw new BusinessException(ResponseCode.BADREQUEST, "该镜像不存在或镜像用途不支持!"); } - //仅支持[制作成功]状态镜像设置为默认镜像 - if (!ImageStateEnum.SUCCESS.getCode().equals(image.getImageStatus())) { - throw new BusinessException(ResponseCode.BADREQUEST, "仅支持[制作成功]状态镜像设置为默认镜像!"); - } - if (image.getImageResource() != ImageSourceEnum.PRE.getCode()) { + if (!image.getImageResource().equals(ImageSourceEnum.PRE.getCode())) { throw new BusinessException(ResponseCode.BADREQUEST, "非预制镜像不能设置为默认镜像!"); } @@ -434,7 +373,7 @@ public class PtImageServiceImpl implements PtImageService { /** * 获取镜像URL * - * @param imageQueryUrlDTO 查询镜像路径DTO + * @param imageQueryUrlDTO 查询镜像地址DTO * @return String 镜像url */ @Override @@ -453,7 +392,6 @@ public class PtImageServiceImpl implements PtImageService { if (imageQueryUrlDTO.getIsDefault() != null) { queryWrapper.eq(PtImage::getIsDefault, imageQueryUrlDTO.getIsDefault()); } - queryWrapper.eq(PtImage::getImageStatus, ImageStateEnum.SUCCESS.getCode()); queryWrapper.eq(PtImage::getDeleted, NumberConstant.NUMBER_0); List imageList = new ArrayList<>(); if (CollectionUtil.isNotEmpty(imageQueryUrlDTO.getImageTypes())) { @@ -470,23 +408,13 @@ public class PtImageServiceImpl implements PtImageService { return imageUrl; } - /** - * 自定义镜像回收的还原实现 - * - * @param dto 资源回收DTO对象 - */ - @Override - public void recycleRollback(RecycleCreateDTO dto) { - String imageId = dto.getRemark(); - ptImageMapper.updateDeletedById(Long.valueOf(imageId), false); - } - @Override @DataPermissionMethod(dataType = DatasetTypeEnum.PUBLIC) public List getTerminalImageList() { UserContext user = userContextService.getCurUser(); LambdaQueryWrapper queryTerminalWrapper = new LambdaQueryWrapper<>(); - queryTerminalWrapper.eq(PtImage::getImageStatus, ImageStateEnum.SUCCESS.getCode()).eq(PtImage::getDeleted, NumberConstant.NUMBER_0);; + queryTerminalWrapper.eq(PtImage::getDeleted, NumberConstant.NUMBER_0); + ; if (user != null && !BaseService.isAdmin()) { queryTerminalWrapper.and(wrapper -> wrapper.eq(PtImage::getCreateUserId, user.getId()).or().eq(PtImage::getImageResource, ImageSourceEnum.PRE.getCode())) .and(wrapper -> wrapper.eq(PtImage::getDeleted, NumberConstant.NUMBER_0)); @@ -509,17 +437,16 @@ public class PtImageServiceImpl implements PtImageService { /** - * @param ptImageUploadDTO 镜像上传逻辑校验 + * @param ptImageSaveDTO 镜像保存逻辑校验 * @param user 用户 * @return List 镜像列表 **/ @DataPermissionMethod(dataType = DatasetTypeEnum.PUBLIC) - private List checkUploadImage(PtImageUploadDTO ptImageUploadDTO, UserContext user, Integer source) { + private List checkSaveImage(PtImageSaveDTO ptImageSaveDTO, UserContext user, Integer source) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PtImage::getImageName, ptImageUploadDTO.getImageName()) - .eq(PtImage::getImageTag, ptImageUploadDTO.getImageTag()) + queryWrapper.eq(PtImage::getImageUrl, ptImageSaveDTO.getImageUrl()) .eq(PtImage::getImageResource, source); if (user != null) { @@ -549,7 +476,7 @@ public class PtImageServiceImpl implements PtImageService { ptImages.stream().forEach( ptImage -> { - PtImageVO ptImageVO =new PtImageVO(); + PtImageVO ptImageVO = new PtImageVO(); ptImageVO.setId(ptImage.getId()); ptImageVO.setName(ptImage.getImageName()); ptImageVO.setTag(ptImage.getImageTag()); @@ -558,4 +485,24 @@ public class PtImageServiceImpl implements PtImageService { ); return ptImageVOS; } -} \ No newline at end of file + + /** + * 校验镜像地址与镜像名称、tag是否匹配 + * + * @param imageUrl 镜像地址 + * @param imageName 镜像名称 + * @param imageTag 镜像tag + */ + private void validImageInfo(String imageUrl, String imageName, String imageTag) { + // 标准镜像地址:镜像地址域名/命名空间/镜像名:镜像tag + + // 分解镜像地址 + String[] split = imageUrl.substring(imageUrl.lastIndexOf(StrUtil.SLASH) + 1).split(StrUtil.COLON); + if (!split[0].equals(imageName)) { + throw new BusinessException("镜像名称不匹配"); + } + if (!split[1].equals(imageTag)) { + throw new BusinessException("镜像版本号不匹配"); + } + } +} diff --git a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/task/ImageRecycleFile.java b/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/task/ImageRecycleFile.java deleted file mode 100644 index 32bae62..0000000 --- a/dubhe-server/dubhe-image/src/main/java/org/dubhe/image/service/task/ImageRecycleFile.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright 2020 Tianshu AI Platform. All Rights Reserved. - * - * 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. - * ============================================================= - */ -package org.dubhe.image.service.task; - -import cn.hutool.core.util.StrUtil; -import org.dubhe.biz.base.constant.HarborProperties; -import org.dubhe.biz.log.enums.LogEnum; -import org.dubhe.biz.log.utils.LogUtil; -import org.dubhe.harbor.api.HarborApi; -import org.dubhe.image.service.PtImageService; -import org.dubhe.recycle.domain.dto.RecycleCreateDTO; -import org.dubhe.recycle.domain.dto.RecycleDetailCreateDTO; -import org.dubhe.recycle.global.AbstractGlobalRecycle; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.stereotype.Component; - -/** - * @description 镜像资源回收/还原 - * @date 2021-03-23 - */ -@RefreshScope -@Component(value = "imageRecycleFile") -public class ImageRecycleFile extends AbstractGlobalRecycle { - - @Autowired - private HarborApi harborApi; - - @Autowired - private HarborProperties harborProperties; - - @Autowired - private PtImageService ptImageService; - - /** - * 自定义回收镜像实现 - * - * @param detail 数据清理详情参数 - * @param dto 资源回收创建对象 - * @return true 继续执行,false 中断任务详情回收(本次无法执行完毕,创建新任务到下次执行) - */ - @Override - protected boolean clearDetail(RecycleDetailCreateDTO detail, RecycleCreateDTO dto) throws Exception { - LogUtil.info(LogEnum.IMAGE, "image custom recycle file,params:{}", detail); - if (StrUtil.isNotBlank(detail.getRecycleCondition())) { - String imageUrl = harborProperties.getAddress() + StrUtil.SLASH + detail.getRecycleCondition(); - LogUtil.info(LogEnum.IMAGE, "delete harbor image url:{}", imageUrl); - //同步删除harbor镜像 - harborApi.deleteImageByTag(imageUrl); - } - return true; - } - - /** - * 数据还原 - * - * @param dto 数据清理参数 - */ - @Override - protected void rollback(RecycleCreateDTO dto) { - ptImageService.recycleRollback(dto); - } -} diff --git a/dubhe-server/dubhe-image/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-image/src/main/resources/bootstrap.yml index f694cfe..ed82e54 100644 --- a/dubhe-server/dubhe-image/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-image/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-k8s.yaml group: dubhe @@ -34,7 +34,7 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/dubhe-image/src/test/java/org/dubhe/image/PtImageTest.java b/dubhe-server/dubhe-image/src/test/java/org/dubhe/image/PtImageTest.java index 9163ef6..f312033 100644 --- a/dubhe-server/dubhe-image/src/test/java/org/dubhe/image/PtImageTest.java +++ b/dubhe-server/dubhe-image/src/test/java/org/dubhe/image/PtImageTest.java @@ -21,8 +21,8 @@ import com.alibaba.fastjson.JSON; import org.dubhe.biz.base.constant.AuthConst; import org.dubhe.cloud.unittest.base.BaseTest; import org.dubhe.image.domain.dto.PtImageDeleteDTO; +import org.dubhe.image.domain.dto.PtImageSaveDTO; import org.dubhe.image.domain.dto.PtImageUpdateDTO; -import org.dubhe.image.domain.dto.PtImageUploadDTO; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; @@ -78,9 +78,9 @@ public class PtImageTest extends BaseTest { */ @Test public void uploadImageTest() throws Exception { - PtImageUploadDTO ptImageUploadDTO = new PtImageUploadDTO(); + PtImageSaveDTO ptImageUploadDTO = new PtImageSaveDTO(); ptImageUploadDTO.setImageName("mysql"); - ptImageUploadDTO.setImagePath("F:/mysql.tar"); + ptImageUploadDTO.setImageUrl("F:/mysql.tar"); ptImageUploadDTO.setImageTag("5.7"); ptImageUploadDTO.setRemark("测试上传镜像"); @@ -94,7 +94,7 @@ public class PtImageTest extends BaseTest { @Test public void updateImageTest() throws Exception { PtImageUpdateDTO imageUpdateDTO = new PtImageUpdateDTO(); - imageUpdateDTO.setIds(Arrays.asList()); + imageUpdateDTO.setId(1L); imageUpdateDTO.setRemark(""); mockMvcTest(MockMvcRequestBuilders.put("/ptImage"), JSON.toJSONString(imageUpdateDTO), MockMvcResultMatchers.status().is2xxSuccessful(), 200); diff --git a/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/event/callback/DeploymentCallback.java b/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/event/callback/DeploymentCallback.java index 2e16205..3db9335 100644 --- a/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/event/callback/DeploymentCallback.java +++ b/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/event/callback/DeploymentCallback.java @@ -75,7 +75,7 @@ public class DeploymentCallback extends Observable { setChanged(); notifyObservers(deployment); if (StringUtils.isNotEmpty(businessLabel)){ - BaseK8sDeploymentCallbackCreateDTO baseK8sDeploymentCallbackCreateDTO = new BaseK8sDeploymentCallbackCreateDTO(deployment.getNamespace(), deployment.getLabel(K8sLabelConstants.BASE_TAG_SOURCE),deployment.getName(), deployment.getReadyReplicas() == null?0:deployment.getReadyReplicas(), deployment.getReplicas() == null?0:deployment.getReplicas()); + BaseK8sDeploymentCallbackCreateDTO baseK8sDeploymentCallbackCreateDTO = new BaseK8sDeploymentCallbackCreateDTO(deployment.getNamespace(), deployment.getLabel(K8sLabelConstants.BASE_TAG_SOURCE),deployment.getName(), deployment.getReadyReplicas() == null?0:deployment.getReadyReplicas(), deployment.getReplicas() == null?0:deployment.getReplicas(),watcherActionEnum.getAction()); String url = k8sCallBackTool.getDeploymentCallbackUrl(businessLabel); String token = k8sCallBackTool.generateToken(); diff --git a/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/observer/TrainJobObserver.java b/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/observer/TrainJobObserver.java index 7aa38e5..f93e4eb 100644 --- a/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/observer/TrainJobObserver.java +++ b/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/observer/TrainJobObserver.java @@ -17,6 +17,7 @@ package org.dubhe.dubhek8s.observer; +import org.dubhe.biz.base.constant.MagicNumConstant; import org.dubhe.biz.base.enums.BizEnum; import org.dubhe.biz.base.utils.SpringContextHolder; import org.dubhe.biz.log.enums.LogEnum; @@ -54,8 +55,18 @@ public class TrainJobObserver implements Observer { BizPod pod = (BizPod)arg; boolean trainJobFailed = PodPhaseEnum.FAILED.getPhase().equals(pod.getPhase()) && BizEnum.ALGORITHM.getBizCode().equals(pod.getBusinessLabel()) && SpringContextHolder.getActiveProfile().equals(pod.getLabel(K8sLabelConstants.PLATFORM_RUNTIME_ENV)); if (trainJobFailed){ - LogUtil.warn(LogEnum.BIZ_K8S,"delete failed train job resourceName {};phase {};podName {}",pod.getLabel(K8sLabelConstants.BASE_TAG_SOURCE),pod.getPhase(),pod.getName()); - trainJobApi.delete(pod.getNamespace(),pod.getLabel(K8sLabelConstants.BASE_TAG_SOURCE)); + new Thread(new Runnable(){ + @Override + public void run(){ + try { + Thread.sleep(MagicNumConstant.ONE_MINUTE); + } catch (InterruptedException e) { + LogUtil.error(LogEnum.BIZ_K8S,"TrainJobObserver update error {}",e.getMessage(),e); + } + LogUtil.warn(LogEnum.BIZ_K8S,"delete failed train job resourceName {};phase {};podName {}",pod.getLabel(K8sLabelConstants.BASE_TAG_SOURCE),pod.getPhase(),pod.getName()); + trainJobApi.delete(pod.getNamespace(),pod.getLabel(K8sLabelConstants.BASE_TAG_SOURCE)); + } + }).start(); } } } diff --git a/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/service/impl/SystemNodeServiceImpl.java b/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/service/impl/SystemNodeServiceImpl.java index dc606cb..c817d19 100644 --- a/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/service/impl/SystemNodeServiceImpl.java +++ b/dubhe-server/dubhe-k8s/src/main/java/org/dubhe/dubhek8s/service/impl/SystemNodeServiceImpl.java @@ -79,7 +79,7 @@ public class SystemNodeServiceImpl implements SystemNodeService { @Resource private AdminClient adminClient; - private final static String INTERNAL_IP = "InternalIP"; + /** @@ -231,7 +231,7 @@ public class SystemNodeServiceImpl implements SystemNodeService { nodeDTO.setUid(node.getUid()); nodeDTO.setName(node.getName()); node.getAddresses().stream().forEach(bizNodeAddress -> { - if (INTERNAL_IP.equals(bizNodeAddress.getType())) { + if (K8sParamConstants.INTERNAL_IP.equals(bizNodeAddress.getType())) { nodeDTO.setIp(bizNodeAddress.getAddress()); return; } diff --git a/dubhe-server/dubhe-k8s/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-k8s/src/main/resources/bootstrap.yml index fed1cd3..3065f41 100644 --- a/dubhe-server/dubhe-k8s/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-k8s/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enabled: true - server-addr: 127.0.0.1:8848 - namespace: dubhe-prod + server-addr: 10.105.1.133:8848 + namespace: dubhe-server-cloud-dev shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -26,6 +26,6 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/dubhe-k8s/src/test/java/org/dubhe/dubhek8s/k8s/PodCallbackTest.java b/dubhe-server/dubhe-k8s/src/test/java/org/dubhe/dubhek8s/k8s/PodCallbackTest.java index eec035f..8d1217f 100644 --- a/dubhe-server/dubhe-k8s/src/test/java/org/dubhe/dubhek8s/k8s/PodCallbackTest.java +++ b/dubhe-server/dubhe-k8s/src/test/java/org/dubhe/dubhek8s/k8s/PodCallbackTest.java @@ -84,7 +84,7 @@ public class PodCallbackTest { @Test public void callback(){ - String podStr = "{\"additionalProperties\":{},\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"additionalProperties\":{},\"annotations\":{\"cni.projectcalico.org/podIP\":\"127.0.0.1/32\"},\"creationTimestamp\":\"2020-09-28T07:20:31Z\",\"finalizers\":[],\"generateName\":\"serving-rn-173-wan40byz-64d88c69b4-\",\"labels\":{\"platform/business\":\"serving\",\"platform/create-by\":\"platform\",\"platform/p-kind\":\"Deployment\",\"platform/p-name\":\"serving-rn-173-wan40byz\",\"platform/resource-name\":\"serving-rn-173\",\"platform/runtime-env\":\"serving\",\"pod-template-hash\":\"64d88c69b4\"},\"managedFields\":[],\"name\":\"serving-rn-173-wan40byz-64d88c69b4-8zq4t\",\"namespace\":\"namespace-1\",\"ownerReferences\":[{\"additionalProperties\":{},\"apiVersion\":\"apps/v1\",\"blockOwnerDeletion\":true,\"controller\":true,\"kind\":\"ReplicaSet\",\"name\":\"serving-rn-173-wan40byz-64d88c69b4\",\"uid\":\"c8e7e4c2-c19f-4ee1-9dd7-7e32e258086c\"}],\"resourceVersion\":\"20702829\",\"selfLink\":\"/api/v1/namespaces/namespace-1/pods/serving-rn-173-wan40byz-64d88c69b4-8zq4t\",\"uid\":\"15a1f63c-5bd4-4c6f-90bd-5c984a3b3086\"},\"spec\":{\"additionalProperties\":{},\"containers\":[{\"additionalProperties\":{},\"args\":[\"-c\",\"python /usr/local/TS_Serving/serving/server.py --platform='tensorflow' --model_name='resnet50' --model_path='/usr/local/TS_Serving/models/resnet50' --log_dir='/usr/local/TS_Serving/logs/'\"],\"command\":[\"/bin/bash\"],\"env\":[],\"envFrom\":[],\"image\":\"harbor.dubhe.ai/serving/serving:v1.0\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"serving-rn-173-wan40byz\",\"ports\":[{\"additionalProperties\":{},\"containerPort\":5000,\"name\":\"http\",\"protocol\":\"TCP\"}],\"resources\":{\"additionalProperties\":{},\"limits\":{\"cpu\":{\"additionalProperties\":{},\"amount\":\"1\",\"format\":\"\"},\"nvidia.com/gpu\":{\"additionalProperties\":{},\"amount\":\"1\",\"format\":\"\"}},\"requests\":{\"cpu\":{\"additionalProperties\":{},\"amount\":\"1\",\"format\":\"\"},\"nvidia.com/gpu\":{\"additionalProperties\":{},\"amount\":\"1\",\"format\":\"\"}}},\"terminationMessagePath\":\"/dev/termination-log\",\"terminationMessagePolicy\":\"File\",\"volumeDevices\":[],\"volumeMounts\":[{\"additionalProperties\":{},\"mountPath\":\"/usr/local/TS_Serving/models/resnet50\",\"name\":\"volume-0\"},{\"additionalProperties\":{},\"mountPath\":\"/usr/local/TS_Serving/serving\",\"name\":\"volume-1\"},{\"additionalProperties\":{},\"mountPath\":\"/var/run/secrets/kubernetes.io/serviceaccount\",\"name\":\"default-token-l7kbz\",\"readOnly\":true}]}],\"dnsPolicy\":\"ClusterFirst\",\"enableServiceLinks\":true,\"ephemeralContainers\":[],\"hostAliases\":[],\"imagePullSecrets\":[],\"initContainers\":[],\"nodeName\":\"qjy-ai05\",\"nodeSelector\":{\"gpu\":\"gpu\"},\"priority\":0,\"readinessGates\":[],\"restartPolicy\":\"Always\",\"schedulerName\":\"default-scheduler\",\"securityContext\":{\"additionalProperties\":{},\"supplementalGroups\":[],\"sysctls\":[]},\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"terminationGracePeriodSeconds\":30,\"tolerations\":[{\"additionalProperties\":{},\"effect\":\"NoExecute\",\"key\":\"node.kubernetes.io/not-ready\",\"operator\":\"Exists\",\"tolerationSeconds\":300},{\"additionalProperties\":{},\"effect\":\"NoExecute\",\"key\":\"node.kubernetes.io/unreachable\",\"operator\":\"Exists\",\"tolerationSeconds\":300}],\"topologySpreadConstraints\":[],\"volumes\":[{\"additionalProperties\":{},\"name\":\"volume-0\",\"nfs\":{\"additionalProperties\":{},\"path\":\"/nfs/dubhe-dev/serving/models/tensorflow_models/resnet50/\",\"server\":\"127.0.0.1\"}},{\"additionalProperties\":{},\"name\":\"volume-1\",\"nfs\":{\"additionalProperties\":{},\"path\":\"/nfs/dubhe-dev/serving/TS_Serving\",\"server\":\"127.0.0.1\"}},{\"additionalProperties\":{},\"name\":\"default-token-l7kbz\",\"secret\":{\"additionalProperties\":{},\"defaultMode\":420,\"items\":[],\"secretName\":\"default-token-l7kbz\"}}]},\"status\":{\"additionalProperties\":{},\"conditions\":[{\"additionalProperties\":{},\"lastTransitionTime\":\"2020-09-28T07:20:02Z\",\"status\":\"True\",\"type\":\"Initialized\"},{\"additionalProperties\":{},\"lastTransitionTime\":\"2020-09-28T07:20:05Z\",\"status\":\"True\",\"type\":\"Ready\"},{\"additionalProperties\":{},\"lastTransitionTime\":\"2020-09-28T07:20:05Z\",\"status\":\"True\",\"type\":\"ContainersReady\"},{\"additionalProperties\":{},\"lastTransitionTime\":\"2020-09-28T07:20:31Z\",\"status\":\"True\",\"type\":\"PodScheduled\"}],\"containerStatuses\":[{\"additionalProperties\":{},\"containerID\":\"docker://777ee925f078ed62d77902117de2043ffd2323894c00d6ea4d9d5d0bee1fad50\",\"image\":\"harbor.dubhe.ai/serving/serving:v1.0\",\"imageID\":\"docker-pullable://harbor.dubhe.ai/serving/serving@sha256:f09d3b1a7e854582c33235d25569ef7ea6eff12446ce6bd8662147d68c6a88ee\",\"lastState\":{\"additionalProperties\":{}},\"name\":\"serving-rn-173-wan40byz\",\"ready\":true,\"restartCount\":0,\"started\":true,\"state\":{\"additionalProperties\":{},\"running\":{\"additionalProperties\":{},\"startedAt\":\"2020-09-28T07:20:04Z\"}}}],\"ephemeralContainerStatuses\":[],\"hostIP\":\"10.5.24.134\",\"initContainerStatuses\":[],\"phase\":\"Running\",\"podIP\":\"172.16.29.81\",\"podIPs\":[{\"additionalProperties\":{},\"ip\":\"172.16.29.81\"}],\"qosClass\":\"Burstable\",\"startTime\":\"2020-09-28T07:20:02Z\"}}"; + String podStr = "{\"additionalProperties\":{},\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"additionalProperties\":{},\"annotations\":{\"cni.projectcalico.org/podIP\":\"172.16.29.81/32\"},\"creationTimestamp\":\"2020-09-28T07:20:31Z\",\"finalizers\":[],\"generateName\":\"serving-rn-173-wan40byz-64d88c69b4-\",\"labels\":{\"platform/business\":\"serving\",\"platform/create-by\":\"platform\",\"platform/p-kind\":\"Deployment\",\"platform/p-name\":\"serving-rn-173-wan40byz\",\"platform/resource-name\":\"serving-rn-173\",\"platform/runtime-env\":\"serving\",\"pod-template-hash\":\"64d88c69b4\"},\"managedFields\":[],\"name\":\"serving-rn-173-wan40byz-64d88c69b4-8zq4t\",\"namespace\":\"namespace-1\",\"ownerReferences\":[{\"additionalProperties\":{},\"apiVersion\":\"apps/v1\",\"blockOwnerDeletion\":true,\"controller\":true,\"kind\":\"ReplicaSet\",\"name\":\"serving-rn-173-wan40byz-64d88c69b4\",\"uid\":\"c8e7e4c2-c19f-4ee1-9dd7-7e32e258086c\"}],\"resourceVersion\":\"20702829\",\"selfLink\":\"/api/v1/namespaces/namespace-1/pods/serving-rn-173-wan40byz-64d88c69b4-8zq4t\",\"uid\":\"15a1f63c-5bd4-4c6f-90bd-5c984a3b3086\"},\"spec\":{\"additionalProperties\":{},\"containers\":[{\"additionalProperties\":{},\"args\":[\"-c\",\"python /usr/local/TS_Serving/serving/server.py --platform='tensorflow' --model_name='resnet50' --model_path='/usr/local/TS_Serving/models/resnet50' --log_dir='/usr/local/TS_Serving/logs/'\"],\"command\":[\"/bin/bash\"],\"env\":[],\"envFrom\":[],\"image\":\"harbor.dubhe.ai/serving/serving:v1.0\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"serving-rn-173-wan40byz\",\"ports\":[{\"additionalProperties\":{},\"containerPort\":5000,\"name\":\"http\",\"protocol\":\"TCP\"}],\"resources\":{\"additionalProperties\":{},\"limits\":{\"cpu\":{\"additionalProperties\":{},\"amount\":\"1\",\"format\":\"\"},\"nvidia.com/gpu\":{\"additionalProperties\":{},\"amount\":\"1\",\"format\":\"\"}},\"requests\":{\"cpu\":{\"additionalProperties\":{},\"amount\":\"1\",\"format\":\"\"},\"nvidia.com/gpu\":{\"additionalProperties\":{},\"amount\":\"1\",\"format\":\"\"}}},\"terminationMessagePath\":\"/dev/termination-log\",\"terminationMessagePolicy\":\"File\",\"volumeDevices\":[],\"volumeMounts\":[{\"additionalProperties\":{},\"mountPath\":\"/usr/local/TS_Serving/models/resnet50\",\"name\":\"volume-0\"},{\"additionalProperties\":{},\"mountPath\":\"/usr/local/TS_Serving/serving\",\"name\":\"volume-1\"},{\"additionalProperties\":{},\"mountPath\":\"/var/run/secrets/kubernetes.io/serviceaccount\",\"name\":\"default-token-l7kbz\",\"readOnly\":true}]}],\"dnsPolicy\":\"ClusterFirst\",\"enableServiceLinks\":true,\"ephemeralContainers\":[],\"hostAliases\":[],\"imagePullSecrets\":[],\"initContainers\":[],\"nodeName\":\"qjy-ai05\",\"nodeSelector\":{\"gpu\":\"gpu\"},\"priority\":0,\"readinessGates\":[],\"restartPolicy\":\"Always\",\"schedulerName\":\"default-scheduler\",\"securityContext\":{\"additionalProperties\":{},\"supplementalGroups\":[],\"sysctls\":[]},\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"terminationGracePeriodSeconds\":30,\"tolerations\":[{\"additionalProperties\":{},\"effect\":\"NoExecute\",\"key\":\"node.kubernetes.io/not-ready\",\"operator\":\"Exists\",\"tolerationSeconds\":300},{\"additionalProperties\":{},\"effect\":\"NoExecute\",\"key\":\"node.kubernetes.io/unreachable\",\"operator\":\"Exists\",\"tolerationSeconds\":300}],\"topologySpreadConstraints\":[],\"volumes\":[{\"additionalProperties\":{},\"name\":\"volume-0\",\"nfs\":{\"additionalProperties\":{},\"path\":\"/nfs/dubhe-dev/serving/models/tensorflow_models/resnet50/\",\"server\":\"10.5.26.234\"}},{\"additionalProperties\":{},\"name\":\"volume-1\",\"nfs\":{\"additionalProperties\":{},\"path\":\"/nfs/dubhe-dev/serving/TS_Serving\",\"server\":\"10.5.26.234\"}},{\"additionalProperties\":{},\"name\":\"default-token-l7kbz\",\"secret\":{\"additionalProperties\":{},\"defaultMode\":420,\"items\":[],\"secretName\":\"default-token-l7kbz\"}}]},\"status\":{\"additionalProperties\":{},\"conditions\":[{\"additionalProperties\":{},\"lastTransitionTime\":\"2020-09-28T07:20:02Z\",\"status\":\"True\",\"type\":\"Initialized\"},{\"additionalProperties\":{},\"lastTransitionTime\":\"2020-09-28T07:20:05Z\",\"status\":\"True\",\"type\":\"Ready\"},{\"additionalProperties\":{},\"lastTransitionTime\":\"2020-09-28T07:20:05Z\",\"status\":\"True\",\"type\":\"ContainersReady\"},{\"additionalProperties\":{},\"lastTransitionTime\":\"2020-09-28T07:20:31Z\",\"status\":\"True\",\"type\":\"PodScheduled\"}],\"containerStatuses\":[{\"additionalProperties\":{},\"containerID\":\"docker://777ee925f078ed62d77902117de2043ffd2323894c00d6ea4d9d5d0bee1fad50\",\"image\":\"harbor.dubhe.ai/serving/serving:v1.0\",\"imageID\":\"docker-pullable://harbor.dubhe.ai/serving/serving@sha256:f09d3b1a7e854582c33235d25569ef7ea6eff12446ce6bd8662147d68c6a88ee\",\"lastState\":{\"additionalProperties\":{}},\"name\":\"serving-rn-173-wan40byz\",\"ready\":true,\"restartCount\":0,\"started\":true,\"state\":{\"additionalProperties\":{},\"running\":{\"additionalProperties\":{},\"startedAt\":\"2020-09-28T07:20:04Z\"}}}],\"ephemeralContainerStatuses\":[],\"hostIP\":\"10.5.24.134\",\"initContainerStatuses\":[],\"phase\":\"Running\",\"podIP\":\"172.16.29.81\",\"podIPs\":[{\"additionalProperties\":{},\"ip\":\"172.16.29.81\"}],\"qosClass\":\"Burstable\",\"startTime\":\"2020-09-28T07:20:02Z\"}}"; Pod pod = JSON.parseObject(podStr, Pod.class); WatcherActionEnum watcherActionEnum = WatcherActionEnum.get("ADDED"); podCallback.podCallback(watcherActionEnum, BizConvertUtils.toBizPod(pod)); diff --git a/dubhe-server/dubhe-measure/src/main/java/org/dubhe/measure/service/impl/PtAtlasCameraServiceImpl.java b/dubhe-server/dubhe-measure/src/main/java/org/dubhe/measure/service/impl/PtAtlasCameraServiceImpl.java index 483a147..ce0266e 100644 --- a/dubhe-server/dubhe-measure/src/main/java/org/dubhe/measure/service/impl/PtAtlasCameraServiceImpl.java +++ b/dubhe-server/dubhe-measure/src/main/java/org/dubhe/measure/service/impl/PtAtlasCameraServiceImpl.java @@ -141,7 +141,7 @@ public class PtAtlasCameraServiceImpl implements PtAtlasCameraService { ResponseEntity exchange = restTemplate.exchange(atlasUrlProperties.getVms() + "/checkCameraUrl", HttpMethod.POST, requestEntity, Map.class, param); Map statusMap = (Map) exchange.getBody().get("data"); if (statusMap.containsKey("cameraUrl")) { - ptAtlasCamera.setHlsUrl(statusMap.get("cameraUrl").replace("127.0.0.1", "127.0.0.1")); + ptAtlasCamera.setHlsUrl(statusMap.get("cameraUrl").replace("172.18.26.2", "10.105.10.51")); ptAtlasCameraMapper.updateById(ptAtlasCamera); } } catch (Exception e) { diff --git a/dubhe-server/dubhe-measure/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-measure/src/main/resources/bootstrap.yml index df5ec75..990710f 100644 --- a/dubhe-server/dubhe-measure/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-measure/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -34,7 +34,7 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/dubhe-model/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-model/src/main/resources/bootstrap.yml index 3b30e86..5cd9088 100644 --- a/dubhe-server/dubhe-model/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-model/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -34,6 +34,6 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 \ No newline at end of file + server-addr: 10.105.1.133:8848 \ No newline at end of file diff --git a/dubhe-server/dubhe-notebook/src/main/java/org/dubhe/notebook/service/impl/NoteBookServiceImpl.java b/dubhe-server/dubhe-notebook/src/main/java/org/dubhe/notebook/service/impl/NoteBookServiceImpl.java index ed79d8d..40f1f16 100644 --- a/dubhe-server/dubhe-notebook/src/main/java/org/dubhe/notebook/service/impl/NoteBookServiceImpl.java +++ b/dubhe-server/dubhe-notebook/src/main/java/org/dubhe/notebook/service/impl/NoteBookServiceImpl.java @@ -21,13 +21,10 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateBetween; import cn.hutool.core.date.DateUnit; import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.dubhe.biz.base.utils.StringUtils; -import org.dubhe.biz.base.constant.HarborProperties; import org.dubhe.biz.base.constant.MagicNumConstant; import org.dubhe.biz.base.constant.NumberConstant; import org.dubhe.biz.base.constant.StringConstant; @@ -45,8 +42,10 @@ import org.dubhe.biz.base.service.UserContextService; import org.dubhe.biz.base.utils.HttpUtils; import org.dubhe.biz.base.utils.NumberUtil; import org.dubhe.biz.base.utils.ResultUtil; +import org.dubhe.biz.base.utils.StringUtils; import org.dubhe.biz.base.vo.DataResponseBody; import org.dubhe.biz.base.vo.DatasetVO; +import org.dubhe.biz.base.vo.NoteBookVO; import org.dubhe.biz.db.utils.PageUtil; import org.dubhe.biz.db.utils.WrapperHelp; import org.dubhe.biz.file.api.FileStoreApi; @@ -79,7 +78,6 @@ import org.dubhe.notebook.enums.NoteBookStatusEnum; import org.dubhe.notebook.service.NoteBookService; import org.dubhe.notebook.service.ProcessNotebookCommand; import org.dubhe.notebook.utils.NotebookUtil; -import org.dubhe.biz.base.vo.NoteBookVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -89,7 +87,13 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.io.File; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -127,9 +131,6 @@ public class NoteBookServiceImpl implements NoteBookService { @Autowired private ImageClient imageClient; - @Autowired - private HarborProperties harborProperties; - @Autowired @Qualifier("hostFileStoreApiImpl") private FileStoreApi fileStoreApi; @@ -223,7 +224,7 @@ public class NoteBookServiceImpl implements NoteBookService { throw new BusinessException(ImageTypeEnum.NOTEBOOK.getCode() + "未配置默认镜像!"); } - return harborProperties.getAddress() + StrUtil.SLASH + imageUrl; + return imageUrl; } /** diff --git a/dubhe-server/dubhe-notebook/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-notebook/src/main/resources/bootstrap.yml index ccd3279..ad87eb2 100644 --- a/dubhe-server/dubhe-notebook/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-notebook/src/main/resources/bootstrap.yml @@ -11,8 +11,8 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-k8s.yaml group: dubhe @@ -32,6 +32,6 @@ spring: discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/dubhe-optimize/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-optimize/src/main/resources/bootstrap.yml index 5f18841..859d0ba 100644 --- a/dubhe-server/dubhe-optimize/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-optimize/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -34,7 +34,7 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/dubhe-point-cloud/src/main/java/org/dubhe/pointcloud/config/PointCloudHarborConfig.java b/dubhe-server/dubhe-point-cloud/src/main/java/org/dubhe/pointcloud/config/PointCloudHarborConfig.java deleted file mode 100644 index 0843a5f..0000000 --- a/dubhe-server/dubhe-point-cloud/src/main/java/org/dubhe/pointcloud/config/PointCloudHarborConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright 2020 Tianshu AI Platform. All Rights Reserved. - * - * 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. - * ============================================================= - */ -package org.dubhe.pointcloud.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -/** - * @description harbor相关配置 - * @date 2020-07-17 - */ -@Data -@Component -@ConfigurationProperties(prefix = "harbor") -public class PointCloudHarborConfig { - - private String address; - - private String username; - - private String password; - - private String modelName; -} diff --git a/dubhe-server/dubhe-point-cloud/src/main/java/org/dubhe/pointcloud/service/impl/PcDatasetServiceImpl.java b/dubhe-server/dubhe-point-cloud/src/main/java/org/dubhe/pointcloud/service/impl/PcDatasetServiceImpl.java index ae516b4..e7da7ec 100644 --- a/dubhe-server/dubhe-point-cloud/src/main/java/org/dubhe/pointcloud/service/impl/PcDatasetServiceImpl.java +++ b/dubhe-server/dubhe-point-cloud/src/main/java/org/dubhe/pointcloud/service/impl/PcDatasetServiceImpl.java @@ -66,7 +66,6 @@ import org.dubhe.pointcloud.client.DataClient; import org.dubhe.pointcloud.client.ImageClient; import org.dubhe.pointcloud.client.ModelClient; import org.dubhe.pointcloud.common.Constant; -import org.dubhe.pointcloud.config.PointCloudHarborConfig; import org.dubhe.pointcloud.dao.PcAnnotationDetailMapper; import org.dubhe.pointcloud.dao.PcDatasetFileMapper; import org.dubhe.pointcloud.dao.PcDatasetMapper; @@ -141,9 +140,6 @@ public class PcDatasetServiceImpl implements PcDatasetService { @Resource private DeployAsyncTask deployAsyncTask; - @Resource - private PointCloudHarborConfig pointCloudHarborConfig; - @Resource private ImageClient imageClient; @@ -652,7 +648,7 @@ public class PcDatasetServiceImpl implements PcDatasetService { if (!dataResponseBody.succeed()) { throw new BusinessException(ErrorEnum.CALL_IMAGE_SERVER_FAIL); } - return pointCloudHarborConfig.getAddress() + SymbolConstant.SLASH + dataResponseBody.getData(); + return dataResponseBody.getData(); } /** diff --git a/dubhe-server/dubhe-point-cloud/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-point-cloud/src/main/resources/bootstrap.yml index b6fca8d..eba9ffc 100644 --- a/dubhe-server/dubhe-point-cloud/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-point-cloud/src/main/resources/bootstrap.yml @@ -15,8 +15,8 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-k8s.yaml group: dubhe @@ -43,7 +43,7 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/dubhe-serving-gateway/src/main/java/org/dubhe/servinggateway/config/GatewayServiceHandler.java b/dubhe-server/dubhe-serving-gateway/src/main/java/org/dubhe/servinggateway/config/GatewayServiceHandler.java index f72d6f2..81ba7eb 100644 --- a/dubhe-server/dubhe-serving-gateway/src/main/java/org/dubhe/servinggateway/config/GatewayServiceHandler.java +++ b/dubhe-server/dubhe-serving-gateway/src/main/java/org/dubhe/servinggateway/config/GatewayServiceHandler.java @@ -18,8 +18,10 @@ package org.dubhe.servinggateway.config; import lombok.extern.slf4j.Slf4j; +import org.dubhe.biz.base.constant.MagicNumConstant; import org.dubhe.biz.base.constant.NumberConstant; import org.dubhe.biz.base.constant.SymbolConstant; +import org.dubhe.biz.base.utils.StringUtils; import org.dubhe.biz.log.enums.LogEnum; import org.dubhe.biz.log.utils.LogUtil; import org.dubhe.servinggateway.constant.GatewayConstant; @@ -38,8 +40,8 @@ import org.springframework.web.util.UriComponentsBuilder; import reactor.core.publisher.Mono; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -55,9 +57,6 @@ public class GatewayServiceHandler implements ApplicationEventPublisherAware, Co private ApplicationEventPublisher publisher; - @Value("${serving.gateway.postfixUrl}") - private String postfixUrl; - @Resource private RedisRouteDefinitionRepository routeDefinitionRepository; @@ -87,6 +86,9 @@ public class GatewayServiceHandler implements ApplicationEventPublisherAware, Co LogUtil.info(LogEnum.SERVING_GATEWAY, "Begin load route config"); List activeRoutes = gatewayRouteService.findActiveRoutes(); for (GatewayRouteQueryVO activeRoute : activeRoutes) { + if (StringUtils.isEmpty(activeRoute.getUri())){ + continue; + } RouteDefinition definition = this.convert2RouteDefinition(activeRoute); routeDefinitionRepository.save(Mono.just(definition)).subscribe(); } @@ -103,7 +105,19 @@ public class GatewayServiceHandler implements ApplicationEventPublisherAware, Co public void saveRouteByRouteId(Long id) { LogUtil.info(LogEnum.SERVING_GATEWAY, "Deal save route event"); GatewayRouteQueryVO gatewayRouteQueryVO = gatewayRouteService.findActiveById(id); - if (Objects.nonNull(gatewayRouteQueryVO)) { + //查不到数据进行重试 + int count = 0; + while (gatewayRouteQueryVO == null && count < MagicNumConstant.THREE){ + LogUtil.info(LogEnum.SERVING_GATEWAY, "gatewayRouteQueryVO is null retry:"+count +" id="+id); + gatewayRouteQueryVO = gatewayRouteService.findActiveById(id); + count++; + try { + Thread.sleep(MagicNumConstant.FIVE_HUNDRED); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + if (Objects.nonNull(gatewayRouteQueryVO) && StringUtils.isNotEmpty(gatewayRouteQueryVO.getUri())) { routeDefinitionRepository.save(Mono.just(this.convert2RouteDefinition(gatewayRouteQueryVO))).subscribe(); } // 发布刷新路由事件 @@ -131,17 +145,19 @@ public class GatewayServiceHandler implements ApplicationEventPublisherAware, Co * @return 网关所需的RouteDefinition */ private RouteDefinition convert2RouteDefinition(GatewayRouteQueryVO gatewayRouteQueryVO) { + if(StringUtils.isEmpty(gatewayRouteQueryVO.getUri())){ + return null; + } RouteDefinition definition = new RouteDefinition(); // 设置路由基础信息 definition.setId(GatewayConstant.ROUTE_PREFIX + gatewayRouteQueryVO.getId()); - definition.setUri(UriComponentsBuilder.fromHttpUrl(SymbolConstant.HTTP_SLASH + gatewayRouteQueryVO.getUri() + - SymbolConstant.COLON + httpPort).build().toUri()); + definition.setUri(UriComponentsBuilder.fromHttpUrl(SymbolConstant.HTTP_SLASH + gatewayRouteQueryVO.getUri()).build().toUri()); // 定义url匹配规则的断言 // 举例 {abc}.dubhe.ai 匹配{abc}部分 PredicateDefinition pathPredicate = new PredicateDefinition(); - pathPredicate.setName("Host"); + pathPredicate.setName("Path"); Map predicateParams = new HashMap<>(NumberConstant.NUMBER_8); - predicateParams.put("pattern", gatewayRouteQueryVO.getPatternPath() + postfixUrl); + predicateParams.put("pattern", "/"+gatewayRouteQueryVO.getPatternPath() + "/**"); pathPredicate.setArgs(predicateParams); // 定义权重断言 // 根据配置的权重信息进行分流 @@ -152,11 +168,21 @@ public class GatewayServiceHandler implements ApplicationEventPublisherAware, Co weightParams.put("weight.weight", gatewayRouteQueryVO.getWeight()); weightPredicate.setArgs(weightParams); definition.setPredicates(Arrays.asList(pathPredicate, weightPredicate)); + + List filters =new ArrayList<>(); // 传入自定义的监控指标过滤器 FilterDefinition filterDefinition = new FilterDefinition(); // name设置为定义的MetricsGatewayFilterFactory中GatewayFilterFactory前部分 filterDefinition.setName("Metrics"); - definition.setFilters(Collections.singletonList(filterDefinition)); + filters.add(filterDefinition); + + //去除一级url转发 + FilterDefinition filterDefinitionUrl = new FilterDefinition(); + filterDefinitionUrl.setName("StripPrefix"); + filterDefinitionUrl.addArg("parts","1"); + filters.add(filterDefinitionUrl); + + definition.setFilters(filters); // 塞入自定义数据,供之后filter使用 HashMap metadata = new HashMap<>(NumberConstant.NUMBER_4); metadata.put("servingInfoId", gatewayRouteQueryVO.getServiceInfoId()); diff --git a/dubhe-server/dubhe-serving-gateway/src/main/java/org/dubhe/servinggateway/config/MetricsGatewayFilterFactory.java b/dubhe-server/dubhe-serving-gateway/src/main/java/org/dubhe/servinggateway/config/MetricsGatewayFilterFactory.java index 6c09d4e..75d6859 100644 --- a/dubhe-server/dubhe-serving-gateway/src/main/java/org/dubhe/servinggateway/config/MetricsGatewayFilterFactory.java +++ b/dubhe-server/dubhe-serving-gateway/src/main/java/org/dubhe/servinggateway/config/MetricsGatewayFilterFactory.java @@ -120,7 +120,7 @@ public class MetricsGatewayFilterFactory extends AbstractGatewayFilterFactory { // 判断该请求是否为推理请求 - boolean isInference = exchange.getRequest().getPath().toString().startsWith(GatewayConstant.INFERENCE_INTERFACE_NAME); + boolean isInference = exchange.getRequest().getPath().toString().endsWith(GatewayConstant.INFERENCE_INTERFACE_NAME); if (isInference) { LogUtil.info(LogEnum.SERVING_GATEWAY, "Begin deal inference request filter"); // 调用请求是否成功 diff --git a/dubhe-server/dubhe-serving-gateway/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-serving-gateway/src/main/resources/bootstrap.yml index 2caebd9..e7a02a0 100644 --- a/dubhe-server/dubhe-serving-gateway/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-serving-gateway/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enable: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -30,6 +30,6 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 \ No newline at end of file + server-addr: 10.105.1.133:8848 \ No newline at end of file diff --git a/dubhe-server/dubhe-serving-gateway/src/main/resources/mapper/GatewayRouteMapper.xml b/dubhe-server/dubhe-serving-gateway/src/main/resources/mapper/GatewayRouteMapper.xml index 6cddab9..6a3fbbe 100644 --- a/dubhe-server/dubhe-serving-gateway/src/main/resources/mapper/GatewayRouteMapper.xml +++ b/dubhe-server/dubhe-serving-gateway/src/main/resources/mapper/GatewayRouteMapper.xml @@ -7,7 +7,7 @@ select smc.id id, si.id serviceInfoId, si.uuid patternPath, smc.release_rate weight, smc.url uri from serving_model_config smc left join serving_info si on si.id = smc.serving_id - where si.`status` = 2 and si.deleted = 0 and smc.ready_replicas > 0 and smc.deleted = 0 + where si.deleted = 0 and smc.deleted = 0 and smc.id = #{id} diff --git a/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/config/TrainHarborConfig.java b/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/config/TrainHarborConfig.java deleted file mode 100644 index 0d94b28..0000000 --- a/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/config/TrainHarborConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright 2020 Tianshu AI Platform. All Rights Reserved. - * - * 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. - * ============================================================= - */ -package org.dubhe.serving.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -/** - * @description harbor相关配置 - * @date 2020-07-17 - */ -@Data -@Component -@ConfigurationProperties(prefix = "harbor") -public class TrainHarborConfig { - - private String address; - - private String username; - - private String password; - - private String modelName; -} diff --git a/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/service/impl/BatchServingServiceImpl.java b/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/service/impl/BatchServingServiceImpl.java index f5a2f06..3ce2a55 100644 --- a/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/service/impl/BatchServingServiceImpl.java +++ b/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/service/impl/BatchServingServiceImpl.java @@ -71,7 +71,6 @@ import org.dubhe.serving.client.AlgorithmClient; import org.dubhe.serving.client.ImageClient; import org.dubhe.serving.client.ModelBranchClient; import org.dubhe.serving.client.ModelInfoClient; -import org.dubhe.serving.config.TrainHarborConfig; import org.dubhe.serving.constant.ServingConstant; import org.dubhe.serving.dao.BatchServingMapper; import org.dubhe.serving.domain.dto.*; @@ -135,8 +134,6 @@ public class BatchServingServiceImpl extends ServiceImpl NumberConstant.NUMBER_4) { @@ -421,7 +418,7 @@ public class BatchServingServiceImpl extends ServiceImpl FILE_NAMES; @@ -265,7 +272,7 @@ public class ServingServiceImpl implements ServingService { List queryList = servingInfos.getRecords().stream().map(servingInfo -> { ServingInfoQueryVO servingInfoQueryVO = new ServingInfoQueryVO(); BeanUtils.copyProperties(servingInfo, servingInfoQueryVO); - servingInfoQueryVO.setUrl(servingInfo.getUuid() + GATEWAY_URI_POSTFIX); + servingInfoQueryVO.setUrl(GATEWAY_URI_POSTFIX+"/"+servingInfo.getUuid()); Map statistics = servingLuaScriptService.countCallsByServingInfoId(servingInfo.getId()); servingInfoQueryVO.setTotalNum(statistics.getOrDefault("callCount", SymbolConstant.ZERO)); servingInfoQueryVO.setFailNum(statistics.getOrDefault("failedCount", SymbolConstant.ZERO)); @@ -419,7 +426,7 @@ public class ServingServiceImpl implements ServingService { throw new BusinessException(ServingErrorEnum.CALL_IMAGE_SERVER_FAIL); } servingModelConfig - .setImage(trainHarborConfig.getAddress() + SymbolConstant.SLASH + dataResponseBody.getData()); + .setImage(dataResponseBody.getData()); // 校验模型文件是否存在 String path = k8sNameTool.getAbsolutePath(servingModelConfig.getModelAddress()); @@ -933,8 +940,8 @@ public class ServingServiceImpl implements ServingService { predictParamVO.setOutputs(outputs); predictParamVO.setOther(other); } else if (ServingTypeEnum.HTTP.getType().equals(servingInfo.getType())) { - String url = "http://" + servingInfo.getUuid() + GATEWAY_URI_POSTFIX - + ServingConstant.INFERENCE_INTERFACE_NAME; + String url = "http://" + GATEWAY_URI_POSTFIX + +"/"+ servingInfo.getUuid()+ ServingConstant.INFERENCE_INTERFACE_NAME; predictParamVO.setUrl(url); Map inputs = new HashMap<>(); inputs.put("files", "File"); @@ -1079,6 +1086,7 @@ public class ServingServiceImpl implements ServingService { */ @Override public boolean servingDeploymentCallback(ServingK8sDeploymentCallbackCreateDTO req) { + LogUtil.info(LogEnum.BIZ_K8S,"servingDeploymentCallback:{}", JSON.toJSONString(req)); // 根据namespace和podName找到模型配置 String resourceInfo = k8sNameTool.getResourceInfoFromResourceName(BizEnum.SERVING, req.getResourceName()); if (StringUtils.isBlank(resourceInfo)) { @@ -1105,13 +1113,13 @@ public class ServingServiceImpl implements ServingService { return false; } // 增加发送路由信息 - if (req.getReadyReplicas() > NumberConstant.NUMBER_0 + if (WatcherActionEnum.ADDED.getAction().equals(req.getAction()) && ServingTypeEnum.HTTP.getType().equals(servingInfo.getType())) { this.notifyUpdateServingRoute(Collections.singletonList(servingModelConfig.getId()), Collections.emptyList()); } // 增加删除路由信息 - if (req.getReadyReplicas() == NumberConstant.NUMBER_0 + if (WatcherActionEnum.DELETED.getAction().equals(req.getAction()) && ServingTypeEnum.HTTP.getType().equals(servingInfo.getType())) { this.notifyUpdateServingRoute(Collections.emptyList(), Collections.singletonList(servingModelConfig.getId())); @@ -1148,8 +1156,29 @@ public class ServingServiceImpl implements ServingService { @Transactional(rollbackFor = Exception.class) public boolean updateByCallback(ServingK8sDeploymentCallbackCreateDTO req, ServingModelConfig servingModelConfig, ServingInfo servingInfo) { + + //更新url + if (StringUtils.isEmpty(servingModelConfig.getUrl())){ + //查询 + ModelServingVO modelServingVO = modelServingApi.get(req.getNamespace(),req.getResourceName()); + if (ServingConstant.SUCCESS_CODE.equals(modelServingVO.getCode())) { + // 获取pod对应的url,并修改模型部署状态 + List ports = modelServingVO.getBizService().getPorts(); + + if (CollectionUtils.isNotEmpty(ports)) { + //取第一个url + String url = ""; + if (ports.get(NumberConstant.NUMBER_0).getNodePort() != null) { + url = nodeApi.getAvailableNodeIp() + ":" + ports.get(NumberConstant.NUMBER_0).getNodePort(); + } + servingModelConfig.setUrl(url); + } + } + } + // 更新当前模型配置有效节点数 servingModelConfig.setReadyReplicas(req.getReadyReplicas()); + servingModelConfig.setResourceInfo(null); int result = servingModelConfigMapper.updateById(servingModelConfig); if (result < NumberConstant.NUMBER_1) { return true; diff --git a/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/task/DeployServingAsyncTask.java b/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/task/DeployServingAsyncTask.java index d973071..fc48442 100644 --- a/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/task/DeployServingAsyncTask.java +++ b/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/task/DeployServingAsyncTask.java @@ -31,6 +31,7 @@ import org.dubhe.biz.log.enums.LogEnum; import org.dubhe.biz.log.utils.LogUtil; import org.dubhe.k8s.api.DistributeTrainApi; import org.dubhe.k8s.api.ModelServingApi; +import org.dubhe.k8s.api.NodeApi; import org.dubhe.k8s.api.TrainJobApi; import org.dubhe.k8s.domain.PtBaseResult; import org.dubhe.k8s.domain.bo.DistributeTrainBO; @@ -38,7 +39,7 @@ import org.dubhe.k8s.domain.bo.ModelServingBO; import org.dubhe.k8s.domain.bo.PtJupyterJobBO; import org.dubhe.k8s.domain.bo.PtMountDirBO; import org.dubhe.k8s.domain.resource.BizDistributeTrain; -import org.dubhe.k8s.domain.resource.BizIngressRule; +import org.dubhe.k8s.domain.resource.BizServicePort; import org.dubhe.k8s.domain.vo.ModelServingVO; import org.dubhe.k8s.domain.vo.PtJupyterJobVO; import org.dubhe.k8s.utils.K8sNameTool; @@ -88,6 +89,9 @@ public class DeployServingAsyncTask { @Resource private ModelServingApi modelServingApi; + @Resource + private NodeApi nodeApi; + @Resource private K8sNameTool k8sNameTool; @@ -143,11 +147,14 @@ public class DeployServingAsyncTask { String statusDetailKey = ServingStatusDetailDescUtil.getServingStatusDetailKey(ServingStatusDetailDescUtil.CONTAINER_DEPLOYMENT_EXCEPTION, uniqueName); if (ServingConstant.SUCCESS_CODE.equals(modelServingVO.getCode())) { // 获取pod对应的url,并修改模型部署状态 - List rules = modelServingVO.getBizIngress().getRules(); + List ports = modelServingVO.getBizService().getPorts(); - if (CollectionUtils.isNotEmpty(rules)) { + if (CollectionUtils.isNotEmpty(ports)) { //取第一个url - String url = rules.get(NumberConstant.NUMBER_0).getHost(); + String url = ""; + if (ports.get(NumberConstant.NUMBER_0).getNodePort() != null){ + url = nodeApi.getAvailableNodeIp()+":"+ports.get(NumberConstant.NUMBER_0).getNodePort(); + } servingModelConfig.setUrl(url); flag = true; servingInfo.removeStatusDetail(statusDetailKey); @@ -176,7 +183,6 @@ public class DeployServingAsyncTask { servingInfo.putStatusDetail(statusDetailKey, e.getMessage()); LogUtil.error(LogEnum.SERVING, "User {} create serving failed.The name of serving is {}", user.getUsername(), servingInfo.getName(), e); } - } //修改服务状态 @@ -276,7 +282,7 @@ public class DeployServingAsyncTask { return null; } } else { - LogUtil.info(LogEnum.SERVING, "User {} failed to copy the inference script, script {} not exist", user.getUsername(), pyPathList.get(0)); + LogUtil.info(LogEnum.SERVING, "User {} failed to copy the inference script, script {} not exist", user.getUsername(), pyPathList); return null; } servingPath = fileStoreApi.formatPath(targetPath + getSourceName(sourcePath)); diff --git a/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/utils/GrpcClient.java b/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/utils/GrpcClient.java index 401ead9..99aa549 100644 --- a/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/utils/GrpcClient.java +++ b/dubhe-server/dubhe-serving/src/main/java/org/dubhe/serving/utils/GrpcClient.java @@ -85,6 +85,19 @@ public class GrpcClient { return channel; } + /** + * 创建grpc通道 + * + * @param url + * @return ManagedChannel 通道 + * @throws SSLException + */ + public ManagedChannel createChannel(String url) { + String[] host = url.split(":"); + ManagedChannel channel = NettyChannelBuilder.forAddress(host[0], Integer.parseInt(host[1])).maxInboundMessageSize(NumberConstant.MAX_MESSAGE_LENGTH).negotiationType(NegotiationType.PLAINTEXT).build(); + return channel; + } + /** * 获取crt证书路径 */ @@ -148,7 +161,7 @@ public class GrpcClient { } ManagedChannel channel = null; try { - channel = this.createTlsChannel(url); + channel = this.createChannel(url); channelMap.put(servingId, channel); } catch (Exception e) { LogUtil.error(LogEnum.SERVING, "An Exception occurred when user {} creating the grpc channel, service id:{}", user.getUsername(), servingId, e); @@ -169,7 +182,7 @@ public class GrpcClient { } ManagedChannel channel = null; try { - channel = this.createTlsChannel(url); + channel = this.createChannel(url); channelMap.put(servingId, channel); } catch (Exception e) { LogUtil.error(LogEnum.SERVING, "An Exception occurred when getting grpc channel, service id:{}", servingId, e); diff --git a/dubhe-server/dubhe-serving/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-serving/src/main/resources/bootstrap.yml index 4ccbf88..4166e7a 100644 --- a/dubhe-server/dubhe-serving/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-serving/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enable: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -38,6 +38,6 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 \ No newline at end of file + server-addr: 10.105.1.133:8848 \ No newline at end of file diff --git a/dubhe-server/dubhe-tadl/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-tadl/src/main/resources/bootstrap.yml index 3760e5d..0491b5e 100644 --- a/dubhe-server/dubhe-tadl/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-tadl/src/main/resources/bootstrap.yml @@ -12,8 +12,8 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-k8s.yaml group: dubhe @@ -36,9 +36,9 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 # 配置允许后面的Bean覆盖前面名称重复的Bean main: allow-bean-definition-overriding: true diff --git a/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/domain/entity/PtImage.java b/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/domain/entity/PtImage.java index 5acc7f6..7f4e0e7 100644 --- a/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/domain/entity/PtImage.java +++ b/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/domain/entity/PtImage.java @@ -71,13 +71,6 @@ public class PtImage extends BaseEntity { @TableField(value = "image_resource") private Integer imageResource; - - /** - * 镜像状态 - */ - @TableField(value = "image_status") - private Integer imageStatus; - /** * 资源拥有者ID */ diff --git a/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/domain/entity/Terminal.java b/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/domain/entity/Terminal.java index f321b6a..bc219a6 100644 --- a/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/domain/entity/Terminal.java +++ b/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/domain/entity/Terminal.java @@ -182,6 +182,6 @@ public class Terminal extends BaseEntity { return null; } String[] strings = imageUrl.split(SymbolConstant.SLASH); - return strings.length > 0 ? strings[MagicNumConstant.ZERO] : null; + return strings.length > 0 ? strings[MagicNumConstant.ONE] : null; } } diff --git a/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/service/impl/TerminalServiceImpl.java b/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/service/impl/TerminalServiceImpl.java index 61d98ea..699866e 100644 --- a/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/service/impl/TerminalServiceImpl.java +++ b/dubhe-server/dubhe-terminal/src/main/java/org/dubhe/terminal/service/impl/TerminalServiceImpl.java @@ -16,7 +16,6 @@ */ package org.dubhe.terminal.service.impl; -import java.sql.Timestamp; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; @@ -38,6 +37,7 @@ import org.dubhe.biz.log.utils.LogUtil; import org.dubhe.biz.permission.base.BaseService; import org.dubhe.biz.redis.utils.RedisUtils; import org.dubhe.docker.api.DockerApi; +import org.dubhe.docker.callback.TerminalPushImageResultCallback; import org.dubhe.docker.config.DockerClientFactory; import org.dubhe.docker.enums.DockerOperationEnum; import org.dubhe.docker.utils.DockerCallbackTool; @@ -53,7 +53,6 @@ import org.dubhe.k8s.domain.vo.TerminalResourceVO; import org.dubhe.k8s.enums.BusinessLabelServiceNameEnum; import org.dubhe.k8s.enums.PodPhaseEnum; import org.dubhe.k8s.utils.K8sNameTool; -import org.dubhe.docker.callback.TerminalPushImageResultCallback; import org.dubhe.terminal.config.TerminalConfig; import org.dubhe.terminal.constant.TerminalConstant; import org.dubhe.terminal.dao.PtImageMapper; @@ -77,6 +76,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -217,14 +217,13 @@ public class TerminalServiceImpl implements TerminalService { terminal.putStatusDetail(TerminalStatusEnum.SAVING.getDescription(),"commit 镜像..."); terminalMapper.updateById(terminal); DockerClient dockerClient = dockerClientFactory.getDockerClient(pod.getHostIP()); - String newImagePath = terminal.getImageProject()+SymbolConstant.SLASH+terminal.getCreateUserId()+SymbolConstant.SLASH+terminalPreserveDTO.getImageName(); - String newImageRepository = terminalConfig.getHarborAddress()+SymbolConstant.SLASH+newImagePath; + String newImagePath = terminalConfig.getHarborAddress() + StrUtil.SLASH + terminal.getImageProject() + SymbolConstant.SLASH + terminal.getCreateUserId() + SymbolConstant.SLASH + terminalPreserveDTO.getImageName(); try { - dockerApi.commit(dockerClient,containerID,newImageRepository,terminalPreserveDTO.getImageTag()); + dockerApi.commit(dockerClient,containerID,newImagePath,terminalPreserveDTO.getImageTag()); terminal.setStatus(null); terminal.putStatusDetail(TerminalStatusEnum.SAVING.getDescription(),"push 镜像..."); terminalMapper.updateById(terminal); - boolean pushResult = dockerApi.push(dockerClient,newImageRepository+SymbolConstant.COLON+terminalPreserveDTO.getImageTag(),new TerminalPushImageResultCallback(dockerCallbackTool.getCallbackUrl(SymbolConstant.LOCAL_HOST,terminalConfig.getServerPort(), DockerOperationEnum.PUSH.getType()),terminal.getId(),dockerClient,terminal.getCreateUserId())); + boolean pushResult = dockerApi.push(dockerClient,newImagePath+SymbolConstant.COLON+terminalPreserveDTO.getImageTag(),new TerminalPushImageResultCallback(dockerCallbackTool.getCallbackUrl(SymbolConstant.LOCAL_HOST,terminalConfig.getServerPort(), DockerOperationEnum.PUSH.getType()),terminal.getId(),dockerClient,terminal.getCreateUserId())); if (!pushResult){ LogUtil.error(LogEnum.TERMINAL,"master 推送镜像错误 terminalPreserveDTO:{}",terminalPreserveDTO); throw new BusinessException("推送镜像错误:"); @@ -234,7 +233,7 @@ public class TerminalServiceImpl implements TerminalService { throw new BusinessException("保存容器错误:"+e.getMessage()); } - terminal.setImageUrl(newImagePath+SymbolConstant.COLON+terminalPreserveDTO.getImageTag()); + terminal.setImageUrl(newImagePath + SymbolConstant.COLON + terminalPreserveDTO.getImageTag()); terminal.setImageName(terminalPreserveDTO.getImageName()); terminal.setDescription(terminalPreserveDTO.getImageRemark()); terminal.setImageTag(terminalPreserveDTO.getImageTag()); @@ -499,7 +498,6 @@ public class TerminalServiceImpl implements TerminalService { ptImage.setImageTag(terminal.getImageTag()); ptImage.setRemark(terminal.getDescription()); ptImage.setImageResource(MagicNumConstant.ZERO); - ptImage.setImageStatus(MagicNumConstant.ONE); ptImage.setDeleted(false); ptImage.setUpdateUserId(userId); ptImage.setUpdateTime(new Timestamp(new java.util.Date().getTime())); @@ -563,7 +561,7 @@ public class TerminalServiceImpl implements TerminalService { terminalBO.setGpuNum(terminalInfo.getGpuNum()); terminalBO.setMemNum(terminalInfo.getMemNum()); terminalBO.setCpuNum(terminalInfo.getCpuNum()); - terminalBO.setImage(terminalConfig.getHarborAddress()+SymbolConstant.SLASH+terminalCreateDTO.getImageUrl()); + terminalBO.setImage(terminalCreateDTO.getImageUrl()); terminalBO.setFsMounts(Maps.newHashMap()); terminalBO.setBusinessLabel(BusinessLabelServiceNameEnum.TERMINAL.getBusinessLabel()); terminalBO.setTaskIdentifyLabel(taskIdentifyLabel); diff --git a/dubhe-server/dubhe-terminal/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-terminal/src/main/resources/bootstrap.yml index 1dc858a..bbd5956 100644 --- a/dubhe-server/dubhe-terminal/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-terminal/src/main/resources/bootstrap.yml @@ -10,7 +10,7 @@ spring: nacos: config: enabled: true - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 namespace: 9a185fa2-991b-4465-bd4d-25f9f079c930 shared-configs[0]: data-id: common-biz.yaml @@ -32,4 +32,4 @@ spring: enabled: true namespace: 9a185fa2-991b-4465-bd4d-25f9f079c930 group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/client/fallback/ImageClientFallback.java b/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/client/fallback/ImageClientFallback.java index 0f09dbb..711301a 100644 --- a/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/client/fallback/ImageClientFallback.java +++ b/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/client/fallback/ImageClientFallback.java @@ -26,7 +26,6 @@ import org.springframework.stereotype.Component; * @description 镜像远程服务调用熔断类 * @date 2020-12-15 */ -@Component public class ImageClientFallback implements ImageClient { @Override diff --git a/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/config/TrainHarborConfig.java b/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/config/TrainHarborConfig.java deleted file mode 100644 index 479fbe1..0000000 --- a/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/config/TrainHarborConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright 2020 Tianshu AI Platform. All Rights Reserved. - * - * 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. - * ============================================================= - */ -package org.dubhe.train.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -/** - * @description harbor相关配置 - * @date 2020-07-17 - */ -@Data -@Component -@ConfigurationProperties(prefix = "harbor") -public class TrainHarborConfig { - - private String address; - - private String username; - - private String password; - - private String modelName; -} diff --git a/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/service/impl/PtTrainJobServiceImpl.java b/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/service/impl/PtTrainJobServiceImpl.java index 2ba5f3d..e912708 100644 --- a/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/service/impl/PtTrainJobServiceImpl.java +++ b/dubhe-server/dubhe-train/src/main/java/org/dubhe/train/service/impl/PtTrainJobServiceImpl.java @@ -96,7 +96,6 @@ import org.dubhe.train.client.ModelBranchClient; import org.dubhe.train.client.ModelInfoClient; import org.dubhe.train.client.NoteBookClient; import org.dubhe.train.client.ResourceSpecsClient; -import org.dubhe.train.config.TrainHarborConfig; import org.dubhe.train.config.TrainJobConfig; import org.dubhe.train.constant.ATlasTrainConstant; import org.dubhe.train.constant.TrainConstant; @@ -202,9 +201,6 @@ public class PtTrainJobServiceImpl implements PtTrainJobService { @Autowired private TrainJobConfig trainJobConfig; - @Autowired - private TrainHarborConfig trainHarborConfig; - @Autowired private K8sNameTool k8sNameTool; @@ -484,7 +480,12 @@ public class PtTrainJobServiceImpl implements PtTrainJobService { public void buildImageAndTagInfo(PtJobParam ptJobParam, PtTrainJobDetailVO ptTrainJobDetailVO) { //image信息拼装 if (StringUtils.isNotBlank(ptJobParam.getImageName())) { - String imageNameSuffix = ptJobParam.getImageName().substring(ptJobParam.getImageName().lastIndexOf(StrUtil.SLASH) + MagicNumConstant.ONE); + String imageNameSuffix; + if (ptJobParam.getImageName().contains(StrUtil.SLASH)) { + imageNameSuffix = ptJobParam.getImageName().substring(ptJobParam.getImageName().lastIndexOf(StrUtil.SLASH) + MagicNumConstant.ONE); + } else { + imageNameSuffix = ptJobParam.getImageName(); + } String[] imageNameSuffixArray = imageNameSuffix.split(StrUtil.COLON); ptTrainJobDetailVO.setImageName(imageNameSuffixArray[0]); ptTrainJobDetailVO.setImageTag(imageNameSuffixArray[1]); @@ -563,11 +564,10 @@ public class PtTrainJobServiceImpl implements PtTrainJobService { .setMemNum(ptTrainJobCreateDTO.getMemNum()) .setWorkspaceRequest(ptTrainJobCreateDTO.getWorkspaceRequest()) .setTaskIdentify(taskIdentify); - - //例如: 将harbor.dubhe.ai/notebook/notebook:v1 去掉 harbor地址 - String userImageName = trimHarborAddress(ptImageAndAlgorithmVO.getImageName()); + + String imageNameAndTag = ptTrainJobCreateDTO.getImageName() + StrUtil.COLON + ptTrainJobCreateDTO.getImageTag(); //结果集处理 - PtTrainJob ptTrainJob = saveTrainJobTableData(ptTrainJobCreateDTO, userContextService.getCurUser(), userImageName, trainKey, baseTrainJobDTO); + PtTrainJob ptTrainJob = saveTrainJobTableData(ptTrainJobCreateDTO, userContextService.getCurUser(), imageNameAndTag, trainKey, baseTrainJobDTO); //添加任务缓存 resourceCache.addTaskCache(taskIdentify, ptTrainJob.getTrainId(), ptTrainJobCreateDTO.getTrainName(), trainIdPrefix); // 提交job @@ -575,16 +575,6 @@ public class PtTrainJobServiceImpl implements PtTrainJobService { return Collections.singletonList(ptTrainJob.getTrainId()); } - /** - * 去掉harbor地址 - * - * @param imageName - * @return - */ - private String trimHarborAddress(String imageName) { - return StringUtils.isBlank(imageName) ? StringUtils.EMPTY : imageName.replace(trainHarborConfig.getAddress() + StrUtil.SLASH, StringUtils.EMPTY); - } - /** * 构建镜像和算法目录VO 考虑到无算法创建 * @@ -611,9 +601,8 @@ public class PtTrainJobServiceImpl implements PtTrainJobService { String imageUrl = imageUtil.getImageUrl(ptTrainJobBaseDTO, userContextService.getCurUser()); String userImageName = imageUrl.split(StrUtil.SLASH)[0] + StrUtil.SLASH + ptTrainJobBaseDTO.getImageName() + StrUtil.COLON + ptTrainJobBaseDTO.getImageTag(); ptImageAndAlgorithmVO = getPtImageByAlgorithmId(ptTrainJobBaseDTO.getAlgorithmId()); - String imageName = trainHarborConfig.getAddress() + StrUtil.SLASH + userImageName; - ptImageAndAlgorithmVO.setImageName(imageName); - ptImageAndAlgorithmVO.setImageUrl(trainHarborConfig.getAddress() + StrUtil.SLASH + imageUrl); + ptImageAndAlgorithmVO.setImageName(ptTrainJobBaseDTO.getImageName()); + ptImageAndAlgorithmVO.setImageUrl(imageUrl); } ptImageAndAlgorithmVO.setRunCommand(ptTrainJobBaseDTO.getRunCommand()); @@ -676,13 +665,13 @@ public class PtTrainJobServiceImpl implements PtTrainJobService { * * @param ptTrainJobCreateDTO 创建训练任务DTO * @param currentUser 用户 - * @param imageName 镜像名称 + * @param imageNameAndTag 镜像名称和tag * @param trainKey 训练key * @param baseTrainJobDTO 基础训练参数 * @return PtTrain 训练 */ private PtTrainJob saveTrainJobTableData(PtTrainJobCreateDTO ptTrainJobCreateDTO, UserContext currentUser, - String imageName, String trainKey, BaseTrainJobDTO baseTrainJobDTO) { + String imageNameAndTag, String trainKey, BaseTrainJobDTO baseTrainJobDTO) { // 添加train表 PtTrain ptTrain = new PtTrain(); ptTrain.setTrainName(ptTrainJobCreateDTO.getTrainName()) @@ -732,7 +721,7 @@ public class PtTrainJobServiceImpl implements PtTrainJobService { ptJobParam.setTrainJobId(ptTrainJob.getId()) .setAlgorithmId(ptTrainJobCreateDTO.getAlgorithmId()) .setRunCommand(ptTrainJobCreateDTO.getRunCommand()) - .setImageName(imageName) + .setImageName(imageNameAndTag) .setRunParams(ptTrainJobCreateDTO.getRunParams()) .setRunParamsNameMap(ptTrainJobCreateDTO.getRunParamsNameMap()) .setCreateUserId(currentUser.getId()); @@ -1010,9 +999,8 @@ public class PtTrainJobServiceImpl implements PtTrainJobService { .setWorkspaceRequest(ptTrainJobUpdateDTO.getWorkspaceRequest()) .setTaskIdentify(taskIdentify); - String userImageName = trimHarborAddress(ptImageAndAlgorithmVO.getImageName()); //结果集处理 - PtTrainJob ptTrainJob = updateTrainJobTableData(ptTrainJobUpdateDTO, userContextService.getCurUser(), existPtTrainJob, userImageName, ptTrain, baseTrainJobDTO); + PtTrainJob ptTrainJob = updateTrainJobTableData(ptTrainJobUpdateDTO, userContextService.getCurUser(), existPtTrainJob, ptTrainJobUpdateDTO.getImageName() + StrUtil.COLON + ptTrainJobUpdateDTO.getImageTag(), ptTrain, baseTrainJobDTO); //提交job asyncManager.execute(baseTrainJobDTO, ptTrain.getCreateUserId(), ptImageAndAlgorithmVO, ptTrainJob); @@ -1025,13 +1013,13 @@ public class PtTrainJobServiceImpl implements PtTrainJobService { * @param ptTrainJobUpdateDTO 更新训练任务DTO * @param currentUser 当前用户 * @param existPtTrainJob 存在的训练任务 - * @param imageName 镜像名称 + * @param imageNameAndTag 镜像名称和tag * @param ptTrain 训练 * @param baseTrainJobDTO 基本训练信息 * @return PtTrainJob 训练任务 */ private PtTrainJob updateTrainJobTableData(PtTrainJobUpdateDTO ptTrainJobUpdateDTO, UserContext - currentUser, PtTrainJob existPtTrainJob, String imageName, PtTrain ptTrain, BaseTrainJobDTO baseTrainJobDTO) { + currentUser, PtTrainJob existPtTrainJob, String imageNameAndTag, PtTrain ptTrain, BaseTrainJobDTO baseTrainJobDTO) { //检查模型是否合法,合法则保存其路径地址 checkModelAndSavePath(currentUser, baseTrainJobDTO); @@ -1070,7 +1058,7 @@ public class PtTrainJobServiceImpl implements PtTrainJobService { ptJobParam.setTrainJobId(ptTrainJob.getId()) .setAlgorithmId(ptTrainJobUpdateDTO.getAlgorithmId()) .setRunCommand(ptTrainJobUpdateDTO.getRunCommand()) - .setImageName(imageName) + .setImageName(imageNameAndTag) .setRunParams(ptTrainJobUpdateDTO.getRunParams()) .setRunParamsNameMap(ptTrainJobUpdateDTO.getRunParamsNameMap()) .setCreateUserId(ptTrain.getCreateUserId()); diff --git a/dubhe-server/dubhe-train/src/main/resources/bootstrap.yml b/dubhe-server/dubhe-train/src/main/resources/bootstrap.yml index 0c16eec..6e70342 100644 --- a/dubhe-server/dubhe-train/src/main/resources/bootstrap.yml +++ b/dubhe-server/dubhe-train/src/main/resources/bootstrap.yml @@ -10,8 +10,8 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: common-biz.yaml group: dubhe @@ -34,7 +34,7 @@ spring: refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/gateway/src/main/resources/bootstrap.yml b/dubhe-server/gateway/src/main/resources/bootstrap.yml index 0b7be72..e416bdc 100644 --- a/dubhe-server/gateway/src/main/resources/bootstrap.yml +++ b/dubhe-server/gateway/src/main/resources/bootstrap.yml @@ -10,15 +10,15 @@ spring: nacos: config: enabled: true - namespace: dubhe-prod - server-addr: 127.0.0.1:8848 + namespace: dubhe-server-cloud-dev + server-addr: 10.105.1.133:8848 shared-configs[0]: data-id: gateway.yaml group: dubhe refresh: true discovery: enabled: true - namespace: dubhe-prod + namespace: dubhe-server-cloud-dev group: dubhe - server-addr: 127.0.0.1:8848 + server-addr: 10.105.1.133:8848 diff --git a/dubhe-server/sql/11-Dubhe-Patch-3.0.sql b/dubhe-server/sql/11-Dubhe-Patch-3.0.sql index 5a77190..f4be8c2 100644 --- a/dubhe-server/sql/11-Dubhe-Patch-3.0.sql +++ b/dubhe-server/sql/11-Dubhe-Patch-3.0.sql @@ -252,10 +252,10 @@ ALTER TABLE `data_task` ADD COLUMN `file_type` smallint(3) NULL COMMENT '待处 ALTER TABLE `data_task` ADD COLUMN `stop` bit(1) NULL COMMENT '是否停止 0-没有 1-已停止' AFTER `file_type`; ALTER TABLE `data_task` ADD COLUMN `of_record_version` varchar(255) NULL COMMENT '生成ofRecord的版本号' AFTER `stop`; - -- 医学表 ALTER TABLE `data_medicine` ADD COLUMN `stop` bit(1) NULL AFTER `annotate_type`; + -- 点云数据集表 create table if not exists `pc_dataset` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', @@ -397,3 +397,5 @@ CREATE TABLE `pt_atlas_camera` ( PRIMARY KEY (`id`), UNIQUE KEY `camera_index_uniq` (`camera_index_code`) COMMENT '设备标识唯一' ) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8mb4 COMMENT='模型炼知视频流管理'; + +ALTER TABLE pt_image DROP image_status; diff --git a/dubhe-server/yaml/admin.yaml b/dubhe-server/yaml/admin.yaml index 8f849ec..a23491e 100644 --- a/dubhe-server/yaml/admin.yaml +++ b/dubhe-server/yaml/admin.yaml @@ -33,11 +33,11 @@ ribbon: dubhe-proxy: visual: keyword: visual - server: 127.0.0.1 + server: 10.5.26.88 port: 9898 refine: keyword: refine - server: 127.0.0.1 + server: localhost port: 9797 ## 测试标识 debug: diff --git a/dubhe-server/yaml/common-biz.yaml b/dubhe-server/yaml/common-biz.yaml index b0a0bf0..d82642b 100644 --- a/dubhe-server/yaml/common-biz.yaml +++ b/dubhe-server/yaml/common-biz.yaml @@ -17,7 +17,7 @@ spring: redis: #数据库索引 database: 4 - host: 127.0.0.1 + host: 10.5.26.88 port: 6379 password: #连接超时时间 @@ -26,9 +26,9 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://127.0.0.1:3306/dubhe-cloud-prod?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&useInformationSchema=true + url: jdbc:log4jdbc:mysql://10.5.29.66:3306/dubhe-cloud-test?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&useInformationSchema=true username: test - password: test + password: zj12345678 # 初始化配置 initial-size: 3 @@ -67,17 +67,17 @@ logging.config: # 文件存储服务配置 storage: # 文件存储服务暴露的IP地址 如需测试需修改为合适的地址 - file-store: 127.0.0.1 + file-store: 10.5.26.234 # 文件存储服务端 共享目录 file-store-root-path: /nfs/ file-store-root-windows-path: "Z:" # minio配置 minio: - url: http://127.0.0.1:9000/ + url: http://10.5.26.90:9000/ accessKey: admin secretKey: 123@abc.com - bucketName: dubhe-prod + bucketName: dubhe-cloud-test presignedUrlExpiryTime: 300 annotation: /annotation/ @@ -121,13 +121,6 @@ feign: okhttp: enabled: false -#配置harbor -harbor: - address: harbor.dubhe.ai - username: admin - password: Harbor12345 - model-name: train - #配置dev环境单元测试用户名与密码 unittest: username: admin @@ -136,10 +129,10 @@ unittest: model: measuring: url: - package: http://127.0.0.1:32760/model_measure/package - json: http://127.0.0.1:32760/model_measure/measure + package: http://10.5.26.90:32760/model_measure/package + json: http://10.5.26.90:32760/model_measure/measure converter: - url: http://127.0.0.1:32230/model_convert + url: http://10.5.26.90:32230/model_convert user: config: diff --git a/dubhe-server/yaml/common-k8s.yaml b/dubhe-server/yaml/common-k8s.yaml index 94438b6..6507fe0 100644 --- a/dubhe-server/yaml/common-k8s.yaml +++ b/dubhe-server/yaml/common-k8s.yaml @@ -5,21 +5,17 @@ k8s: # k8s集群配置文件 kubeconfig: kubeconfig_test # nfs服务暴露的IP地址 如需测试需修改为合适的地址 - nfs: 127.0.0.1 + nfs: 10.5.26.234 #nfs服务端 共享目录 nfs-root-path: /nfs/ nfs-root-windows-path: "Z:" # 文件存储服务暴露的IP地址 如需测试需修改为合适的地址 - file-store: 127.0.0.1 + file-store: 10.5.26.234 #文件存储服务端 共享目录 file-store-root-path: /nfs/ file-store-root-windows-path: "Z:" # 命名空间关键字 namespace: namespace - # k8s ingress域名 如需测试需修改为合适的域名,注意:需要为此域名配置泛域名解析到 k8s集群master节点的ip - host: notebooktest.dubhe.club - # k8s ingress-controller 对外port - port: 30865 # k8s ingress-controller 对外grpc port https-port: 31287 # k8s 模型部署配置 @@ -27,12 +23,12 @@ k8s: # 在线服务模型部署后容器域名(k8s ingress域名),解析地址为k8s集群地址,如需测试需修改为合适的域名 host: servingtest.dubhe.club # tls 证书 crt - tls-crt: + tls-crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURYekNDQWtlZ0F3SUJBZ0lKQUp3Z0VCYlhGdk9HTUEwR0NTcUdTSWIzRFFFQkN3VUFNRVl4SVRBZkJnTlYKQkFNTUdDb3VjMlZ5ZG1sdVozUmxjM1F1WkhWaWFHVXVZMngxWWpFaE1COEdBMVVFQ2d3WUtpNXpaWEoyYVc1bgpkR1Z6ZEM1a2RXSm9aUzVqYkhWaU1CNFhEVEl4TURVeE9UQTNNRGN5TTFvWERUTXhNRFV4TnpBM01EY3lNMW93ClJqRWhNQjhHQTFVRUF3d1lLaTV6WlhKMmFXNW5kR1Z6ZEM1a2RXSm9aUzVqYkhWaU1TRXdId1lEVlFRS0RCZ3EKTG5ObGNuWnBibWQwWlhOMExtUjFZbWhsTG1Oc2RXSXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBdwpnZ0VLQW9JQkFRREwxNDBMUXk2dXFHUi9WckVXeVNUdFppVGwvOEo1eGlHenB5WUJtTldUTzVQSTczTHRKbXdkCmFPMGNCNXhBcy96SXlpYjM3b0loR0FQejZNWlBBZjJEeUMxNXJLb3Via3h2Vkswa3hJY0k2L1dsWFUxMjdZZzQKdUllNzJEbFNIak9tbStVQ2JDWkxtc0VlQVI2S3RwNW9lVUFUQVgwOWEyL012ZkdtNU1URWZFSVplTENoL21rVAppZGFKcnl0NThwYVFLZmpJcVdKQnlnUGpJYlFMUlZnSG5mckIzdlB5b3RmMFBZZWVKVHlEa1lNQnNzblMxS044ClY2Qldvb2dzWUxQcCs2VE1wOXBHS3pBdksxdXJMWkFsa1N0SUw1TkppQWJOZ1lMOXN1UVE3OU9aano2c1ZrbWQKait6aHZHSGUrYk9zdlBrYmtqNS9lbzQyQUdQcW9zdTlBZ01CQUFHalVEQk9NQjBHQTFVZERnUVdCQlFzWDlCegpxVEhNN21xMUJrOFRNWXgzY1ZRaFB6QWZCZ05WSFNNRUdEQVdnQlFzWDlCenFUSE03bXExQms4VE1ZeDNjVlFoClB6QU1CZ05WSFJNRUJUQURBUUgvTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFCc1BJSUpPMm1qUFNJV1lTaloKQmdjbFJoUTRudEkvdjFWczVjb0xOVzlrZUhqUGlCYlhvVzgzZExqSWh5ZmVYSk93Y3lpRnJkaVlZeVV5SEprTAprTmlxajRxVmZuaGkwcUoweDQyN3MzUG40TkZZRnNJYVM2OHA1WlZpUlJSZGNWY0dIMkNiRUxzYW41ZUhkNExYCnlTUUdDZmVkUVdtMEVyWWxDMGJWSER1d3RCa0NzWElPRmJEb0tSMW5wMDc3YlBrbEpIRS9rUi82QVpJR3hFM28KbDd1SDVRWWRsWldoanY5WFZRM1plVnZLUzVkM1pHYjcxZ0dwSEU2b2hmL1IweVhoS1RadUREYkhjK2lFc1dWbQowa24xenlvTUVHSW5nM0N6cVk4aE1tdHhRVStLekJrSEliVzh0UnkrS0MxZ2ZvNktFa01JVGpjK2pwQU4wZ2VDCm1LWWYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= # tls 证书 key - tls-key: + tls-key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRREwxNDBMUXk2dXFHUi8KVnJFV3lTVHRaaVRsLzhKNXhpR3pweVlCbU5XVE81UEk3M0x0Sm13ZGFPMGNCNXhBcy96SXlpYjM3b0loR0FQego2TVpQQWYyRHlDMTVyS291Ymt4dlZLMGt4SWNJNi9XbFhVMTI3WWc0dUllNzJEbFNIak9tbStVQ2JDWkxtc0VlCkFSNkt0cDVvZVVBVEFYMDlhMi9NdmZHbTVNVEVmRUlaZUxDaC9ta1RpZGFKcnl0NThwYVFLZmpJcVdKQnlnUGoKSWJRTFJWZ0huZnJCM3ZQeW90ZjBQWWVlSlR5RGtZTUJzc25TMUtOOFY2Qldvb2dzWUxQcCs2VE1wOXBHS3pBdgpLMXVyTFpBbGtTdElMNU5KaUFiTmdZTDlzdVFRNzlPWmp6NnNWa21kait6aHZHSGUrYk9zdlBrYmtqNS9lbzQyCkFHUHFvc3U5QWdNQkFBRUNnZ0VCQUtJRG83WDA0dEN0UkpzMVV6RnlFK2lnUyttR201TGdHSDlLOWRsRkdWT1oKZ2IrdUdhRkY3WjUrZkI3UUthLy9ub1lVcmw1VzhwVE5HcTh0THhreTBzV0FRQ3k2UU5VQWs3M1ZCbnozdXdBcgpVeVhvLzUzcjgxNXB4SEJYems5bmM5UVRpalNmc3R4YWx1MTdKRVJLRzZPYjQ0SjNwNHcrclRDRk0rRmJhTTFsCkxuWUh2bGR4ZnRoMmhBWHdaU2dFYXdCNXRBbTY2YnIxbUc4ZW5saEIvbisrY09iYkZWYnk4OUcyUmVMMjJxdHIKa0R0RHVQOGY1NVdxNVB0a25TRE4zaGoweEYydG9aSC80RHpKOWVibVNMVHpUK1pQSjVjK1dlZ3BNdCtVd3YzbwpNNFdGQnFUUUZSR0MyQVJTaXVFTEdtRUJnVk50VDRmRVhRSmFveGJKeWYwQ2dZRUE2MDRJOXlDZUttY2hjSEJvCmRFeFJ2bnNhcGhwbkJqc3pHazZIWVhhTFI0NGpvalRCWm5ZWVhHYklreDdZaytla1RQYjMwRUpzQjlRRmxpVUUKQ25oZXhCS0pjTk5VcTdWdHFGTXBhT0JKWG9Md0cySmVwVmNhN1MzcFo3THZMWGRQR2wvOXFTTW5pMXROV1kxdwpmTGl1Zzlqb3JCeEJaL250NU43MDJFTWpaL2NDZ1lFQTNjVWV2U3U1VmlHaGNPSmFVSlBoUjdnclViMW9EWDF4CnROdDdXNS9pNkFyNDBsY1FZK2RCcll2VEljRllEL3piZnRWNGFnMDhsLzVHamxQK2grWW01QWNRb1c1Z3BaaHgKd1ZhTFFzRTg4ZUdPY2pLakVqd2krTEZRNE5HRmdXdU9pc1hZWk5GTlBvT1JDbHRUbkRMRnFjS0FNY2tBTEgwVwpRT2poTkJqeGhPc0NnWUFRaHRPVVgrTWNBVkJVOEdBMXd1Sis2WENPdUE0Q1h3Z1EwZkVxUkVRMkMyS3ZVdHMrCmtnN1Y5cFloMXluSkFaMEZsdGNDOXBkVjJXdG5CMFNJWTduc05ZMFhzcEFnMjBaUGF6L2VVTnAyVytYM1ZtcGwKWEgvVXBzUGM5N0ZhMVNWbUtkWE1HbDc5cDdVQUZESVJZSHRKWVdPK0t1SGhKcW14eUlNVDZXdEVNd0tCZ0R0ZAo4WVNpbDlLKzNnRGlGMXRLdXh2LzZWalFZM0o1Q2w5b0FmWGRMMWorMXUwMzhXTk5IUC9nVm56S3pWQTZXR2Z6CnJYQjJhcW9sbjYycVBwRVN3NFozZmJRNVlCWDBZVDlvYzQ5RE81VmsxRVV0MlFtZ241d0RtNnNUYTdIaG9SNzEKSjZDVmh5QWRDRTdGYy9SMGd3V1cwOHFBREZQY2lJQ0gxd0dqUzhSUkFvR0JBTklUNW5yTzNwZmNKYTROZWFZeApKMzd5RzFodUJGcWdRRWpVU3pmbHQ3UWwvNjI3LzNWT2lIRjVqSkhES0JqODBEdzh1UjhoQ2VhWDY2WkJqUmxKCk5vOUEvUm43Q2F4YUl2dkNjWG4rUW5oLy9BVlNHRzU4WWI2UUlQNFVqT1RKOW1GUlFFajN0cm9KNnVpL3FCZTQKUkhXSE44WC91Z242dzZUSGRWNktJbSs4Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K # elasticsearch暴露的服务地址 elasticsearch: - hostlist: ${eshostlist:127.0.0.1:30498} + hostlist: ${eshostlist:10.5.26.90:30498} # 日志采集配置信息 log: type: _doc @@ -50,9 +46,9 @@ k8s: # 展示Pod的CPU使用率,Memory使用量,GPU使用率的grafana地址 pod: metrics: - grafanaUrl: http://127.0.0.1:30006/d/job/monitor?orgId=1&refresh=5s&kiosk&var-pod= + grafanaUrl: http://10.5.26.90:30006/d/job/monitor?orgId=1&refresh=5s&kiosk&var-pod= prometheus: - url: http://127.0.0.1:30003/ + url: http://10.5.26.90:30003/ query: api/v1/query query-range: api/v1/query_range gpu-query-param: sum(DCGM_FI_DEV_GPU_UTIL{pod="pod-name-placeholder"})by(pod,UUID) @@ -75,21 +71,40 @@ k8s: cpu: 10 memory: 32 gpu: 2 -#配置harbor -harbor: - address: harbor.dubhe.ai - username: admin - password: Harbor12345 - model-name: train # minio配置 minio: - url: http://127.0.0.1:9000/ + url: http://10.5.26.90:9000/ accessKey: admin secretKey: 123@abc.com - bucketName: dubhe-prod + bucketName: dubhe-cloud-test presignedUrlExpiryTime: 300 annotation: /annotation/ docker: remote-api-port: 2375 + +clusters: + - cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1USXdPREE0TWpnd00xb1hEVE14TVRJd05qQTRNamd3TTFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTWVKCkRjTThQUHFlV0tHazE3S2JtN3kwbzkzTGtxb2w5dG1QbVN0YTVyUXZSWU9rOFJYK2QvVEpVaXE2S2c4NXFyMGUKZFZ3SG5vTjg3Q0VFbXhOK2o4OUhlcnY1dDFaRFBHMVRHS3U5N1l1WnV4RCt2R1hGQkhDZ2ViT0s0Zmc0am1iSgpwUmlJeCtUZmlyUjM4TlVhZTBkR1g5c1o1TWF2NkhiSVVEK2hNTm9VU2pyWUZ2bTcxbGtYdlhVWW9wd1FSR3FvCkZiWG5KTFFVakd3UFFRclRCQ0wycFE2c1dGbkpkQ0VBSHhXU0grTUN4cXV0L25SUHhORlFOWGFMZmU3clB3a3MKd3NrVlFlTzgyL205aFZkWnNnNUFnRDJtTS9jS2VybE9acVBGcWFEaFBoYnpkRzF4QjRtcVZmTGJVUUppa3I1SQpYQ1FhTWR2c2FRTnhPcmNPOHQwQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZFek92OGhVUGtRYS90bGNhQTE0OERmcmF5TXRNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBMTFqcDR4V1hyZkRPNDJlblBpdm9HNXZxY3hqbysxaktZV1YxR1NIdHNVdlBNU1UzVAptdVFCQWU2VVRzM0JtSTgzMUQ4aFd4cDlka3BkMlhWbCt6OTZabFIvQ2Qrb3NSWWE1MUpZd2RvMUp4Z29hbUk2CmszOS9sNTRBQVpWMkFPWWNQU0pKNkNzdVcxZ2NTMDlaTlA0djlhK0NIKzY5OVpQMGlhUStEc0FPRFJzUnhRcVMKK08zNUU4K0RzRjBSOWZCYlhvbkxiK05VSHlTQ2pQSnVVT21lS0RYMFpQQm81blNscmh5cUIxbHVNZnhEaUltdgpIU3BscXB4M1duMzJnNEZYOCs3clZBNUZjWkIvNDg3bUZmdG1CTXc3aENidlFJeWY2Ymd6VTUycUdaeFZGTTVjCnUxeEZyRXlXaFA1eElJY09lY1M1RCtJa29ZOHUyT3ozQldEeQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + server: https://10.105.0.6:6443 + name: kubernetes +contexts: + - context: + cluster: kubernetes + user: kubernetes-admin + name: kubernetes-admin@kubernetes +current-context: kubernetes-admin@kubernetes +kind: Config +preferences: {} +users: + - name: kubernetes-admin + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lJQjUxN3hkT3V2cnd3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TVRFeU1EZ3dPREk0TUROYUZ3MHlNakV5TURnd09ESTRNRFZhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXlFaURrYVJ1WmVUbVJ4WmsKRkxUbkRPMUxIM1k5dE80WXpXREt4QVA2bFphTUJwZXJWRWpiU1VMOGIzdG9WWFppVnVnaHhvMzRHdjF4dlJKLwpDN3NhWGVaU3EzcTVMcEFhQjBrelRDNFRtbGtrdE03YkJTZFNhMG9SeGJXTUdvVEM0WUVBckJCNS9FRmdUYjRCCnE4aG1USUlmdUcwa05sNmd5a2M4UnhSL3N5Q1lSVjZCTTZTYWFzODR1Tmx3ZU9vV2RaQkQ0UVZQbzJueUI4NGQKUnc0d0w2VEQ5MlUwMG5KcjY3bUtpTjhBNGtBampFbWNrNm1JbHdsUTB2MHR5Uk8zTFBXZFdNazZ5QVIyVEZ6RgpBZCs4dUd5L3VDQlB6UDlVcDFERkI5TDF0Y25sd1lTeTYycGdFWC9wMzl6ZjZ0RFpZRVJwK0Jpd21Eb3RmVmFaClNLam9md0lEQVFBQm8wZ3dSakFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0h3WURWUjBqQkJnd0ZvQVVUTTYveUZRK1JCcisyVnhvRFhqd04rdHJJeTB3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFCQ01US2VEV1dHa0VFZWp6dlN3TTFKZit0QUJaYklrd0FoZEt1MjFnUkxyQktzbHQ4Y0NHMG1KCmc3eDhndFJYcW0xRGlEU01DMnlWMW9OWTFSdGlLZVhZT29RbVY2SFh2bEQybWZyY2VzS3VSNHlIbCtlWHcyL1AKb2FLZVFEM21yVm9ZZ1ZMMVNqOWpzcDRBa1hEM1ErUzdKYXN4Y3MvVkR3SmlRQzhGamkzaWZMVFFKQkxCdm1WVwpCZ3QvM0xPZ1lCdWxYRWg3cFlQUzduTVFqNFpxQ0QwWTNJOENicUM0VGlZQjB1aTZlbVRDd3cvRnBNSzNIRFZ4CnZOd3FPRHBaWW5DK0IxSzR5RUk4NGIvM1o3ZXA0MUE1NGk3QkpxTklORUVtRjdGcmpQQy91V1RuYlpzVUNFQjAKWTFUR1Y3czNBUTZMZXNCRFF6UVRzVnBENWFRRk9VYz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBeUVpRGthUnVaZVRtUnhaa0ZMVG5ETzFMSDNZOXRPNFl6V0RLeEFQNmxaYU1CcGVyClZFamJTVUw4YjN0b1ZYWmlWdWdoeG8zNEd2MXh2UkovQzdzYVhlWlNxM3E1THBBYUIwa3pUQzRUbWxra3RNN2IKQlNkU2Ewb1J4YldNR29UQzRZRUFyQkI1L0VGZ1RiNEJxOGhtVElJZnVHMGtObDZneWtjOFJ4Ui9zeUNZUlY2QgpNNlNhYXM4NHVObHdlT29XZFpCRDRRVlBvMm55Qjg0ZFJ3NHdMNlREOTJVMDBuSnI2N21LaU44QTRrQWpqRW1jCms2bUlsd2xRMHYwdHlSTzNMUFdkV01rNnlBUjJURnpGQWQrOHVHeS91Q0JQelA5VXAxREZCOUwxdGNubHdZU3kKNjJwZ0VYL3AzOXpmNnREWllFUnArQml3bURvdGZWYVpTS2pvZndJREFRQUJBb0lCQUgrbHY3ME9TSkpHZmdHbQpvcWlUMTRKa3BuRnA0ZEF6dzdqNXpLRjdTN1VWR3krRWNOeXFCcUM5d2JlbnRvcHBoaW1Qang5R0VtL1pRaWxYCjVZTHJmOVdDMndPUmx2NjNOdStYMXNyaHZ2cXJmL3FBc0JTcnlCcTdQWEo5ejhxQy9OWE9hMGcreEJCaTltYjIKQjRpZGs1MkZmWVFFZzRUbmNLRWJINjdKd00yL2dmZ3BXMGNEd0RiNVc2aHIxclUzNkNGc1AyVTlEYytMVkV5cQpvK3FZZ0RFZ0MxSWxucGVIdzROejJmK3RkbFpLVHN5dzV1ZG5xVm1kWGNkLyszR3NvQVM3Q25DTmQ3a1pKQ1BPClNpRktZSDZZUS93ZmJLZjFibC84eERXU1UvKytQUTZyODJGV21mMFBjd3ExbWV5OXIvUW1kaHc5YndiamkxVDQKdURjSzUva0NnWUVBOURIZi8xZnN4czlqVldoaE94UXFzUFN3UzdDbVZYcHV2S2Q3MjlMRGFIV1VQT3E5Y0l4QQpaV01Ibi9EbEN3U2dxaitPL0FNSDdaQVpPbDV5V2RiZFVEM2I0WWVKLzlubXdvN25ReG9ndTlUdTlNZEVnM0pvCm1wTzVqQTYzYTE2Z0sxRWlmTDJkdllRQkJGQzg2aDJzYlV0WHNGRDV6R3QzTU96bVF6SFFQM3NDZ1lFQTBmY3gKMzlUR0YrZFdVb3MzOXRLaE9MZVpFaWtUSmtqckdrTUdldHpYNEVCRE5oRUUvdWNkYUZCWmJoU3ltZHAwMmtKNgpKQkpvaEJRaEN4Zk9nUXhRdFp2dUt3WUMvTEYrMVF1TG1MaERGV2NEa05Ma1E0RWU5WVRFV1VuNE9NNkJJTmVOCldseklzcncyeHRvaUVoMXZFWW92ODdobEZCQ0E4N0xYSElpa1NjMENnWUFnZ1pNajFueDZhcGo2Z1k2UDRydGMKR3ZaczNQTUhaZWpmekJ1OHcyMm50aDhwak1YeStYaUpCb201VE1Qd2w0a2JvS0pVQWNOSWFHb3pUdWRCOWt3Mwpwa1JpM1R3Tmh1QWsvZ2ppOGROeHJZS3hxdVQvNm5icVBNZnlVUE14bzhNR2dTSnFJSU9pK3JOMzg1ZHlRc2oxCk01WlVyakxTZDJ2Q1k0YXpZeW9waVFLQmdBS0RBb1c2OWVPelVNVU1CVTllbGE4b0F4ekVnUVlrT1N2SFFYeVcKeDc1WEJuYlBIVkF2VTVxNzIxWUZ5VjB0ejlnTWs0bDY3dVVsbUgrWmVVN3g1c1ZGYUVQN2ZtMm5jZXo2aG1EOQpVMUFlTzF5d0tTcmxrSWsvWFZuMEdKUVZaRllRUGhDbXEzLzM0Ry9nakNmTFVsalRYbDk4QlRtSU9RS3hVUUYyCllRREJBb0dBRTB5Q0NzcFE3Y1lYaVFyQnF4VVkxU2N5SjViVm1iaFN5cmgyb3FiUmRMRmxzWHFjUnBIK2tORjYKdXdjUzhZalJodmdQazgyZm1QcXlieE5ZWGxTYWoydGdzSFdpcGNETXZSM1dtSlQzTGpjeXZObDh6cUlkZDNBdQpJT1pNeG0vWWVMemNFOUdteDRsQkhmMnU5MkhiRjRiSCtqeVp3d3RWcHpRdmphaFF6dGs9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg== + +#配置harbor +harbor: + address: harbor.dubhe.ai + username: admin + password: Harbor12345 diff --git a/dubhe-server/yaml/common-shardingjdbc.yaml b/dubhe-server/yaml/common-shardingjdbc.yaml index 1717031..731e144 100644 --- a/dubhe-server/yaml/common-shardingjdbc.yaml +++ b/dubhe-server/yaml/common-shardingjdbc.yaml @@ -6,9 +6,9 @@ spring: master: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://127.0.0.1:3306/dubhe-cloud-prod?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&useInformationSchema=true + url: jdbc:log4jdbc:mysql://10.5.29.66:3306/dubhe-cloud-test?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&useInformationSchema=true username: test - password: test + password: zj12345678 props: sql: show: true diff --git a/dubhe-server/yaml/dubhe-data-dcm.yaml b/dubhe-server/yaml/dubhe-data-dcm.yaml index 6cb739a..b909975 100644 --- a/dubhe-server/yaml/dubhe-data-dcm.yaml +++ b/dubhe-server/yaml/dubhe-data-dcm.yaml @@ -18,7 +18,7 @@ data: # 数据处理医学影像数据集dcm服务器配置,查看影像功能需要使用该服务 dcm: - host: 127.0.0.1 + host: 10.5.29.100 port: 11112 # 资源回收 diff --git a/dubhe-server/yaml/dubhe-data-task.yaml b/dubhe-server/yaml/dubhe-data-task.yaml index 8b979c1..f6afc5f 100644 --- a/dubhe-server/yaml/dubhe-data-task.yaml +++ b/dubhe-server/yaml/dubhe-data-task.yaml @@ -27,13 +27,13 @@ recycle: # 数据处理医学影像数据集dcm服务器配置,查看影像功能需要使用该服务 dcm: - host: 127.0.0.1 + host: 10.5.29.100 port: 11112 # ES服务地址及端口 es: - host: 127.0.0.1 - serverPort: 31321 - transportPort: 31322 - clusterName: kubenets-logging + host: 10.5.29.100 + serverPort: 9200 + transportPort: 9300 + clusterName: docker-cluster index: dataset_text_test \ No newline at end of file diff --git a/dubhe-server/yaml/dubhe-data.yaml b/dubhe-server/yaml/dubhe-data.yaml index 8210572..6b117af 100644 --- a/dubhe-server/yaml/dubhe-data.yaml +++ b/dubhe-server/yaml/dubhe-data.yaml @@ -32,11 +32,11 @@ spring: precise-algorithm-class-name: org.dubhe.data.util.MyPreciseShardingAlgorithm k8s: # nfs服务暴露的IP地址 如需测试需修改为合适的地址 - nfs: 127.0.0.1 + nfs: 10.5.26.234 #nfs服务端 共享目录 nfs-root-path: /nfs/ nfs-root-windows-path: "Z:" - file-store: 127.0.0.1 + file-store: 10.5.26.234 #文件存储服务端 共享目录 file-store-root-path: /nfs/ file-store-root-windows-path: "Z:" @@ -80,8 +80,8 @@ recycle: # ES服务地址及端口 es: - host: 127.0.0.1 - serverPort: 32321 - transportPort: 32322 - clusterName: kubenets-logging + host: 10.5.29.100 + serverPort: 9200 + transportPort: 9300 + clusterName: docker-cluster index: dataset_text_test \ No newline at end of file diff --git a/dubhe-server/yaml/dubhe-notebook.yaml b/dubhe-server/yaml/dubhe-notebook.yaml index b4a0e0f..a8479fa 100644 --- a/dubhe-server/yaml/dubhe-notebook.yaml +++ b/dubhe-server/yaml/dubhe-notebook.yaml @@ -3,7 +3,7 @@ notebook-specs: # cpu数量(核) cpu-num: 1 # gpu数量(核) - gpu-num: 1 + gpu-num: 0 # 内存大小(M) mem-num: 1024 # 工作空间配额(m) diff --git a/dubhe-server/yaml/dubhe-serving-gateway.yaml b/dubhe-server/yaml/dubhe-serving-gateway.yaml index d3f6ef9..5cad9d4 100644 --- a/dubhe-server/yaml/dubhe-serving-gateway.yaml +++ b/dubhe-server/yaml/dubhe-serving-gateway.yaml @@ -22,8 +22,8 @@ management: serving: gateway: - # 在线服务http接口域名,解析地址为serving网关部署的服务器地址 - postfixUrl: .openapi.dubhe.club + # 在线服务http接口 host:port,解析地址为serving网关部署的服务地址 + postfixUrl: 10.101.12.41:8081 token: secret-key: 1n3512x expire-seconds: 108000 @@ -31,7 +31,6 @@ serving: httpclient: connect-timeout: 1000 response-timeout: 3000 - #关闭熔断机制 feign: hystrix: diff --git a/dubhe-server/yaml/dubhe-task.yaml b/dubhe-server/yaml/dubhe-task.yaml deleted file mode 100644 index e0b3b17..0000000 --- a/dubhe-server/yaml/dubhe-task.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# serving预测上传文件大小限制 -spring: - servlet: - multipart: - # 设置单个文件的大小 - max-file-size: 10MB - # 设置单次请求的文件的总大小 - max-request-size: 100MB - -k8s: - # nfs服务暴露的IP地址 如需测试需修改为合适的地址 - nfs: 127.0.0.1 - #nfs服务端 共享目录 - nfs-root-path: /nfs/ - nfs-root-windows-path: "Z:" - -# data模块配置 -data: - annotation: - task: - # 自动标注任务分割的文件split size - splitSize: 16 - # 单位ms - retryInterval: 5000 - # 任务不更新置为失败的时间单位秒 - failTime: 43200 - server: - # 文件存储服务器用户名 - userName: root - #数据集训练配置 - ptversion: http://127.0.0.1:8000/ - -minioweb: - GetToken: - url: minio/webrpc - param: - id: 2 - jsonrpc: 2.0 - method: Web.Login - zip: - url: minio/zip?token= - -#logback -logging.config: - classpath:logback-spring-dev.xml - -# ES服务地址及端口 -es: - host: 127.0.0.1 - serverPort: 32321 - transportPort: 32322 - index: dataset_text_test \ No newline at end of file diff --git a/dubhe-server/yaml/dubhe-terminal.yaml b/dubhe-server/yaml/dubhe-terminal.yaml index a3de43a..4cda475 100644 --- a/dubhe-server/yaml/dubhe-terminal.yaml +++ b/dubhe-server/yaml/dubhe-terminal.yaml @@ -5,7 +5,7 @@ terminal: # 用户workspace目录 workspace-dir: "/workspace" # ssh主机 - ssh-host: 127.0.0.1 + ssh-host: 10.5.26.91 # 可匿名访问路径 security: diff --git a/dubhe-server/yaml/gateway.yaml b/dubhe-server/yaml/gateway.yaml index d039727..e52eced 100644 --- a/dubhe-server/yaml/gateway.yaml +++ b/dubhe-server/yaml/gateway.yaml @@ -4,149 +4,139 @@ spring: gateway: enabled: true routes: - # id唯一表示 路由至admin服务 - - id: admin-route - # uri=> lb://服务名称 - uri: lb://admin - # 路由规则 - predicates: - - Path=/api/v1/admin/** - filters: - - StripPrefix=3 - - id: visual-route - # uri=> lb://服务名称 - uri: lb://admin - # 路由规则 - predicates: - - Path=/visual/api/** - # 路由至auth服务 - - id: auth-route - uri: lb://auth - predicates: - - Path=/api/v1/auth/** - filters: - - StripPrefix=3 - # 路由至notebook服务 - - id: notebook-route - uri: lb://dubhe-notebook - predicates: - - Path=/api/v1/notebook/** - filters: - - StripPrefix=3 - # 路由至镜像管理服务 - - id: image-route - uri: lb://dubhe-image - predicates: - - Path=/api/v1/image/** - filters: - - StripPrefix=3 - # 路由至度量管理服务 - - id: measure-route - uri: lb://dubhe-measure - predicates: - - Path=/api/v1/measure/** - filters: - - StripPrefix=3 - # 路由至dubhe-k8s服务 - - id: dubhe-k8s - uri: lb://dubhe-k8s - predicates: - - Path=/api/v1/k8s/** - filters: - - StripPrefix=3 - # 路由至dubhe-model(模型管理)服务 - - id: dubhe-model - uri: lb://dubhe-model - predicates: - - Path=/api/v1/model/** - filters: - - StripPrefix=3 - # 路由至dubhe-algorithm(算法管理)服务 - - id: dubhe-algorithm - uri: lb://dubhe-algorithm - predicates: - - Path=/api/v1/algorithm/** - filters: - - StripPrefix=3 - # 路由至dubhe-train(训练管理)服务 - - id: dubhe-train - uri: lb://dubhe-train - predicates: - - Path=/api/v1/train/** - filters: - - StripPrefix=3 - # id唯一表示 路由至data(数据集)服务 - - id: dubhe-data - # uri=> lb://服务名称 - uri: lb://dubhe-data - # 路由规则 - predicates: - - Path=/api/v1/data/** - filters: - - StripPrefix=3 - # 路由至dubhe-optimize(模型优化)服务 - - id: dubhe-optimize - uri: lb://dubhe-optimize - predicates: - - Path=/api/v1/optimize/** - filters: - - StripPrefix=3 - # 路由至dubhe-serving(云端Serving)服务 - - id: dubhe-serving - uri: lb://dubhe-serving - predicates: - - Path=/api/v1/serving/**,/api/v1/batchServing/** - filters: - - StripPrefix=3 - # 负载均衡样例 - - id: weight-route1 - uri: lb://demo-client - # 路由规则 - predicates: - # 接口匹配前缀 - - Path=/api/v1/w/** - # 权重组weight-group1,权重比例 1/4 - - Weight=weight-group1, 1 - filters: - # 根据接口匹配前缀截取 - - StripPrefix=3 - - id: weight-route2 - uri: lb://demo-provider - # 路由规则 - predicates: - - Path=/api/v1/w/** - # 权重组weight-group1,权重比例 3/4 - - Weight=weight-group1, 3 - filters: - - StripPrefix=3 - # 路由至dubhe-data-dcm(医学数据集)服务 - - id: dubhe-data-dcm - uri: lb://dubhe-data-dcm - predicates: - - Path=/api/v1/dcm/** - filters: - - StripPrefix=3 - # 路由至dubhe-terminal 天枢专业版终端 - - id: dubhe-terminal - uri: lb://dubhe-terminal - predicates: - - Path=/api/v1/terminal/** - filters: - - StripPrefix=3 - # 路由至dubhe-tadl服务 - - id: dubhe-tadl - uri: lb://dubhe-tadl - predicates: - - Path=/api/v1/tadl/** - filters: - - StripPrefix=3 - # 路由至dubhe-point-cloud服务 - - id: dubhe-point-cloud - uri: lb://dubhe-point-cloud - predicates: - - Path=/api/v1/pointCloud/** - filters: - - StripPrefix=3 -server: - maxPostSize: -1 - maxHttpHeaderSize: 10240000 \ No newline at end of file + # id唯一表示 路由至admin服务 + - id: admin-route + # uri=> lb://服务名称 + uri: lb://admin + # 路由规则 + predicates: + - Path=/api/v1/admin/** + filters: + - StripPrefix=3 + - id: visual-route + # uri=> lb://服务名称 + uri: lb://admin + # 路由规则 + predicates: + - Path=/visual/api/** + # 路由至demo-provider服务 + - id: nacos-server-route + uri: lb://demo-provider + predicates: + - Path=/api/v1/server/**,/api/v1/service/** + filters: + - StripPrefix=3 + # 路由至auth服务 + - id: auth-route + uri: lb://auth + predicates: + - Path=/api/v1/auth/** + filters: + - StripPrefix=3 + # 路由至notebook服务 + - id: notebook-route + uri: lb://dubhe-notebook + predicates: + - Path=/api/v1/notebook/** + filters: + - StripPrefix=3 + # 路由至镜像管理服务 + - id: image-route + uri: lb://dubhe-image + predicates: + - Path=/api/v1/image/** + filters: + - StripPrefix=3 + # 路由至度量管理服务 + - id: measure-route + uri: lb://dubhe-measure + predicates: + - Path=/api/v1/measure/** + filters: + - StripPrefix=3 + # 路由至dubhe-k8s服务 + - id: dubhe-k8s + uri: lb://dubhe-k8s + predicates: + - Path=/api/v1/k8s/** + filters: + - StripPrefix=3 + # 路由至dubhe-model(模型管理)服务 + - id: dubhe-model + uri: lb://dubhe-model + predicates: + - Path=/api/v1/model/** + filters: + - StripPrefix=3 + # 路由至dubhe-algorithm(算法管理)服务 + - id: dubhe-algorithm + uri: lb://dubhe-algorithm + predicates: + - Path=/api/v1/algorithm/** + filters: + - StripPrefix=3 + # 路由至dubhe-train(训练管理)服务 + - id: dubhe-train + uri: lb://dubhe-train + predicates: + - Path=/api/v1/train/** + filters: + - StripPrefix=3 + # id唯一表示 路由至data(数据集)服务 + - id: dubhe-data + # uri=> lb://服务名称 + uri: lb://dubhe-data + # 路由规则 + predicates: + - Path=/api/v1/data/** + filters: + - StripPrefix=3 + # 路由至dubhe-optimize(模型优化)服务 + - id: dubhe-optimize + uri: lb://dubhe-optimize + predicates: + - Path=/api/v1/optimize/** + filters: + - StripPrefix=3 + # 路由至dubhe-serving(云端Serving)服务 + - id: dubhe-serving + uri: lb://dubhe-serving + predicates: + - Path=/api/v1/serving/**,/api/v1/batchServing/** + filters: + - StripPrefix=3 + # 负载均衡样例 + - id: weight-route1 + uri: lb://demo-client + # 路由规则 + predicates: + # 接口匹配前缀 + - Path=/api/v1/w/** + # 权重组weight-group1,权重比例 1/4 + - Weight=weight-group1, 1 + filters: + # 根据接口匹配前缀截取 + - StripPrefix=3 + - id: weight-route2 + uri: lb://demo-provider + # 路由规则 + predicates: + - Path=/api/v1/w/** + # 权重组weight-group1,权重比例 3/4 + - Weight=weight-group1, 3 + filters: + - StripPrefix=3 + # 路由至dubhe-data-dcm(医学数据集)服务 + - id: dubhe-data-dcm + uri: lb://dubhe-data-dcm + predicates: + - Path=/api/v1/dcm/** + filters: + - StripPrefix=3 + # 路由至dubhe-tadl服务 + - id: dubhe-tadl + uri: lb://dubhe-tadl + predicates: + - Path=/api/v1/tadl/** + filters: + - StripPrefix=3 \ No newline at end of file diff --git a/dubhe-server/yaml/image.yaml b/dubhe-server/yaml/image.yaml index fb9f597..cd423db 100644 --- a/dubhe-server/yaml/image.yaml +++ b/dubhe-server/yaml/image.yaml @@ -3,7 +3,7 @@ spring: redis: #数据库索引 database: 1 - host: 127.0.0.1 + host: 10.5.26.88 port: 6379 password: #连接超时时间 @@ -12,9 +12,9 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://127.0.0.1:3306/dubhe-cloud-prod?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true + url: jdbc:log4jdbc:mysql://10.5.29.66:3306/dubhe-cloud-test?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true username: test - password: test + password: zj12345678 # 初始化配置 initial-size: 3 @@ -43,11 +43,5 @@ spring: url-pattern: /* exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" -#配置harbor -harbor: - address: harbor.dubhe.ai - username: admin - password: Harbor12345 - diff --git a/dubhe-server/yaml/kubeconfig.yaml b/dubhe-server/yaml/kubeconfig.yaml deleted file mode 100644 index 576fc33..0000000 --- a/dubhe-server/yaml/kubeconfig.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: v1 -clusters: -- cluster: - certificate-authority-data: - server: https://127.0.0.1:6443 - name: kubernetes -contexts: -- context: - cluster: kubernetes - user: kubernetes-admin - name: kubernetes-admin@kubernetes -current-context: kubernetes-admin@kubernetes -kind: Config -preferences: {} -users: -- name: kubernetes-admin - user: - client-certificate-data: - client-key-data: diff --git a/dubhe-server/yaml/measure.yaml b/dubhe-server/yaml/measure.yaml index 77a2d25..1ebea67 100644 --- a/dubhe-server/yaml/measure.yaml +++ b/dubhe-server/yaml/measure.yaml @@ -3,7 +3,7 @@ spring: redis: #数据库索引 database: 1 - host: 127.0.0.1 + host: 10.5.26.88 port: 6379 password: #连接超时时间 @@ -16,10 +16,10 @@ model: atlas: url: # 流服务地址 - rtmp: rtmp://127.0.0.1:1935/live/ + rtmp: rtmp://10.5.30.42:1935/live/ # vms接口地址 - vms: http://127.0.0.1:8000/api/vms + vms: http://10.105.10.51:8000/api/vms # 推理服务地址 - video-serve: http://127.0.0.1:32761/video + video-serve: http://10.105.0.6:32761/video # 拉流地址,需要拼接streamId - stream: http://127.0.0.1:8055/live?port=1935&app=live&stream= + stream: http://10.5.30.42:8055/live?port=1935&app=live&stream=