Commit ef3d157d authored by 黎博's avatar 黎博

新增redis service和deployment接口

parent 3af4194d
......@@ -26,10 +26,10 @@ public class DockerProjectController {
* @return
*/
@GetMapping("/list")
public JsonResult getDockerProjectList(@RequestParam(defaultValue = "1") Integer pageNum,
public JsonResult getDockerProjectList(String projectName, String projectType, boolean isActive,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
IPage<DockerProject> dockerProjectIPage = new Page<>(pageNum, pageSize);
IPage projectIPage = dockerProjectService.page(dockerProjectIPage);
IPage projectIPage = dockerProjectService.getDockerProjectList(projectName, projectType, isActive, pageNum, pageSize);
Map<String, Object> map = new HashMap<>();
map.put("total", projectIPage.getTotal());
map.put("list", projectIPage.getRecords());
......
......@@ -33,6 +33,7 @@ public class DockerProject {
private String startCommand;
private String stopCommand;
private Integer deployToDocker;
@TableField(value = "`is_active`")
private Integer isActive;
@TableField(value = "`database`")
private String database;
......
......@@ -2,6 +2,9 @@ package cn.qg.holmes.mapper.k8s;
import cn.qg.holmes.entity.k8s.DockerProject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
public interface DockerProjectMapper extends BaseMapper<DockerProject> {
IPage<DockerProject> getDockerProjectList(IPage<DockerProject> page, String projectName, String projectType, boolean isActive);
}
package cn.qg.holmes.service.k8s;
import cn.qg.holmes.entity.k8s.DockerProject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
public interface DockerProjectService extends IService<DockerProject> {
IPage<DockerProject> getDockerProjectList(String projectName, String projectType, boolean isActive, Integer pageNum, Integer pageSize);
}
......@@ -3,9 +3,10 @@ package cn.qg.holmes.service.k8s;
import cn.qg.holmes.entity.k8s.DockerProject;
import cn.qg.holmes.entity.k8s.ServiceCreateVo;
import io.fabric8.kubernetes.api.model.*;
import io.fabric8.kubernetes.api.model.apps.DeploymentStrategy;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.apps.DeploymentSpec;
import io.fabric8.kubernetes.api.model.apps.DeploymentStatus;
import io.fabric8.kubernetes.api.model.apps.DeploymentStrategy;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;
......@@ -13,7 +14,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import javax.print.Doc;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
......@@ -414,7 +414,7 @@ public class TkeService {
* @return
*/
public Service createUIAndNodeService(String namespace, String serviceName, String serviceType, String label) {
Service service = new Service();
Service uiService = new Service();
ObjectMeta objectMeta = new ObjectMeta();
ServiceSpec serviceSpec = new ServiceSpec();
// 设置meta
......@@ -439,11 +439,11 @@ public class TkeService {
serviceSpec.setSelector(selector);
// 设置service
service.setApiVersion("v1");
service.setKind("Service");
service.setMetadata(objectMeta);
service.setSpec(serviceSpec);
return kubernetesClient.services().inNamespace(namespace).create(service);
uiService.setApiVersion("v1");
uiService.setKind("Service");
uiService.setMetadata(objectMeta);
uiService.setSpec(serviceSpec);
return kubernetesClient.services().inNamespace(namespace).create(uiService);
}
/**
......@@ -624,6 +624,208 @@ public class TkeService {
return kubernetesClient.apps().deployments().inNamespace(namespace).create(deployment);
}
public Service createRedisService(String namespace, String serviceName) {
Service redisService = new Service();
ObjectMeta objectMeta = new ObjectMeta();
ServiceSpec serviceSpec = new ServiceSpec();
// 设置meta
Map<String, String> labels = new HashMap<>();
labels.put("type", "base");
labels.put("qcloud-app", serviceName);
objectMeta.setName(serviceName);
objectMeta.setNamespace(namespace);
objectMeta.setLabels(labels);
// 设置spec
List<ServicePort> portList = new ArrayList<>();
ServicePort servicePort1 = new ServicePort();
ServicePort servicePort2 = new ServicePort();
ServicePort servicePort3 = new ServicePort();
ServicePort servicePort4 = new ServicePort();
ServicePort servicePort5 = new ServicePort();
servicePort1.setName("6379");
servicePort1.setPort(6379);
servicePort2.setName("6380");
servicePort2.setPort(6380);
servicePort3.setName("6381");
servicePort3.setPort(6381);
servicePort4.setName("6382");
servicePort4.setPort(6382);
servicePort5.setName("6383");
servicePort5.setPort(6383);
portList.add(servicePort1);
portList.add(servicePort2);
portList.add(servicePort3);
portList.add(servicePort4);
portList.add(servicePort5);
Map<String, String> selector = new HashMap<>();
selector.put("qcloud-app", serviceName);
// 设置serviceSpec
serviceSpec.setType("NodePort");
serviceSpec.setPorts(portList);
serviceSpec.setSelector(selector);
// 设置service
redisService.setApiVersion("v1");
redisService.setKind("Service");
redisService.setMetadata(objectMeta);
redisService.setSpec(serviceSpec);
return kubernetesClient.services().inNamespace(namespace).create(redisService);
}
public Container createRedisContainer(String image, String port) {
Container container = new Container();
container.setName("redis-" + port);
container.setImage("ccr.ccs.tencentyun.com/" + image);
container.setImagePullPolicy("IfNotPresent");
List<String> commandList = new ArrayList<>();
commandList.add("redis-server");
commandList.add("--port");
commandList.add(port);
container.setCommand(commandList);
// resources
ResourceRequirements resourceRequirements = new ResourceRequirements();
Map<String, Quantity> requests = new HashMap<>();
Map<String, Quantity> limits = new HashMap<>();
Quantity cpuQuantity = new Quantity();
Quantity memoryQuantity = new Quantity();
Quantity cpuLimit = new Quantity();
Quantity memoryLimit = new Quantity();
cpuQuantity.setAmount("100");
cpuQuantity.setFormat("m");
memoryQuantity.setAmount("1000");
memoryQuantity.setFormat("Mi");
cpuLimit.setAmount("100");
cpuLimit.setFormat("m");
memoryLimit.setAmount("1000");
memoryLimit.setFormat("Mi");
requests.put("cpu", cpuQuantity);
requests.put("memory", memoryQuantity);
resourceRequirements.setRequests(requests);
resourceRequirements.setLimits(limits);
container.setResources(resourceRequirements);
// livenessProbe
Probe livenessProbe = new Probe();
ExecAction execAction = new ExecAction();
List<String> probeCommandList = new ArrayList<>();
probeCommandList.add("redis-cli");
probeCommandList.add("-p");
probeCommandList.add(port);
probeCommandList.add("info");
execAction.setCommand(probeCommandList);
livenessProbe.setExec(execAction);
livenessProbe.setInitialDelaySeconds(100);
livenessProbe.setSuccessThreshold(1);
container.setLivenessProbe(livenessProbe);
//readinessProbe
Probe readinessProbe = new Probe();
readinessProbe.setExec(execAction);
readinessProbe.setInitialDelaySeconds(5);
readinessProbe.setTimeoutSeconds(1);
readinessProbe.setPeriodSeconds(5);
container.setReadinessProbe(readinessProbe);
return container;
}
/**
* 创建redis deployment
* @param namespace
* @param label
* @param serviceName
* @param type
* @param image
* @return
*/
public Deployment createRedisDeployment(String namespace, String label, String serviceName, String type, String image) {
Deployment redisDeployment = new Deployment();
// 设置meta
ObjectMeta objectMeta = new ObjectMeta();
Map<String, String> labelMap = new HashMap<>();
labelMap.put("type", label);
labelMap.put("qcloud-app", serviceName);
objectMeta.setName(serviceName);
objectMeta.setNamespace(namespace);
objectMeta.setLabels(labelMap);
// 设置spec
DeploymentSpec deploymentSpec = new DeploymentSpec();
// 设置labelSelector
LabelSelector labelSelector = new LabelSelector();
Map<String, String> matchLabels = new HashMap<>();
matchLabels.put("qcloud-app", serviceName);
labelSelector.setMatchLabels(matchLabels);
// 设置strategy
DeploymentStrategy deploymentStrategy = new DeploymentStrategy();
deploymentStrategy.setType("Recreate");
// 设置pod Template
PodTemplateSpec podTemplateSpec = new PodTemplateSpec();
ObjectMeta templateObjectMeta = new ObjectMeta();
Map<String, String> templateLabels = new HashMap<>();
templateLabels.put("qcloud-app", serviceName);
templateLabels.put("type", "base");
templateObjectMeta.setLabels(templateLabels);
PodSpec podSpec = new PodSpec();
List<Container> containerList = new ArrayList<>();
Container container1 = createRedisContainer(image, "6379");
Container container2 = createRedisContainer(image, "6380");
Container container3 = createRedisContainer(image, "6381");
Container container4 = createRedisContainer(image, "6382");
Container container5 = createRedisContainer(image, "6383");
containerList.add(container1);
containerList.add(container2);
containerList.add(container3);
containerList.add(container4);
containerList.add(container5);
// imagePullSecrets
List<LocalObjectReference> referenceList = new ArrayList<>();
LocalObjectReference reference1 = new LocalObjectReference();
LocalObjectReference reference2 = new LocalObjectReference();
reference1.setName("qcloudregistrykey");
reference2.setName("tencenthubkey");
referenceList.add(reference1);
referenceList.add(reference2);
podSpec.setContainers(containerList);
podSpec.setDnsPolicy("ClusterFirst");
podSpec.setImagePullSecrets(referenceList);
podSpec.setRestartPolicy("Always");
podSpec.setTerminationGracePeriodSeconds(30L);
// 设置PodTemplateSpec
podTemplateSpec.setMetadata(templateObjectMeta);
podTemplateSpec.setSpec(podSpec);
// 设置Deployment Spec
deploymentSpec.setReplicas(1);
deploymentSpec.setRevisionHistoryLimit(1);
deploymentSpec.setStrategy(deploymentStrategy);
deploymentSpec.setTemplate(podTemplateSpec);
deploymentSpec.setSelector(labelSelector);
DeploymentStatus deploymentStatus = new DeploymentStatus();
// deployment设置
redisDeployment.setApiVersion("apps/v1");
redisDeployment.setKind("Deployment");
redisDeployment.setMetadata(objectMeta);
redisDeployment.setSpec(deploymentSpec);
redisDeployment.setStatus(deploymentStatus);
return kubernetesClient.apps().deployments().inNamespace(namespace).create(redisDeployment);
}
/**
* 更新部署pod
* @param namespace 环境
......@@ -674,7 +876,9 @@ public class TkeService {
// dockerProject.setCpuLimit("2000");
// dockerProject.setMemLimit("1000");
// tkeService.createJavaDeployment(serviceCreateVo, dockerProject);
tkeService.updateDeployment("fe", "mo-clotho", "qa-test/mo-clotho:master-20210707143546990");
// tkeService.updateDeployment("fe", "mo-clotho", "qa-test/mo-clotho:master-20210707143546990");
// tkeService.createRedisService("fe", "redis");
// tkeService.createRedisDeployment("fe", "base", "redis", "redis", "qa-base/redis:3");
}
}
......@@ -3,9 +3,30 @@ package cn.qg.holmes.service.k8s.impl;
import cn.qg.holmes.entity.k8s.DockerProject;
import cn.qg.holmes.mapper.k8s.DockerProjectMapper;
import cn.qg.holmes.service.k8s.DockerProjectService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DockerProjectServiceImpl extends ServiceImpl<DockerProjectMapper, DockerProject> implements DockerProjectService {
@Autowired
DockerProjectMapper dockerProjectMapper;
/**
* 条件分页查询
* @param projectName 项目名称
* @param projectType 项目类型,Java UI、node等等
* @param isActive 是否可用
* @param pageNum 第几页
* @param pageSize 每页展示多少个
* @return
*/
@Override
public IPage<DockerProject> getDockerProjectList(String projectName, String projectType, boolean isActive, Integer pageNum, Integer pageSize) {
IPage<DockerProject> page = new Page<>(pageNum, pageSize);
return dockerProjectMapper.getDockerProjectList(page, projectName, projectType, isActive);
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.qg.holmes.mapper.k8s.DockerProjectMapper">
<select id="getDockerProjectList" resultType="cn.qg.holmes.entity.k8s.DockerProject">
SELECT * FROM `docker_project`
WHERE 1=1
<if test="projectName != null and projectName != ''">
AND `project_name` like CONCAT('%', #{projectName}, '%')
</if>
<if test="projectType != null and projectType != ''">
AND `project_type` = #{projectType}
</if>
<if test="isActive != null and isActive != ''">
AND `is_active` = #{isActive}
</if>
</select>
</mapper>
\ No newline at end of file
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