部署准备(环境)

1、概述

项目开发好后,我们需要部署,我们接下来要讲解三种部署方式,服务器部署、docker 部署、k8s 部署

部署之前我们先把部署相关中间件安装好,我们 cicd 主要基于 gitlab 、 jenkins(三种方式都会使用到),镜像仓库使用 harbor(docker、k8s 部署需要使用到) ,一个 k8s 集群环境(k8s 部署使用)。

至于服务使用的中间件(mysql、redis、es 等)会部署在 srv-data.com,如果你是线上使用云服务可以直接使用云服务,如果自建也最好运行在 k8s 之外。

所以我们需要配置如下:

服务器名称作用
deploy-server.com部署 gitlab、jenkins、harbor(预先装好 docker、docker-compose)
srv-data.com部署 mysql、redis、es 等等,模拟独立环境,k8s 内部连接到此服务器
nginx-gateway.com网关,独立于 k8s 集群外部
k8s 集群K8s 集群

2、搭建 gitlab

2.1 部署 gitlab

创建文件夹

  1. $ mkdir gitlab && cd gitlab
  2. $ vim docker-compose.yml

docker-compose.yml

  1. version: "3"
  2. services:
  3. gitlab:
  4. image: "twang2218/gitlab-ce-zh"
  5. container_name: "gitlab"
  6. restart: always
  7. hostname: "192.168.1.180" #部署机器的ip,非容器ip(因为是本地不是线上所以用ip,线上的话可以用域名)
  8. environment:
  9. TZ: "Asia/Shanghai"
  10. GITLAB_OMNIBUS_CONFIG: |
  11. external_url 'http://192.168.1.180' #使用这个地址访问gitlab web ui(因为是本地不是线上所以用ip,线上的话可以用域名)
  12. gitlab_rails['gitlab_shell_ssh_port'] = 2222 #ssh clone代码地址
  13. unicorn['port'] = 8888 #gitlab一个内部端口
  14. ports:
  15. - "80:80" #web 80 端口
  16. #- '443:443' #web 443 端口,本次未使用就不开放了
  17. - "2222:22" #ssh 检出代码 端口
  18. volumes:
  19. - ./etc:/etc/gitlab #Gitlab配置文件目录
  20. - ./data:/var/opt/gitlab #Gitlab数据目录
  21. - ./logs:/var/log/gitlab #Gitlab日志目录

执行

  1. $ docker-compose up -d

这个执行时间可能稍微有点长,不妨你可以去泡一杯 coffee 休息一下~~

2.2 访问 gitlab

访问 http://192.168.1.103(即http://“docker-compose中ip/域名”)

账号默认是 root

2.3 创建项目 k8scode

2.4 配置 ssh 公钥

点击头像位置下箭头,“设置”

将自己的公钥配置上,点击“Add key”即可 (公钥不会生成的自己搜索,这里不详细说了)

2.5 上传项目

在点击项目,回到刚才创建的项目,将 k8scode 项目上传到此仓库 ssh://git@192.168.1.180:2222/root/k8scode.git 即可,到此我们的 gitlab 搭建就结束了。

3、harbor

3.1 部署 harbor

下载 harbo https://github.com/goharbor/harbor/releases/download/v2.2.0/harbor-offline-installer-v2.2.0.tgz,下载离线的offline安装会快点

下载解压后进入 harbor 文件夹

  1. $ cd harbor && cp harbor.yml.tmpl harbor.yml

我们打开 harbor.yml,修改如下

  1. hostname: 192.168.1.180 #修改为本机ip,不能使用localhost、127.0.0.1
  2. http:
  3. port: 8077 #改一下http端口8077
  4. #https: #暂时将https注释掉,我们先不通过https只铜鼓http
  5. # port: 443
  6. # certificate: /your/certificate/path
  7. # private_key: /your/private/key/path
  8. data_volume: /root/harbor/data #修改一下数据目录位置
  9. log:
  10. level: info
  11. local:
  12. rotate_count: 50
  13. rotate_size: 200M
  14. location: /root/harbor/log #修改一下日志目录位置

直接运行 “sudo ./install.sh” 稍做等待。

3.2 访问 harbor

浏览器输入 http://192.168.1.180:8077

账号: admin

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

登陆成功

到此我们 harbor 搭建完成。

4、jenkins

4.1 部署 jenkins

创建文件夹

  1. $ mkdir jenkins && cd jenkins
  2. $ vim docker-compose.yml

docker-compose.yml

  1. version: "3"
  2. services:
  3. jenkins:
  4. image: "jenkins/jenkins:lts"
  5. container_name: jenkins
  6. restart: always
  7. environment:
  8. - TZ=Asia/Shanghai
  9. user: root
  10. ports:
  11. - "8989:8080"
  12. - "50000:50000"
  13. volumes:
  14. - "./jenkins_home:/var/jenkins_home"
  15. - "/var/run/docker.sock:/var/run/docker.sock"
  16. - "/usr/bin/docker:/usr/bin/docker"
  17. - "/root/port.sh:/root/port.sh"

【注】/root/port.sh 内容如下,这个是给后续 k8s 部署使用的

  1. #!/bin/sh
  2. case $1 in
  3. "identity-api") echo 1001
  4. ;;
  5. "identity-rpc") echo 1101
  6. ;;
  7. "usercenter-api") echo 1002
  8. ;;
  9. "usercenter-rpc") echo 1102
  10. ;;
  11. "message-mq") echo 1207
  12. ;;
  13. "mqueue-rpc") echo 1106
  14. ;;
  15. "order-api") echo 1004
  16. ;;
  17. "order-mq") echo 1204
  18. ;;
  19. "order-rpc") echo 1104
  20. ;;
  21. "payment-api") echo 1005
  22. ;;
  23. "payment-rpc") echo 1105
  24. ;;
  25. "travel-api") echo 1003
  26. ;;
  27. "travel-rpc") echo 1103
  28. esac

执行

  1. $ docker-compose up -d

这个时间也不慢,可以再去喝一杯 coffee

4.2 挂载工具

1)将 goctl 复制到 jenkins 容器中

  1. $ docker cp $GOPATH/bin/goctl jenkins:/usr/local/bin
  2. $ docker exec -it jenkins /bin/sh #进入jenkins 容器
  3. $ goctl -v #验证成功
  4. goctl version 1.3.0-20220201 linux/amd64

2)将 kubectl 文件复制到 jenkins 容器中

  1. $ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
  2. $ sudo chmod a+x kubectl
  3. $ docker cp kubectl jenkins:/usr/local/bin
  4. $ docker exec -it jenkins /bin/sh #进入jenkins 容器
  5. $ kubectl version
  6. Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.3" .....

3)将 k8s 的配置.kube/config 复制到 jenkins 容器

  1. $ docker cp ~/.kube jenkins:/root/ #前提是家目录下的.kube文件夹中存在k8s的config配置
  2. $ docker exec -it jenkins /bin/sh #进入jenkins 容器
  3. $ kubectl ge ns
  4. default Active 43m
  5. kube-node-lease Active 43m
  6. kube-public Active 43m
  7. kube-system Active 43m
  8. local-path-storage Active 43m

【注】上面这 4 部,也可以直接打进镜像中,我这里只是演示,留给你们自己处理。

4.3 访问 jenkins

http://192.168.1.180:8989

第一次访问出现上面图不要慌,让你稍等一会,它在进行准备工作,准备好后会自动跳到登陆页面。

出现如下界面,说明准备好了,因为我们目录是挂载出来的,我们查看本机 jenkins_home/secrets/initialAdminPassword 密码,输入下一步即可

选择“安装推荐插件“

然后等待插件安装完成

4.4 创建用户

root

root

4.5 部署完成

到此 jenkins 部署完成

4.6 添加凭据

点击左边菜单“Manage Jenkins”

点击 “Manage Credentials”

点击“全局”后面的三角标,然后在点击“添加凭据”

进入“添加凭据”页面,类型我们选择 “SSH Username with private key” 使用私钥方式,Username是 gitlab 一个标识,后面添加 pipeline 你知道这个标识是代表 gitlab 的凭据自行自定义的,Private Key`即在 gitlab 配置的私钥(之前我们配置在 gitlab 的公钥对应的私钥,在这里就是我们自己本机的私钥),我们这个凭证就是给 jenkins 用来去 gitlab 时候免密拉代码用的

确定即可。

4.7 添加 harbor 仓库配置

进入首页,点击左侧菜单Manage Jenkins->Configure System

下滑动到全局属性条目,添加 docker 私有仓库相关信息,如图为docker用户名docker用户密码docker私有仓库地址

点击 “保存”

4.8 配置 git

进入Manage Jenkins->Global Tool Configureation,找到 Git 条目,填写 jenkins 所在机器 git 可执行文件所在 path,如果没有的话,需要在 jenkins 插件管理中下载 Git 插件, 有就不需要管了(如下图)

配置 pipline 需要的 Git Parameter 插件

点击 “系统配置” -> “插件管理”

然后点击“可选插件” , 搜索中输入 “Git Parameter” , 如下图

安装好,重启后即可,到此 jenkins 搭建完成。

5、k8s

k8s 的部署这里就不介绍了,自己用 kubeadm、rancher、kind 去安装吧,或者买个按量云容器服务,总之有一个 k8s 集群就好了。

参考文献