Commit fefc5ae6 authored by 黎博's avatar 黎博

换一种方式获取podList

parent 65749641
......@@ -60,7 +60,7 @@ public class K8sController {
*/
@GetMapping("/service/list")
public JsonResult getServiceList(@RequestParam String namespace) {
List<Map<String, Object>> podList = k8sService.getPodList(namespace);
List<Map<String, Object>> podList = k8sService.getPodListNew(namespace);
return JsonResult.buildSuccessResult(podList);
}
......
......@@ -292,9 +292,129 @@ public class K8sService {
return result;
}
public List<Map<String, Object>> getPodListNew(String namespace) {
// 获取Pod列表
List<Pod> podList = kubernetesClient.pods().inNamespace(namespace).list().getItems();
// 获取Service列表
List<Service> serviceList = kubernetesClient.services().inNamespace(namespace).list().getItems();
// 获取ingress列表
List<Ingress> ingressList = kubernetesClient.extensions().ingresses().inNamespace(namespace).list().getItems();
Map<String, Map<String, Object>> podServiceMap = new HashMap<>();
// 遍历Pod列表
for (Pod pod: podList) {
if (!pod.getStatus().getPhase().equals("Failed")) {
String serviceName = pod.getMetadata().getLabels().get("qcloud-app");
podServiceMap.put(serviceName, formatPodInfo(pod));
}
}
// 遍历Service列表
for (Service service: serviceList) {
String serviceName = service.getMetadata().getName();
podServiceMap = assign(serviceName, podServiceMap, formatServiceInfo(service));
}
// 遍历Ingress列表
for (Ingress ingress: ingressList) {
String serviceName = ingress.getMetadata().getName();
podServiceMap = assign(serviceName, podServiceMap, formatIngressInfo(ingress));
}
return new ArrayList<>(podServiceMap.values());
}
public Map<String, Map<String, Object>> assign(String serviceName, Map<String, Map<String, Object>> podServiceMap, Map<String, Object> otherMap) {
Map<String, Object> podService = podServiceMap.get(serviceName);
for (Map.Entry<String, Object> entry: otherMap.entrySet()) {
podService.put(entry.getKey(), entry.getValue());
}
podServiceMap.put(serviceName, podService);
return podServiceMap;
}
/**
* 处理pod相关信息
* @param pod
* @return
*/
public Map<String, Object> formatPodInfo(Pod pod) {
Map<String, Object> podMap = new HashMap<>();
podMap.put("serviceName", pod.getMetadata().getLabels().get("qcloud-app"));
podMap.put("podName", pod.getMetadata().getName());
podMap.put("status", getPodStatus(pod));
podMap.put("podIp", pod.getStatus().getPodIP());
podMap.put("lanIp", pod.getStatus().getHostIP());
// podMap.put("startTime", pod.getStatus().getStartTime());
podMap.put("createdAt", pod.getStatus().getStartTime());
podMap.put("image", pod.getStatus().getContainerStatuses().get(0).getImage());
podMap.put("imageId", pod.getStatus().getContainerStatuses().get(0).getImageID());
podMap.put("labels", pod.getMetadata().getLabels());
return podMap;
}
/**
* 格式化pod状态
* @param pod
* @return
*/
public String getPodStatus(Pod pod) {
if (pod.getMetadata().getDeletionTimestamp() != null) {
return "Terminating";
} else {
String status = "";
List<ContainerStatus> containerStatuses = pod.getStatus().getContainerStatuses();
if (containerStatuses.size() == 0) {
status = "Pending";
} else {
if (containerStatuses.get(0).getState().getWaiting() != null) {
status = "ContainerCreating";
}
if (containerStatuses.get(0).getState().getRunning() != null && !containerStatuses.get(0).getReady()) {
status = "Waiting";
}
if (containerStatuses.get(0).getState().getRunning() != null && containerStatuses.get(0).getReady()) {
status = "Normal";
}
}
return status;
}
}
public Map<String, Object> formatServiceInfo(Service service) {
Map<String, Object> serviceMap = new HashMap<>();
serviceMap.put("serviceType", service.getSpec().getType());
List<Map<String, Object>> portMappingList = new ArrayList<>();
List<ServicePort> servicePortList = service.getSpec().getPorts();
if (servicePortList.size() > 0) {
for (ServicePort servicePort : servicePortList) {
if (servicePort.getNodePort() != null) {
serviceMap.put("port_" + servicePort.getName(), servicePort.getNodePort());
}
Map<String, Object> portMap = new HashMap<>();
portMap.put("name", servicePort.getName());
portMap.put("nodePort", servicePort.getNodePort());
portMap.put("port", servicePort.getPort());
portMap.put("protocol", servicePort.getProtocol());
portMap.put("targetPort", servicePort.getTargetPort());
portMappingList.add(portMap);
}
}
if (portMappingList.size() > 0) {
serviceMap.put("portMappings", portMappingList);
}
return serviceMap;
}
public Map<String, Object> formatIngressInfo(Ingress ingress) {
Map<String, Object> ingressMap = new HashMap<>();
if (ingress.getSpec().getRules().size() > 0) {
ingressMap.put("host", ingress.getSpec().getRules().get(0).getHost());
} else {
ingressMap.put("host", null);
}
return ingressMap;
}
/**
* 重置pod
*
* @param namespace 环境
* @param podName podName
* @return
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment