Etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现,它通过Raft一致性算法处理日志复制以保证强一致性,可以理解它为一个高可用强一致性的服务发现存储仓库。本文主要介绍Kubernetes(k8s) etcd安装与配置单节点集群方法。

1、配置阿里源

将Debian/Ubuntu 或 CentOS/RHEL/Fedora Linux配置成阿里源。

1)Debian/Ubuntu

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF  

2)CentOS/RHEL/Fedora

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

下载地址https://mirrors.aliyun.com/kubernetes/

注意:CentOS/RHEL/Fedora中需要关闭SELinux,使用setenforce 0可以关闭

2、安装etcd

sudo yum install -y etcd

或者

sudo apt-get install -y  etcd

3、修改etcd配置文件

添加用于监听其他etcd member的url和对外提供服务的地址。

d /etc/etcd/
cp etcd.conf etcd.conf.bak
vim etcd.conf

如机器IP为192.168.31.41,需要修改成配置如下:

ETCD_LISTEN_PEER_URLS="http://localhost:2380,http://192.168.31.41:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.31.41:2379"

4、启动etcd服务及查看etcd集群相关信息

1)启动etcd服务

systemctl enable etcd --now

2)查看etcd集群相关信息

etcdctl member list

3)查看集群的健康状态

etcdctl cluster-health

5、配置远程etcd访问

etcdctl是etcd的客户端工具,可以在本机上查看信息,也可以远程到集群的其他节点查看。

1)在etcd1上修改配置文件,允许远程访问

vim /etc/etcd/etcd.conf

如机器IP为192.168.31.41,需要修改成配置如下:

ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379,http://192.168.31.41:2379"

2)重启etcd服务

systemctl restart etcd

3)安装etcd2

在etcd2上以同样的方式安装etcd,并执行如下的命令连接到etcd1上,并查看帮助信息:

etcdctl --endpoints http://192.168.31.41:2379 --help

注意:默认etcdctl使用的是版本2来管理etcd,可以通过设置环境变量的方式,指定使用版本3来管理etcd,会有更多功能,在etcd1和etcd2节点上,执行命令如下:

export ETCDCTL_API=3

可以在执行上面命令查看帮助信息。

如果需要取消环境变量设置,命令如下:

unset ETCDCTL_API

5、etcd获取或存储数据

如在etcd1上,设置key为k8s,值为cjavapy,命令如下:

etcdctl put k8s cjavapy

获取数据命令如下:

etcdctl get k8s

注意:etcd2上远程也可以,主要保证etcd1和etcd2上的版本一致,两个版本不可混用,主机状态 Leader, Follower, Candidate。默认数据会发送到Leader2379端口),然后Leader通过Raft协议(2380端口)同步到Follower。当集群初始化时候,每个节点都是Follower角色,通过心跳与其他节点同步数据,当Follower在一定时间内没有收到来自主节点的心跳,会将自己角色改变为Candidate,并发起一次选主投票。配置etcd集群,建议尽可能是奇数个节点,而不要偶数个节点,否则在一定情况下可能会导致选举Leader出现故障。

推荐文档