etcdctl常用

etcd概念

etcd就是个分布式非关系型数据库.
3 个节点组成的集群,可以容忍 1 个节点故障。
生成环境中,不推荐使用单个节点的 etcd 集群。

  • etcd 支持存储多个版本的数据,允许查询指定 key 历史版本的数据。
  • etcd 为了控制数据总空间,会周期性的清理数据的历史版本。
  • etcd 不支持修改旧版本的数据。
  • etcd 中,数据以二进制的方式存储在磁盘中。
  1. etcd 创建 lease 对象时,需要指定一个时间作为其超时时间。
  2. 将 key 关联到 lease 对象上,当 lease 对象超时后,key 会被系统自动回收。
  3. etcd 支持将多个 key 关联到同一个 lease 对象上,从而大幅降低刷新 lease 的性能开销。

yum安装etcd

只在master节点上安装

参考:https://docs.openstack.org/install-guide/environment-etcd-rdo.html
Centos7的yum源中的etcd版本只有3.3,例如apisix要求etcd最低版本3.4
在这里插入图片描述

# yum安装etcd
yum install -y etcd

# 开机自启动并现在启动etcd
systemctl enable --now etcd

rhel7安装etcd3.5

# 安装pgdg-rhel7-extras源
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 从pgdg-rhel7-extras源中安装etcd
yum --enablerepo=pgdg-rhel7-extras install -y etcd

# 查看etcd版本
yum --enablerepo=pgdg-rhel7-extras info etcd

在这里插入图片描述


rhel8安装etcd3.5

rhel8的源中默认没有etcd

# 安装pgdg-rhel8-extras源
dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 从pgdg-rhel8-extras源中安装etcd
dnf --enablerepo=pgdg-rhel8-extras install -y etcd

在这里插入图片描述


修改配置文件

vim /etc/etcd/etcd.conf

# 修改大约第6行
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

在这里插入图片描述


二进制安装etcd

https://www.cnblogs.com/wutou/p/14056868.html
Apache APISIX 从 v2.0 开始不再支持 v2 版本的 etcd,并且 etcd 最低支持版本为 v3.4.0,因此请使用 etcd 3.4.0+

yum安装的版本时v3.1,这里使用编译安装。
etcd项目网站:https://github.com/etcd-io/etcd/releases
下载etcd

# 定义etcd版本变量
ETCD_VERSION='3.5.14'

# 下载etcd
curl -O https://github.com/etcd-io/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-arm64.tar.gz

# 解压
tar xvf etcd-v${ETCD_VERSION}-linux-arm64.tar.gz -C /usr/local/ $$ cd /usr/local/etcd-v${ETCD_VERSION}-linux-arm64

创建软链接
etcd是服务端程序,etcdctl是运维人员操作的控制端

# 为etcd命令行建立软链接
ln -snf /usr/local/etcd-v${ETCD_VERSION}-linux-arm64/etcd /usr/local/bin/etcd

# 为etcdctl命令行建立软链接
ln -snf /usr/local/etcd-v${ETCD_VERSION}-linux-arm64/etcdctl /usr/local/bin/etcdctl

image.png

指定etcd的的api版本

vim /etc/profile.d/etcd.sh

# etcd默认使用V2版本,指定ETCDCTL_API版本为3
export ETCDCTL_API=3

# 创建etcdctl别名,指定监听地址,和证书---非必须
alias etcdctl='etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key'

image.png

创建etcd配置文件

# 创建etcd数据目录
## 一定要确认数据目录etcd有读写权限,否则服务无法正确启动
mkdir -p /var/lib/etcd/

创建etcd配置文件

# 创建etcd配置文件
vim /etc/etcd.conf

默认配置如下图:
在这里插入图片描述

在这里插入图片描述

节点配置

#——————————————————[节点配置]——————————————————————
# 节点名称,用于在集群中唯一标识该节点
## 不同机器需要做修改 与下面集群配置相对应
# ETCD_NAME=master1
ETCD_NAME=$(hostname -s)
# etcd的数据存储目录
ETCD_DATA_DIR=/var/lib/etcd/
# 指定etcd对外提供服务的监听地址和端口
## 也可以使用https
ETCD_LISTEN_CLIENT_URLS="http://192.168.32.128:2379,http://127.0.0.1:2379"
# 指定该节点通告给其他节点的通讯地址
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.110.100:2379"
# ROOT密码
# ETCD_ROOT_PASSWORD=123456
# 接受未启用身份验证运行
# ALLOW_NONE_AUTHENTICATION=yes

集群配置

#—————————————————— 集群配置——————————————————————
# 集群的对外IP建议使用VIP

# ETCD_LISTEN_PEER_URLS: 指定etcd节点间通讯的监听地址和端口
# 这里设置为该节点的私有IP地址和2380端口
ETCD_LISTEN_PEER_URLS="http://192.168.32.128:2380"

# 此节点向集群成员公布的 peer URL 地址,用于 etcd 节点之间的通信,例如选举 leader 和同步数据
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.110.100:2380"

# 定义etcd集群的初始成员
## 每个成员由名称和地址组成,多个成员之间用逗号分隔
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.110.100:2380,etcd2=https://192.168.110.101:2380,etcd3=https://192.168.110.102:2380"

# 指定集群的初始状态
## "new"表示这是一个新的集群,"existing"表示将加入一个已有的集群
ETCD_INITIAL_CLUSTER_STATE="new"

# ETCD_INITIAL_CLUSTER_TOKEN: 为集群指定一个唯一的标识符,用于区分不同的etcd集群
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster

# 启用 etcd v2 API,同时提供v2api和v3api
# ETCD_ENABLE_V2="true"

创建systemd服务文件

vim /etc/systemd/system/etcd.service

# etcd的systemd服务单元文件
[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target

[Service]
User=root
Type=notify
# 这个文件特别关键,etcd使用的环境变量都需要通过环境变量文件读取
EnvironmentFile=/etc/etcd.conf
ExecStart=/usr/local/bin/etcd
# StandardOutput=file:/var/log/etcd/etcd.log
# StandardError=file:/var/log/etcd/etcd.log
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000
 
[Install]
WantedBy=multi-user.target

启动服务

# systemd要在219以上,否则报错
yum install -y systemd-devel

# 重新加载配置 && 开机启动服务
systemctl daemon-reload && systemctl enable --now etcd

etcd键值管理

在这里插入图片描述


查看k8s的pod网段

参考: https://jimmysong.io/kubernetes-handbook/concepts/flannel.html

pod网段是在etcd数据库中定义的.

# 查看etcd 中的注册的宿主机的 pod 地址网段信息
[root@node1 ~]# etcdctl get /kube-centos/network/subnets
/kube-centos/network/subnets/172.33.68.0-24
/kube-centos/network/subnets/172.33.31.0-24
/kube-centos/network/subnets/172.33.96.0-24

每个 node 上的 Pod 子网是根据我们在安装 flannel 时配置来划分的,在 etcd 中查看该配置:

[root@node1 ~]# etcdctl get /kube-centos/network/config
{"Network":"172.33.0.0/16","SubnetLen":24,"Backend":{"Type":"host-gw"}}

etcdctl命令行工具


etcdctl常用命令

# 增
etcdctl put	key values

# 设置键值
etcdctl set key values

# 查 
etcdctl get	key

# 删
etcdctl del	key

创建配置和查看配置

# 创建配置
etcdctl put /atomic.io/network/config '{"Network":"10.254.0.0/16","Backend":{"Type":"vxlan"}}'

# 查看配置信息
etcdctl get /atomic.io/network/config

在这里插入图片描述


etcdctl配置指定授权文件

参考: https://blog.51cto.com/u_7682110/4845904
在执行etcdctl命令时需要指定认证授权文件, 所以将认证授权步骤 别名至 etcdctl 简化操作

vim /etc/profile.d/etcdctl.sh

# 指定ETCDCTL_API版本为3
export ETCDCTL_API=3

# 创建etcdctl别名,指定监听地址,和证书
alias etcdctl='etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key'

# 不指定证书的配置,注意这里是http
# alias etcdctl='etcdctl --endpoints=http://127.0.0.1:2379'

etcdctl常用的命令

https://github.com/easzlab/kubeasz/blob/master/docs/op/op-etcd.md

# 查看etcd集群的成员节点
## -w table 以制表格式显示
etcdctl member list -w table

# 查看etcd集群节点状态:
etcdctl endpoint status -w table

# 查看集群健康状态
etcdctl endpoint health -w table

查看所有key

## from-key:获取大于等于指定 key 的所有 key(通过字节比较排序)
## keys-only:只输出 key
etcdctl get "" --from-key --keys-only

备份数据

# 字符串拼接用于定时任务
etcdctl snapshot save `hostname`-etcd_`date +%Y%m%d%H%M`.db

恢复快照

单机

#停止etcd和apiserver
## 移走当前数据目录
mv /var/lib/etcd/ /var/lib/etcd.bak

#恢复快照
etcdctl snapshot restore `hostname`-etcd_`date +%Y%m%d%H%M`.db --data-dir=/var/lib/etcd/

二进制部署的ETCD恢复快照

在这里插入图片描述


etcd故障排查


etcd起不来

journalctl -u etcd > a.log导出日志慢慢分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值