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/域名")
首次設定新密碼: 12345678
賬號預設是root
2.3 建立專案
2.4 配置ssh公鑰
點選頭像位置下箭頭,“設定”
將自己的公鑰配置上,點選“Add key”即可 (公鑰不會生成的自己搜尋,這裡不詳細說了)
2.5 上傳專案
再點選專案,回到剛才建立的專案,將go-zero-looklook專案上傳到此倉庫ssh://git@192.168.1.180:2222/root/go-zero-looklook.git即可,到此我們的gitlab搭建就結束了。
【注】 本次不做gitlab-runner演示,後續如果有時間再補充。
3、harbor
3.1 部署harbor
下載harbo https://github.com/goharbor/h...,下載離線的offline安裝會快點
下載解壓後進入harbor資料夾
$ cd harbor && cp harbor.yml.tmpl harbor.yml
我們開啟harbor.yml,修改如下
hostname: 192.168.1.180 #修改為本機ip,不能使用localhost、127.0.0.1
http:
port: 8077 #改一下http埠8077
#https: #暫時將https註釋掉,我們先不通過https只通過http
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
data_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)
登陸成功
3.3 新建私有專案
檢視push命令
$ 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/sh
case $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
default Active 43m
kube-node-lease Active 43m
kube-public Active 43m
kube-system Active 43m
local-path-storage Active 43m
【注】上面這四步,也可以直接打進映象中,我這裡只是演示,留給你們自己處理。
4.3 訪問jenkins
第一次訪問出現上面圖不要慌,讓你稍等一會,它在進行準備工作,準備好後會自動跳到登陸頁面。
出現如下介面,說明準備好了,因為我們目錄是掛載出來的,我們檢視本機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叢集就好了。
專案地址
https://github.com/zeromicro/go-zero
歡迎使用 go-zero
並 star 支援我們!
微信交流群
關注『微服務實踐』公眾號並點選 交流群 獲取社群群二維碼。