Etcd标准软件基于Bitnami Etcd 构建。当前版本为3.5.11
你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取 配置文件地址: 轻云/qingcloud-platform
什么是etcd
etcd是一个分布式的、高可用的、一致的key-value存储数据库,基于Go语言实现,主要用于共享配置和服务发现。 它归根结底是一个存储组件,且可以实现配置共享和服务发现。在分布式系统中,各种服务配置信息的管理共享和服务发现是一个很基本也是很重要的问题,无论你调用服务还是调度容器,都需要知道对应的服务实例和容器节点地址信息。etcd 就是这样一款实现了元数据信息可靠存储的组件。
容器示例
在示例中,我们将创建一个 Etcd 客户端实例,该实例将连接到与客户端在同一 docker 网络上运行的服务器实例。
适用docker 命令行
第 1 步:创建网络
docker network create app-tier --driver bridge
步骤 2:启动 Etcd 服务器实例
使用命令--network app-tier的参数docker run将 Etcd 容器连接到网络app-tier。
docker run -d --name Etcd-server \
--network app-tier \
--publish 2379:2379 \
--publish 2380:2380 \
--env ALLOW_NONE_AUTHENTICATION=yes \
--env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/etcd:latest
第 3 步:启动 Etcd 客户端实例
最后,我们创建一个新的容器实例来启动 Etcd 客户端并连接到上一步中创建的服务器:
docker run -it --rm \
--network app-tier \
--env ALLOW_NONE_AUTHENTICATION=yes \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/etcd:latest etcdctl --endpoints http://etcd-server:2379 put /message Hello
使用 Docker Compose 文件
如果未指定,Docker Compose 会自动设置一个新网络并将所有已部署的服务附加到该网络。但是,我们将显式定义一个bridge名为 的新网络app-tier。在此示例中,我们假设您希望从您自己的自定义应用程序映像连接到 Etcd 服务器,该映像在以下代码段中通过服务名称进行标识myapp。
version: '2'
networks:
app-tier:
driver: bridge
services:
Etcd:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/etcd:latest'
environment:
- ALLOW_NONE_AUTHENTICATION=yes
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379
ports:
- 2379:2379
- 2380:2380
networks:
- app-tier
myapp:
image: 'YOUR_APPLICATION_IMAGE'
networks:
- app-tier
重要:
请使用应用程序image更新上述代码片段中的占位符YOUR_APPLICATION_IMAGE 在应用程序容器中,使用主机名etcd连接到 Etcd 服务器
启动容器:
docker-compose up -d
配置
通过挂载宿主机的目录到容器目录中十分容易的更改相关配置,容器配置位置为:/opt/bitnami/etcd/conf
docker run --name etcd -v /path/to/etcd.conf.yml:/opt/bitnami/etcd/conf/etcd.conf.yml registry.cn-hangzhou.aliyuncs.com/qingcloudtech/etcd:latest
随后可以通过宿主机上更改相关配置文件
更改docker-compose.yml完成此操作:
etcd:
...
volumes:
- /path/to/etcd.conf.yml:/opt/bitnami/etcd/conf/etcd.conf.yml
...
注意:默认情况下,环境变量ETCDCTL_API设置为3. 修改此环境变量以使用不同的 API 版本。