第六章 kubernetes etcd 集群部署

概述

etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点。

  • 简单 : 相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过gRPC提供接口调用
  • 安全:支持TLS通信,并可以针对不同的用户进行对key的读写控制
  • 高性能:10,000 /秒的写性能

etcd release 下载地址 页面下载最新版本的二进制文件

etcd 依赖go,需要先到官方站点下载最新go

tar -xf go1.8.3.linux-amd64.tar.gz -C /usr/local/
cat > /etc/profile.d/go.sh <<EOF
export PATH=/usr/local/go/bin/:$PATH
EOF

安装 etcd

tar xf etcd-v3.2.7-linux-amd64.tar.gz  -C /usr/local/
ln -sv /usr/local/etcd-v3.2.7-linux-amd64/ /usr/local/etcd
cat > /etc/profile.d/etcd.sh <<EOF
export PATH=/usr/local/etcd/:$PATH
EOF
useradd -r -s /sbin/nologin etcd
mkdir /data/lib/etcd/ -p
chown -R etcd:etcd /data/lib/etcd

etcd-v3.2.1 有bug 解决方法参考链接 link

修改/etc/etcd/etcd.conf 注意修改每个node ip

[member]
ETCD_NAME=cd-test-001.drcloud.com
ETCD_DATA_DIR="/data/lib/etcd/"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.200.100:2380"
[cluster]
ETCD_INITIAL_CLUSTER="cd-test-001.drcloud.com=http://172.16.200.100:2380,cd-test-002.drcloud.com=http://172.16.200.101:2380,cd-test-003.drcloud.com=http://172.16.200.102:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

参数说明

name      节点名称
data-dir      指定节点的数据存储目录
listen-peer-urls      监听URL,用于与其他节点通讯
listen-client-urls      对外提供服务的地址:比如 http://ip:2379,http://127.0.0.1:2379 ,客户端会连接到这里和 etcd 交互
initial-advertise-peer-urls      该节点member(同伴)监听地址,这个值会告诉集群中其他节点
initial-cluster      集群中所有节点的信息,格式为 node1=http://ip1:2380,node2=http://ip2:2380,… 。注意:这里的 node1 是节点的 --name 指定的名字;后面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值
initial-cluster-state      新建集群的时候,这个值为 new ;假如已经存在的集群,这个值为 existing
initial-cluster-token      创建集群的 token,这个值每个集群保持唯一。这样的话,如果你要重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点 uuid;否则会导致多个集群之间的冲突,造成未知的错误
advertise-client-urls      对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点

systemd 启动配置文件, 默认rpm 安装的

 cat > /usr/lib/systemd/system/etcd.service  << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
WorkingDirectory=/data/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
User=etcd
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/local/etcd/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\" --initial-advertise-peer-urls=\"${ETCD_INITIAL_ADVERTISE_PEER_URLS}\" --listen-peer-urls=\"${ETCD_LISTEN_PEER_URLS}\" --initial-cluster=\"${ETCD_INITIAL_CLUSTER}\" --advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\" --initial-cluster-token=\"${ETCD_INITIAL_CLUSTER_TOKEN}\" --initial-cluster-state=\"${ETCD_INITIAL_CLUSTER_STATE}\""
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

EOF

配置防火墙规则

firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --zone=public --add-port=2380/tcp --permanent

etcd集群运行过程中的改配

主要用于故障节点替换,集群扩容需求。

集群运行过程中的改配不区分static和discovery方式。

1、替换的步骤:

比如集群中某一member重启后仍不能恢复时,就需要替换一个新member进来。

a、从集群中删除老member

etcdctl member remove 1609b5a3a078c227

b、向集群中新增新member

etcdctl member add 
例子:敲命令

etcdctl member add etcd2 http://192.168.2.56:2380 

后返回如下信息

Added member named etcd2 with ID b7d510356ee2e68b to cluster
ETCD_NAME="etcd2"
ETCD_INITIAL_CLUSTER="etcd0=http://192.168.2.55:2380,etcd2=http://192.168.2.56:2380,etcd1=http://192.168.2.54:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

c、删除老节点data目录
如果不删除,启动后节点仍旧沿用之前的老id, 其他正常节点不认,不能建立联系

d、在新member上启动etcd进程

2、扩容的步骤:

执行上面第b,d两步即可。

etcd 集群健康检查

curl http://172.16.200.206:2379/health
etcdctl cluster-health
member 37460b828c8625a0 is healthy: got healthy result from http://0.0.0.0:2379
member 52b98a730bb6d77c is healthy: got healthy result from http://172.16.200.208:2379
member 7f453c22b9758161 is healthy: got healthy result from http://172.16.200.206:2379

关注微信公众号,获取更多信息

猜你喜欢

转载自blog.csdn.net/qq_37950254/article/details/89443994
今日推荐