K8S之DevOps最佳实践
# k8s部署有状态服务
在生产环境中:
有状态服务抽取配置为ConfigMap
- 抽取配置后,方便快速部署,拓展,拷贝
有状态服务必须使用pvc持久化数据
- 就算服务挂了,数据也不会丢失,容灾服务也可以自动把数据读取
服务集群内访问使用NDS提供的稳定域名
- 这样就算不知道ip地址也可以自动映射
# k8s部署springboot
1、为每一个项目准备iyigeDockerFfile;Docker按照每个Dockerfile将项目只做成镜像
2、为每一个项目生成k8s的部署描述文件
3、Jenkins编写好Jenkinsile
# dockerfile
# 这个服务依赖的基础镜像java8
FROM java:8
# 这个微服务的暴露端口,这个是对内端口,docker外的端口需要自己指定
EXPOSE 8080
# 挂载目录
VOLUME /tmp
# 最终会把renrenfast.jar复制到跟目录,并且重命名为app.jar
ADD renren-fast.jar /app.jar
# 创建一个app.jar,如果已经存在jar,但是会修改时间,如果不存在,就会创建(这行命令可加可不加)
RUN bash -c 'touch /app.jar'
# 容器一启动默认运行的命令
ENTRYPOINT ["java","-jar","/app.jar","--spring.profile.active=prod"]
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
对跟目录
运行maven命令:
# 清理,安装到本地仓库,跳过单元测试
clear install -Dmaven.test.skip=true
1
2
2
对每个微服务运行:
clear package -Dmaven.test.skip=true
1
构建本地镜像(注意后面还有一个.
,代表在当前目录运行)
docker build -f Dockerfile -f docker docker.io/sauljwu/admin:v1.0 .
1
有了这个镜像就可以拿它启动一个容器了
dcoker run -d --name hello-admin -p 8080:8080 sauljwu/admin:v1.0
1
进入容器:
docker exec -it <dockerid> /bin/bash
# 查看目录
ls
1
2
3
2
3
测试访问:
curl 127.0.0.1:8080z
1
# test
pipeline {
agent {
node {
label 'maven'
}
}
stages {
stage('构建common包') {
steps {
git(url: 'https://gitee.com/SaulJWu/scenic-common.git', credentialsId: 'gitee-id', branch: 'test', changelog: true, poll: false)
sh 'echo 正在构建common包...'
container('maven') {
script {
sh 'mvn -Dmaven.test.skip=true -gs `pwd`/mvn-settings.xml clean install'
}
}
}
}
stage('拉取代码') {
steps {
git(url: 'https://gitee.com/SaulJWu/scenic-admin.git', credentialsId: 'gitee-id', branch: 'test', changelog: true, poll: false)
sh 'echo 正在构建 $APP_NAME 版本号:$TAG_NAME'
}
}
stage('代码分析') {
agent none
steps {
container('maven') {
withCredentials([string(credentialsId : 'sonar-token' ,variable : 'SONAR_TOKEN' ,)]) {
withSonarQubeEnv('sonar') {
sh "mvn sonar:sonar -gs `pwd`/mvn-settings.xml -Dsonar.login=$SONAR_TOKEN"
}
}
timeout(time: 1, unit: 'HOURS') {
waitForQualityGate true
}
}
}
}
}
environment {
DOCKER_CREDENTIAL_ID = 'docker-id'
GITEE_CREDENTIAL_ID = 'gitee-id'
KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
REGISTRY = 'docker.io'
DOCKERHUB_NAMESPACE = 'jtyczc'
GITEE_ACCOUNT = 'SaulJWu'
APP_NAME = 'scenic-admin'
SONAR_CREDENTIAL_ID = 'sonar-token'
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
帮我改善此页面 (opens new window)
上次更新: 2021/11/24, 01:31:20