准备工作:

一个简单springboot工程,只有1个接口,返回“helloworld”,如下:

访问接口:http://127.0.0.1:8080/hello,返回 Hello World! GIT仓库地址:HelloWord: HelloWorld简单用例

1、配置maven镜像加速

由于流水线自带的maven是默认下载依赖链接,会导致maven打包时间几十分钟,若K8S资源不足,会导致整个集群瘫痪

1.1、定位到ks-devops-agent

进入:平台管理-集群管理-配置中心-配置,搜索定位到ks-devops-agent

1.2、修改配置

1.3、编辑“MavenSetting”

在mirrors标签中,添加阿里云镜像加速

alimaven

aliyun maven

http://maven.aliyun.com/nexus/content/groups/public/

central

如下:

至此,maven配置完成

2、创建DevOps工程

进入:平台管理-访问控制-DevOps工程点击创建按钮

我创建了一个shuizhu-persong工程

3、创建流水线

进入步骤2中创建的DevOps工程进入后,点击创建按钮,创建流水线

这里可以填写代码仓库地址,也可以后面在流水线的具体步骤中进行配置,本文在后面步骤中进行配置

保留构建的天数:流水线构建的制品需要保留多久保留构建的最大个数:流水线历史记录展示的个数,如设置5,列表只展示近5条其他配置默认即可,点击确定创建完成

4、编辑流水线

进入步骤3中创建的流水线,如下

注意:

上图中,如果没有编辑流水线功能,好像是kubesphere本身的bug,解决方法:

创建新的用户并授权,加入到上面创建的devops中,并授予管理权限删除上面的流水线退出当前用户,登陆新用户重新创建流水线即可

4.1、编辑流水线

kubesphere平台提供了流水线模板,运维这不需要关注jenkins文件如果编写,这里我选择自定义流水线

4.2、配置代理

由于我的流水线的“产品”是Springboot程序,这里我的代理label选择maven

4.3、添加【GIT代码拉取】流水线阶段

4.3.1、初始化流水线阶段信息

名称:任意填写代理:选择none方式

4.3.2、指定容器

所有的构建步骤建议在容器中进行,防止确认各种工具

4.3.3、添加Git代码拉取步骤

注意:以下的步骤都是在指定容器下,进行的嵌套步骤:

填写Git信息:

注意:如果仓库是私有的,需要新增凭证即可,如下

4.3.4、maven编译代码

添加嵌套步骤---shell

添加脚本内容如下

echo '项目结构如下:'

ls

echo 'mvn clean package -Dmaven.test.skip=true start ...'

mvn clean package -Dmaven.test.skip=true

echo 'mvn clean package -Dmaven.test.skip=true end ...'

echo 'maven编译后的项目结构如下:'

ls

echo 'target目录如下:'

ls target/

4.4、添加【镜像制作】流水线阶段

4.4.1、初始化流水线阶段信息

4.4.2、指定为maven容器

4.4.3、制作docker镜像

docker build -t hello-word:v1.0 .

4.5、镜像推送

4.5.1、初始化流水线阶段信息

4.5.2、指定为maven容器

4.5.3、添加私有harbor仓库

#指定私有harbor

mkdir /etc/docker

ls /etc/docker/

touch /etc/docker/daemon.json

echo '{ "live-restore": true,"insecure-registries":["111.230.19.178:80"] }' > /etc/docker/daemon.json

4.5.4、推送镜像

docker login 111.230.19.178 -u admin -p xxxx

echo '开始推送'

docker tag hello-word:v1.0 111.230.19.178/shuizhu/hello-word-2024:v1.0

docker push 111.230.19.178/shuizhu/hello-word-2024:v1.0

4.6、发布

4.6.1、初始化流水线

4.6.2、指定为maven容器

4.6.3、创建deploy文件

添加嵌入步骤选择shell,输入以下内容

touch hello-word.yaml

echo​​ '​​apiVersion: apps/v1

kind: Deployment

metadata:

labels:

app: hello-word-2024

name: hello-word-2024

namespace: shuizhu # 正常创建的项目空间名称,这里是我的项目

spec:

progressDeadlineSeconds: 600

replicas: 3

strategy:

type: RollingUpdate # Recreate:在创建新Pods之前,所有现有的Pods会被杀死 RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数

rollingUpdate:

maxSurge: 1 #maxSurge:1 表示滚动升级时会先启动1个pod

maxUnavailable: 0 #maxUnavailable:1 表示滚动升级时允许的最大Unavailable的pod个数,也可以填写比例,maxUnavailable=50%

selector:

matchLabels:

app: hello-word-2024

template:

metadata:

labels:

app: hello-word-2024

spec:

containers:

- env:

- name: CACHE_IGNORE

value: js|html

image: 111.230.19.178/shuizhu/hello-word-2024:v1.0 #需要部署的镜像名称及版本

#注释下面代码,取消健康探测

#readinessProbe:

# httpGet:

# path: /

# port: 8080

# timeoutSeconds: 10

# failureThreshold: 30

# periodSeconds: 5

imagePullPolicy: Always

name: hello-word-2024

ports:

- containerPort: 8080

protocol: TCP

resources:

limits:

cpu: 300m

memory: 600Mi

requests:

cpu: 100m

memory: 100Mi

terminationMessagePath: /dev/termination-log

terminationMessagePolicy: File

imagePullSecrets:

- name: shuizhu-harbor

dnsPolicy: ClusterFirst

restartPolicy: Always

terminationGracePeriodSeconds: 30

---

apiVersion: v1

kind: Service

metadata:

labels:

app: hello-word-2024-service

name: hello-word-2024-service

namespace: shuizhu # 正常创建的项目空间名称

spec:

ports:

- name: http

port: 8080

protocol: TCP

targetPort: 8080

selector:

app: hello-word-2024

sessionAffinity: None

type: NodePort

' >hello-word.yaml

4.6.4、kubectl发布

kubectl apply -f hello-word.yaml

5、运行流水线

运行流水线

运行成功

6、查看发布后的部署工程及service

查看pod数量

查看service

我的service对外暴露的端口为30171,可以通过K8S集群中,任意的节点IP+30171访问流水线创建的项目

7、访问流水线部署的工程

开头说了,springboot工程只有一个hello的接口,原访问的URL为:

http://127.0.0.1:8080/hello

K8S为我们暴露的端口为30171,因此,我们通过K8S任意节点IP访问即可,访问格式如下:

http://8.138.89.146:30171/hello

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。