Saul's blog Saul's blog
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)

Saul.J.Wu

立身之本,不在高低。
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)
  • 安全框架(认证、授权)

  • 分布式事务

  • 消息队列

  • K8S

    • K8S搭建
    • K8s加入集群报错
    • K8s新版本搭建
    • K8s入门
    • K8S核心概念
    • kubesphere
    • kubesphere 定制化安装及建立多租户系统
    • PV和PVC
    • 创建WordPress发布到K8s
    • K8S之DevOps
    • K8S之DevOps最佳实践
      • k8s部署有状态服务
      • k8s部署springboot
        • dockerfile
      • test
  • 分布式
  • K8S
SaulJWu
2021-08-09

K8S之DevOps最佳实践

# k8s部署有状态服务

在生产环境中:

  • 有状态服务抽取配置为ConfigMap

    • 抽取配置后,方便快速部署,拓展,拷贝
  • 有状态服务必须使用pvc持久化数据

    • 就算服务挂了,数据也不会丢失,容灾服务也可以自动把数据读取
  • 服务集群内访问使用NDS提供的稳定域名

    • 这样就算不知道ip地址也可以自动映射

image-20210809213332797

# k8s部署springboot

1、为每一个项目准备iyigeDockerFfile;Docker按照每个Dockerfile将项目只做成镜像

2、为每一个项目生成k8s的部署描述文件

3、Jenkins编写好Jenkinsile

image-20210809220829507

# 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

对跟目录运行maven命令:

# 清理,安装到本地仓库,跳过单元测试
clear install -Dmaven.test.skip=true
1
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

测试访问:

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
帮我改善此页面 (opens new window)
上次更新: 2021/11/24, 01:31:20
K8S之DevOps

← K8S之DevOps

最近更新
01
zabbix学习笔记二
02-28
02
zabbix学习笔记一
02-10
03
Linux访问不了github
12-08
更多文章>
Theme by Vdoing | Copyright © 2020-2022 Saul.J.Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式