etcd集群搭建

一、环境准备

1.1、主机以及操作系统

etcd名称ip系统
etcd1192.168.56.105centos7
etcd2192.168.56.106centos7
etcd3192.168.56.107centos7

1.2、软件版本

etcd: etcd-v3.4.13

1.3、开放防火墙

可以选择关闭防火墙或者开放指定端口都行

1.3.1、关闭防火墙

$ systemctl status firewalld.service
$ systemctl stop firewalld.service
$ systemctl disable firewalld.service

1.3.2、开启指定端口

# 开启指定端口
$ firewall-cmd --add-port=2379-2380/tcp --permanent

# reload
$ firewall-cmd --reload

# 查询开启状态
$ firewall-cmd --query-port=2379/tcp
$ firewall-cmd --query-port=2380/tcp

# 关闭端口的命令(这个不需要执行,因为在 etcd 集群运行时网络要保持通)
$ firewall-cmd --permanent --remove-port=2379/tcp
$ firewall-cmd --permanent --remove-port=2380/tcp

二、搭建集群

2.1、 创建 CA 根证书

$ openssl genrsa -out ca.key 2048

# -subject: "/CN" 的值为 Master 主机名或 IP 地址
# -days: 设置证书的有效期
$ openssl req -x509 -new -nodes -key ca.key -subj "/CN=192.168.56.105" -days 36500 -out ca.crt

# 将生成的 ca.key、ca.crt 文件保存在 /etc/kubernetes/pki 目录下
$ mkdir -p /etc/kubernetes/pki
$ cp ca.key ca.crt /etc/kubernetes/pki/

2.2、部署安全的 etcd 高可用集群

2.2.1、下载 etcd 二进制文件,配置 systemd 服务

版本:3.4.13

地址:https://github.com/etcd-io/etcd/releases/tag/v3.4.13

# 解压
$ tar -xvf etcd-v3.4.13-linux-amd64.tar.gz

# 复制 etcd、etctctl 到 /usr/bin
$ cd etcd-v3.4.13-linux-amd64
$ mv etcd etcdctl  /usr/bin/

2.2.2、etcd 部署为一个系统服务

部署为一个 systemd 服务,创建 systemd 服务配置文件 /usr/lib/systemd/system/etcd.service

[Unit]  
Description=etcd key-value store Service
Documentation=https://github.com/etcd-io/etcd
After=network.target

[Service]
ExecStart=/usr/bin/etcd
Restart=always
EnvironmentFile=/etc/etcd/etcd.conf

[Install]
WantedBy=multi-user.target

2.2.3、创建 etcd 的 CA 证书

1、创建一个x509 v3 配置文件 etcd_ssl.cnf

[ req ]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[ req_distinguished_name ]


[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[ alt_names ]
IP.1 = 192.168.56.105
IP.2 = 192.168.56.106
IP.3 = 192.168.56.107

2、使用 openssl 命令创建 etcd 的服务端 CA 证书

$ openssl genrsa -out etcd_server.key 2048
$ openssl req -new -key etcd_server.key -config etcd_ssl.cnf -subj "/CN=etcd-server" -out etcd_server.csr
$ openssl x509 -req -in etcd_server.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile etcd_ssl.cnf -out etcd_server.crt
$ mkdir -p /etc/etcd/pki
$ cp etcd_server.crt etcd_server.csr etcd_server.key  /etc/etcd/pki/

3、再创建客户端使用的 CA 证书

$ openssl genrsa -out etcd_client.key 2048
$ openssl req -new -key etcd_client.key -config etcd_ssl.cnf -subj "/CN=etcd-client" -out etcd_client.csr
$ openssl x509 -req -in etcd_client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile etcd_ssl.cnf -out etcd_client.crt
$ cp etcd_client.crt etcd_client.csr etcd_client.key /etc/etcd/pki/

4、复制配置文件

# 在 192.168.56.106 执行复制
$ scp 192.168.56.105:/etc/etcd/pki/* /etc/etcd/pki/
$ scp 192.168.56.105:/etc/kubernetes/pki/* /etc/kubernetes/pki/

# 在 192.168.56.107 执行复制
$ scp 192.168.56.105:/etc/etcd/pki/* /etc/etcd/pki/
$ scp 192.168.56.105:/etc/kubernetes/pki/* /etc/kubernetes/pki/

2.2.4、etcd配置文件

配置文件放置在 /etc/etcd/etcd.conf

# 节点 1 的配置
ETCD_NAME=etcd1
ETCD_DATA_DIR=/etc/etcd/data
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_CLIENT_CERT_AUTH=true
ETCD_LISTEN_CLIENT_URLS=https://192.168.56.105:2379
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.56.105:2379
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_LISTEN_PEER_URLS=https://192.168.56.105:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.56.105:2380
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.56.105:2380,etcd2=https://192.168.56.106:2380,etcd3=https://192.168.56.107:2380"
ETCD_INITIAL_CLUSTER_STATE=new

# 节点 2 的配置
ETCD_NAME=etcd2
ETCD_DATA_DIR=/etc/etcd/data
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_CLIENT_CERT_AUTH=true
ETCD_LISTEN_CLIENT_URLS=https://192.168.56.106:2379
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.56.106:2379
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_LISTEN_PEER_URLS=https://192.168.56.106:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.56.106:2380
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.56.105:2380,etcd2=https://192.168.56.106:2380,etcd3=https://192.168.56.107:2380"
ETCD_INITIAL_CLUSTER_STATE=new

# 节点 3 的配置
ETCD_NAME=etcd3
ETCD_DATA_DIR=/etc/etcd/data
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_CLIENT_CERT_AUTH=true
ETCD_LISTEN_CLIENT_URLS=https://192.168.56.107:2379
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.56.107:2379
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_LISTEN_PEER_URLS=https://192.168.56.107:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.56.107:2380
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.56.105:2380,etcd2=https://192.168.56.106:2380,etcd3=https://192.168.56.107:2380"
ETCD_INITIAL_CLUSTER_STATE=new

2.3、启动etcd

$ systemctl restart etcd && systemctl enable etcd

除了把 etcd 部署为一个 service 启动外,也可以直接启动 etcd

/usr/bin/etcd --name etcd1 \
--data-dir /etc/etcd/data \
--cert-file /etc/etcd/pki/etcd_server.crt \
--key-file /etc/etcd/pki/etcd_server.key \
--client-cert-auth \
--trusted-ca-file /etc/kubernetes/pki/ca.crt \
--listen-client-urls https://192.168.56.105:2379 \
--advertise-client-urls https://192.168.56.105:2379 \
--peer-cert-file /etc/etcd/pki/etcd_server.crt \
--peer-key-file /etc/etcd/pki/etcd_server.key \
--peer-trusted-ca-file /etc/kubernetes/pki/ca.crt \
--listen-peer-urls https://192.168.56.105:2380 \
--initial-advertise-peer-urls https://192.168.56.105:2380 \
--initial-cluster-token etcd-cluster \
--initial-cluster "etcd1=https://192.168.56.105:2380,etcd2=https://192.168.56.106:2380,etcd3=https://192.168.56.107:2380" \
--initial-cluster-state new \
--logger zap



/usr/bin/etcd --name etcd2 \
--data-dir /etc/etcd/data \
--cert-file /etc/etcd/pki/etcd_server.crt \
--key-file /etc/etcd/pki/etcd_server.key \
--client-cert-auth \
--trusted-ca-file /etc/kubernetes/pki/ca.crt \
--listen-client-urls https://192.168.56.106:2379 \
--advertise-client-urls https://192.168.56.106:2379 \
--peer-cert-file /etc/etcd/pki/etcd_server.crt \
--peer-key-file /etc/etcd/pki/etcd_server.key \
--peer-trusted-ca-file /etc/kubernetes/pki/ca.crt \
--listen-peer-urls https://192.168.56.106:2380 \
--initial-advertise-peer-urls https://192.168.56.106:2380 \
--initial-cluster-token etcd-cluster \
--initial-cluster "etcd1=https://192.168.56.105:2380,etcd2=https://192.168.56.106:2380,etcd3=https://192.168.56.107:2380" \
--initial-cluster-state new \
--logger zap



/usr/bin/etcd \
--name etcd3 \
--data-dir /etc/etcd/data \
--cert-file /etc/etcd/pki/etcd_server.crt \
--key-file /etc/etcd/pki/etcd_server.key \
--trusted-ca-file /etc/kubernetes/pki/ca.crt \
--client-cert-auth \
--listen-client-urls https://192.168.56.107:2379 \
--advertise-client-urls https://192.168.56.107:2379 \
--peer-cert-file /etc/etcd/pki/etcd_server.crt \
--peer-key-file /etc/etcd/pki/etcd_server.key \
--peer-trusted-ca-file /etc/kubernetes/pki/ca.crt \
--listen-peer-urls https://192.168.56.107:2380 \
--initial-advertise-peer-urls https://192.168.56.107:2380 \
--initial-cluster-token etcd-cluster \
--initial-cluster "etcd1=https://192.168.56.105:2380,etcd2=https://192.168.56.106:2380,etcd3=https://192.168.56.107:2380" \
--initial-cluster-state new \
--logger zap

2.4、测试etcd

$ etcdctl --cacert=/etc/kubernetes/pki/ca.crt --cert=/etc/etcd/pki/etcd_client.crt --key=/etc/etcd/pki/etcd_client.key --endpoints=https://192.168.56.106:2379,https://192.168.56.107:2379,https://192.168.56.105:2379 endpoint health

$ etcdctl -w table --cacert=/etc/kubernetes/pki/ca.crt --cert=/etc/etcd/pki/etcd_client.crt --key=/etc/etcd/pki/etcd_client.key --endpoints=https://192.168.56.106:2379,https://192.168.56.107:2379,https://192.168.56.105:2379 endpoint status 

2.5、清理配置

如果哪一步执行错误可以通过以下脚本快速清理环境

$ rm -f /etc/etcd/pki/* && rm -f /etc/kubernetes/pki/* && rm -f /etc/etcd/etcd.conf
$ ls /etc/etcd/pki/
$ ls /etc/kubernetes/pki/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值