当前位置: 首页 > news >正文

网站项目部署在k8s案例与Jenkins自动化发布项目(CI/CD)

在K8s平台部署项目流程

在K8s平台部署Java网站项目

制作镜像流程

第一步:制作镜像

使用镜像仓库(私有仓库、公共仓库):
1、配置可信任(如果仓库是HTTPS访问不用配置)
# vi /etc/docker/daemon.json
{
"insecure-registries": ["192.168.31.90"]
}
2、 将镜像仓库认证凭据保存在K8s Secret中
kubectl create secret docker-registry registry-auth \
--docker-username=admin \
--docker-password=Harbor12345 \
--docker-server=192.168.31.90
3、在yaml中使用这个认证凭据
imagePullSecrets:
- name: registry-auth

第二步:使用控制器部署镜像

模板

Pod主要配置启动容器属性:

• 变量
• 资源配额
• 健康检查
• 卷挂载点
案例:

第三步:部署数据库

1、使用deployment部署一个mysql实例, service暴露访
kubectl apply -f mysql.yaml
kubectl get pod,svc
2、测试mysql实例是否可以访问
kubectl run mysql-client --rm -it --image=mysql:5.7.30 – bash
/# mysql -h10.106.166.31 -uroot -p'123456' #10.106.166.31为mysql ClusterIP
mysql> show databases;
3、导入项目sql文件
kubectl cp db/tables_ly_tomcat.sql mysql-client:/ # 将sql文件拷贝到mysql客户端容器中
/# mysql -h10.106.166.31 -uroot -p'123456'
mysql> create database test;
mysql> use test;
mysql> source /tables_ly_tomcat.sql;
mysql> show tables; # 只有一个user表

第四步:对外暴露应用

第五步:增加公网负载均衡器


Jenkins自动化发布项目(CI/CD)

发布流程设计

使用 Gitlab 作为代码仓库 & 使用 Harbor 作为镜像仓库

Harbor 镜像仓库

项目地址: https://github.com/goharbor/harbor

部署步骤:

# tar zxvf harbor-offline-installer-v2.0.0.tgz
# cd harbor
# cp harbor.yml.tmpl harbor.yml# vi harbor.ymlhostname: 192.168.31.90
https: # 先注释https相关配置
harbor_admin_password: Harbor12345# ./prepare
# ./install.sh
# docker-compose ps

Gitlab代码仓库

Jenkins发布系统部署

Jenkins是一款开源 CI&CD 系统,用于自动化各种任务,包括构建、测试和部署。
Jenkins官方提供了镜像: Docker使用Deployment来部署这个镜像,会暴露两个端口: 8080 Web访问端口, 50000 Slave通信端口,容器启动后Jenkins数据存储在/var/jenkins_home目录,所以需要将该目录使用PV持久化存储。

先安装后面所需的插件:

Jenkins下载插件默认服务器在国外,会比较慢,建议修改国内源:
# 进入到nfs共享目录
cd /ifs/kubernetes/ops-jenkins-pvc-xxx
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && \
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

# 重建Jenkins

http://NodeIP:30008/restart
管理Jenkins->系统配置-->管理插件-->分别搜索Git Parameter/Git/Pipeline/kubernetes/Config File Provider,选中点击安装。
• Git:拉取代码
• Git Parameter: Git参数化构建
• Pipeline:流水线
• kubernetes:连接Kubernetes动态创建Slave代理
• Config File Provider: 存储配置文件
• Extended Choice Parameter:扩展选择框参数,支持多选

Jenkins主从架构

当触发Jenkins任务时, Jenkins会调用Kubernetes API创建Slave Pod, Pod启动后会连接Jenkins,接受任务并处理。

Kubernetes插件配置

Kubernetes插件: 用于Jenkins在Kubernetes集群中运行动态代理
插件介绍: https://github.com/jenkinsci/kubernetes-plugin
配置插件: 管理Jenkins->管理Nodes和云->管理云->添加Kubernetes

自定义Jenkins-Slave镜像

构建Slave镜像Dockerfile(结合项目环境)

FROM centos:7
LABEL maintainer lizhenliang
RUN yum install -y java-1.8.0-openjdk maven git libtool-ltdl-devel && \
yum clean all && \
rm -rf /var/cache/yum/* && \
mkdir -p /usr/share/jenkins
COPY slave.jar /usr/share/jenkins/slave.jar
COPY jenkins-slave /usr/bin/jenkins-slave
COPY settings.xml /etc/maven/settings.xml
RUN chmod +x /usr/bin/jenkins-slave
COPY kubectl /usr/bin/
ENTRYPOINT ["jenkins-slave"]

测试主从架构是否正常

Jenkins Pipeline(流水线)

Jenkins Pipeline是一套运行工作流框架,将原本独立运行单个或者多个节点的任务链接起来,实现单个任务难以完成的复杂流程编排和可视化。
• Jenkins Pipeline是一套插件,支持在Jenkins中实现持续集成和持续交付;
• Pipeline通过特定语法对简单到复杂的传输管道进行建模;
• Jenkins Pipeline的定义被写入一个文本文件,称为Jenkinsfile。

Jenkins Pipeline 语法

Stages 是 Pipeline 中最主要的组成部分, Jenkins 将会按照 Stages 中描述的顺序从上往下的执行。
• Stage:阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,
比如: Build、 Test、 Deploy
• Steps:步骤, Steps 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,由各类 Jenkins 插件提供,比如命令: sh ‘mvn',就相当于我们平时 shell 终端中执行 mvn命令一样

Jenkins 流水线自动发布项目

思路-项目部署流程

在实际工作中,会维护多个项目,如果每个服务都创建一个item,势必给运维维护成本增加很大, 因此需要编写一个通用Pipeline脚本,将这些项目部署差异化部分使用Jenkins参数化,人工交互确认发布的分支、副本数、命名空间等。

部署到K8s平台-思路

将部署项目yaml文件提交到项目代码仓库里,在Slave容器里使用kubectl apply部署。
由于kubectl使用kubeconfig配置文件连接k8s集群,还需要通过Config File Provider插件将kubeconfig配置文件存储到Jenkins,然后再挂载到Slave容器中, 这样就有权限部署了(kubectl apply deploy.yaml --kubeconfig=config)
注:为提高安全性, kubeconfig文件应分配权限
除了上述方式,还可以使用Kubernetes Continuous Deploy插件, 将资源配置(YAML) 部署到Kubernetes,这种不
是很灵活性

流水线脚本与源代码一起版本管理

Jenkinsfile文件建议与源代码一起版本管理,实现流水线即代码(Pipeline as Code)。
这样做的好处:
• 自动为所有分支创建流水线脚本
• 方便流水线代码复查、追踪、迭代
• 可被项目成员查看和编辑

Jenkins从Git仓库中读取Jenkinsfile

k8s容器云平台架构

相关文章:

网站项目部署在k8s案例与Jenkins自动化发布项目(CI/CD)

在K8s平台部署项目流程 在K8s平台部署Java网站项目 制作镜像流程 第一步:制作镜像 使用镜像仓库(私有仓库、公共仓库): 1、配置可信任(如果仓库是HTTPS访问不用配置) # vi /etc/docker/daemon.json { "…...

网络原理 (1)

网络原理 文章目录1. 前言: 2. 应用层2.1 XML2.2 json2.3 protobuffer3. 传输层3.1 UDP3.1 TCP4. TCP 内部的工作机制 (重点)1. 确认应答 2.超时重传3. 连接管理3.1 建立联系 :三次握手3.2 断开连接 : 四次挥手4. 滑动窗口5. 流量…...

LeetCode-1139. 最大的以 1 为边界的正方形【前缀和,矩阵】

LeetCode-1139. 最大的以 1 为边界的正方形【前缀和,矩阵】题目描述:解题思路一:前缀和。前缀和来记录边长。解题思路二:0解题思路三:0题目描述: 给你一个由若干 0 和 1 组成的二维网格 grid,请…...

windows10/11,傻瓜式安装pytorch(gpu),在虚拟环境anaconda

安装anaconda地址 :Anaconda | The Worlds Most Popular Data Science Platform安装选项全默认点击next就行。查看支持cuda版本cmd命令行输入nvidia-smi。下图右上角显示11.6为支持的cuda版本。要是显示没有nvidia-smi命令。得安装nvidia驱动,一般情况都…...

Revit导出PDF格式图纸流程及“批量导出图纸”

一、Revit导出PDF格式图纸流程 1、点击左上方“应用程序菜单”即“R”图标,进择“打印”选项。 2、在弹出的对话框中,需要设置图纸“打印范围”,选择“所选的视图/图纸选项”,点击“选择”,按钮,选择我们需…...

【自学Linux】 Linux文件目录结构

Linux文件目录结构 Linux文件目录结构教程 在 Linux 中,有一个很经典的说法,叫做一切皆文件,因此,我们在系统学习 Linux 之前,首先要了解 Linux 的文件目录结构。Linux 主要的目录有三大类,即根目录(/)&a…...

如何让APP在Google Play中成为特色

Google Play覆盖了 190 多个地区,数十亿的用户,所以开发者都会希望APP在应用商店中获得推荐位。 Google Play 上的精选热门应用类型:热门游戏或应用,畅销应用,安装量增长的应用,产生最多收入的应用。 那么…...

【C++】cin的处理过程

使用cin进行输入时,程序将输入视为一系列的字节,其中每个字节都被解释为字符编码。不管目标数据 类型是什么,输入一开始都是字符数据——文本数据。然后,cin对象负责将文本转换为其他类型。 为说明这是如何完成的,来看…...

读取Sentinel和Landsat 压缩包数据,直接进行波段重组、影像裁剪或者匀色镶嵌处理

波段重组在软件中查找:菜单栏-》影像基本处理-》波段处理-》波段重组,弹出如下对话框:根据对话框中的提示,输入需要处理的数据。注意:1、输入数据添加之后,需要点击其中任意一条数据,获取数据波…...

Yakit Web Fuzzer 终极能力强化:热加载 Fuzz

Background 在 HTB:BountyHunter 中,我们发现 Web Fuzzer 在使用中可以 “更强”,我们需要编写 Yak 脚本的事情,如果可以经过某些 Web Fuzzer 的优化,可以达到同样的效果。 在一个标签中,我们实现{{base6…...

Qt新手入门指南 - 如何创建模型/视图(三)

每个UI开发人员都应该了解ModelView编程,本教程的目标是为大家提供一个简单易懂的介绍。Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今&#xff…...

【Spring】手动实现简易AOP和IOC

前言 XML:通过Dom4j对XML进行解析和验证。 IOC:通过获取要创建对象的Class类型、构造函数后,通过反射来实现。 AOP:通过使用JDK动态代理和Cglib动态代理实现。 一、解析XML 1.1、解析bean标签 /*** 解析bean标签* param xmlBean…...

EasyExcel的使用

这里写目录标题先导入依赖最简单的写最简单的读項目开发中的一些操作xml一定要默認放先导入依赖 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.7</version><…...

基础篇(-1)-java特点、JDK、JRE、JVM区别、字节码编译、跨平台、程序运行

文章目录1.Java的特点有哪些&#xff1f;2.JDK和JRE和JVM的区别3.Java为什么采用字节码编译&#xff1f;4.什么是跨平台&#xff1f;5.Java程序从源代码到运行需要三步&#xff1f;1.Java的特点有哪些&#xff1f; Java是一种编程语言&#xff0c;被特意设计用于互联网的分布式…...

【网络编程】Java快速上手InetAddress类

概念 Java具有较好的网络编程模型/库&#xff0c;其中非常重要的一个API便是InetAddress。在Java.net 网络编程中中有许多类都使用到了InetAddress 这个类代表一个互联网协议&#xff08;IP&#xff09;地址。 IP地址是一个32&#xff08;IPV4&#xff09;位或128&#xff08;…...

小小bat-day1-自动文件上传

前言&#xff1a;日常服务器备份文件或者生产设备等数据文件都统一保存至文件服务器&#xff0c;进行日志分析或者将生产文件CSV、图片等转存至数仓进行数据分析&#xff0c;尤其生产的部分数据是保存在个人电脑的PC端&#xff0c;数据杂&#xff0c;获取困难&#xff0c;手动整…...

2023年美赛D题公布

问题D:联合国可持续发展目标的优先次序背景联合国制定了17项可持续发展目标(SDGs)。实现这些目标最终会改善世界各地许多人的生活。这些目标并不是相互独立的。所以&#xff0c;在某些目标上的积极收获通常是有影响的(积极的或消极的&#xff0c;有时两者都有)。这种相互联系使…...

Gartner 再度预测2023低代码趋势,真的会赚钱吗?

2023年&#xff0c;从业者对低代码的发展充满了想象&#xff0c;人们认为&#xff0c;未来低代码的商业价值不可估量。 此话并非空穴来风。据Gartner的最新报告显示&#xff0c;到2023年&#xff0c;超过70%的企业将采用低代码作为他们发展战略的关键目标之一&#xff1b;到202…...

Zebra ZT410 ZT411 导入中文字体

1.设置--发送到打印机 2.字体--添加--下载 --windows 字体库下载到zebra 打印机 3.字体--工具--调用 ZEBRA驱动包中驱动。 4.老版打印机导入方式 Zebra ZPL条形码打印机上如何下载和使用TrueType或External字体-敏用数码(上海北京济南洛阳)|专注于条码数据处理 (chongshang.co…...

nextTick 的使用和原理(面试题)

答题思路&#xff1a; nextTick 是做什么的&#xff1f;为什么需要它&#xff1f;开发时什么时候使用&#xff1f;介绍一下如何使用nextTick原理解读&#xff0c;结合异步更新和nextTick生效方式 1. nextTick是做什么的&#xff1f; nextTick是等待下一次DOM更新刷新的工具方法…...

编写程序让智能洗手液机检测手部靠近,自动出液,无需按压。

&#x1f9fc; 项目实战&#xff1a;基于红外测距的智能洗手液机控制系统一、实际应用场景描述 (Scenario)在机场、医院、办公楼等公共场所&#xff0c;传统的按压式洗手液机存在卫生隐患——每个人都需要接触同一个泵头&#xff0c;容易造成细菌交叉感染。目标&#xff1a;通过…...

ECharts Geo Regions 进阶:自定义地图省份边界与区域样式的实战技巧

1. 理解ECharts中的geo.regions属性 ECharts作为一款强大的数据可视化工具&#xff0c;其地图组件在展示地理信息数据时尤为出色。在实际项目中&#xff0c;我们经常需要对特定省份或区域进行个性化样式设置&#xff0c;这时候geo.regions属性就派上用场了。这个属性允许我们对…...

WorkBuddy杀疯了?一群AI专家帮我打工,我在微信里当赛博虾工头!

梦瑶 发自 凹非寺量子位 | 公众号 QbitAI到底是谁说&#xff0c;给老板打工自己就当不成老板的&#xff1f;又是谁说&#xff0c;龙虾不好用、还不听使唤的&#xff1f;反正这些事儿&#xff0c;现在跟我没啥关系了。毕竟现在的我&#xff0c;已经转头当起了「虾工头」&#xf…...

Redis未授权访问漏洞实战:从SSH公钥到反弹shell的5种利用方式详解

Redis未授权访问漏洞深度攻防&#xff1a;5种高阶利用与防御方案 Redis作为高性能键值数据库&#xff0c;其未授权访问漏洞长期位居企业安全风险Top 10。本文将突破常规教程框架&#xff0c;从攻击者视角剖析5种实战利用手法&#xff0c;同时提供企业级防御方案。不同于基础复现…...

消防给水系统控制:西门子 S7 - 200 与昆仑通态触摸屏的奇妙组合

消防给水系统控制&#xff0c;西门子S7-200&#xff0c;昆仑通态触摸屏YH25 1.采用西门子S7-200PLC&#xff0c;CPU226EM223数字量模块EM231模拟量模块。 2.昆仑通态MCGS触摸屏及软件&#xff0c;可自行转换新版MCGSPRO程序。 3.两水泵一用二备和二用一备可切换&#xff0c;故障…...

别再傻傻分不清了!用Simulink手把手带你搞懂导纳控制与阻抗控制的本质区别

导纳控制 vs 阻抗控制&#xff1a;从理论到Simulink实战的深度解析 在机器人控制领域&#xff0c;柔性交互是一个永恒的话题。想象一下&#xff0c;当机械臂需要完成精密装配任务时&#xff0c;既要有足够的刚性保证定位精度&#xff0c;又要在意外碰撞时表现出适当的柔顺性——…...

Verilog进阶实战:独热码状态机设计序列检测器的核心技巧

1. 独热码状态机的设计哲学 第一次接触独热码(One-Hot)编码时&#xff0c;我盯着那串只有一个1的状态编码看了半天——这不就是硬件版的"单选题"吗&#xff1f;每个状态都有自己的专属VIP通道&#xff0c;这种设计理念在中小规模状态机中简直是降维打击。记得去年做电…...

还在纸上谈Agent?来搓一只你的「腾讯小龙虾」

大模型卷完参数&#xff0c;开始卷落地。当所有人还在谈论AI Agent如何颠覆未来工作方式时&#xff0c;一部分开发者已经让它为自己“打工”了。从写一封邮件&#xff0c;到整理一份报告&#xff0c;再到串联多个系统完成业务动作&#xff0c;AI 正在完成一次关键的身份跃迁&am…...

如何5步完成Unity游戏模组加载:MelonLoader终极指南

如何5步完成Unity游戏模组加载&#xff1a;MelonLoader终极指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 想要为心爱的Un…...

纯粹直播:革新直播观看体验的一站式跨平台解决方案

纯粹直播&#xff1a;革新直播观看体验的一站式跨平台解决方案 【免费下载链接】pure_live 纯粹直播:哔哩哔哩/虎牙/斗鱼/快手/抖音/网易cc/M38自定义源应有尽有。 项目地址: https://gitcode.com/gh_mirrors/pur/pure_live 您是否曾为在多个直播平台间频繁切换而感到困…...