etcd 集群运维实践

本文介绍了etcd集群运维中的关键点,包括节点时间同步的重要性,如何处理磁盘空间不足的问题,以及在更新证书后确保所有请求携带证书以避免通信错误。同时,提醒在进行etcd操作时注意启动参数,以免导致不必要的复杂重置步骤。
摘要由CSDN通过智能技术生成

640?wx_fmt=jpeg

etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境。因此围绕 etcd 相关的运维知识就比较重要,etcd 可以容器化部署,也可以在宿主机自行搭建,以下内容是通用的。
集群的备份和恢复

640?wx_fmt=png


添加备份
 
 
  1. #!/bin/bash

  2. IP=123.123.123.123

  3. BACKUP_DIR=/alauda/etcd_bak/

  4. mkdir -p $BACKUP_DIR

  5. export ETCDCTL_API=3

  6. etcdctl --endpoints=http://$IP:2379 snapshot save $BACKUP/snap-$(date +%Y%m%d%H%M).db


  7. # 备份一个节点的数据就可以恢复,实践中,为了防止定时任务配置的节点异常没有生成备份,建议多加几个


恢复集群
 
 
  1. #!/bin/bash


  2. # 使用 etcdctl snapshot restore 生成各个节点的数据


  3. # 比较关键的变量是

  4. # --data-dir 需要是实际 etcd 运行时的数据目录

  5. # --name  --initial-advertise-peer-urls  需要用各个节点的配置

  6. # --initial-cluster  initial-cluster-token 需要和原集群一致


  7. ETCD_1=10.1.0.5

  8. ETCD_2=10.1.0.6

  9. ETCD_3=10.1.0.7


  10. for i in ETCD_1 ETCD_2 ETCD_3

  11. do


  12. export ETCDCTL_API=3

  13. etcdctl snapshot restore snapshot.db \

  14. --data-dir=/var/lib/etcd \

  15. --name $i \

  16. --initial-cluster ${ ETCD_1}=http://${ETCD_1}:2380,${ETCD_2}=http://${ETCD_2}:2380,${ETCD_3}=http://${ETCD_3}:2380 \

  17. --initial-cluster-token k8s_etcd_token \

  18. --initial-advertise-peer-urls http://$i:2380 && \

  19. mv /var/lib/etcd/ etcd_$i


  20. done


  21. # 把 etcd_10.1.0.5 复制到 10.1.0.5节点,覆盖/var/lib/etcd(同--data-dir路径)

  22. # 其他节点依次类推


用 etcd 自动创建的 SnapDb 恢复
 
 
  1. #!/bin/bash

  2. export ETCDCTL_API=3

  3. etcdctl snapshot restore snapshot.db \

  4. --skip-hash-check \

  5. --data-dir=/var/lib/etcd \

  6. --name 10.1.0.5 \

  7. --initial-cluster 10.1.0.5=http://10.1.0.5:2380,10.1.0.6=http://10.1.0.6:2380,10.1.0.7=http://10.1.0.7:2380 \

  8. --initial-cluster-token k8s_etcd_token \

  9. --initial-advertise-peer-urls http://10.1.0.5:2380


  10. # 也是所有节点都需要生成自己的数据目录,参考上一条

  11. # 和上一条命令唯一的差别是多了  --skip-hash-check  (跳过完整性校验)

  12. # 这种方式不能确保 100% 可恢复,建议还是自己加备份

  13. # 通常恢复后需要做一下数据压缩和碎片整理,可参考相应章节


踩过的坑
[ 3.0.14 版 etcd restore 功能不可用 ] https://github.com/etcd-io/etcd/issues/7533
使用更新的 etcd 即可。
总结:恢复就是要拿 DB 去把 etcd 的数据生成一份,用同一个节点的,可以保证除了 restore 时候指定的参数外,所有数据都一样。这就是用一份 DB,操作三次(或者5次)的原因。
集群的扩容——从 1 到 3

640?wx_fmt=png


执行添加
 
 
  1. #!/bin/bash

  2. export ETCDCTL_API=2

  3. etcdctl --endpoints=http://10.1.0.6:2379 member add 10.1.0.6 http://10.1.0.6:2380

  4. etcdctl --endpoints=http://10.1.0.7:2379 member add 10.1.0.7 http://10.1.0.7:2380


  5. # ETCD_NAME="etcd_10.1.0.6"

  6. # ETCD_INITIAL_CLUSTER="10.1.0.6=http://10.1.0.6:2380,10.1.0.5=http://10.1.0.5:2380"

  7. # ETCD_INITIAL_CLUSTER_STATE="existing"


准备添加的节点 etcd 参数配置
 
 
  1. #!/bin/bash

  2. /usr/local/bin/etcd

  3. --data-dir=/data.etcd

  4. --name 10.1.0.6

  5. --initial-advertise-peer-urls http://10.1.0.6:2380

  6. --listen-peer-urls http://10.1.0.6:2380

  7. --advertise-client-urls http://10.1.0.6:2379

  8. --listen-client-urls http://10.1.0.6:2379

  9. --initial-cluster 10.1.0.6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值