From 65a5b5d081279e61d7eb387421174c4ef2578c2d Mon Sep 17 00:00:00 2001 From: OTTO <731554297@example.com> Date: Thu, 17 Jul 2025 09:20:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=BF=90=E7=BB=B4=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E6=A8=A1=E5=9D=97):=20=E6=96=B0=E5=A2=9EPod=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 构建一个 deletePodBody JSON 对象,若 isForce 为 true,则设置强制删除参数。 2. 调用 RemoteRancherService.deletePod 发送删除请求,传入命名空间、Pod 名称、删除策略和用户身份令牌。 3. 判断响应状态码是否在 200-300 之间,若是则返回 true,表示删除成功。 --- .../system/api/RemoteRancherService.java | 6 ++++++ .../api/factory/RemoteRancherFallbackFactory.java | 5 +++++ .../k8s/controller/MicroManagementController.java | 14 ++++++++++++-- .../mon/k8s/service/IMicroManagementService.java | 2 ++ .../service/impl/MicroManagementServiceImpl.java | 14 ++++++++++++++ 5 files changed, 39 insertions(+), 2 deletions(-) diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteRancherService.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteRancherService.java index be187a15a..f14570850 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteRancherService.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteRancherService.java @@ -63,4 +63,10 @@ public interface RemoteRancherService { JSONObject getK8sServiceByApplicationId(@PathVariable("cluster_id") String cluster_id, @PathVariable("nginxApplicationId") String nginxApplicationId, @RequestHeader(TokenConstants.AUTHENTICATION) String token); + + @DeleteMapping("/rancher/v1/pods/{namespace}/{podName}") + Response deletePod(@PathVariable("namespace") String namespace, + @PathVariable("podName") String podName, + @RequestBody JSONObject deletePodBody, + @RequestHeader(TokenConstants.AUTHENTICATION) String token); } diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteRancherFallbackFactory.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteRancherFallbackFactory.java index 11c2d0555..a79f98c43 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteRancherFallbackFactory.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteRancherFallbackFactory.java @@ -63,6 +63,11 @@ public class RemoteRancherFallbackFactory implements FallbackFactory podStatus(@PathVariable("containerID") String containerID, @RequestParam(value = "step", required = false) @ApiParam(value = "统计频率") Long step) { - return GenericsAjaxResult.success(microManagementService.getPodStatus(containerID,step)); + return GenericsAjaxResult.success(microManagementService.getPodStatus(containerID, step)); } @ApiOperation(value = "获取微服务应用详情") @@ -40,4 +42,12 @@ public class MicroManagementController { @PathVariable("applicationName") String applicationName) { return GenericsAjaxResult.success(microManagementService.getApplicationDetail(kind, namespace, applicationName)); } + + @ApiOperation(value = "删除POD容器") + @DeleteMapping("/pod/{namespace}/{podName}") + public AjaxResult applicationDetail(@PathVariable("namespace") String namespace, + @PathVariable("podName") String podName, + @RequestParam(value = "isForce", required = false) @ApiParam(value = "是否强制删除") Boolean isForce) { + return toAjax(microManagementService.deletePod(namespace, podName, isForce)); + } } diff --git a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/IMicroManagementService.java b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/IMicroManagementService.java index 3060900dc..3e2e0aa96 100644 --- a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/IMicroManagementService.java +++ b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/IMicroManagementService.java @@ -12,4 +12,6 @@ public interface IMicroManagementService { K8sPodContainerMetric getPodStatus(String containerID, Long step); K8sApplication getApplicationDetail(String kind, String namespace, String applicationName); + + Boolean deletePod(String namespace, String podName, Boolean isForce); } diff --git a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/MicroManagementServiceImpl.java b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/MicroManagementServiceImpl.java index 93104169f..af69da250 100644 --- a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/MicroManagementServiceImpl.java +++ b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/MicroManagementServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.context.SecurityContextHolder; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.StringUtils; +import com.microservices.common.security.utils.SecurityUtils; import com.microservices.mon.k8s.domain.*; import com.microservices.mon.k8s.domain.vo.*; import com.microservices.mon.k8s.service.IK8sDashboardService; @@ -15,6 +16,7 @@ import com.microservices.mon.k8s.utils.SkywalkingGQLConstant; import com.microservices.system.api.RemoteGatewayService; import com.microservices.system.api.RemoteRancherService; import com.microservices.system.api.model.GraphqlQueryVo; +import feign.Response; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -71,4 +73,16 @@ public class MicroManagementServiceImpl extends CommonService implements IMicroM } return k8sApplication; } + + @Override + public Boolean deletePod(String namespace, String podName, Boolean isForce) { + JSONObject deletePodBody = new JSONObject(); + if (isForce != null && isForce) { + deletePodBody.put("force", true); + deletePodBody.put("gracePeriod", 0); + } + try (Response response = remoteRancherService.deletePod(namespace, podName, deletePodBody, SecurityContextHolder.getUserKey())) { + return response != null && response.status() >= 200 && response.status() < 300; + } + } }