1.30 k8s pods查询

This commit is contained in:
dengqichen 2025-12-13 21:31:01 +08:00
parent 69a4dc8e1f
commit e5f4fee51d

View File

@ -21,6 +21,7 @@ import com.qqchen.deploy.backend.framework.exception.BusinessException;
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -31,6 +32,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
@ -55,6 +59,10 @@ public class K8sDeploymentServiceImpl extends BaseServiceImpl<K8sDeployment, K8s
@Resource @Resource
private IK8sSyncHistoryService k8sSyncHistoryService; private IK8sSyncHistoryService k8sSyncHistoryService;
@Resource
@Qualifier("k8sTaskExecutor")
private Executor k8sTaskExecutor;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Integer syncDeployments(ExternalSystem externalSystem, K8sNamespace namespace) { public Integer syncDeployments(ExternalSystem externalSystem, K8sNamespace namespace) {
@ -135,7 +143,6 @@ public class K8sDeploymentServiceImpl extends BaseServiceImpl<K8sDeployment, K8s
@Override @Override
@Async("k8sTaskExecutor") @Async("k8sTaskExecutor")
@Transactional(rollbackFor = Exception.class)
public void syncDeployments(Long externalSystemId) { public void syncDeployments(Long externalSystemId) {
log.info("异步同步K8S Deployment所有命名空间集群ID: {}", externalSystemId); log.info("异步同步K8S Deployment所有命名空间集群ID: {}", externalSystemId);
@ -154,17 +161,44 @@ public class K8sDeploymentServiceImpl extends BaseServiceImpl<K8sDeployment, K8s
List<K8sNamespace> namespaces = k8sNamespaceRepository.findByExternalSystemId(externalSystemId); List<K8sNamespace> namespaces = k8sNamespaceRepository.findByExternalSystemId(externalSystemId);
int totalSyncCount = 0; log.info("开始并行同步 {} 个命名空间的Deployment", namespaces.size());
for (K8sNamespace namespace : namespaces) {
// 并行处理所有namespace
List<CompletableFuture<Integer>> futures = namespaces.stream()
.map(namespace -> CompletableFuture.supplyAsync(() -> {
try {
log.debug("开始同步命名空间: {}", namespace.getNamespaceName());
int count = syncDeployments(externalSystem, namespace); int count = syncDeployments(externalSystem, namespace);
totalSyncCount += count; log.debug("命名空间 {} 同步完成,同步数量: {}", namespace.getNamespaceName(), count);
return count;
} catch (Exception e) {
log.error("命名空间 {} 同步失败: {}", namespace.getNamespaceName(), e.getMessage(), e);
// 单个namespace失败不影响其他namespace返回0
return 0;
} }
}, k8sTaskExecutor))
.collect(Collectors.toList());
// 等待所有任务完成并汇总结果
CompletableFuture<Void> allFutures = CompletableFuture.allOf(
futures.toArray(new CompletableFuture[0])
);
// 阻塞等待所有任务完成
allFutures.join();
// 汇总同步数量
int totalSyncCount = futures.stream()
.map(CompletableFuture::join)
.mapToInt(Integer::intValue)
.sum();
syncHistory.setStatus(ExternalSystemSyncStatus.SUCCESS); syncHistory.setStatus(ExternalSystemSyncStatus.SUCCESS);
syncHistory.setEndTime(LocalDateTime.now()); syncHistory.setEndTime(LocalDateTime.now());
k8sSyncHistoryService.update(syncHistory.getId(), syncHistory); k8sSyncHistoryService.update(syncHistory.getId(), syncHistory);
log.info("K8S Deployment异步同步成功集群ID: {}, 总同步数量: {}", externalSystemId, totalSyncCount); log.info("K8S Deployment并行同步成功集群ID: {}, 命名空间数: {}, 总同步数量: {}",
externalSystemId, namespaces.size(), totalSyncCount);
} catch (Exception e) { } catch (Exception e) {
log.error("K8S Deployment异步同步失败集群ID: {}, 错误: {}", externalSystemId, e.getMessage(), e); log.error("K8S Deployment异步同步失败集群ID: {}, 错误: {}", externalSystemId, e.getMessage(), e);