基于k8s的CI/CD部署框架

49 篇文章 0 订阅
46 篇文章 2 订阅


使用阿里云主机ECS:
主机信息如下:
server1 ---- 47.108.54.185(公)10.0.0.2(私)---- harbor、Jenkins(容器实例)
server2 ---- 47.108.140.166(公)10.0.0.84(私) ---- gitlab
master1 ---- 47.108.28.42(公)10.0.0.5(私) ---- k8s集群主节点
node1 ---- 47.108.165.125(公)10.0.0.88(私)---- k8s集群worker
node2 ---- 47.109.47.202(公)10.0.0.91(私)---- k8s集群worker

下载Jenkins

拉取Jenkins镜像

在这里插入图片描述

运行Jenkins容器实例

在这里插入图片描述进入容器查看Jenkins初始化密码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Jenkins与k8s集群主节点免密认证

在这里插入图片描述
在这里插入图片描述

下载安装gitlab

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述更新gitlab配置文件
在这里插入图片描述查看gitlab状态,并查看初始化密码
在这里插入图片描述
在这里插入图片描述登录之后,修改语言
在这里插入图片描述修改初始化密码
在这里插入图片描述

Jenkins与gitlab做免密认证

在这里插入图片描述
在这里插入图片描述

gitlab节点与gitlab工具做免密

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建gitlab空白项目

在这里插入图片描述
在这里插入图片描述

gitlab节点拉取新建的项目

在这里插入图片描述
在这里插入图片描述

创建Jenkins自由风格项目

在这里插入图片描述

连接gitlab项目,并触发构建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建harbor公开项目

在这里插入图片描述

上传测试代码至gitlab

在这里插入图片描述上述代码编写为:
deploy—>base—>deploy.yaml文件内容为:

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: wm-project
  name: gocode
spec:
  replicas: 3
  selector:
    matchLabels:
      app: gocode
  template:
    metadata:
      labels:
        app: gocode
    spec:
      imagePullSecrets:
        - name: wm-secret
      containers:
        - name: gocode
          env:
            - name: ENV
              value: prod
          image: reg.westos.org/imagename
       #   resources:
       #     limits:
       #       memory: "128Mi"
       #       cpu: "500m"
          ports:
            - containerPort: 9000

deploy—>base—>kustomization.yaml文件内容为:

resources:
  - namespace.yaml
  # - configmap.yaml
  - deploy.yaml
  - svc.yaml

deploy—>base—>namespace.yaml文件内容为:

apiVersion: v1
kind: Namespace
metadata:
  name: wm-project

deploy—>base—>svc.yaml文件内容为:

apiVersion: v1
kind: Service
metadata:
  name: gocode
  namespace: wm-project
spec:
  type: NodePort
  selector:
    app: gocode
  ports:
    - port: 9000
      targetPort: 9000
      nodePort: 30001

deploy—>overlays—>prod—>kustomization.yaml文件内容为:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../../base

deploy—>overlays—>qa—>deploy-patch.yaml文件内容为:

- op: replace
  path: /spec/template/spec/containers/0/env/0/value
  value: qa

deploy—>overlays—>qa—>kustomization.yaml文件内容为:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../../base
patches:
  - path: deploy-patch.yaml
    target:
      kind: Deployment

src—>main.go文件内容为:

package main

import (
	"fmt"
	"net/http"
	"time"
)

//一个http请求  响应一个时间
func main() {
	http.HandleFunc("/time", func(rw http.ResponseWriter, r *http.Request) {
		timeStr := "现在是:" + time.Now().In(time.FixedZone("CST", 8*3600)).Format("2006-01-02 15:04:05")
		fmt.Println(timeStr)
		rw.Write([]byte(timeStr))
	})
	port := 9000
	fmt.Printf("listen %d server started!!!\r\n", port)
	err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil)
	if err != nil {
		fmt.Println(err)
	}
}

Dockerfile文件内容为:

# 构建编译文件
FROM golang:1.17 as builder
# 拷贝项目文件到镜像中
COPY . /app
# 设置命令工作目录
WORKDIR /app
# 执行命令编译项目文件
RUN go mod tidy && make build

# 构建运行时文件
FROM alpine:3.13
# 添加作者
LABEL author=wm
# 设置工作目录
WORKDIR /app
# 从上一阶段中拷贝可执行文件
COPY --from=builder /app/bin/app /app/bin/app
# 声明暴露的端口
EXPOSE 9000/tcp
# 调整动态链接地址
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
# 启动服务
ENTRYPOINT [ "/app/bin/app" ]

Makefile文件内容为:

GOROOT?=/usr/local/go
GOBIN?=go

moduleName:=$(shell head -n 1 go.mod | awk '{print $$2}')
GOMODCACHE:=$(shell $(GOBIN) env GOMODCACHE)

run:
	bin/app
build:
	$(GOBIN) build -o ./bin/app $(moduleName)/src

go.mod文件内容为:

module github.com/pingwazi0101/gocode

go 1.17

编写Jenkins构建任务,并测试触发构建

在这里插入图片描述
在这里插入图片描述镜像上传失败,
原因是还没有给k8s集群配置私有harbor仓库
在这里插入图片描述

k8s集群连接私有harbor仓库

主节点指向harbor仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

node1节点指向harbor仓库

在这里插入图片描述

node2节点指向harbor仓库

在这里插入图片描述

拷贝harbor认证证书至k8s集群节点

在这里插入图片描述

主节点登录仓库

在这里插入图片描述

Jenkins触发构建任务,上传镜像失败

仓库未认证成功
在这里插入图片描述kubesphere平台查看pod运行错误
在这里插入图片描述

集群主节点上创建secret

在这里插入图片描述下面一步不需要有,因为上面创建secret时已经明确指定了password。
在这里插入图片描述

测试成功,显示代码运行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值