docker如何部署etcd集群
更新時(shí)間:2023年03月16日 15:28:32 作者:AlexClownfish
這篇文章主要介紹了docker如何部署etcd集群?jiǎn)栴},具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
需要安裝:
dockerdocker-compose
參數(shù)詳細(xì):
–name:設(shè)置成員節(jié)點(diǎn)的別名,建議為每個(gè)成員節(jié)點(diǎn)配置可識(shí)別的命名–advertise-client-urls:廣播到集群中本成員的監(jiān)聽客戶端請(qǐng)求的地址–initial-advertise-peer-urls:廣播到集群中本成員的Peer監(jiān)聽通信地址–listen-client-urls:客戶端請(qǐng)求的監(jiān)聽地址列表–listen-peer-urls:Peer消息的監(jiān)聽服務(wù)地址列表–initial-cluster-token:?jiǎn)?dòng)集群的時(shí)候指定集群口令,只有相同token的幾點(diǎn)才能加入到同一集群–initial-cluster:所有集群節(jié)點(diǎn)的地址列表–initial-cluster-state:初始化集群狀態(tài),默認(rèn)為new,也可以指定為exi-string表示要加入到一個(gè)已有集群
創(chuàng)建etcd數(shù)據(jù)目錄
mkdir -p ./etcd-node{1,2,3}創(chuàng)建docker網(wǎng)絡(luò)
docker network create --driver bridge --subnet 172.62.0.0/16 --gateway 172.62.0.1 etcd-cluster
etcd-cluster-compose.yml
version: '3'
networks:
etcd-cluster:
external: true
services:
etcd-node1:
image: quay.io/coreos/etcd:v3.3.1
container_name: etcd-node1
ports:
- "12379:2379"
- "12380:2380"
restart: always
volumes:
- ./etcd-node1:/data/app/etcd
command: etcd --name etcd-node1 --data-dir /data/app/etcd/ --advertise-client-urls http://172.62.0.10:2379 --initial-advertise-peer-urls http://172.62.0.10:2380 --listen-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-cluster-token etcd-cluster --initial-cluster "etcd-node1=http://172.62.0.10:2380,etcd-node2=http://172.62.0.11:2380,etcd-node3=http://172.62.0.12:2380" --initial-cluster-state new
networks:
etcd-cluster:
ipv4_address: 172.62.0.10
etcd-node2:
image: quay.io/coreos/etcd:v3.3.1
container_name: etcd-node2
ports:
- "22379:2379"
- "22380:2380"
restart: always
volumes:
- ./etcd-node2:/data/app/etcd
command: etcd --name etcd-node2 --data-dir /data/app/etcd/ --advertise-client-urls http://172.62.0.11:2379 --initial-advertise-peer-urls http://172.62.0.11:2380 --listen-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-cluster-token etcd-cluster --initial-cluster "etcd-node1=http://172.62.0.10:2380,etcd-node2=http://172.62.0.11:2380,etcd-node3=http://172.62.0.12:2380" --initial-cluster-state new
networks:
etcd-cluster:
ipv4_address: 172.62.0.11
etcd-node3:
image: quay.io/coreos/etcd:v3.3.1
container_name: etcd-node3
ports:
- "32379:2379"
- "32380:2380"
restart: always
volumes:
- ./etcd-node3:/data/app/etcd
command: etcd --name etcd-node3 --data-dir /data/app/etcd/ --advertise-client-urls http://172.62.0.12:2379 --initial-advertise-peer-urls http://172.62.0.12:2380 --listen-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-cluster-token etcd-cluster --initial-cluster "etcd-node1=http://172.62.0.10:2380,etcd-node2=http://172.62.0.11:2380,etcd-node3=http://172.62.0.12:2380" --initial-cluster-state new
networks:
etcd-cluster:
ipv4_address: 172.62.0.12
啟動(dòng)并驗(yàn)證集群
啟動(dòng)
[root@k8s-node1 etcd-cluster]# docker-compose -f etcd-cluster-compose.yml up -d Pulling etcd-node1 (quay.io/coreos/etcd:v3.3.1)... v3.3.1: Pulling from coreos/etcd ff3a5c916c92: Pull complete dec5fcc85a18: Pull complete 3944f16f0112: Pull complete 0b6d29b049fe: Pull complete d8c39ae91d38: Pull complete 42fcea4864ba: Pull complete Digest: sha256:454e69370d87554dcb4272833b8f07ce1b5d457caa153bda4070b76d89a1cc97 Status: Downloaded newer image for quay.io/coreos/etcd:v3.3.1 Creating etcd-node1 ... done Creating etcd-node2 ... done Creating etcd-node3 ... done
[root@k8s-node1 etcd-cluster]# docker-compose -f etcd-cluster-compose.yml ps -a Name Command State Ports ------------------------------------------------------------------------------------------------------ etcd-node1 etcd --name etcd-node1 --d ... Up 0.0.0.0:12379->2379/tcp, 0.0.0.0:12380->2380/tcp etcd-node2 etcd --name etcd-node2 --d ... Up 0.0.0.0:22379->2379/tcp, 0.0.0.0:22380->2380/tcp etcd-node3 etcd --name etcd-node3 --d ... Up 0.0.0.0:32379->2379/tcp, 0.0.0.0:32380->2380/tcp
驗(yàn)證集群
通過etcdctl member list命令可以查詢出所有集群節(jié)點(diǎn)的列表并且結(jié)果一致即為成功
[root@k8s-node1 etcd-cluster]# docker exec -it etcd-node1 /bin/sh / # etcdctl member list 8cef47d732d4acff: name=etcd-node1 peerURLs=http://172.62.0.10:2380 clientURLs=http://172.62.0.10:2379 isLeader=false c93af917b643516f: name=etcd-node3 peerURLs=http://172.62.0.12:2380 clientURLs=http://172.62.0.12:2379 isLeader=true cdee7114ad135065: name=etcd-node2 peerURLs=http://172.62.0.11:2380 clientURLs=http://172.62.0.11:2379 isLeader=false / # exit [root@k8s-node1 etcd-cluster]# docker exec -it etcd-node2 /bin/sh / # etcdctl member list 8cef47d732d4acff: name=etcd-node1 peerURLs=http://172.62.0.10:2380 clientURLs=http://172.62.0.10:2379 isLeader=false c93af917b643516f: name=etcd-node3 peerURLs=http://172.62.0.12:2380 clientURLs=http://172.62.0.12:2379 isLeader=true cdee7114ad135065: name=etcd-node2 peerURLs=http://172.62.0.11:2380 clientURLs=http://172.62.0.11:2379 isLeader=false [root@k8s-node1 etcd-cluster]# docker exec -it etcd-node3 /bin/sh / # etcdctl member list 8cef47d732d4acff: name=etcd-node1 peerURLs=http://172.62.0.10:2380 clientURLs=http://172.62.0.10:2379 isLeader=false c93af917b643516f: name=etcd-node3 peerURLs=http://172.62.0.12:2380 clientURLs=http://172.62.0.12:2379 isLeader=true cdee7114ad135065: name=etcd-node2 peerURLs=http://172.62.0.11:2380 clientURLs=http://172.62.0.11:2379 isLeader=false
k/v操作
CURL
新增
[root@k8s-node1 etcd-cluster]# docker-compose -f etcd-cluster-compose.yml ps -a
Name Command State Ports
------------------------------------------------------------------------------------------------------
etcd-node1 etcd --name etcd-node1 --d ... Up 0.0.0.0:12379->2379/tcp, 0.0.0.0:12380->2380/tcp
etcd-node2 etcd --name etcd-node2 --d ... Up 0.0.0.0:22379->2379/tcp, 0.0.0.0:22380->2380/tcp
etcd-node3 etcd --name etcd-node3 --d ... Up 0.0.0.0:32379->2379/tcp, 0.0.0.0:32380->2380/tcp
[root@k8s-node1 etcd-cluster]# curl -L http://127.0.0.1:12379/version
{"etcdserver":"3.3.1","etcdcluster":"3.3.0"}[root@k8s-node1 etcd-cluster]#
[root@k8s-node1 etcd-cluster]# curl -L http://127.0.0.1:12379/v2/keys/Alexclownfish -X PUT -d value=https://blog.alexcld.com
{"action":"set","node":{"key":"/Alexclownfish","value":"https://blog.alexcld.com","modifiedIndex":19,"createdIndex":19}}
查詢
[root@k8s-node1 etcd-cluster]# curl -L http://127.0.0.1:12379/v2/keys/Alexclownfish -X GET
{"action":"get","node":{"key":"/Alexclownfish","value":"https://blog.alexcld.com","modifiedIndex":19,"createdIndex":19}}
[root@k8s-node1 etcd-cluster]# curl -L http://127.0.0.1:22379/v2/keys/Alexclownfish -X GET
{"action":"get","node":{"key":"/Alexclownfish","value":"https://blog.alexcld.com","modifiedIndex":19,"createdIndex":19}}
[root@k8s-node1 etcd-cluster]# curl -L http://127.0.0.1:32379/v2/keys/Alexclownfish -X GET
{"action":"get","node":{"key":"/Alexclownfish","value":"https://blog.alexcld.com","modifiedIndex":19,"createdIndex":19}}
修改
同新建一樣
刪除
[root@k8s-node1 etcd-cluster]# curl -L http://127.0.0.1:12379/v2/keys/Alexclownfish -X DELETE
{"action":"delete","node":{"key":"/Alexclownfish","modifiedIndex":20,"createdIndex":19},"prevNode":{"key":"/Alexclownfish","value":"https://blog.alexcld.com","modifiedIndex":19,"createdIndex":19}}
[root@k8s-node1 etcd-cluster]# curl -L http://127.0.0.1:12379/v2/keys/Alexclownfish -X GET
{"errorCode":100,"message":"Key not found","cause":"/Alexclownfish","index":20}etcdctl
新增
/ # etcdctl set clownfish 1234567 1234567 / # etcdctl get clownfish 1234567
查詢
/ # etcdctl get clownfish 1234567
修改
/ # etcdctl get clownfish 1234567 / # etcdctl set clownfish 987654321ddd 987654321ddd / # etcdctl get clownfish 987654321ddd
刪除
/ # etcdctl rm clownfish PrevNode.Value: 987654321ddd / # etcdctl get clownfish Error: ?100: Key not found (/clownfish) [23]
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Docker Compose 實(shí)現(xiàn)nginx負(fù)載均衡的方法步驟
這篇文章主要介紹了使用Docker Compose 實(shí)現(xiàn)nginx負(fù)載均衡的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
Docker Desktop中安裝MySQL并開啟遠(yuǎn)程訪問的詳細(xì)教程
本文主要介紹了在Docker Desktop中安裝MySQL并開啟遠(yuǎn)程訪問,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Docker進(jìn)入容器運(yùn)行命令的詳細(xì)指南
Docker 是一個(gè)開源的容器化平臺(tái),廣泛應(yīng)用于開發(fā)和生產(chǎn)環(huán)境中,它允許開發(fā)者打包應(yīng)用程序及其依賴項(xiàng)到容器中,本文將詳細(xì)介紹如何通過 Docker 進(jìn)入容器內(nèi)部運(yùn)行命令,探討不同的場(chǎng)景和工具,并提供相關(guān)代碼示例,需要的朋友可以參考下2024-11-11

