欢迎来到站长天空!

其它服务器

当前位置: 主页 > 服务器 > 其它服务器

docker如何部署etcd集群

时间:2025-12-13 01:30:03|栏目:其它服务器|点击:

目录
  • 创建etcd数据目录
  • 创建docker网络
  • etcd-cluster-compose.yml
  • 启动并验证集群
    • 启动
    • 验证集群
  • k/v操作
    • CURL
    • etcdctl
  • 总结

    需要安装:

    • docker
    • docker-compose

    参数详细:

    • –name:设置成员节点的别名,建议为每个成员节点配置可识别的命名
    • –advertise-client-urls:广播到集群中本成员的监听客户端请求的地址
    • –initial-advertise-peer-urls:广播到集群中本成员的Peer监听通信地址
    • –listen-client-urls:客户端请求的监听地址列表
    • –listen-peer-urls:Peer消息的监听服务地址列表
    • –initial-cluster-token:启动集群的时候指定集群口令,只有相同token的几点才能加入到同一集群
    • –initial-cluster:所有集群节点的地址列表
    • –initial-cluster-state:初始化集群状态,默认为new,也可以指定为exi-string表示要加入到一个已有集群

    创建etcd数据目录

    mkdir -p ./etcd-node{1,2,3}

    创建docker网络

    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
    

    启动并验证集群

    启动

    [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
    

    验证集群

    通过etcdctl member list命令可以查询出所有集群节点的列表并且结果一致即为成功

    [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]

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

    上一篇:Docker 批量删除容器或镜像的操作方法

    栏    目:其它服务器

    下一篇:skywalking在docker中应用方式

    本文标题:docker如何部署etcd集群

    本文地址:https://zz.feitang.co/server/30446.html

    广告投放 | 联系我们 | 版权申明

    申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

    如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

    联系QQ:257218569 | 邮箱:257218569@qq.com

    Copyright © 2018-2025 站长天空 版权所有 Powered by EyouCms冀ICP备14023439号