目录

etcd安装与配置

1 节点信息

IP地址主机名称类型系统
192.168.122.10node1etcdcentos7
192.168.122.11node2etcdcentos7
192.168.122.12node3etcdcentos8

2 节点创建etcd账户和防火墙放行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 创建用户和目录
groupadd -r etcd
# -k MAIL_DIR=/dev/null参数不创建此用户的mail目录
useradd  -s /sbin/nologin -d /var/lib/etcd -g etcd -c "etcd user" -r -K MAIL_DIR=/dev/null etcd
mkdir -p /opt/etcd/{ssl,etc,log,bin,data}
# 设置权限
chown etcd:etcd -R /opt/etcd/{data,etc,log,ssl}
chmod 700 /opt/etcd/data
restorecon -R /opt/etcd
# 开通防火墙端口
firewall-cmd --add-service=etcd-server --permanent
firewall-cmd --add-service=etcd-client --permanent
firewall-cmd --reload

3 下载etcd二进制文件

在所有节点上下载ETCD的二进制文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# etcd的版本
ETCD_VER=v3.4.13
# 通过github下载
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GITHUB_URL}
# 删除旧的程序压缩包,如果有的话
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
# 解压
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
# 复制etcd执行程序到/opt/etcd/bin目录下
cp /tmp/etcd-download-test/etcd* /opt/etcd/bin/
# 恢复SElinux权限,如果有的话
restorecon -R /opt/etcd
# 清理
rm -rf /tmp/etcd-download-test/
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

4 创建system服务

在所有节点上都需要创建

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cat > /usr/lib/systemd/system/etcd.service<<EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
WorkingDirectory=/opt/etcd/data
EnvironmentFile=/opt/etcd/etc/config
User=etcd
# set GOMAXPROCS to number of processors
ExecStart=/opt/etcd/bin/etcd 
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

# 配置etcd的配置文件位置
echo 'ETCD_CONFIG_FILE="/opt/etcd/etc/etcd.conf"' > /opt/etcd/etc/config

5 初始集群

先使用node1和node2创建初始集群,等会在动态添加node3节点

5.2 创建配置文件

以下配置文件中选项的官方描述:https://etcd.io/docs/v3.4.0/op-guide/configuration

  • node1配置文件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    cat > /opt/etcd/etc/etcd.conf<<EOF
    name: 'node1'
    data-dir: ''
    wal-dir: ''
    # 定义此节点在集群中和其他节点通信的URL
    listen-peer-urls: http://192.168.122.10:2380
    # 定义对外提供服务的URL
    listen-client-urls: http://192.168.122.10:2379,http://127.0.0.1:2379
    # 告诉其他节点,此节点使用哪个URL和你通讯。所以其他集群必须在网络层面可以到达这个地址。URL可以包含域名
    initial-advertise-peer-urls: http://192.168.122.10:2380
    # 告诉集群中其他节点,此节点可以提供服务的URL
    advertise-client-urls: http://192.168.122.10:2379
    # 集群节点之间互相通信的URL,可以动态添加
    initial-cluster: node1=http://192.168.122.10:2380,node3=http://192.168.122.11:2380
    # 加入集群的token
    initial-cluster-token: 'k8s'
    # 初始集群状态,new是新建集群的时候采用,如果是加入已有集群,此处必须是existing
    initial-cluster-state: 'new'
    enable-v2: true
    enable-pprof: true
    debug: false
    logger: zap
    EOF
    
  • node2配置文件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    cat > /opt/etcd/etc/etcd.conf<<EOF
    name: 'node1'
    data-dir: ''
    wal-dir: ''
    # 定义此节点在集群中和其他节点通信的URL
    listen-peer-urls: http://192.168.122.11:2380
    # 定义对外提供服务的URL
    listen-client-urls: http://192.168.122.11:2379,http://127.0.0.1:2379
    # 告诉其他节点,此节点使用哪个URL和你通讯。所以其他集群必须在网络层面可以到达这个地址。URL可以包含域名
    initial-advertise-peer-urls: http://192.168.122.11:2380
    # 告诉集群中其他节点,此节点可以提供服务的URL
    advertise-client-urls: http://192.168.122.11:2379
    # 集群节点之间互相通信的URL,可以动态添加
    initial-cluster: node1=http://192.168.122.10:2380,node3=http://192.168.122.11:2380
    # 加入集群的token
    initial-cluster-token: 'k8s'
    # 初始集群状态,new是新建集群的时候采用,如果是加入已有集群,此处必须是existing
    initial-cluster-state: 'new'
    enable-v2: true
    enable-pprof: true
    debug: false
    logger: zap
    EOF
    

5.3 启动ETCD服务

先启动node1,然后在启动node2,每个节点的目录权限别忘记更改

1
2
3
systemctl daemon-reload
systemctl start etcd.service
systemctl enable etcd.service

5.4 测试etcd

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

# 由于参数太多,所以添加etcdctl参数环境变量
cat >> ~/.bashrc<<EOF
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS=http://192.168.122.10:2379,http://192.168.122.11:2379
PATH=$PATH:$HOME/bin:/opt/etcd/bin
export PATH
EOF
source ~/.bashrc
etcdctl endpoint health --write-out=table

6 动态添加集群成员

前边已经配置了两个成员的etcd集群,etcd集群成员少于三个没有冗余性的,下边我们动态添加一个成员。在已经添加到etcd集群的服务器(node1)通过etcdctl客户端动态添加成员

1
2
3
4
5
6
7
etcdctl member add node3  --peer-urls=http://192.168.122.12:2380

# 以上命令执行成功会返回新集群的配置参数,如下,记录下来,等会修改集群配置
ETCD_NAME="node3"
ETCD_INITIAL_CLUSTER="node1=http://192.168.122.10:2380,node2=http://192.168.122.11:2380,node3=https://192.168.122.12:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.122.12:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

6.1 修改配置文件

根据上边命令回显,node3添加配置如下,参数解析和node1一样

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
cat > /opt/etcd/etc/etcd.conf<<EOF
name: $ETCD_NAME
data-dir: ''
wal-dir: ''
listen-peer-urls: http://192.168.122.12:2380
listen-client-urls: http://192.168.122.12:2379,http://127.0.0.1:2379
initial-advertise-peer-urls: $ETCD_INITIAL_ADVERTISE_PEER_URLS
advertise-client-urls: http://192.168.122.12:2379
initial-cluster: $ETCD_INITIAL_CLUSTER
initial-cluster-token: 'k8s'
initial-cluster-state: 'existing'
enable-v2: true
enable-pprof: true
debug: false
logger: zap
EOF

6.2 启动新节点

1
2
3
4
# 启动服务
systemctl daemon-reload
systemctl start etcd.service
systemctl enable etcd.service

6.3 测试etcd

1
etcdctl endpoint health --write-out=table