微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)

1、概述 项目开发好后,我们需要部署,我们接下来就基于gitlab + jenkins + harbor + k8s 搭建部署环境

  • gitlab: 放代码,可以做ci
  • jenkins: 做cd发布项目
  • harbor: 镜像仓库
  • k8s: 运行服务
我们只在k8s内部运行服务,至于中间件(mysql、redis、es等)就会部署在k8s之外,如果你是线上使用云服务可以直接使用云服务,如果自建也最好运行在k8s之外。由于我是在本地演示,这里的中间件我就使用之前开发环境的中间件了,不要纠结这个,主要演示如何部署go-zero服务到k8s中
k8s部署这里就不介绍了,如果没有k8s环境自己用rancher或者kubeadm等搭建即可,再不行就去买个按时付费的云服务k8s
所以我们需要配置如下:
服务器名称 作用 Ip
deploy-server.com 部署gitlab、jenkins、harbor(预先装好docker、docker-compose) 192.168.1.180
srv-data.com 部署mysql、redis、es等等,模拟独立环境,k8s内部连接到此服务器 192.168.1.181
nginx-gateway.com 网关,独立于k8s集群外部 192.168.1.182
k8s集群 K8s 集群 192.168.1.183
2、gitlab 2.1 部署gitlab
创建文件夹
$ mkdir gitlab && cd gitlab $ vim docker-compose.yml

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

执行
$docker-compose up -d

这个执行时间可能稍微有点长,不妨你可以去泡一杯coffee休息一下~~
2.2 访问gitlab
访问 http://192.168.1.103(即http://"docker-compose中ip/域名")
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

首次设置新密码: 12345678
账号默认是root
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

2.3 创建项目
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

2.4 配置ssh公钥
点击头像位置下箭头,“设置”
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

将自己的公钥配置上,点击“Add key”即可 (公钥不会生成的自己搜索,这里不详细说了)
2.5 上传项目
再点击项目,回到刚才创建的项目,将go-zero-looklook项目上传到此仓库ssh://git@192.168.1.180:2222/root/go-zero-looklook.git即可,到此我们的gitlab搭建就结束了。
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

【注】 本次不做gitlab-runner演示,后续如果有时间再补充。
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文件夹
$ cd harbor && cp harbor.yml.tmpl harbor.yml

我们打开harbor.yml,修改如下
hostname: 192.168.1.180#修改为本机ip,不能使用localhost、127.0.0.1http: port: 8077#改一下http端口8077#https:#暂时将https注释掉,我们先不通过https只通过http #port: 443 #certificate: /your/certificate/path #private_key: /your/private/key/pathdata_volume: /root/harbor/data#修改一下数据目录位置log: level: info local: rotate_count: 50 rotate_size: 200M location: /root/harbor/log#修改一下日志目录位置

直接运行 “sudo ./install.sh” 稍作等待。
3.2 访问harbor
浏览器输入 http://192.168.1.180:8077
账号: admin
密码: Harbor12345 (在harbor.yml中记录的,默认是Harbor12345)
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

登陆成功
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

3.3 新建私有项目 微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

查看push命令
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

$ docker push 192.168.1.180:8077/go-zero-looklook/REPOSITORY[:TAG]

3.4支持http
默认拉取、推送到镜像仓库要使用https , 由于我们这里没有https,需要用http , 所以我们要在deploy-server.com服务器上执行如下
$ echo '{"insecure-registries":["192.168.1.180:8077"] }' >> /etc/docker/daemon.json

到此我们harbor搭建完成。
4、jenkins 4.1 部署jenkins
创建文件夹
$ mkdir jenkins && cd jenkins $ vim docker-compose.yml

docker-compose.yml
version: '3' services: jenkins: image: 'jenkins/jenkins:lts' container_name: jenkins restart: always environment: - TZ=Asia/Shanghai user: root ports: - '8989:8080' - '50000:50000' volumes: - './jenkins_home:/var/jenkins_home' - '/var/run/docker.sock:/var/run/docker.sock' - '/usr/bin/docker:/usr/bin/docker' - '/root/port.sh:/root/port.sh'

【注】/root/port.sh内容如下
#!/bin/shcase $1 in "identity-api") echo 1001 ; ; "identity-rpc") echo 1101 ; ; "usercenter-api") echo 1002 ; ; "usercenter-rpc") echo 1102 ; ; "message-mq") echo 1207 ; ; "mqueue-rpc") echo 1106 ; ; "order-api") echo 1004 ; ; "order-mq") echo 1204 ; ; "order-rpc") echo 1104 ; ; "payment-api") echo 1005 ; ; "payment-rpc") echo 1105 ; ; "travel-api") echo 1003 ; ; "travel-rpc") echo 1103 esac

执行
$ docker-compose up -d

这个时间也不慢,可以再去喝一杯coffee
4.2 挂载工具
1)将goctl 复制到 jenkins容器中
$ docker cp $GOPATH/bin/goctl jenkins:/usr/local/bin $ docker exec -it jenkins /bin/sh #进入jenkins 容器 $ goctl -v#验证成功 goctl version 1.3.0-20220201 linux/amd64

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

3)将k8s的配置.kube/config复制到jenkins容器
$ docker cp ~/.kube jenkins:/root/ #前提是家目录下的.kube文件夹中存在k8s的config配置 $ docker exec -it jenkins /bin/sh #进入jenkins 容器 $ kubectl ge ns defaultActive43m kube-node-leaseActive43m kube-publicActive43m kube-systemActive43m local-path-storageActive43m

【注】上面这四步,也可以直接打进镜像中,我这里只是演示,留给你们自己处理。
4.3 访问jenkins
http://192.168.1.180:8989
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

第一次访问出现上面图不要慌,让你稍等一会,它在进行准备工作,准备好后会自动跳到登陆页面。
出现如下界面,说明准备好了,因为我们目录是挂载出来的,我们查看本机jenkins_home/secrets/initialAdminPassword密码,输入下一步即可
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

选择“安装推荐插件“
【微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)】微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

然后等待插件安装完成
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

4.4 创建用户
账号:root/root
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

4.5 部署完成
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

到此 jenkins 部署完成
4.6 添加凭据
点击左边菜单“Manage Jenkins”
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

点击 "Manage Credentials"
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

点击“全局”后面的三角标,然后再点击“添加凭据”
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

进入“添加凭据”页面,类型我们选择 “SSH Username with private key” 使用私钥方式,Username是gitlab一个标识,后面添加pipeline你知道这个标识是代表gitlab的凭据自行定义的,Private Key即在gitlab配置的私钥(之前我们配置在gitlab的公钥对应的私钥,在这里就是我们自己本机的私钥),我们这个凭证就是给jenkins用来去gitlab时候免密拉代码用的
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

确定即可。
4.7 添加harbor仓库配置
进入首页,点击左侧菜单Manage Jenkins->Configure System
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

下滑动到全局属性条目,添加docker私有仓库相关信息,如图为docker用户名docker用户密码docker私有仓库地址
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

点击 “保存”
4.8 配置git
进入Manage Jenkins->Global Tool Configureation,找到Git条目,填写jenkins所在机器git可执行文件所在path,如果没有的话,需要在jenkins插件管理中下载Git插件, 有就不需要管了(如下图)
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

配置pipline需要的Git Parameter插件
点击 “系统配置” -> “插件管理”
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

然后点击“可选插件” , 搜索中输入 “Git Parameter” , 如下图
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
文章图片

安装好,重启后即可,到此jenkins搭建完成。
5、k8s k8s的部署这里就不介绍了,自己用kubeadm、rancher、kind去安装吧,或者买个按量云容器服务,总之有一个k8s集群就好了。
项目地址 https://github.com/zeromicro/go-zero
欢迎使用 go-zero 并 star 支持我们!
微信交流群 关注『微服务实践』公众号并点击 交流群 获取社区群二维码。

    推荐阅读