etcd
k8s集群的元数据库,存储了所有k8s的YAML元数据资源。
功能特性
备份还原
功能简介:ADP底座的etcd备份任务会周期性自动运行。当k8s集群挂了以后,我们重新拉起并恢复该集群后,我们可以使用etcd备份还原集群挂了之前的元数据。
备份etcd
在K8s集群中,我们可以使用以下命令备份etcd
kubectl -n acs-system get cronjob backup-etcd
可以看到周期性备份任务,它会在每日的凌晨2点进行一次自动备份,并将备份文件随机放置在某个Master节点的/backup/etcd/snapshots/目录下,依次登录各个master,查看哪个是最新的。
恢复etcd
etcdctl snapshot restore ${filename}
注意,请确保使用的filename一定是你想恢复到的时刻。
FAQ
如何检查一个集群的etcd是否存在性能问题
在有etcd实例的节点(通常是master节点)执行:
curl --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key --cacert /etc/kubernetes/pki/etcd/ca.crt https://127.0.0.1:2379/metrics| grep backend_commit_duration_seconds
curl --cert /etc/kubernetes/pki/etcd/etcd-client.pem --key /etc/kubernetes/pki/etcd/etcd-client-key.pem --cacert /etc/kubernetes/pki/etcd/ca.pem https://127.0.0.1:2379/metrics| grep backend_commit_duration_seconds
上述命令如果报错connection refused,把127.0.0.1替换成本机的IP
典型输出如下:
[root@vpaas-envpaas-test-ontianji-master-1 ~]# curl --cert /etc/kubernetes/pki/etcd/etcd-client.pem --key /etc/kubernetes/pki/etcd/etcd-client-key.pem --cacert /etc/kubernetes/pki/etcd/ca.pem https://127.0.0.1:2379/metrics| grep backend_commit_duration_seconds
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0# HELP etcd_disk_backend_commit_duration_seconds The latency distributions of commit called by backend.
# TYPE etcd_disk_backend_commit_duration_seconds histogram
etcd_disk_backend_commit_duration_seconds_bucket{le="0.001"} 190
etcd_disk_backend_commit_duration_seconds_bucket{le="0.002"} 35363
etcd_disk_backend_commit_duration_seconds_bucket{le="0.004"} 41974
etcd_disk_backend_commit_duration_seconds_bucket{le="0.008"} 46446
etcd_disk_backend_commit_duration_seconds_bucket{le="0.016"} 49498
etcd_disk_backend_commit_duration_seconds_bucket{le="0.032"} 50827
etcd_disk_backend_commit_duration_seconds_bucket{le="0.064"} 51139
etcd_disk_backend_commit_duration_seconds_bucket{le="0.128"} 51165
etcd_disk_backend_commit_duration_seconds_bucket{le="0.256"} 51165
etcd_disk_backend_commit_duration_seconds_bucket{le="0.512"} 51165
etcd_disk_backend_commit_duration_seconds_bucket{le="1.024"} 51165
etcd_disk_backend_commit_duration_seconds_bucket{le="2.048"} 51165
etcd_disk_backend_commit_duration_seconds_bucket{le="4.096"} 51165
etcd_disk_backend_commit_duration_seconds_bucket{le="8.192"} 51165
etcd_disk_backend_commit_duration_seconds_bucket{le="+Inf"} 51165
etcd_disk_backend_commit_duration_seconds_sum 171.264434289
etcd_disk_backend_commit_duration_seconds_count 51165
100 123k 100 123k 0 0 968k 0 --:--:-- --:--:-- --:--:-- 973k
上面的输出是一个类似CDF的表,表示了每一行表示“小于等于x秒完成的commit的数目”,最后一行代表了统计的总数。例如line11,表示完成时间<=16ms的commit有49498个,line23表示统计总数为51165,所以<=16ms的commit占比达到96.7%。一般来说,满足要求的指标是小于25ms的超过99%,所以上面这个统计算是勉强达到了要求(<=32ms的是50827/51165 ~= 99.3%)
参考文献:
https://etcd.io/docs/v3.4.0/faq/
如何修改etcd的挂盘
下面的方法仅适用于on tianji场景
修改service-tianji-etcd/tianji_templates/default/user/etcd.env.jj2中ETCD_DATA_DIR=data/etcd参数。
如果不修改,该环境的etcd的data保存在每个master节点的/cloud/app/tianji-etcd/etcd#/etcd/current/data/etcd中
如果将上面的值修改为绝对路径,那么etcd的data就会保存在相应的绝对路径中,通过修改对应的挂载来达到将数据放在指定数据盘的目的。
如何判断磁盘性能
ssd是首选
根据集团经验,需要选择三星或者Intel的磁盘,IOPS>=5000,最好高于10000
或者参考社区的文档: