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
8db756dd
Commit
8db756dd
authored
Apr 19, 2022
by
黎博
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化TkeService
parent
f4f0c17e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
66 additions
and
16 deletions
+66
-16
K8sController.java
src/main/java/cn/qg/holmes/controller/k8s/K8sController.java
+12
-9
TkeService.java
src/main/java/cn/qg/holmes/service/k8s/TkeService.java
+37
-7
YamlUtils.java
src/main/java/cn/qg/holmes/utils/YamlUtils.java
+17
-0
No files found.
src/main/java/cn/qg/holmes/controller/k8s/K8sController.java
View file @
8db756dd
...
@@ -113,15 +113,8 @@ public class K8sController {
...
@@ -113,15 +113,8 @@ public class K8sController {
try
{
try
{
String
namespace
=
serviceCreateVo
.
getNamespace
();
String
namespace
=
serviceCreateVo
.
getNamespace
();
String
serviceName
=
serviceCreateVo
.
getServiceName
();
String
serviceName
=
serviceCreateVo
.
getServiceName
();
String
serviceType
=
serviceCreateVo
.
getType
();
String
label
=
serviceCreateVo
.
getLabel
();
if
(
tkeService
.
checkPvcExistence
(
namespace
,
serviceName
))
{
if
(
StringUtils
.
equals
(
label
,
"base"
))
{
return
JsonResult
.
buildErrorStateResult
(
"服务已存在"
,
false
);
}
// 新增Service
tkeService
.
createServiceByYaml
(
serviceCreateVo
);
// 新增Deployment
tkeService
.
createDeploymentByYaml
(
serviceCreateVo
);
if
(
StringUtils
.
equals
(
serviceType
,
"base"
))
{
// 基础服务,如果没有PVC则创建
// 基础服务,如果没有PVC则创建
if
(!
tkeService
.
checkPvcExistence
(
namespace
,
serviceName
))
{
if
(!
tkeService
.
checkPvcExistence
(
namespace
,
serviceName
))
{
tkeService
.
createPvcByYaml
(
serviceCreateVo
);
tkeService
.
createPvcByYaml
(
serviceCreateVo
);
...
@@ -130,6 +123,10 @@ public class K8sController {
...
@@ -130,6 +123,10 @@ public class K8sController {
// 非基础服务,创建Ingress
// 非基础服务,创建Ingress
tkeService
.
createIngressByYaml
(
serviceCreateVo
);
tkeService
.
createIngressByYaml
(
serviceCreateVo
);
}
}
// 新增Service
tkeService
.
createServiceByYaml
(
serviceCreateVo
);
// 新增Deployment
tkeService
.
createDeploymentByYaml
(
serviceCreateVo
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
info
(
"服务创建异常."
,
e
);
log
.
info
(
"服务创建异常."
,
e
);
e
.
printStackTrace
();
e
.
printStackTrace
();
...
@@ -535,4 +532,10 @@ public class K8sController {
...
@@ -535,4 +532,10 @@ public class K8sController {
}
}
return
JsonResult
.
buildSuccessResult
(
map
);
return
JsonResult
.
buildSuccessResult
(
map
);
}
}
@GetMapping
(
"/clear/is"
)
public
JsonResult
clearIs
(
@RequestParam
String
env
)
{
tkeService
.
clearRubbish
(
env
);
return
JsonResult
.
buildSuccessResult
(
true
);
}
}
}
src/main/java/cn/qg/holmes/service/k8s/TkeService.java
View file @
8db756dd
...
@@ -5,6 +5,7 @@ import cn.qg.holmes.entity.k8s.ServiceCreateVo;
...
@@ -5,6 +5,7 @@ import cn.qg.holmes.entity.k8s.ServiceCreateVo;
import
cn.qg.holmes.utils.DateUtils
;
import
cn.qg.holmes.utils.DateUtils
;
import
cn.qg.holmes.utils.FileUtils
;
import
cn.qg.holmes.utils.FileUtils
;
import
cn.qg.holmes.utils.TkeUtils
;
import
cn.qg.holmes.utils.TkeUtils
;
import
cn.qg.holmes.utils.YamlUtils
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
...
@@ -529,12 +530,12 @@ public class TkeService {
...
@@ -529,12 +530,12 @@ public class TkeService {
* @return
* @return
*/
*/
public
Deployment
createDeploymentByYaml
(
ServiceCreateVo
serviceCreateVo
)
{
public
Deployment
createDeploymentByYaml
(
ServiceCreateVo
serviceCreateVo
)
{
String
serviceType
=
serviceCreateVo
.
getType
();
String
label
=
serviceCreateVo
.
getLabel
();
String
serviceName
=
serviceCreateVo
.
getServiceName
();
String
serviceName
=
serviceCreateVo
.
getServiceName
();
String
namespace
=
serviceCreateVo
.
getNamespace
();
String
namespace
=
serviceCreateVo
.
getNamespace
();
String
deploymentYaml
;
String
deploymentYaml
;
try
{
try
{
switch
(
serviceType
)
{
switch
(
label
)
{
case
"base"
:
case
"base"
:
String
yamlFilePath
=
"tke/template/"
+
StringUtils
.
capitalize
(
serviceName
)
+
"-Deployment.yml"
;
String
yamlFilePath
=
"tke/template/"
+
StringUtils
.
capitalize
(
serviceName
)
+
"-Deployment.yml"
;
deploymentYaml
=
FileUtils
.
readFileFromClassPathResource
(
yamlFilePath
);
deploymentYaml
=
FileUtils
.
readFileFromClassPathResource
(
yamlFilePath
);
...
@@ -584,7 +585,7 @@ public class TkeService {
...
@@ -584,7 +585,7 @@ public class TkeService {
deploymentYaml
=
TkeUtils
.
replaceBusinessYaml
(
deploymentYaml
,
serviceCreateVo
,
uiOrNodeProject
);
deploymentYaml
=
TkeUtils
.
replaceBusinessYaml
(
deploymentYaml
,
serviceCreateVo
,
uiOrNodeProject
);
break
;
break
;
default
:
default
:
log
.
info
(
"暂不支持{}类型的deployment"
,
serviceType
);
log
.
info
(
"暂不支持{}类型的deployment"
,
label
);
return
null
;
return
null
;
}
}
Yaml
yaml
=
new
Yaml
(
new
Constructor
(
Deployment
.
class
));
Yaml
yaml
=
new
Yaml
(
new
Constructor
(
Deployment
.
class
));
...
@@ -603,6 +604,7 @@ public class TkeService {
...
@@ -603,6 +604,7 @@ public class TkeService {
deployment
.
getSpec
().
getTemplate
().
getSpec
().
getContainers
().
forEach
(
container
->
container
.
setReadinessProbe
(
readinessProbe
));
deployment
.
getSpec
().
getTemplate
().
getSpec
().
getContainers
().
forEach
(
container
->
container
.
setReadinessProbe
(
readinessProbe
));
deployment
.
getSpec
().
getTemplate
().
getSpec
().
getContainers
().
forEach
(
container
->
container
.
setLivenessProbe
(
livelinessProbe
));
deployment
.
getSpec
().
getTemplate
().
getSpec
().
getContainers
().
forEach
(
container
->
container
.
setLivenessProbe
(
livelinessProbe
));
}
}
log
.
info
(
"开始创建k8s Deployment: \n{}"
,
YamlUtils
.
JsonToYamlStr
(
JSON
.
toJSONString
(
deployment
)));
return
kubernetesClient
.
apps
().
deployments
().
inNamespace
(
namespace
).
createOrReplace
(
deployment
);
return
kubernetesClient
.
apps
().
deployments
().
inNamespace
(
namespace
).
createOrReplace
(
deployment
);
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
log
.
info
(
"创建Deployment失败!"
);
log
.
info
(
"创建Deployment失败!"
);
...
@@ -617,12 +619,12 @@ public class TkeService {
...
@@ -617,12 +619,12 @@ public class TkeService {
* @return
* @return
*/
*/
public
Service
createServiceByYaml
(
ServiceCreateVo
serviceCreateVo
)
{
public
Service
createServiceByYaml
(
ServiceCreateVo
serviceCreateVo
)
{
String
serviceType
=
serviceCreateVo
.
getType
();
String
label
=
serviceCreateVo
.
getLabel
();
String
serviceName
=
serviceCreateVo
.
getServiceName
();
String
serviceName
=
serviceCreateVo
.
getServiceName
();
String
namespace
=
serviceCreateVo
.
getNamespace
();
String
namespace
=
serviceCreateVo
.
getNamespace
();
String
serviceYaml
;
String
serviceYaml
;
try
{
try
{
switch
(
serviceType
)
{
switch
(
label
)
{
case
"base"
:
case
"base"
:
String
yamlFilePath
=
"tke/template/"
+
StringUtils
.
capitalize
(
serviceName
)
+
"-Service.yml"
;
String
yamlFilePath
=
"tke/template/"
+
StringUtils
.
capitalize
(
serviceName
)
+
"-Service.yml"
;
serviceYaml
=
FileUtils
.
readFileFromClassPathResource
(
yamlFilePath
);
serviceYaml
=
FileUtils
.
readFileFromClassPathResource
(
yamlFilePath
);
...
@@ -638,11 +640,12 @@ public class TkeService {
...
@@ -638,11 +640,12 @@ public class TkeService {
serviceYaml
=
TkeUtils
.
replaceBusinessYaml
(
serviceYaml
,
serviceCreateVo
,
null
);
serviceYaml
=
TkeUtils
.
replaceBusinessYaml
(
serviceYaml
,
serviceCreateVo
,
null
);
break
;
break
;
default
:
default
:
log
.
info
(
"暂不支持创建{}类型的k8s Service."
,
serviceType
);
log
.
info
(
"暂不支持创建{}类型的k8s Service."
,
label
);
return
null
;
return
null
;
}
}
Yaml
yaml
=
new
Yaml
(
new
Constructor
(
Service
.
class
));
Yaml
yaml
=
new
Yaml
(
new
Constructor
(
Service
.
class
));
Service
service
=
yaml
.
load
(
serviceYaml
);
Service
service
=
yaml
.
load
(
serviceYaml
);
log
.
info
(
"开始创建k8s Service: \n{}"
,
serviceYaml
);
return
kubernetesClient
.
services
().
inNamespace
(
namespace
).
createOrReplace
(
service
);
return
kubernetesClient
.
services
().
inNamespace
(
namespace
).
createOrReplace
(
service
);
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
log
.
info
(
"Service创建失败."
);
log
.
info
(
"Service创建失败."
);
...
@@ -667,7 +670,7 @@ public class TkeService {
...
@@ -667,7 +670,7 @@ public class TkeService {
String
pvcFilePath
=
"tke/template/"
+
StringUtils
.
capitalize
(
serviceName
)
+
"-Pvc.yml"
;
String
pvcFilePath
=
"tke/template/"
+
StringUtils
.
capitalize
(
serviceName
)
+
"-Pvc.yml"
;
String
pvcYaml
=
FileUtils
.
readFileFromClassPathResource
(
pvcFilePath
);
String
pvcYaml
=
FileUtils
.
readFileFromClassPathResource
(
pvcFilePath
);
pvcYaml
=
TkeUtils
.
replaceBasicYaml
(
pvcYaml
,
serviceCreateVo
);
pvcYaml
=
TkeUtils
.
replaceBasicYaml
(
pvcYaml
,
serviceCreateVo
);
log
.
info
(
"开始创建Pvc:\n{}"
,
pvcYaml
);
log
.
info
(
"开始创建
k8s
Pvc:\n{}"
,
pvcYaml
);
Yaml
yaml
=
new
Yaml
(
new
Constructor
(
PersistentVolumeClaim
.
class
));
Yaml
yaml
=
new
Yaml
(
new
Constructor
(
PersistentVolumeClaim
.
class
));
PersistentVolumeClaim
persistentVolumeClaim
=
yaml
.
load
(
pvcYaml
);
PersistentVolumeClaim
persistentVolumeClaim
=
yaml
.
load
(
pvcYaml
);
return
kubernetesClient
.
persistentVolumeClaims
().
inNamespace
(
namespace
).
create
(
persistentVolumeClaim
);
return
kubernetesClient
.
persistentVolumeClaims
().
inNamespace
(
namespace
).
create
(
persistentVolumeClaim
);
...
@@ -766,4 +769,31 @@ public class TkeService {
...
@@ -766,4 +769,31 @@ public class TkeService {
return
readinessProbe
;
return
readinessProbe
;
}
}
public
void
clearRubbish
(
String
env
)
{
List
<
Map
<
String
,
Object
>>
mapList
=
getNamespaceList
(
env
);
for
(
Map
<
String
,
Object
>
map:
mapList
)
{
String
namespace
=
map
.
get
(
"name"
).
toString
();
log
.
info
(
"开始清理{}环境的没有Deployment的Ingress和Service"
,
namespace
);
// 循环删除某个namespace下没有Deployment的Service和Ingress
List
<
Service
>
serviceList
=
kubernetesClient
.
services
().
inNamespace
(
namespace
).
list
().
getItems
();
for
(
Service
service:
serviceList
)
{
String
serviceName
=
service
.
getMetadata
().
getName
();
if
(!
checkDeploymentExistence
(
namespace
,
serviceName
))
{
log
.
info
(
"{}环境{}Deployment不存在,删除Service"
,
namespace
,
serviceName
);
deleteService
(
namespace
,
serviceName
);
}
}
// 循环删除某个namespace下没有Deployment的Ingress
List
<
Ingress
>
ingressList
=
kubernetesClient
.
extensions
().
ingresses
().
inNamespace
(
namespace
).
list
().
getItems
();
for
(
Ingress
ingress:
ingressList
)
{
String
serviceName
=
ingress
.
getMetadata
().
getName
();
if
(!
checkDeploymentExistence
(
namespace
,
serviceName
))
{
log
.
info
(
"{}环境{}Deployment不存在,删除Ingress"
,
namespace
,
serviceName
);
deleteIngress
(
namespace
,
serviceName
);
}
}
}
}
}
}
src/main/java/cn/qg/holmes/utils/YamlUtils.java
0 → 100644
View file @
8db756dd
package
cn
.
qg
.
holmes
.
utils
;
import
org.yaml.snakeyaml.Yaml
;
import
java.util.Map
;
public
class
YamlUtils
{
public
static
String
JsonToYamlStr
(
String
jsonStr
){
Yaml
yaml
=
new
Yaml
();
// 将JSON字符串转化为map
Map
<
String
,
Object
>
map
=
yaml
.
load
(
jsonStr
);
//转换成 YAML 字符串
String
yamlStr
=
yaml
.
dumpAsMap
(
map
);
return
yamlStr
;
}
}
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