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 添加服务器密钥
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 创建管理员
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" ] }
|
到此我们环境部署部分搭建完成。