尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

etcd节点噶了导致的k8s集群瘫痪处理参考——筑梦之路

etcd节点噶了导致的k8s集群瘫痪处理参考——筑梦之路 背景说明etcd集群有3个节点某天机房突然断电导致etcd的1个节点数据丢失etcd集群数据不一致同样的命令在不同master节点上查询的结果不一样存在脏数据。问题根源etcd作为K8s的“大脑”负责存储所有集群配置、资源信息。一旦某个节点离线轻则集群读写性能下降重则触发“quorum机制”半数以上节点存活才能正常工作直接导致集群不可用。因此遇到节点故障核心要做3件事查状态→删故障节点→重新加入集群最后再加上备份防患于未然。集群检查1. 查询节点成员# 默认配置 ETCD_ENDPOINTShttps://192.168.1.100:2379,192.168.1.101:2379,192.168.1.102:2379 CA_CERT/data/k8s/ssl/ca.pem ETCD_CERT/data/k8s/ssl/etcd.pem ETCD_KEY/data/k8s/ssl/etcd-key.pem ETCDCTL_PATH/opt/kube/bin/etcdctl # 以表格形式展示成员列表 ETCDCTL_API3 $ETCDCTL_PATH -wtable \ --cacert$CA_CERT \ --cert$ETCD_CERT \ --key$ETCD_KEY \ --endpoints$ETCD_ENDPOINTS \ member list # 需要注意查看节点ID2. 查询健康状态# 查询集群健康状态 ETCDCTL_API3 $ETCDCTL_PATH -wtable \ --cacert$CA_CERT \ --cert$ETCD_CERT \ --key$ETCD_KEY \ --endpoints$ETCD_ENDPOINTS \ endpoint health # 检查集群节点状态 ETCDCTL_API3 $ETCDCTL_PATH -wtable \ --cacert$CA_CERT \ --cert$ETCD_CERT \ --key$ETCD_KEY \ --endpoints$ETCD_ENDPOINTS \ endpoint status --cluster如果显示“某个节点unhealthy”数据大小差距比较大就说明故障实锤需要将故障节点的ID信息记录下来后面处理会用到。故障处理思路删故障节点清旧数据避免“脏数据”坑故障节点不删掉新节点加不进来会一直占用集群资源。这里要注意必须先从集群删除节点再去故障机上清数据顺序反了会出问题。1. 从集群中删除故障节点ETCDCTL_API3 $ETCDCTL_PATH \ --cacert$CA_CERT \ --cert$ETCD_CERT \ --key$ETCD_KEY \ --endpoints$ETCD_ENDPOINTS \ member remove [故障节点ID]看到“Member xxx removed from cluster”就说明删成功了再用member list确认故障节点已经消失。2. 清理故障节点的数据登陆到故障节点的机器上停掉etcd服务删除数据目录systemctl stop etcd rm -rf /var/lib/etcd/*3. 重新加入集群内1故障节点改启动参数关键是“existing”把ETCD_INITIAL_CLUSTER_STATE从“new”改成“existing”——因为集群已经存在新节点是“加入”不是“新建”。ETCD_INITIAL_CLUSTER_STATEexisting # 重点改成existing2) 加节点重启服务在正常节点操作ETCDCTL_API3 $ETCDCTL_PATH \ --cacert$CA_CERT \ --cert$ETCD_CERT \ --key$ETCD_KEY \ --endpoints$ETCD_ENDPOINTS \ member add [节点名称] --peer-urlshttps://[节点IP]:2380看到“Member xxx added to cluster”后登录新加入节点重启服务systemctl daemon-reload # 重新加载配置 systemctl restart etcd # 重启etcd systemctl status etcd # 检查状态确保是“active (running)”3 检查验证集群是否正常此处主要检查节点成员、健康状态。定期备份#!/bin/bash # etcd备份脚本 # 保留3天的备份 # etcd节点信息,填写etcd的节点信息一般为k8s集群master IP地址 etcd_hosts(192.168.1.100 192.168.1.101 192.168.1.102) for i in ${etcd_hosts[]} do ETCDCTL_API3 /opt/kube/bin/etcdctl --cacert/data/k8s/ssl/ca.pem --cert/data/k8s/ssl/etcd.pem --key/data/k8s/ssl/etcd-key.pem --endpointshttps://${i}:2379 snapshot save /data/backup-etcd/backup-etcd_${i}_date %F.db done # 清理 find /data/backup-etcd/ -name *.db -type f -mtime 3 -exec rm -rf {} \;给这个脚本加上定时任务定期对etcd集群节点进行备份这样也能避免丢失数据导致集群崩溃。
返回列表