Etcd配置

内容简介

  • 1.etcd的安装

  • 2.搭建单机版

  • 3.搭建集群版

  • 4.使用监听功能watch(服务发现)

  • 5.使用rest api

  • 6.搭建WEB界面并使用

一.安装

1.1 yum安装

yum install etcd

若使用yum安装,默认etcd命令将在/usr/bin目录下,注意修改下面的etcd.service文件中的启动命令地址为/usr/bin/etcd

1.2 二进制安装

mkdir -p /home/app/etcd/
cd !$
# 下载
wget https://github.com/etcd-io/etcd/releases/download/v3.3.12/etcd-v3.3.12-linux-amd64.tar.gz
# 解压安装
tar zxvf etcd-v3.3.12-linux-amd64.tar.gz
cd etcd-v3.3.12-linux-amd64
## 将启动文件和命令管理文件拷贝到 PATH找到的路径中
cp etcd /usr/local/bin
cp etcdctl /usr/local/bin
mkdir /var/lib/etcd     #etcd的数据目录
mkdir /etc/etcd        #etcd的配置文件目录

启动参数解释

二.搭建单机版

直接启动(不推荐)

etcd默认监听的是localhost的2379端口,既只监听了lo设备,这样会导致启动后集群中的其他机器无法访问 因此我们可以在启动的时候将默认的localhost改成0.0.0.0,确保etcd监听了所有网卡。

以上方式并不推荐使用

请使用以下方式

通过 systemd unit 启动文件来启动

1.环境变量配置文件/etc/etcd/etcd.conf

注意:etcd有要求,如果--listen-client-urls被设置了,那么就必须同时设置--advertise-client-urls,所以即使设置和默认相同,也必须显式设置

2.创建 etcd 的 systemd unit 启动文件:

在/usr/lib/systemd/system/目录下创建文件etcd.service,内容如下。注意替换IP地址为你自己的etcd集群的主机IP

说明:

  • 指定 etcd 的工作目录为 /var/lib/etcd,数据目录为 /var/lib/etcd,需在启动服务前创建这个目录,否则启动服务的时候会报错“Failed at step CHDIR spawning /usr/bin/etcd: No such file or directory”;

  • 为了保证通信安全,需要指定 etcd 的公私钥(cert-file和key-file)、Peers 通信的公私钥和 CA 证书(peer-cert-file、peer-key-file、peer-trusted-ca-file)、客户端的CA证书(trusted-ca-file);

  • 创建 kubernetes.pem 证书时使用的 kubernetes-csr.json 文件的 hosts 字段包含所有 etcd 节点的IP,否则证书校验会出错;

  • --initial-cluster-state 值为 new 时,--name 的参数值必须位于 --initial-cluster 列表中;

  • 由于并没有配置TSL认证,所以都是http而不是https,etcd客户端监听在2379,服务端监听在2380

3.启动etcd及检查

注意:如果日志中出现连接异常信息,请确认所有节点防火墙是否开放2379,2380端口。

以centos7为例:

我们来使用curl来测试一下,是否可以远程访问,这里我的机器IP是10.211.55.25

如果不想使用2379和2380端口,也可以

当然,我们也可以通过docker运行,这里给出启动脚本

三.搭建集群版

Etcd构建自身高可用集群主要有三种形式:

  • 静态发现: 预先已知 Etcd 集群中有哪些节点,在启动时直接指定好Etcd的各个node节点地址

  • Etcd动态发现: 通过已有的Etcd集群作为数据交互点,然后在扩展新的集群时实现通过已有集群进行服务发现的机制

  • DNS动态发现: 通过DNS查询方式获取其他节点地址信息

这里我们采用Static方式,准备三台机器,ip如下(都已经安装etcd)

进入node1,创建并运行run.sh,脚本内容如下

进入node2,创建并运行run.sh,脚本内容和node1差不多(只修改了ETCD_NAME和LOCAL_IP)

进入node3,创建并运行run.sh

我们看到3台都启动成功了

然后我们在node2上面执行操作

可以看到集群已经生效了,我们再来测试一下,在ndoe2上执行操作

看看node1和node3是否能保持数据一致

可以看到在node1和node3中都能能够正确的获取/cqh的值

四.监听功能watch演示

  • etcdctl watch key 观察一个值的变化,观察到变化后,打印值并watch退出

  • etcdctl watch key -f 永久观察值的变化,观察到变化后,打印直到Ctrl+C退出

  • etcdctl exec-watch key -- sh -c 'pwd' 监听到值有变化,就执行指定的命令(且不退出执行的可以是shell命令)

五.使用rest api

  • 创建键值

  • 创建目录

  • 获取键值

  • 创建键值带ttl

  • 创建有序键值

获取刚创建的fitness

  • 删除键

  • 列出所有集群成员

  • 统计信息-查看leader

  • 节点自身信息

  • 查看集群运行状态

六.搭建WEB界面并使用

这里分别演示搭建etcd-browser和etcdkeeper,两者功能大同小异,不同的是etcdkeeper支持v3的api

1.搭建etcd-browser

运行后访问http://10.211.55.25:8000/ 看到如下界面,可以看到上面添加的所有数据,这里我使用界面添加了漫威和DC的英雄

2.搭建etcdkeeper

访问http://10.211.55.25:8080/etcdkeeper/,输入etcd的地址,看到如下界面

到这里,etcd的单机版搭建、集群版、客户端使用、rest api、web管理界面等功能都介绍了,你还在等什么,赶紧high起来

https://segmentfault.com/a/1190000016840950

Kubernetes中的Etcd

自从2014年成为Kubernetes的一部分以来,Etcd社区呈现指数级的增长。CoreOS、谷歌、Redhat、IBM、思科、华为等等均是Etcd的贡献成员。其中AWS、谷歌云平台和Azure等大型云提供商成功在生产环境中使用了Etcd。

Etcd在Kubernetes中的工作是为分布式系统安全存储关键数据。它最著名的是Kubernetes的主数据存储,用于存储配置数据、状态和元数据。由于Kubernetes通常运行在几台机器的集群上,因此它是一个分布式系统,需要Etcd这样的分布式数据存储。

Etcd使得跨集群存储数据和监控更改变得更加容易,它允许来自Kubernetes集群的任何节点读取和写入数据。Kubernetes使用Etcd的watch功能来监控系统实际(actual)状态或期望(desired)状态的变化。如果这两个状态不同,Kubernetes会做出一些改变来调和这两个状态。kubectl命令的每次读取都从Etcd存储的数据中检索,所做的任何更改(kubectl apply)都会在Etcd中创建或更新条目,每次崩溃都会触发etcd中值的修改。

总结

etcd 默认只保存 1000 个历史事件,所以不适合有大量更新操作的场景,这样会导致数据的丢失。 etcd 典型的应用场景是配置管理和服务发现,这些场景都是读多写少的。

相比于 zookeeper,etcd 使用起来要简单很多。不过要实现真正的服务发现功能,etcd 还需要和其他工具(比如 registrator、confd 等)一起使用来实现服务的自动注册和更新

更多资料

关于如何在etcd中查看kubernetes的数据,请参考使用etcdctl访问kuberentes数据

用ansible搭建etcd https://www.cnblogs.com/jsonhc/p/7887428.html

Last updated