国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - 詳解基于docker-swarm搭建持續集成集群服務

詳解基于docker-swarm搭建持續集成集群服務

2021-03-10 18:19馬猴燒酒啊蝦蝦蝦 服務器知識

這篇文章主要介紹了詳解基于docker-swarm搭建持續集成集群服務,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

本文只為自己搭建過程中的一些簡單的記錄。如果實踐中有疑問,可以一起探討。

為了能在本機(macOS)模擬集群環境,使用了vb和docker-machine。整體持續集成的幾個機器設施如下:

1、服務節點:三個manager節點,一個worker節點。manager需要占用更多的資源,manager配置盡量高一些。swarm的manager節點的容錯率是 (N-1)/2 。N是manager節點數。也就是如果有3個manager,那就能容忍一個manager節點掛掉。官方的算法說明:Raft consensus in swarm mode。

2、本地的鏡像倉庫 registry:用來存儲所有需要部署的服務docker鏡像。

https://docs.docker.com/registry/deploying/

因為使用swarm機制,所以不需要在服務間通信問題考慮服務發現以及負載均衡的問題(代替原有的consul&registor方式)。

3、構建鏡像的運維節點 ops:

也即運維機器。一個獨立的節點即可。主要負責build鏡像,push鏡像。在ops里可以構建gitlab的私庫。維護構建腳本。機器所需配置不高,對網絡寬帶還是盡量多一些。

用docker-machine 模擬集群環境

創建registry節點

?
1
docker-machine create -d virtualbox --virtualbox-memory "512" registry

–engine-registry-mirror 這個參數是可以設置一些加速倉庫的地址。

創建manager,worker節點

manager

 

復制代碼 代碼如下:
docker-machine create -d virtualbox --virtualbox-memory "800"  manager1
    

 

worker:

?
1
2
3
docker-machine create -d virtualbox --virtualbox-memory "800" worker1
docker-machine create -d virtualbox --virtualbox-memory "800" worker2
docker-machine create -d virtualbox --virtualbox-memory "800" worker3

創建ops 節點

?
1
docker-machine create -d virtualbox --virtualbox-memory "512" ops

查看機器列表狀態

?
1
docker-machine ls

創建registry服務

登錄到registry機器上。

?
1
docker-machine ssh registry

創建一個registry服務。

?
1
2
3
docker run -d -p 5000:5000 --restart=always --name registry \
 -v `pwd`/data:/var/lib/registry \
 registry:2

命令設置了-v volumn選項,這樣在每次容器服務重啟的時候,不會丟失已經pull的鏡像數據。registry,mysql等存儲類型的容器,建議設置一下volumn.如果為了更好的擴展,也可以將鏡像倉庫備份到其他driver里,如阿里云的OSS.

運行docker ps就可以看到一個啟動好的registry服務。當然,為了更好的擴展,也可以掛載在自己的域名下,重新run 的時候添加認證信息。

為了更方便管理容器,可以使用docker-compose 組件。安裝:

 

復制代碼 代碼如下:
curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
 

 

也可以寫好compose文件之后直接啟動:

?
1
docker-compose up -d

本地倉庫push鏡像

現在可以嘗試拉一個鏡像,然后tag到本地的registry倉庫,如

 

復制代碼 代碼如下:
docker pull lijingyao0909/see:1.0.3 && docker tag lijingyao0909/see:1.0.3 localhost:5000/see:1.0.3

 

然后再執行push 命令:

?
1
docker push localhost:5000/see:1.0.3

這個鏡像就push到了registry服務中,最直接的方式可以通過查看本地的volumn目錄,如本例中的 data目錄查看到鏡像數據。
如果為了更方便的可視化管理registry,也可以試用下registry UI 相關的鏡像如hyper/docker-registry-web

 

復制代碼 代碼如下:
docker run -it -p 8080:8080 --name registry-web --link registry-srv -e REGISTRY_URL=http://registry-srv:5000/v2 -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web

 

然后訪問 hostname:5000/registory/index可以看到簡單的鏡像列表UI。

https 問題

在本地測試時如果執行以上步驟,在push,或者在其他vb中pull鏡像時遇到以下問題:

Error response from daemon: Get https://registry:5000/v1/_ping: dial tcp 218.205.57.154:5000: i/o timeout

處理方式是,修改registry的認證,如下先修改“/var/lib/boot2docker/profile”:

?
1
sudo vi /var/lib/boot2docker/profile

添加

?
1
2
DOCKER_OPTS="--insecure-registry <host-name>:5000"
DOCKER_OPTS="--insecure-registry registry:5000"

因為registry的hostname就是 registry。所以執行docker ifno命令可以看到:

?
1
2
3
Insecure Registries:
 registry:5000
 127.0.0.0/8

同時,在其他的worker機器,manager機器也需要修改–insecure-registry屬性,才可以pull私庫的鏡像。修改之后需重新restart vb。

重啟后,在manager重新嘗試pull

?
1
docker pull registry:5000/see:1.0.3

 可以看到成功連接倉庫并拉取鏡像。注意,本示例使用的是機器名,registry,而不是IP地址。所以,在拉取鏡像的時候,需在各自的vb 的etc/hosts文件配置ip和機器名的映射。用機器名的方式比較操作易記。當然最好的方式還是通過域名訪問倉庫。

參考資源

部署registry服務

創建ops服務

swarm的服務集群會直接從registry上pull鏡像,直接啟動應用的service服務。服務的鏡像直接打在registry倉庫中,但是源碼可以維護在ops機器上。前面創建的ops的virtual-box,可以部署gitlab服務。啟動參數可以參考Deploy GitLab Docker images

先pull一個gitlab鏡像

?
1
2
3
4
5
6
7
8
9
docker run --detach \
 --hostname gitlab.lijingyao.com \
 --publish 443:443 --publish 80:80 --publish 22:22 \
 --name gitlab \
 --restart always \
 --volume `pwd`/gitlab/config:/etc/gitlab \
 --volume `pwd`/gitlab/logs:/var/log/gitlab \
 --volume `pwd`/gitlab/data:/var/opt/gitlab \
 gitlab/gitlab-ce:8.14.4-ce.0

使用git私庫

因綁定了80端口,啟動gitlab后訪問:http://machine-host/

第一次進入gitlab會自動跳轉到重置密碼。可以設置一個新的密碼,這個是root賬號的密碼。后續就可以注冊其他git用戶使用了。
這里,如果申請了域名服務,或者本地綁定gitlab.lijingyao.com 到這個virtualbox的ip地址,就可以直接訪問gitlab.lijingyao.com地址。在實際生產環境有固定公網ip,自己的dns服務,就不需要綁定host。這里只是本地測試,所以暫時就通過綁定host的方式。

swarm

本例中的服務是一個簡單的springboot 和gradle的工程,服務鏡像可以在docker hub pull,see service image。打包好鏡像后,直接在gradle task中push到registry倉庫中。在本地環境可以直接在工程目錄里執行。gradle task然后push到vb的registry中,再在registry 倉庫pull鏡像即可。現在開始準備初始化swarm 集群。

現在整個vb 集群的機器,查看如下:

?
1
2
3
4
5
6
7
8
9
10
$docker-machine ls
 
NAME  ACTIVE DRIVER  STATE  URL       SWARM DOCKER ERRORS
haproxy -  virtualbox Running tcp://192.168.99.103:2376   v1.12.3
manager1 -  virtualbox Running tcp://192.168.99.100:2376   v1.12.3
ops  -  virtualbox Running tcp://192.168.99.106:2376   v1.12.3
registry -  virtualbox Running tcp://192.168.99.107:2376   v1.12.3
worker1 -  virtualbox Running tcp://192.168.99.101:2376   v1.12.3
worker2 -  virtualbox Running tcp://192.168.99.102:2376   v1.12.3
worker3 -  virtualbox Running tcp://192.168.99.105:2376   v1.12.3

然后用docker-machine ssh manager1登陸到manager1機器上。

初始化swarm manager節點

在manager1 機器上初始化swarm,這個初始化的機器就是swarm的manager.執行:

?
1
docker swarm init --advertise-addr 192.168.99.100

會看到以下執行輸出:

?
1
2
3
4
5
6
7
8
9
Swarm initialized: current node (03x5vnxmk2gc43i0d7xpycvjg) is now a manager.
 
To add a worker to this swarm, run the following command:
 
 docker swarm join \
 --token SWMTKN-1-5ru6lyco3upj7oje6hidug3erqczok84wk7bekzfaca4uv51r9-22bcjhkbxnclmw3nl3ui8601l \
 192.168.99.100:2377
 
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

這個生成的token值,是其他swarm集群節點join到整個swarm的key。如果忘記了token,可以在manager1上執行:

?
1
$docker swarm join-token manager

來查看目前的token值。官方建議至少6個月更換以下token。更換命令:

?
1
$docker swarm join-token --rotate worker

添加worker節點

分別登錄 worker1,worker2,worker3,執行join命令。

在join之前,先查看下docker 網絡設施。執行

?
1
2
3
4
5
$ docker network ls
NETWORK ID   NAME    DRIVER    SCOPE
4b7fe1416322  bridge    bridge    local   
06ab6f3352b0  host    host    local   
eebd5c8e0d5d  none    null    local

按照manager1 初始化之后的命令,執行:

?
1
2
3
docker swarm join \
 --token SWMTKN-1-5ru6lyco3upj7oje6hidug3erqczok84wk7bekzfaca4uv51r9-22bcjhkbxnclmw3nl3ui8601l \
 192.168.99.100:2377

此時在任何worker節點再執行docker network ls 即可看到多了一個overlay的覆蓋范圍為swarm的網絡通道。

三個worker都加入之后,在manager1 上即可看到manager的node節點情況

?
1
2
3
4
5
6
docker node ls
ID       HOSTNAME STATUS AVAILABILITY MANAGER STATUS
03x5vnxmk2gc43i0d7xpycvjg * manager1 Ready Active  Leader 
2y5wrndibe8c8sqv6851vrlgp worker1 Ready Active  Reachable
dwgol1uinkpsybigc1gm5jgsv worker2 Ready Active 
etgyky6zztrapucm59yx33tg1 worker3 Ready Active  Reachable

manager status的Reachable狀態表示該節點也是manager節點。這是因為我們在worker1,worker3分別執行了

?
1
2
docker node promote worker1
docker node promote worker3

worker1,worker3此時也可以執行swarm命令,在manager1關停時,就會選舉其中之一作為新的leader。如果要去除node的manager狀態,可以通過demote命令去除。執行后,worker節點就變成普通的任務節點。

?
1
docker node demote worker1 worker3

swarm節點的其他狀態

swarm節點可以設置drain狀態,drain狀態的節點不會執行任何service。

將某個node設置不可用:

?
1
docker node update --availability drain worker1

Pause,Drain,Active三個狀態,pause標識有任務運行,不接受新任務。

如果要將worker1 節點去除swarm中心,現在需被移除的節點(worker1)執行:docker swarm leave 然后在manager上執行:docker node rm worker1,即可移除一個swarm節點。

創建swarm服務

本例中使用swarm部署一個基于springboot的rest api服務。倉庫的地址:springboot-restful-exam,創建的服務name是deftsee,綁定80端口,并且擴展4個運行容器服務。

?
1
2
3
4
5
6
docker service create \
 --replicas 4 \
 --name deftsee \
 --update-delay 10s \
 --publish 8080:80 \
 lijingyao0909/see:1.0.3

服務創建之后,可以查看服務節點的狀態

?
1
2
3
docker@manager1:~$ docker service ls
ID   NAME  REPLICAS IMAGE     COMMAND
a6s5dpsyz7st deftsee 4/4  lijingyao0909/see:1.0.3

REPLICAS 代表服務的運行容器數,如果是0/4就代表所有服務都沒有起來。詳細查看各個節點運行狀態可以用docker service ps servicename

?
1
2
3
4
5
6
docker@manager1:~$ docker service ps deftsee
ID       NAME  IMAGE     NODE  DESIRED STATE CURRENT STATE   ERROR
8lsdkf357lk0nmdeqk7bi33mp deftsee.1 lijingyao0909/see:1.0.3 worker2 Running  Running 5 minutes ago
cvqm5xn7t0bveo4btfjsm04jp deftsee.2 lijingyao0909/see:1.0.3 manager1 Running  Running 7 minutes ago
6s5km76w2vxmt0j4zgzi4xi5f deftsee.3 lijingyao0909/see:1.0.3 worker1 Running  Running 5 minutes ago
4cl9vnkssedpvu2wtzu6rtgxl deftsee.4 lijingyao0909/see:1.0.3 worker3 Running  Running 6 minutes ago

可以看到任務被平分到所有的四個任務節點運行。下面再擴容deftsee服務

?
1
2
3
4
5
6
7
8
9
10
docker@manager1:~$ docker service scale deftsee=6
deftsee scaled to 6
docker@manager1:~$ docker service ps deftsee
ID       NAME  IMAGE     NODE  DESIRED STATE CURRENT STATE   ERROR
8lsdkf357lk0nmdeqk7bi33mp deftsee.1 lijingyao0909/see:1.0.3 worker2 Running  Running 8 minutes ago
cvqm5xn7t0bveo4btfjsm04jp deftsee.2 lijingyao0909/see:1.0.3 manager1 Running  Running 10 minutes ago
6s5km76w2vxmt0j4zgzi4xi5f deftsee.3 lijingyao0909/see:1.0.3 worker1 Running  Running 8 minutes ago
4cl9vnkssedpvu2wtzu6rtgxl deftsee.4 lijingyao0909/see:1.0.3 worker3 Running  Running 9 minutes ago
71uv51uwvso4l340xfkbacp2i deftsee.5 lijingyao0909/see:1.0.3 manager1 Running  Running 5 seconds ago
4r2q7q782ab9fp49mdriq0ssk deftsee.6 lijingyao0909/see:1.0.3 worker2 Running  Running 5 seconds ago

lijingyao0909/see:1.0.3是dockerhub的公共倉庫的鏡像,服務創建時會去pull鏡像,整體速度偏慢,所以可以結合私有倉庫,直接在registry機器上pull鏡像。服務可以直接用docker service rm deftsee移除服務,然后通過registry重建服務。

?
1
2
3
4
5
6
docker service create \
 --replicas 6 \
 --name deftsee \
 --update-delay 10s \
 --publish 8080:80 \
 registry:5000/see:1.0.4

此時登錄任何一臺worker服務,查看運行的容器鏡像:

?
1
2
3
docker@worker2:~$ docker ps
CONTAINER ID  IMAGE      COMMAND     CREATED    STATUS    PORTS    NAMES
89d4f588290b  registry:5000/see:1.0.4 "/bin/sh -c 'java -Dc" About a minute ago Up About a minute 8080/tcp   deftsee.1.eldpgb1aqtf9v49cxolydfjm9

如果要更新服務,可以直接通過update命令更新版本,并且服務滾動發布,通過設置*–update-delay 10s *可以改變更新時各個節點的延遲時間。

?
1
docker service update --image registry:5000/see:1.0.5 deftsee

重啟某個node的服務

關閉:docker node update –availability drain worker1

開啟:docker node update –availability active worker1

更新服務端口

更新一個服務的端口會重啟服務(關閉原有服務,重新創建服務并啟動):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
docker service update \
 --publish-add <PUBLISHED-PORT>:<TARGET-PORT> \
 <SERVICE>
 
docker@manager1:~$docker service update \
 --publish-add 8099:8080 \
 deftsee
 
docker@manager1:~$ docker service ps deftsee
ID       NAME   IMAGE     NODE  DESIRED STATE CURRENT STATE    ERROR
3xoe34msrht9eqv7eplnmlrz5 deftsee.1  registry:5000/see:1.0.4 manager1 Running  Running 39 seconds ago 
eldpgb1aqtf9v49cxolydfjm9 \_ deftsee.1 registry:5000/see:1.0.4 worker2 Shutdown  Shutdown 39 seconds ago 
9u4fh3mi5kxb14y6gih5d8tqv deftsee.2  registry:5000/see:1.0.4 manager1 Running  Running about a minute ago
0skgr5fx4xtt6y71yliksoft0 \_ deftsee.2 registry:5000/see:1.0.4 worker1 Shutdown  Shutdown about a minute ago
8hposdkqe92k7am084z6kt1j0 deftsee.3  registry:5000/see:1.0.4 worker3 Running  Running about a minute ago
c5vhx1wx0q8mxaweaq0mia6n7 \_ deftsee.3 registry:5000/see:1.0.4 manager1 Shutdown  Shutdown about a minute ago
9se1juxiinmetuaccgkjc3rr2 deftsee.4  registry:5000/see:1.0.4 worker1 Running  Running about a minute ago
4wofho0axvrjildxhckl52s41 \_ deftsee.4 registry:5000/see:1.0.4 worker3 Shutdown  Shutdown about a minute ago

服務驗證和網絡

例子中的服務啟動后,可以直接通過ip:port訪問。如http://192.168.99.100:8099/see,可以看到服務請求會分發到各個運行的節點中。也就是swarm的overlay網絡層,各個節點的網絡是互通的,swarm做了load balance,在swarm的lb的基礎上也可搭建自己定義的overlay網絡,創建的這個overlay 網絡,所有節點都可以和這個network互通。但是在服務創建的時候需要制定network選項。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$docker network create \
 --driver overlay \
 --subnet 10.0.9.0/24 \
 --opt encrypted \ 
 my-network
 
$docker service create \
 --name deftsee \
 --publish 8099:80 \
 --replicas 4 \
 --network my-network \
 -l com.df.serviceDomain=deftsee.com \
 -l com.df.notify=true \
 lijingyao0909/see:1.0.3

–network my-network制定了服務可連接到的docker network,可以在swarm的節點創建一個name為my-network的網絡。所以也可以在swarm機制中搭建consul和haproxy的服務發現和lb機制。

當為一個服務指定一個network的時候,swarm上執行的任務也必須都在這個指定的網絡上才能和服務互通。如果節點上沒有加入到swarm模式的node中,或者沒有運行掛載在這個指定網絡的時候,也不會和這個network互通.docker network ls也不會查出該網絡。創建服務時通過–network my-network這個標簽鏈接到這個網絡。在查看網絡時,docker network inspect my-network可以查看返回的Containers 列出的該節點的掛載容器。

創建了一個網絡服務,有service連接到網絡時,swarm會給這個網絡下的服務(service)指定一個vip. swarm 內部的lb會自動分發服務,不需要指定每個服務端口,即在同一個network連接的容器,通過service name就可以訪問到服務。因為所有加入到這個network的容器都會通過gossip協議共享一個DNS映射(vip映射根據service name 綁定到的dns別名映射)。

查看服務的vip網絡信息:

?
1
2
3
4
5
$docker service inspect \
 --format='{{json .Endpoint.VirtualIPs}}' \
 deftsee
 
輸出:[{"NetworkID":"dn05pshfagohpebgonkhj5kxi","Addr":"10.255.0.6/16"}]

swarm管理

為了保持manager節點的可用性(心跳機制,leader選舉),可以將manager節點設置成不接受服務運行,節省manager節點資源,將manager節點隔離出任務環境。

?
1
docker node update --availability drain <NODE>

備份/var/lib/docker/swarm/raft 狀態

清理不可用的節點

?
1
2
docker node demote <NODE>
docker node rm <id-node>.

節點重新加入manager re-join

?
1
2
3
$docker node demote <NODE>.
$docker node rm <NODE>.
$docker swarm join ...

初始化的時候指定固定ip ,init –advertise-addr。worker節點可以用動態ip 。

參考資源

Swarm mode

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/lijingyao8206/article/details/53728728

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人免费视频视频 | 免费观看在线午夜影视 | 成人在线免费小视频 | 日韩中文字幕视频在线 | 国产免费亚洲 | 欧美三级在线播放 | 亚洲国产精品一区二区久久 | 转生成为史莱姆这档事第四季在线观看 | 黄色av免费在线播放 | 国产欧美在线 | 91麻豆精品国产91久久久久久久久 | 看污片网站 | 国产精品久久久久久久久久三级 | 国产剧情一区 | 69久久| 亚洲一区二区精品视频 | 欧美日韩一区二区三区免费视频 | 免费在线一区二区 | 狠狠操网站 | 黄色在线网站 | 成人午夜毛片 | 欧美日韩视频在线观看免费 | 一区二区三区高清不卡 | 亚洲精品片 | 俺来也俺也啪www色 性色视频在线 | 成人精品一区二区 | 国产欧美精品一区二区色综合 | 99热精品国产 | 伊人3| 日韩欧美久久 | 亚洲成av在线 | 中文字幕一区二区三区四区 | 成人羞羞视频在线观看免费 | 久久久高清 | 搞黄网站 | 国产欧美综合一区二区三区 | 中文字幕在线播放一区 | 国产最新一区 | 婷婷亚洲五月 | 一本一本久久a久久精品综合妖精 | 亚洲精选久久 |