部署docker-consul群集,Harbor構建Docker私有倉庫

黎明穿過冰冷的峽谷發表於2020-09-25

部署docker-consul群集,Harbor構建Docker私有倉庫

瞭解Harvor

  • Harbor是VMware公司開源的企業級Docker Registry專案
  • Harbor的優勢
    ●基於角色控制
    ●基於映象的複製策略
    ●支援LDAPIAD
    ●影像刪除和垃圾收集
    ●圖形U
    ●審計
    ●RESTful API

案例概述

  • 最近創鑫公司又提出一個新需求,將專案全部打包成鏡
    像部署私有倉庫服務,經過幾輪商討,最終選擇
    Docker Harbor
  • Docker Harbor有視覺化的Web管理介面,可以方便
    管理Docker映象,又提供了多個專案的映象許可權管理
    及控制功能

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-DilhgksE-1601048267012)(../AppData/Roaming/Typora/typora-user-images/image-20200924114901868.png)]

瞭解基礎名稱

Proxy
●通過一個前置的反向代理統一接收瀏覽器、Docker客戶端的請求,並將請求轉發給後端不同的服務

Registry
●負責儲存Docker映象,並處理docker push/pull命令
Core services
●Harbor的核心功能,包括UI、webhook、token服務
Database
●為core services提供資料庫服務
Log collector
●負責收集其他元件的log,供日後進行分析

Harbor可選引數
●電子郵件設定、harbour_admin_password、auth_mode
●self_registration、token_expiration
●oproject_creation_restriction、verify_remote_cert
啟動並安裝Harbor

Docker consul服務瞭解

Consul是一個分散式、高可用的系統,是一個為了解決在生產環境中服務註冊,服務發現,服務配置的一個工具,它有多個元件,提供如下幾個關鍵功能:

  • 服務發現: Consul的某些客戶端可以提供一個服務,例如api或者mysql,其它客戶端可以使用Consul去發現這個服務的提供者。使用DNS或者HTTP,應用可以很容易的找到他們所依賴的服務。
  • 健康檢查: Consul客戶端可以提供一些健康檢查,這些健康檢查可以關聯到一個指定的服務(服務是否返回200 OK),也可以關聯到本地節點(記憶體使用率是否在90%以下)。這些資訊可以被一個操作員用來監控叢集的健康狀態,被服務發現元件路由時用來遠離不健康的主機。
  • 鍵值儲存: 應用可以使用Consul提供的分層鍵值儲存用於一些目的,包括動態配置、特徵標記、協作、leader選舉等等。通過一個簡單的HTTP API可以很容易的使用這個元件。
  • 多資料中心: Consul對多資料中心有非常好的支援,這意味著Consul使用者不必擔心由於建立更多抽象層而產生的多個區域。

容器跟新拓撲圖

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-7zpbnBP9-1601048267015)(../AppData/Roaming/Typora/typora-user-images/image-20200924113039172.png)]

需要一下服務

  • Consul-Template是一個守護程式,用於實時查詢Consu叢集資訊
  • docker-compose非常適合組合使用多個容器進行開發的場景
  • Docker consul容器服務更新與發現
  • Gliderlabs/Registrator可以檢查容器執行狀態自動註冊,還可以登出

案例需要

  • 實現單機網路下容器與容器之間互通

  • 使用Docker compose建立容器

  • 搭建Consul服務實現自動發現和更新

部署Harbor服務過程

安裝docker-compose

[root@localhost ~]# chmod +x docker-compose 

系統可以識別

 mv docker-compose /usr/local/bin/

檢視是否安裝

[root@localhost ~]# docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3

安裝harbor

[root@localhost ~]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

修改配置檔案

[root@localhost ~]# cd /usr/local/harbor/ 
[root@localhost harbor]# vim harbor.cfg 
 5 hostname = 192.168.136.81

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-vnQmkZcD-1601048267017)(../AppData/Roaming/Typora/typora-user-images/image-20200924120918776.png)]

開啟Harbor

[root@localhost harbor]# sh install.sh 

輸入地址檢視

密碼Harbor12345預設

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-qFCacstW-1601048267021)(../AppData/Roaming/Typora/typora-user-images/image-20200924121312522.png)]

新增專案

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-VRcobUXq-1601048267026)(../AppData/Roaming/Typora/typora-user-images/image-20200924121423072.png)]

開啟kgc沒有建立映象
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ArvlZLOI-1601048267027)(../AppData/Roaming/Typora/typora-user-images/image-20200924121518938.png)]

新增映象倉庫

登入
[root@localhost harbor]# docker login -u admin -p Harbor12345 http://127.0.0.1

下載映象
[root@localhost harbor]# docker pull nginx

打標籤
上傳映象到Harbor
[root@localhost harbor]# docker tag  nginx:latest  127.0.0.1/kgc/nginx:v1

上傳映象
[root@localhost harbor]# docker push 127.0.0.1/kgc/nginx

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-jCcbePSD-1601048267029)(../AppData/Roaming/Typora/typora-user-images/image-20200924121859920.png)]

不是本地上傳映象操作

在開啟一臺服務端192.168.136.30

[root@localhost ~]# docker login -u admin -p Harbor12345 http://192.168.136.81
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.136.81/v2/: dial tcp 192.168.136.81:443: connect: connection refuse

以上操作拒絕是因為互動預設使用HTPS但是私有預設使用的是HTTP服務

解決方法(下面都指向對方地址)

[root@localhost ~]# vim /usr/lib/systemd/system/docker.service 
14 ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.136.81

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-JZJFccYY-1601048267032)(../AppData/Roaming/Typora/typora-user-images/image-20200924122236703.png)]

重啟服務

[root@localhost ~]# systemctl daemon-reload 
[root@localhost ~]# systemctl restart docker
登入到Harbor
docker login -u admin -p Harbor12345 http://192.168.136.81

下載centos:7
[root@localhost ~]# docker pull centos:7

標籤
[root@localhost ~]# docker tag centos:7 192.168.136.81/kgc/centos7:v1

上傳映象
[root@localhost ~]# docker push 192.168.136.81/kgc/centos7

遊覽器檢視

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-HeeLbXja-1601048267034)(../AppData/Roaming/Typora/typora-user-images/image-20200924122715390.png)]

在使用者端操作

退出和登入

[root@localhost ~]# docker logout 192.168.136.81
[root@localhost ~]# docker login 192.168.136.81

移除Harbor所有容器清除

[root@localhost ~]# cd /usr/local/harbor/
[root@localhost ~]# docker-compose down -v

部署Docker consul群集實驗過程

實驗前提2臺伺服器

服務端:192.168.136.81 需要配置軟體:Docker,docker-compose Docker consul

服務端:192.168.136.30 需要配置軟體:Docker,Gliderlabs/Registrator,consul-template

實驗目的:

安裝部署docker-compose

在192.168.136.81中配置docker-compose非常適合組合使用多個容器進行開發的場景

匯入docker-compose 模板

[root@localhost ~]# chmod +x docker-compose 

讓系統識別

[root@localhost ~]# mv docker-compose /usr/local/bin/

配置Docker consul服務

Docker consul容器服務更新與發現

[root@localhost ~]# mkdir consul
[root@localhost ~]# cd consul/

解壓consul服務包

[root@localhost consul]# unzip consul_0.9.2_linux_amd64.zip 

讓系統識別

[root@localhost consul]# mv consul /usr/bin/

配置服務軟體

[root@localhost consul]# consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.136.81 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

解釋

[root@localhost consul]# consul agent \  安裝agnt
-server \     安裝server
-bootstrap \ 選舉
-ui \     網頁檢視
-data-dir=/var/lib/consul-data \  資料存放位置
-bind=192.168.136.81 \     繫結自己地址
-client=0.0.0.0 \     監聽地址
-node=consul-server01 &> /var/log/consul.log &    在本地定義名稱

檢視群集資訊

[root@localhost consul]# consul members
Node             Address              Status  Type    Build  Protocol  DC
[root@localhost consul]# consul info | grep leader
	leader = true
	leader_addr = 192.168.136.81:8300

通過httpd api 獲取群集資訊

curl 127.0.0.1:8500/v1/status/peers

群集Raf leader

 curl 127.0.0.1:8500/v1/status/leader

檢視服務

[root@localhost consul]# curl 127.0.01:8500/v1/catalog/services

群集節點資訊資訊

[root@localhost consul]# curl 127.0.01:8500/v1/catalog/nodes

開啟遊覽器檢視節點管理頁面

輸入地址192.168.136.81:8500

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-0nHVhCcy-1601048267036)(../AppData/Roaming/Typora/typora-user-images/image-20200924104934364.png)]

安裝Gliderlabs/Registrator

在192.168.136.30容器安裝Gliderlabs/Registrator

可以檢查容器執行狀態自動註冊,還可以登出

[root@localhost consul]# docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.136.30 \
consul://192.168.136.81:8500

解釋

[root@localhost consul]# docker run -d \  以容器執行registrator
--name=registrator \    名稱
 --net=host \         僅主機
-v /var/run/docker.sock:/tmp/docker.sock \  建立資料卷
--restart=always \                重啟策略
gliderlabs/registrator:latest \  下載映象
-ip=192.168.136.30 \      自己的ip
consul://192.168.136.81:8500    指向服務ip

測試服務發現是否功能正常

docker run -itd -p:83:80 --name test-01 -h test01 nginx

docker run -itd -p:84:80 --name test-02 -h test02 nginx

[root@localhost ~]# docker run -itd -p:88:80 --name test-03 -h test03 httpd

[root@localhost ~]# docker run -itd -p:89:80 --name test-04 -h test04 httpd

驗證httpd和nginx服務是否註冊到consul

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-Oa2A4TdY-1601048267037)(../AppData/Roaming/Typora/typora-user-images/image-20200924104704848.png)]

在consul服務端檢視服務

[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/services
{"consul":[],"httpd":[],"nginx":[]}[root@localhost consul]# 

安裝consul-template

Consul-Template是一個守護程式,用於實時查詢Consu叢集資訊,
並更新檔案系統上任意數量的指定模板,生成配置檔案。更新完成以後,
可以選擇執行shell命令執行更新操作,重新載入Nginx。Consul-Template
可以查詢Consul中的服務目錄、Key.Key-values等。
這種強大的抽象功能和查詢語言模板可以使Consul-Template特別適合動態的建立配置檔案。
例如∶建立Apache/Nginx Proxy Balancers、Haproxy Backends

準備template nginx模板

[root@localhost consul]# vim nginx.ctmpl 

upstream http_backend {
  {{range service "nginx"}}
  server {{.Address}}:{{.Port}};
  {{end}}
}

server {
  listen 83;
  server_name localhost 192.168.136.81;  
  access_log /var/log/nginx/kgc.cn-access.log;
  index index.html index.php;
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
   }
}

編譯安裝nginx

yum install -y gcc gcc-c++ pcre-devel zlib-devel 
cd /opt
tar zxvf nginx-1.12.0.tar.gz 
cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx
[root@localhost nginx-1.12.0]# make && make install

修改配置檔案

[root@localhost conf]# cd /usr/local/nginx/conf/
 18     include       mime.types; 
 19     include       vhost/*conf;  新增
 20     default_type  application/octet-stream;

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-BVJEqgNb-1601048267040)(C:\Users\19437\AppData\Roaming\Typora\typora-user-images\image-20200924011005179.png)]

建立vhost目錄和日誌

[root@localhost conf]# mkdir /usr/local/nginx/conf/vhost
[root@localhost conf]# mkdir  /var/log/nginx

開啟服務

[root@localhost conf]# /usr/local/nginx/sbin/nginx

檢視不到83埠號,因為沒有配置template

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-8pGaR06A-1601048267044)(../AppData/Roaming/Typora/typora-user-images/image-20200924111956495.png)]

配置開啟template

template是跟新模板資訊

配置生成檔案

[root@localhost conf]# cd /root/consul/
[root@localhost consul]# unzip consul-template_0.19.3_linux_amd64_\(1\).zip 

讓系統可以識別

[root@localhost consul]# mv consul-template /usr/local/bin/

配置監控(保持一直監控狀態)

consul-template -consul-addr 192.168.136.81:8500 \
-template 

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-5bDvfr2c-1601048267045)(../AppData/Roaming/Typora/typora-user-images/image-20200924112427081.png)]

重啟開啟終端檢視配檔案檢視是否生成

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-xmxlBXqA-1601048267047)(../AppData/Roaming/Typora/typora-user-images/image-20200924104216448.png)]

檢視日誌

重新整理網頁192.168.136.81:83在192.168.136.30中檢視日誌,可以看到埠可以訪問

[root@localhost ~]# docker logs -f test-01
[root@localhost ~]# docker logs -f test-02

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-FeQLN7tw-1601048267049)(../AppData/Roaming/Typora/typora-user-images/image-20200924102229810.png)]

相關文章