Docker集中化web介面管理平臺 - Shipyard部署記錄

散盡浮華發表於2017-05-17

 

Docker圖形頁面管理工具基本常用的有三種: DOCKER UI,Shipyard,Portainer。對比後發現,Shipyard最強大,其次是Portainer,最後是Docker ui。Shipyard是建立在docker叢集管理工具Citadel之上的可以管理容器、主機等資源的web圖形化工具,包括core和extension兩個版本,core即shipyard主要是把多個 Docker host上的 containers 統一管理(支援跨越多個host),extension即shipyard-extensions新增了應用路由和負載均衡、集中化日誌、部署等;Shipyard是在Docker Swarm實現對容器、映象、docker叢集、倉庫、節點進行管理的web系統

DockerUI功能:通過Web瀏覽器的命令列來管理的任務。
DockerUI的優點
1)可以對執行著的容器進行批量操作
2)在容器網路中-會顯示容器與容器間的網路關係
3)在Volumes中顯示了所有掛載目錄

DockerUI一個致命的缺點:不支援多主機.試想一下,如果有N臺docker主機時-我就需要一臺臺的用dockerui進行管理,想想都覺得麻煩。就單臺主機而言,dockerui是一款不錯的管理工具。

Shipyard功能:是一個整合管理docker容器、映象、Registries的系統,它可以簡化對橫跨多個主機的Docker容器叢集進行管理. 通過Web使用者介面,你可以大致瀏覽相關資訊,比如你的容器在使用多少處理器和記憶體資源、在執行哪些容器,還可以檢查所有叢集上的事件日誌。
其特性主要包括:
1)支援節點動態叢集,可擴充套件節點的規模(swarm、etcd方案)
2)支援映象管理、容器管理、節點管理等功能
3)視覺化的容器管理和監控管理
4)線上容console終端

Shipyard幾個概念
1)engine
一個shipyard管理的docker叢集可以包含一個或多個engine(引擎),一個engine就是監聽tcp埠的docker daemon。shipyard管理docker daemon、images、containers完全基於Docker API,不需要做其他的修改。另外,shipyard可以對每個engine做資源限制,包括CPU和記憶體;因為TCP監聽相比Unix socket方式會有一定的安全隱患,所以shipyard還支援通過SSL證照與docker後臺程式安全通訊。
2)rethinkdb
RethinkDB是一個shipyard專案的一個docker映象,用來存放賬號(account)、引擎(engine)、服務金鑰(service key)、擴充套件後設資料(extension metadata)等資訊,但不會儲存任何有關容器或映象的內容。

Shipyard生態
shipyard是由shipyard控制器以及周圍生態系統構成,以下按照deploy啟動順序進行介紹(下面幾個就是shipyard使用指令碼安裝後,啟動的幾個容器名)
1)RethinkDB
deploy首先啟動的就是RethinkDB容器,shipyard採用RethinkDB作為資料庫來儲存使用者等資訊
2)Discovery
為了使用Swarm,我們需要一個外部的金鑰值儲存群容器,shipyard預設是採用了etcd。
3)shipyard_certs
證照管理容器,實現證照驗證功能
4)Proxy
預設情況下,Docker引擎只監聽Socket,我們可以重新配置引擎使用TLS或者使用一個代理容器,轉發請求從TCP到Docker監聽的UNIX Socket。
5)Swarm Manager
Swarm管理器
6)Swarm Agent
Swarm代理,執行在每個節點上。
7)Controller
shipyard控制器,Remote API的實現和web的實現。

Centos7.5系統下Shipyard(中文版)部署記錄

[root@docker-218 ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

[root@docker-218 ~]# ifconfig|grep 172.16.60.218
inet 172.16.60.218 netmask 255.255.255.0 broadcast 172.16.60.255

關閉主機防火牆
[root@docker-218 ~]# systemctl disable firewalld.service
[root@docker-218 ~]# systemctl stop firewalld.service
[root@docker-218 ~]# iptables -F
[root@docker-218 ~]# firewall-cmd --state
not running

安裝docker
[root@docker-218 ~]# yum install docker

修改docker配置檔案,新增下面一行,進行docker加速設定
[root@node-1 ~]# vim /etc/sysconfig/docker                //在檔案底部新增下面一行, (這裡就是直接寫: xxx.mirror.aliyuncs.com)
ADD_REGISTRY='--add-registry xxx.mirror.aliyuncs.com'

啟動docker服務
[root@docker-218 ~]# systemctl start docker

下載相關映象(這些映象如果不提前下載,則在下面一鍵安裝部署時會自動下載,不過要等待一段時間. 所以最好提前下載,一鍵部署時就很快了)
[root@docker-218 ~]# docker pull rethinkdb
[root@docker-218 ~]# docker pull microbox/etcd
[root@docker-218 ~]# docker pull shipyard/docker-proxy
[root@docker-218 ~]# docker pull swarm
[root@docker-218 ~]# docker pull dockerclub/shipyard

下載官方一鍵部署指令碼
https://shipyard-project.com/deploy            這個地址已經失效
最新下載地址: https://pan.baidu.com/s/1ATM32S7tLA35Q-xK7-TgzQ     
提取密碼: kgqi

接著執行一鍵部署
替換Controller為中文版
[root@docker-213 ~]# chmod 755 shipyard-deploy 
[root@docker-213 ~]# sh shipyard-deploy 
Deploying Shipyard
 -> Starting Database
 -> Starting Discovery
 -> Starting Cert Volume
 -> Starting Proxy
 -> Starting Swarm Manager
 -> Starting Swarm Agent
 -> Starting Controller
Waiting for Shipyard on 172.16.60.213:8080

Shipyard available at http://172.16.60.213:8080
Username: admin Password: shipyard

部署後,可以看到相應的shipyard容器已經建立好了
[root@docker-218 ~]# docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                                            NAMES
0cc242b4d90b        dockerclub/shipyard:latest     "/bin/controller -..."   19 seconds ago      Up 15 seconds       0.0.0.0:8080->8080/tcp                           shipyard-controller
ce08a7f0f62f        swarm:latest                   "/swarm j --addr 1..."   20 seconds ago      Up 19 seconds       2375/tcp                                         shipyard-swarm-agent
9d2dd2bd5bff        swarm:latest                   "/swarm m --replic..."   20 seconds ago      Up 19 seconds       2375/tcp                                         shipyard-swarm-manager
3435b5e2d13a        shipyard/docker-proxy:latest   "/usr/local/bin/run"     21 seconds ago      Up 20 seconds       0.0.0.0:2375->2375/tcp                           shipyard-proxy
315ca39f00dd        alpine                         "sh"                     21 seconds ago      Up 21 seconds                                                        shipyard-certs
564f25ac8130        microbox/etcd:latest           "/bin/etcd -addr 1..."   22 seconds ago      Up 21 seconds       0.0.0.0:4001->4001/tcp, 0.0.0.0:7001->7001/tcp   shipyard-discovery
bff634944376        rethinkdb                      "rethinkdb --bind all"   22 seconds ago      Up 22 seconds       8080/tcp, 28015/tcp, 29015/tcp                   shipyard-rethinkdb

最後訪問http://172.16.60.218:8080,使用admin/shipyard使用者名稱和密碼登入即可.  (注意:一鍵部署之後,需要稍等一會兒,8080埠才能起來)

===================================================================================
如果想要修改web訪問埠,則操作如下:
[root@docker-218 ~]# cat shipyard-deploy |grep 8080
    echo "  PORT: specify the listen port for the controller (default: 8080)"
SHIPYARD_PORT=${PORT:-8080}

比如將指令碼中預設的8080埠改為80埠
[root@docker-218 ~]# sed -i 's/8080/80/g' shipyard-deploy

然後重新部署即可

shipyard的web介面展示如下

刪除Shipyard環境操作

[root@docker-218 ~]# cat shipyard-deploy |ACTION=remove bash             
Removing Shipyard
 -> Removing Database
 -> Removing Discovery
 -> Removing Cert Volume
 -> Removing Proxy
 -> Removing Swarm Agent
 -> Removing Swarm Manager
 -> Removing Controller
Done

[root@docker-218 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Shipyard新增其他節點主機(centos7.X系統的主機)的操作記錄

比如將172.16.60.220機器節點加入到上面的shipyard管理中. 

則需要在被加入節點機器上如下操作:
1) 在被加入的節點上按照上面的最新地址下載shipyard-deploy
2) 執行下面操作 (注意下面etcd地址要寫成shipyard部署機的ip地址. 首次執行時會自動下載映象,需要等待一段時間)
[root@docker-220 ~]# cat shipyard-deploy| ACTION=node DISCOVERY=etcd://172.16.60.218:4001 bash 
......
Node added to Swarm: 172.16.60.220

[root@docker-220 ~]# docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
65b7783d7e1e        swarm:latest                   "/swarm j --addr 1..."   12 seconds ago      Up 10 seconds       2375/tcp                 shipyard-swarm-agent
1b50c974b6e7        swarm:latest                   "/swarm m --replic..."   14 seconds ago      Up 12 seconds       2375/tcp                 shipyard-swarm-manager
2514cf31947b        shipyard/docker-proxy:latest   "/usr/local/bin/run"     17 seconds ago      Up 15 seconds       0.0.0.0:2375->2375/tcp   shipyard-proxy
bc9c79df1707        alpine                         "sh"                     19 seconds ago      Up 16 seconds       

注意,新增節點時,上面一鍵指令碼需要執行在被新增的節點主機上,而不是shipyard部署節點的機器上.

然後登入http://172.16.60.218:8080,在"容器管理"-"主機節點"中看到新增的節點資訊了. 

刪除節點機
[root@docker-220 ~]# cat shipyard-deploy |ACTION=remove bash -s
Removing Shipyard
 -> Removing Database
 -> Removing Discovery
 -> Removing Cert Volume
 -> Removing Proxy
 -> Removing Swarm Agent
 -> Removing Swarm Manager
 -> Removing Controller
Done
[root@docker-220 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 

需要注意:如果新增CentOS6.x系統的節要先升級kernel和docker

1) 升級核心
[root@docker-6 ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)

[root@docker-6 ~]# uname -r 
2.6.32-696.el6.x86_64

可以參考http://elrepo.org/tiki/tiki-index.php    根據系統版本選擇el源 

先匯入公鑰
[root@docker-6 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@docker-6 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

升級核心
[root@docker-6 ~]# yum --enablerepo=elrepo-kernel install kernel-lt -y
或者安裝
[root@docker-6 ~]# yum --enablerepo=elrepo-kernel install kernel-ml -y

修改Grub.conf
[root@docker-6 ~]# vim /etc/grub.conf
.....
default=0                     //將此項的值由1改為0

重啟系統
[root@docker-6 ~]# init 6

重啟後再次檢視核心,發現已經升級了
[root@docker-6 ~]# uname -r                
4.4.162-1.el6.elrepo.x86_64

2) 升級docker (如果之前部署了docker環境的話)
下面的docker二進位制檔案,百度雲盤下載地址: https://pan.baidu.com/s/1AWBbF-CXfXFkIIYs5DTCmA
提取密碼: a4r6
[root@docker-6 ~]# wget https://get.docker.com/builds/Linux/x86_64/docker-1.10.3
[root@docker-6 ~]# chmod 755 docker-1.9.1                //這是下載的docker二進位制檔案

停止docker服務
[root@docker-6 ~]# service docker stop

替換docker二進位制檔案
[root@docker-6 ~]# cp /usr/bin/docker /usr/bin/docker_bak
[root@docker-6 ~]# cp docker-1.9.1 /usr/bin/docker

啟動docker服務
[root@docker-6 ~]# service docker start

下載shipyard一鍵部署指令碼
[root@docker-6 ~]# chmod 755 shipyard-deploy
[root@docker-220 ~]# cat shipyard-deploy| ACTION=node DISCOVERY=etcd://172.16.60.218:4001 bash

Nginx做域名轉發:  在nginx配置檔案http塊裡新增如下程式碼:

upstream shipyard {
     server 172.16.60.218:8080;
}
server {
    listen          80;
    server_name     kevin.shipyard.com;
 
    location / {
        proxy_pass http://shipyard;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}


以下三行程式碼為nginx做WebSockets跳轉否則,在執行shell時會報400錯誤
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

利用shipyard部署swarm叢集及管理容器, 則swarm-manage為shipyard部署機, 其他swarm-node節點則為新增到shipyard管理中的節點.

相關文章