跳转至

etcd 生产问题记录

背景

1、 集群在创建aiflow 的任务pod 的时候,发现创建失败. 2、 检查etcd日志发现集群etcd db_size 超过限制; 3、 集群状态出现异常

产生原因

1、 集群db_size 值超过额定的限制; (DB SIZE 默认最大为2GB)

1

2、 在etcd 操作扩容DB SIZE 之后, 出现etcd 集群数据不同步问题, slave 节点的DB SIZE 比master 的DB SIZE 大; 2

处理步骤

处理DB SIZE 超出默认值问题

1、先调整配额限制; 修改每一个etcd 节点的启动配置(/etc/kubernetes/manifests/etcd.yaml)

- command:
    - etcd
    - --advertise-client-urls=https://192.168.148.116:2379
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    - --client-cert-auth=true
    - --data-dir=/var/lib/etcd
    - --initial-advertise-peer-urls=https://192.168.148.116:2380
    - --initial-cluster=control-master004=https://192.168.148.116:2380
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    - --listen-client-urls=https://127.0.0.1:2379,https://192.168.148.116:2379
    - --listen-metrics-urls=http://127.0.0.1:2381
    - --listen-peer-urls=https://192.168.148.116:2380
    - --name=control-master004
    - --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
    - --peer-client-cert-auth=true
    - --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
    - --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --snapshot-count=10000
    - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --quota-backend-bytes=3221225472   # 修改值变成3GB
    - --auto-compaction-mode=revision
    - --auto-compaction-retention=1000000

2、 重启之后会陆续运行成功;

处理etcd 数据同步异常问题

处理思路

将同步异常的节点踢出etcd 集群,数据备份之后再重新加入集群;

1 、 停止异常节点的kubelet

systemctl stop kubelet

2、 etcd 执行前缀

export ETCDCTL_API=3
export HOST_1=https://192.168.148.116   # etcd 节点
export HOST_2=https://192.168.148.117
export HOST_3=https://192.168.148.115
export ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379

# etcd 执行前缀
etcdctl --endpoints=$ENDPOINTS  \
   --cacert=/etc/kubernetes/pki/etcd/ca.crt \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key

3、 删除etcd list

# 查看所有节点
etcdctl --endpoints=$ENDPOINTS  \
   --cacert=/etc/kubernetes/pki/etcd/ca.crt \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key \
   member list 

# 清除节点
etcdctl --endpoints=$ENDPOINTS  \
   --cacert=/etc/kubernetes/pki/etcd/ca.crt \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key \
   member remove <MEMBER ID>

3

4、去到数据异常的节点

5、将异常节点重新加入集群(目前是异常的,加入集群效果是报错)

export NAME=control-master006

etcdctl --endpoints=${HOST_1}:2379,${HOST_2}:2379 \
    member add ${NAME} \
    --peer-urls=http://${HOST_3}:2380

6、修改启动参数

# 主要修改两个
--initial-cluster-state existing # 标志着是新成员

# 集群状态参数也需要修改
NAME_1=control-master004
HOST_1=192.168.148.116
...

--initial-cluster=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_4}=http://${HOST_4}:2380

7 、启动完成重新同步etcd 数据,使集群正常(自动完成)

8、 恢复服务