1. 介绍

项目开发完成后,我们怎么样才能把服务直接发布到K8s呢?如果每次修改代码,都需要像K8s学习(四):运行应用 那样编写繁琐的配置文件,显然不合适。我们期望的是,通过一键按钮的方式,就可以把最新的代码发布到K8s上。

1.1 部署准备

软件名称 说明
Gitea 存放源代码,用来做持续集成(CI),因为Gitlab占用资源太多,用这个替代
Jenkins 用来做持续部署(CD)
Harbor 私有化镜像仓库
Kubernetes 用来运行我们的应用

发布流程,涉及持续集成(CI)、持续部署(CD)。至于具体概念可自查文档。

1.2 部署集成

为了方便部署上面服务,我在k8s_microsvc_cicd:https://github.com/52lu/k8s_microsvc_cicd 中,已经通过docker-compose将部分服务集成在一起;具体使用步骤,参考下面文章;

2. 部署准备

2.1 下载源码

$ git clone https://github.com/52lu/k8s_microsvc_cicd.git

2.2 创建持久卷

# 创建持久卷,并赋权
$ mkdir volumes && chmod 777 volumes

2.3 修改环境变量

# 1.复制环境变量
$ cp env-exampl .env
# 2.查看本机IP
...
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.148.132 netmask 255.255.255.0 broadcast 192.168.148.255
inet6 fe80::20c:29ff:fe1c:4064 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:1c:40:64 txqueuelen 1000 (Ethernet)
RX packets 1847482 bytes 2462411899 (2.2 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 324377 bytes 26082141 (24.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
...
# 2.修改.env 中的GITEA_HOST
GITEA_HOST=192.168.148.132

部署过程需要下载对应的docker镜像,建议给docker配置镜像加速。

3. 部署Gitea

3.1 启动

$ pwd
/root/server/k8s_microsvc_cicd
$ ls
docker-compose.yaml env-example gitea jenkins README.md volumes
# 启动
$ docker-compose up -d gitea
Creating network "k8s_microsvc_cicd_backend" with driver "bridge"
Creating k8s_microsvc_cicd_postgres_1 ... done
Creating k8s_microsvc_cicd_gitea_1 ... done
# 查看运行结果
$ docker-compose ps
Name State Ports
--------------------------------------------------------------------------------------------
k8s_microsvc_cicd_gitea_1 .. Up 0.0.0.0:2221->22/tcp,:::2221->22/tcp,
0.0.0.0:8800->3000/tcp,:::8800->3000/tcp
k8s_microsvc_cicd_postgres_1 ..Up 5432/tcp

3.2 访问

访问链接:http://192.168.148.132:8800,这里的IP就是GITEA_HOST中设置的IP.

引导安装

刷新进入,并添加代码仓库即可.

3.3 添加服务器密钥

点击头像->设置

添加ssh密钥

4. 部署Jenkins

4.1 启动Jenkins

# 部署成功之后,可能需要等待一段时间(jenkins初始化)
$ docker-compose up -d jenkins

4.2 解锁Jenkins

访问: http://192.168.148.132:19090/

根据上面提示,进入容器查找对应的管理员密码

# 进入容器
$ docker-compose exec jenkins bash
# 查看密码
$ cat /var/jenkins_home/secrets/initialAdminPassword
52345f1a8860455cacde717fbefcbc6b

4.3 安装插件

选择推荐插件

等待安装完成

4.4 创建管理员

image-20230103182341934

5. 部署Harbor

5.1 下载Harbor

查看更多版本:https://github.com/goharbor/harbor/tags

# 下载速度有点慢
$ wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz

5.2 解压安装

5.2.1 解压

# 解压
$ tar zxvf harbor-offline-installer-v2.7.0.tgz
# 复制配置文件
$ cp harbor.yml.tmpl harbor.yml

5.2.2 修改harbor.yml

...
hostname: 192.168.148.132 #修改为本机ip,不能使用localhost、127.0.0.1
http:
port: 8870 #改一下http端口8870
....
# 注释掉https方式
#https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
...
data_volume: /root/server/harbor/data #修改一下数据目录位置(创建&赋权)

log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /root/server/harbor/logs #修改一下日志目录位置(创建&赋权)
...

5.2.3 安装

[root@node2 harbor]# ./install.sh

[Step 0]: checking if docker is installed ...

Note: docker version: 20.10.22

[Step 1]: checking docker-compose is installed ...

Note: docker-compose version: 1.25.5

[Step 2]: loading Harbor images ...

5.3 访问

访问: http://192.168.148.132:8870/

账号: admin
密码: Harbor12345 (在harbor.yml中记录的,默认是Harbor12345)

5.4 新建私有项目

新建项目

查看推送命令

修改docker,支持http

默认拉取、推送到镜像仓库要使用https , 由于我们这里没有https,需要用http , 所以我们要在发布的服务器上给docker新增insecure-registries,

# 新增insecure-registries
{
"registry-mirrors":[
"https://otrqd6z7.mirror.aliyuncs.com"
],
"insecure-registries":[
"192.168.148.132:8870"
]
}

到此我们环境部署部分搭建完成。