部署服务上

1991/6/26 基础

# 1. 介绍

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

# 1.1 部署准备

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

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

# 1.2 部署集成

为了方便部署上面服务,通过现有项目docker-compose将部分服务集成在一起;具体使用步骤,参考下面文章;

# 2. 部署准备

# 2.1 下载源码

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

# 2.2 创建持久卷

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

# 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

部署过程需要下载对应的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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 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
1
2

# 4.2 解锁Jenkins

访问: http://192.168.148.132:19090/

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

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

# 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
1
2

# 5.2 解压安装

# 5.2.1 解压

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

# 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  #修改一下日志目录位置(创建&赋权)
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 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 ...
1
2
3
4
5
6
7
8
9
10
11

# 5.3 访问

访问: http://192.168.148.132:8870/

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

# 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"
    ]
}
1
2
3
4
5
6
7
8
9

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