首页 > 其他分享 >云原生实战K8s+Docker+DevOps+Jenkins

云原生实战K8s+Docker+DevOps+Jenkins

时间:2022-10-21 14:45:38浏览次数:88  
标签:ruoyi nacos DevOps registry 镜像 Jenkins Docker com docker

云原生实战K8s+Docker+DevOps+Jenkins

应用部署实战

ruo-yi-cloud

1、项目
https://gitee.com/y_project/RuoYi-Cloud

2、架构
在这里插入图片描述

下载项目

本地环境nacos启动

单机模式mysql启动nacos,nacos conf/application.properties配置文件添加如下配置,并运行目录下的sql文件

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTime=3000&autoReconnect=true
db.user.0=root
db.password.0=123456
 
  • 1
  • 2
  • 3
  • 4
  • 5

导入ruoyi数据库

生成了一个ry-config数据

更改nacos配置,使其连接到新创建的数据库

db.url.0=jdbc:mysql://127.0.0.1:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTime=3000&autoReconnect=true

再创建ry-cloud数据库导入数据表
在这里插入图片描述

启动前段项目

cd ruoyi-ui/
npm install --registry=https://registry.npm.taobao.org
npm run dev
 
  • 1
  • 2
  • 3

ruo-yi-cloud上云

1、迁移数据库
三个表

2、nacos上云

将nacos部署为有状态应用,这样才能有固定的域名访问,将来服务奔溃后重新拉起分配的IP改变但是域名没有改变,这就是有状态应用和无状态应用的区别

创建有状态服务
在这里插入图片描述
在这里插入图片描述
先不挂载外部配置文件,分析nacos的集群配置

服务创建完毕,开两台副本发现命名规则
在这里插入图片描述
ping分配的服务地址DNS,返回真实ping地址,发现命名规则

 ping mall-naos.mall
 64 bytes from mall-naos-v1-0.mall-naos.mall.svc.cluster.local (192.168.169.158): icmp_seq=2 ttl=64 time=0.029 ms
 
  • 1
  • 2

那么这两台pod的地址久分别为,为集群分配的固定域名访问

mall-naos-v1-0.mall-naos.mall.svc.cluster.local
mall-naos-v1-1.mall-naos.mall.svc.cluster.local
 
  • 1
  • 2

进入容器查看配置文件都在/home/nacos/conf

两个核心配置文件 application.properties cluster.conf集群配置文件挂载,配置文件子路径挂载,不要被容器内的这两个配置文件覆盖


重新创建nacos有状态应用

在这里插入图片描述

将两个配置文件都以特定的建和路径挂载,以免被覆盖
注意修改数据库地址为集群内的mysql

在这里插入图片描述

Java微服务上云

云上环境Dockerfile配置

FROM openjdk:8-jdk
LABEL maintainer=zhuazhu

#docker run -e PARAMS="--server.port 9090"
ENV PARAMS="--server.port=8080 --spring.profiles.active=prod --spring.cloud.nacos.discovery.server-addr=his-nacos.his:8848 --spring.cloud.nacos.config.server-addr=his-nacos.his:8848 --spring.cloud.nacos.config.namespace=prod --spring.cloud.nacos.config.file-extension=yml"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

COPY target/*.jar /app.jar
EXPOSE 8080

#
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

规则:
1、容器默认以8080端口启动
2、时间为CST
3、环境变量 PARAMS 可以动态指定配置文件中任意的值(指定了配置文件 应用名-prod.yml)
4、nacos集群内地址为 his-nacos.his:8848
5、微服务默认启动加载 nacos中 服务名-激活的环境.yml 文件,所以线上的配置可以全部写在nacos中。

准备好nacos的命名空间prod并将dev空间的配置文件克隆至prod空间

微服务上云流程分析

在这里插入图片描述

将各个微服务模块打包
在这里插入图片描述

整体上传至服务器

镜像推送

挨个执行镜像构建打包

cd ruoyi-auth/
docker build -t ruoyi-auth:v1 -f dockerfile .
 
  • 1
  • 2

打包完成后再阿里云的容器镜像服务中个人实例创建一个命名空间仓库

# 改成自己登录阿里云的账号,登录阿里云镜像仓库
docker login [email protected] registry.cn-hangzhou.aliyuncs.com

#把本地镜像,改名,成符合阿里云名字规范的镜像。
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/镜像名:[镜像版本号]
# 试例
# docker tag 461955fe1e57 registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-visual-monitor:v2

docker push registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/镜像名:[镜像版本号]
# 试例
# docker push registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-visual-monitor:v1
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
docker tag 9e5e5f4a8b88 registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-visual-monitor:v2
docker tag ece0d4dad3e0 registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-system:v2
docker tag 04aeddb539ca registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-job:v2
docker tag 8ceee5721625 registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-gateway:v2
docker tag ca68bd4945fd registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-file:v2
docker tag a425688539cc registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-auth:v2


docker push registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-visual-monitor:v2
docker push registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-system:v2
docker push registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-job:v2
docker push registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-gateway:v2
docker push registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-file:v2
docker push registry.cn-hangzhou.aliyuncs.com/zhu_ruoyi/ruoyi-auth:v2
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

服务创建

创建无状态服务
在这里插入图片描述
同步主机时区

启动后查看服务启动日志,有报错

NacosException: Nacos cluster is running with 1.X mode
 
  • 1

错误为当前是nacos的1.x集群模式,需要改成2模式

将nacos改为单节点模式不以集群运行,修改启动配置添加启动时环境变量

在这里插入图片描述

报错,数据库连接错误,排查数据库忽略大小写

gateway报错,9848,因为本地文件配置了sentinel,所以更改配置文件,将这段放置线上,用线上覆盖本地

因为nacos做流量保护的配置没改到,放到线上就可覆盖

在这里插入图片描述

前段上云&测试

更改根目录下vue.config.js中网关地址为已上线的gateway地址

在这里插入图片描述

npm run build:prod
 
  • 1

打包完成生产dist文件,前段所有文件在其中,将其放入nginx静态目录即可

修改nginx中负载均衡的网关地址
localhost只处理本机请求改为_任意请求
在这里插入图片描述

打包上传

创建无状态服务,TCP80,外网访问NodePort

nacos的存活探针

重启服务器时,mysql后于nacos启动,导致nacos启动失败,微服务注册不了,启动失败

启动20秒后检查设置的请求,超时时间3s
在这里插入图片描述

DevOps

DevOps基础

1、DevOps简介
DevOps 是一系列做法和工具,可以使 IT 和软件开发团队之间的流程实现自动化。其中,随着敏捷软件开发日趋流行,持续集成 (CI) 和持续交付 (CD) 已经成为该领域一个理想的解决方案。在 CI/CD 工作流中,每次集成都通过自动化构建来验证,包括编码、发布和测试,从而帮助开发者提前发现集成错误,团队也可以快速、安全、可靠地将内部软件交付到生产环境。
在这里插入图片描述

尚医通上云

1、项目架构

在这里插入图片描述

yygh-parent
|---common                                  //通用模块
|---hospital-manage                      //医院后台				[9999]   
|---model										//数据模型
|---server-gateway						//网关    				[80]
|---service									//微服务层
|-------service-cmn						//公共服务				[8202]
|-------service-hosp						//医院数据服务		[8201]
|-------service-order						//预约下单服务		[8206]
|-------service-oss						//对象存储服务		[8205]
|-------service-sms						//短信服务				[8204]
|-------service-statistics				//统计服务				[8208]
|-------service-task						//定时服务				[8207]
|-------service-user						//会员服务				[8203]


====================================================================

yygh-admin									//医院管理后台		[9528]
yygh-site										//挂号平台				[3000]
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2、中间件

中间件集群内地址外部访问地址
Nacos his-nacos.his .
  .  
  .  
  .  
  .  
  .  
  .  

在这里插入图片描述

中间件部署

1、sentinel
有状态服务,镜像地址
leifengyang/sentinel:1.8.2

2、mongeodb
应用负载-应用-部署新应用-来自应用模版
从之前设置的bitnami仓库中拉取镜像,只关闭账号密码访问,其他不变

3、mysql
数据库数据初始化,导入数据

生产环境配置抽离

将本地配置文件复制一份至nacos的prod空间,为所有应用修改好配置

创建DevOps工程

创建DevOps工程,而后创建流水线,只输入名称创建完成,而后编辑流水线,生成一个流水线模版,不做改动保存此模版,再以后在此模版基础上做改动

可视化Pipeline

编辑流水线

1、拉取代码

maven代理,git 拉取,ls -al
在这里插入图片描述

2、项目编译

设置集群拉取时的maven镜像仓库

admin登录kubesphere,集群管理-配置中心-配置-ksdevops-agent-修改配置-添加mirror标签

编辑流水线,添加步骤,maven容器
shell mvn clean package -Dmaven.test.skip=true
在这里插入图片描述

3、构建镜像

docker build -t hospital-manage:latest -f hospital-manage/Dockerfile ./hospital-manage/
在这里插入图片描述
测试单个打包成功

并发构建

此时编辑dockerfile更快捷

4、推送镜像

嵌套步骤中添加凭证,将凭证中的账号密码输出到环境变量中
在这里插入图片描述

stage('推送镜像') {
   steps {
     container('maven') {
       //加载凭证中的爱里云镜像仓库账号密码
       withCredentials([usernamePassword(credentialsId : 'aliyun-docker-registry' ,usernameVariable : 'DOCKER_USER_VAR' ,passwordVariable : 'DOCKER_PWD_VAR' ,)]) {
         sh 'echo "$DOCKER_PWD_VAR" | docker login $REGISTRY -u "$DOCKER_USER_VAR" --password-stdin'
         sh 'docker tag hospital-manage:latest $REGISTRY/$DOCKERHUB_NAMESPACE/hospital-manage:SNAPSHOT-$BUILD_NUMBER'  
         sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/hospital-manage:SNAPSHOT-$BUILD_NUMBER'
       }
     }

   }
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

5、部署到dev环境

可以添加审核步骤,@项目中的其他人来确认审核,这里不做审核

根据配置文件yml来部署镜像

  • 给每一个微服务准备一个 deploy.yaml(k8s的部署配置文件)
  • 执行以下步骤
    在这里插入图片描述
  • 传入 deploy.yaml 的位置就能部署
    ○ kubectl apply -f xxxx

在k8s集群中,默认在非master节点中是无法执行apply配置文件部署的,需要获取到授权信息
在这里插入图片描述

在这里插入图片描述
由于每一个镜像都得登录阿里云镜像下载镜像,设置凭证名为aliyun-docker-hub,所以提前创建好此凭证
在这里插入图片描述
项目空间下-配置中-密钥-创建密钥

在这里插入图片描述

在这里插入图片描述

6、系统邮件功能

admin账号-平台设置-通知管理-邮件

end

 

标签:ruoyi,nacos,DevOps,registry,镜像,Jenkins,Docker,com,docker
From: https://www.cnblogs.com/java9995/p/16813427.html

相关文章

  • 大厂进阶篇Docker与微服务实战-技术点从入门到高级全面覆盖
     说明随便创建个SpringBoot项目,写个Controller方法,然后用maven配置打包项目成xx.jar,调用接口如下面图片,当做案例进行测试。二、高级篇(大厂进阶)3.Docker微服务实......
  • centos 7.6 docker nginx
    一、安装docker二、创建Dockerfile#创建文件夹mkdircentos_nginxcdcentos_nginxvimDockerfile#指定使用那个基础镜像[email protected]......
  • docker安装postgres并启用postgis扩展
    镜像查看所有镜像dockerimages可以直接拉取postgis镜像dockerpullpostgis也可以在已有镜像上安装postgres,再启用扩展;dockerpullpostgres容器查看启动的容器......
  • Docker 总体架构图解
    Docker的总体架构Docker是一个C/S模式的架构,后端是一个松耦合架构,模块各司其职。下图是它的总体架构图:1、用户使用DockerClient与DockerDaemon建立通信,并发......
  • docker 命令
    启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestartdocker查看docker状态:systemctlstatusdocker刷新dock......
  • CentOS 7上安装 Jenkins 2.346 -- yum 方式
    CentOS7上安装Jenkins--yum方式https://mirrors.jenkins.io/war/开源Devops工具Jenkins在官方博客宣布,从6月28日发布的Jenkins2.357和将于9月发布的......
  • docker快速使用
    前提默认已经安装好docker1、先配置daemon.json文件,当docker安装好后,需要自己手动创建该文件,目录在/etc/docker下,创建好之后,输入:{"registry-mirrors":["https://zfzbet6......
  • 全网最牛k8s(Kubernetes)+docker+DevOps+linux+微服务容器
     云原生Java架构实战K8s+Docker+KubeSphere+DevOps(中)KubeSphere平台安装简介Kubernetes上安装KubeSphere安装步骤选择4核8G(master)、8核16G(node1)、8核16G(nod......
  • Centos7 安装docker
    1、安装命令如下:$curl-fsSLhttps://get.docker.com|bash-sdockermirrorAliyun 2、设置仓库$sudoyuminstall-yyum-utils\device-mapper-persistent-data\lvm2......
  • 当通过docker node ls查询集群节点状态,一个节点状态是unreachable,这究竟代表什么意思?
    当通过dockernodels命令查询集群中各个节点的状态时: 在"MANAGERSTATUS"列出现“Unreachable”,这个代表的是什么意思?[root@nccztsjb-node-05~]#dockernodelsID......