微服務從代碼到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/域名")

首次設置新密碼: 12345678

賬號默認是root

2.3 創建項目

2.4 配置ssh公鑰

點擊頭像位置下箭頭,“設置”

將自己的公鑰配置上,點擊“Add key”即可 (公鑰不會生成的自己搜索,這裏不詳細說了)

2.5 上傳項目

再點擊項目,回到剛纔創建的項目,將go-zero-looklook項目上傳到此倉庫ssh://[email protected]:2222/root/go-zero-looklook.git即可,到此我們的gitlab搭建就結束了。

【注】 本次不做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.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

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集羣就好了。

項目地址

https://github.com/zeromicro/go-zero

歡迎使用 go-zerostar 支持我們!

微信交流羣

關注『微服務實踐』公衆號並點擊 交流羣 獲取社區羣二維碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章