跳至主要內容

部署etcd节点

Zenghr大约 3 分钟kubernetes

部署 ETCD 节点

1. 简介

kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运行的pod,deployment,service等等。都需要持久化。etcd 就是它的数据中心。生产环境中为了保证数据中心的高可用和数据的一致性,一般会部署最少三个节点。我们这里以学习为主就只在主节点部署一个实例。

2. 从Github下载二进制文件

下载地址:https://github.com/etcd-io/etcd/releasesopen in new window

我这里下载的版本是 v3.4.10open in new window

3. 部署 ETCD

1. 创建工作目录并解压二进制包

mkdir /etc/kubernetes/etcd/{bin,cfg} -p
# 解压缩
tar zxvf etcd-v3.4.10-linux-amd64.tar.gz
# 移动 etcd 二进制文件
mv etcd-v3.4.10-linux-amd64/{etcd,etcdctl} /etc/kubernetes/etcd/bin/

2. 创建etcd配置文件

cat > /etc/kubernetes/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.10.102:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.10.102:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.10.102:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.10.102:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.10.102:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

字段描述:

  • ETCD_NAME:节点名称,集群中唯一
  • ETCD_DATA_DIR:存放数据的目录
  • ETCD_LISTEN_PEER_URLS:集群通信监听地址
  • ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址
  • ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址
  • ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址
  • ETCD_INITIAL_CLUSTER:集群节点地址,多个 etcd 时,参考格式:节点名称1:ETCD_LISTEN_PEER_URLS,节点名称2:ETCD_LISTEN_PEER_URLS
  • ETCD_INITIAL_CLUSTER_TOKEN:集群Token
  • ETCD_INITIAL_CLUSTER_STATE:加入集群的当前状态,new是新集群,existing表示加入已有集群

提示

etcd 监听 2379 端口,是为了接收组件如:api-server 的数据,2380 端口是为了接收其他 etcd 的数据

3. 通过systemd管理etcd

vim /lib/systemd/system/etcd.service
# etcd.service 内容如下
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=/etc/kubernetes/etcd/cfg/etcd.conf
ExecStart=/etc/kubernetes/etcd/bin/etcd \
  --cert-file=/etc/kubernetes/ca/etcd/etcd.pem \
  --key-file=/etc/kubernetes/ca/etcd/etcd-key.pem \
  --peer-cert-file=/etc/kubernetes/ca/etcd/etcd.pem \
  --peer-key-file=/etc/kubernetes/ca/etcd/etcd-key.pem \
  --trusted-ca-file=/etc/kubernetes/ca/ca.pem \
  --peer-trusted-ca-file=/etc/kubernetes/ca/ca.pem \
  --logger=zap
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

提示

注意:请修改你的证书存放位置

4. 启动并设置开机启动

systemctl daemon-reload
systemctl start etcd
systemctl enable etcd
# 查看日志是否启动异常
journalctl -f -u etcd

5. 部署多个etcd

提示

如果你需要部署多个 etcd 那么将该节点生成的文件拷贝到其他节点,再修改一下配置就可以了

# 拷贝 etcd 二进制文件以及配置
scp -r /etc/kubernetes/etcd/ root@其他节点IP:/etc/kubernetes/
# 拷贝 service 文件
scp -r /lib/systemd/system/etcd.service root@其他节点IP:/lib/systemd/system/
# 拷贝 证书
scp -r /etc/kubernetes/ca/ root@其他节点IP:/etc/kubernetes/

然后在节点分别修改etcd.conf配置文件中的节点名称和当前服务器IP:

vim /etc/kubernetes/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME="etcd-2"   # 修改此处,节点2改为etcd-2
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.10.101:2380"   # 修改此处为当前服务器IP
ETCD_LISTEN_CLIENT_URLS="https://192.168.10.101:2379" # 修改此处为当前服务器IP

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.10.101:2380" # 修改此处为当前服务器IP
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.10.101:2379" # 修改此处为当前服务器IP
ETCD_INITIAL_CLUSTER="etcd-2=https://192.168.10.101:2380,etcd-1=https://192.168.10.102:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

最后启动etcd并设置开机启动

6. 查看集群状态

ETCDCTL_API=3 /etc/kubernetes/etcd/bin/etcdctl --cacert=/etc/kubernetes/ca/ca.pem --cert=/etc/kubernetes/ca/etcd/etcd.pem --key=/etc/kubernetes/ca/etcd/etcd-key.pem --endpoints="https://192.168.10.102:2379" endpoint health

# 输出该结果代表 etcd 部署成功
> https://192.168.10.102:2379 is healthy: successfully committed proposal: took = 5.838821ms