文章目录
简介
本章节主要讲解安装etcd的过程,并通过脚本etcd.sh来查看etcd的集群状态以及etcd的数据库中存放数据的情况,也可以通过etcd.sh脚本来进行etcd的备份和还原。
第一章.安装前软件准备及系统初始化阶段
第二章.证书及配置文件的准备
一.确认证书文件
1.在第二章"二.【二进制安装k8s-1.29.4】证书及配置文件的准备",我们准备了所有相关的证书级配置文件,其中ca.pem和ca-key.pem生成在ca目录下,etcd.pem和etcd-key.pem生成在install_etcd目录下。
2.再次确认如下四个证书是否存在:ca.pem,etcd-key.pem,etcd.pem,ca-key.pem。
3.该四个证书是通过ca-config.json,ca-csr.json先生成CA证书ca.pem和ca-key.pem,然后在通过etcd-csr.json 生成etcd.pem 和etcd-key.pem。
4.将ca.pem,etcd-key.pem,etcd.pem,ca-key.pem 拷贝到/opt/etcd/ssl目录下
二.准备配置文件
安装etcd的三台机器的配置都不一样,在第二章"二.【二进制安装k8s-1.29.4】证书及配置文件的准备"中有准备好三台机所需的etcd.conf,将etcd.conf拷贝到/opt/etcd/conf。
三.安装etcd
先下载好etcd-v3.5.4-linux-amd64.tar.gz,下载地址参见第一章:"一.【二进制安装k8s-1.29.4】安装前软件准备及系统初始化阶段"
shell
mkdir -p /opt/etcd/{conf,bin,ssl,logs} #创建目录
tar zxvf etcd-v3.5.4-linux-amd64.tar.gz
cp etcd-v3.5.4-linux-amd64/etcd* /opt/etcd/bin/ #将etcd的三个可执行文件拷贝过去
rm -rf etcd-v3.5.4-linux-amd64
四.启动脚本
在第二章"二.【二进制安装k8s-1.29.4】证书及配置文件的准备"中我们有准备好etcd.service的启动脚本,将etcd.service 拷贝存到/usr/lib/systemd/system/,然后执行
systemctl daemon-reload
systemctl enable etcd
systemctl start etcd
五、验证安装
通过查看集群状态来确认服务是否安装正常。将如下脚本保存为xetcd.sh,然后执行:./xetcd.sh all,该脚本可以单独查集群健康状态、查看etcd的状态,列出etcd集群列表,备份etcd数据库,还原etcd数据库。
shell
#!/bin/bash
etcdIp="https://10.16.120.81:2379,https://10.16.120.82:2379,https://10.16.120.83:2379"
bakDir="/data/BAK"
health() {
/opt/etcd/bin/etcdctl \
--cacert=/opt/etcd/ssl/ca.pem \
--cert=/opt/etcd/ssl/etcd.pem \
--key=/opt/etcd/ssl/etcd-key.pem \
--endpoints="${etcdIp}" endpoint health --write-out=table
}
status() {
/opt/etcd/bin/etcdctl \
--cacert=/opt/etcd/ssl/ca.pem \
--cert=/opt/etcd/ssl/etcd.pem \
--key=/opt/etcd/ssl/etcd-key.pem \
--endpoints="${etcdIp}" endpoint status --write-out=table
}
list() {
/opt/etcd/bin/etcdctl \
--cacert=/opt/etcd/ssl/ca.pem \
--cert=/opt/etcd/ssl/etcd.pem \
--key=/opt/etcd/ssl/etcd-key.pem \
--endpoints="${etcdIp}" member list -w table
}
bak() {
/opt/etcd/bin/etcdctl \
--cacert=/opt/etcd/ssl/ca.pem \
--cert=/opt/etcd/ssl/etcd.pem \
--key=/opt/etcd/ssl/etcd-key.pem \
--endpoints="https://10.16.120.81:2379" snapshot save ${bakDir}/`date +%Y%m%d%H%M%S`.db
}
restore() {
bakfile=$1
xIp=$2
if [ ! -f $bakfile ];then
echo "no file:$bakfile"
return
fi
/opt/etcd/bin/etcdctl \
--cacert=/opt/etcd/ssl/ca.pem \
--cert=/opt/etcd/ssl/etcd.pem \
--key=/opt/etcd/ssl/etcd-key.pem \
--endpoints="${xIp}" --data-dir=/opt/etcd/default.etcd snapshot restore $bakfile
}
case $1 in
health)
health;;
status)
status;;
list)
list;;
all)
health
list
status;;
bak)
bak;;
restore)
restore "$2" "$3";;
*)
echo "$0 status|bak|restore \$2 \$3 #\$2 is bakfiepath,\$3 is etcd ip";;
esac