Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
holmes
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QA
holmes
Commits
ef3d157d
Commit
ef3d157d
authored
Jul 13, 2021
by
黎博
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增redis service和deployment接口
parent
3af4194d
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
262 additions
and
12 deletions
+262
-12
DockerProjectController.java
.../cn/qg/holmes/controller/k8s/DockerProjectController.java
+3
-3
DockerProject.java
src/main/java/cn/qg/holmes/entity/k8s/DockerProject.java
+1
-0
DockerProjectMapper.java
...ain/java/cn/qg/holmes/mapper/k8s/DockerProjectMapper.java
+3
-0
DockerProjectService.java
...n/java/cn/qg/holmes/service/k8s/DockerProjectService.java
+2
-0
TkeService.java
src/main/java/cn/qg/holmes/service/k8s/TkeService.java
+213
-9
DockerProjectServiceImpl.java
.../qg/holmes/service/k8s/impl/DockerProjectServiceImpl.java
+21
-0
DockerProjectMapper.xml
src/main/resources/mapper/k8s/DockerProjectMapper.xml
+19
-0
No files found.
src/main/java/cn/qg/holmes/controller/k8s/DockerProjectController.java
View file @
ef3d157d
...
@@ -26,10 +26,10 @@ public class DockerProjectController {
...
@@ -26,10 +26,10 @@ public class DockerProjectController {
* @return
* @return
*/
*/
@GetMapping
(
"/list"
)
@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
)
{
@RequestParam
(
defaultValue
=
"10"
)
Integer
pageSize
)
{
IPage
<
DockerProject
>
dockerProjectIPage
=
new
Page
<>(
pageNum
,
pageSize
);
IPage
projectIPage
=
dockerProjectService
.
getDockerProjectList
(
projectName
,
projectType
,
isActive
,
pageNum
,
pageSize
);
IPage
projectIPage
=
dockerProjectService
.
page
(
dockerProjectIPage
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"total"
,
projectIPage
.
getTotal
());
map
.
put
(
"total"
,
projectIPage
.
getTotal
());
map
.
put
(
"list"
,
projectIPage
.
getRecords
());
map
.
put
(
"list"
,
projectIPage
.
getRecords
());
...
...
src/main/java/cn/qg/holmes/entity/k8s/DockerProject.java
View file @
ef3d157d
...
@@ -33,6 +33,7 @@ public class DockerProject {
...
@@ -33,6 +33,7 @@ public class DockerProject {
private
String
startCommand
;
private
String
startCommand
;
private
String
stopCommand
;
private
String
stopCommand
;
private
Integer
deployToDocker
;
private
Integer
deployToDocker
;
@TableField
(
value
=
"`is_active`"
)
private
Integer
isActive
;
private
Integer
isActive
;
@TableField
(
value
=
"`database`"
)
@TableField
(
value
=
"`database`"
)
private
String
database
;
private
String
database
;
...
...
src/main/java/cn/qg/holmes/mapper/k8s/DockerProjectMapper.java
View file @
ef3d157d
...
@@ -2,6 +2,9 @@ package cn.qg.holmes.mapper.k8s;
...
@@ -2,6 +2,9 @@ package cn.qg.holmes.mapper.k8s;
import
cn.qg.holmes.entity.k8s.DockerProject
;
import
cn.qg.holmes.entity.k8s.DockerProject
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
public
interface
DockerProjectMapper
extends
BaseMapper
<
DockerProject
>
{
public
interface
DockerProjectMapper
extends
BaseMapper
<
DockerProject
>
{
IPage
<
DockerProject
>
getDockerProjectList
(
IPage
<
DockerProject
>
page
,
String
projectName
,
String
projectType
,
boolean
isActive
);
}
}
src/main/java/cn/qg/holmes/service/k8s/DockerProjectService.java
View file @
ef3d157d
package
cn
.
qg
.
holmes
.
service
.
k8s
;
package
cn
.
qg
.
holmes
.
service
.
k8s
;
import
cn.qg.holmes.entity.k8s.DockerProject
;
import
cn.qg.holmes.entity.k8s.DockerProject
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
public
interface
DockerProjectService
extends
IService
<
DockerProject
>
{
public
interface
DockerProjectService
extends
IService
<
DockerProject
>
{
IPage
<
DockerProject
>
getDockerProjectList
(
String
projectName
,
String
projectType
,
boolean
isActive
,
Integer
pageNum
,
Integer
pageSize
);
}
}
src/main/java/cn/qg/holmes/service/k8s/TkeService.java
View file @
ef3d157d
...
@@ -3,9 +3,10 @@ package cn.qg.holmes.service.k8s;
...
@@ -3,9 +3,10 @@ package cn.qg.holmes.service.k8s;
import
cn.qg.holmes.entity.k8s.DockerProject
;
import
cn.qg.holmes.entity.k8s.DockerProject
;
import
cn.qg.holmes.entity.k8s.ServiceCreateVo
;
import
cn.qg.holmes.entity.k8s.ServiceCreateVo
;
import
io.fabric8.kubernetes.api.model.*
;
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.Deployment
;
import
io.fabric8.kubernetes.api.model.apps.DeploymentSpec
;
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.Config
;
import
io.fabric8.kubernetes.client.DefaultKubernetesClient
;
import
io.fabric8.kubernetes.client.DefaultKubernetesClient
;
import
io.fabric8.kubernetes.client.KubernetesClient
;
import
io.fabric8.kubernetes.client.KubernetesClient
;
...
@@ -13,7 +14,6 @@ import lombok.extern.slf4j.Slf4j;
...
@@ -13,7 +14,6 @@ import lombok.extern.slf4j.Slf4j;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
javax.print.Doc
;
import
java.io.BufferedReader
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStream
;
...
@@ -414,7 +414,7 @@ public class TkeService {
...
@@ -414,7 +414,7 @@ public class TkeService {
* @return
* @return
*/
*/
public
Service
createUIAndNodeService
(
String
namespace
,
String
serviceName
,
String
serviceType
,
String
label
)
{
public
Service
createUIAndNodeService
(
String
namespace
,
String
serviceName
,
String
serviceType
,
String
label
)
{
Service
s
ervice
=
new
Service
();
Service
uiS
ervice
=
new
Service
();
ObjectMeta
objectMeta
=
new
ObjectMeta
();
ObjectMeta
objectMeta
=
new
ObjectMeta
();
ServiceSpec
serviceSpec
=
new
ServiceSpec
();
ServiceSpec
serviceSpec
=
new
ServiceSpec
();
// 设置meta
// 设置meta
...
@@ -439,11 +439,11 @@ public class TkeService {
...
@@ -439,11 +439,11 @@ public class TkeService {
serviceSpec
.
setSelector
(
selector
);
serviceSpec
.
setSelector
(
selector
);
// 设置service
// 设置service
s
ervice
.
setApiVersion
(
"v1"
);
uiS
ervice
.
setApiVersion
(
"v1"
);
s
ervice
.
setKind
(
"Service"
);
uiS
ervice
.
setKind
(
"Service"
);
s
ervice
.
setMetadata
(
objectMeta
);
uiS
ervice
.
setMetadata
(
objectMeta
);
s
ervice
.
setSpec
(
serviceSpec
);
uiS
ervice
.
setSpec
(
serviceSpec
);
return
kubernetesClient
.
services
().
inNamespace
(
namespace
).
create
(
s
ervice
);
return
kubernetesClient
.
services
().
inNamespace
(
namespace
).
create
(
uiS
ervice
);
}
}
/**
/**
...
@@ -624,6 +624,208 @@ public class TkeService {
...
@@ -624,6 +624,208 @@ public class TkeService {
return
kubernetesClient
.
apps
().
deployments
().
inNamespace
(
namespace
).
create
(
deployment
);
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
* 更新部署pod
* @param namespace 环境
* @param namespace 环境
...
@@ -674,7 +876,9 @@ public class TkeService {
...
@@ -674,7 +876,9 @@ public class TkeService {
// dockerProject.setCpuLimit("2000");
// dockerProject.setCpuLimit("2000");
// dockerProject.setMemLimit("1000");
// dockerProject.setMemLimit("1000");
// tkeService.createJavaDeployment(serviceCreateVo, dockerProject);
// 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");
}
}
}
}
src/main/java/cn/qg/holmes/service/k8s/impl/DockerProjectServiceImpl.java
View file @
ef3d157d
...
@@ -3,9 +3,30 @@ package cn.qg.holmes.service.k8s.impl;
...
@@ -3,9 +3,30 @@ package cn.qg.holmes.service.k8s.impl;
import
cn.qg.holmes.entity.k8s.DockerProject
;
import
cn.qg.holmes.entity.k8s.DockerProject
;
import
cn.qg.holmes.mapper.k8s.DockerProjectMapper
;
import
cn.qg.holmes.mapper.k8s.DockerProjectMapper
;
import
cn.qg.holmes.service.k8s.DockerProjectService
;
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
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
@Service
@Service
public
class
DockerProjectServiceImpl
extends
ServiceImpl
<
DockerProjectMapper
,
DockerProject
>
implements
DockerProjectService
{
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
);
}
}
}
src/main/resources/mapper/k8s/DockerProjectMapper.xml
0 → 100644
View file @
ef3d157d
<?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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment