etcd

更新时间: 2023-04-12 13:15:05

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/

image

如何修改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就会保存在相应的绝对路径中,通过修改对应的挂载来达到将数据放在指定数据盘的目的。

如何判断磁盘性能

  1. ssd是首选

  2. 根据集团经验,需要选择三星或者Intel的磁盘,IOPS>=5000,最好高于10000

  3. 或者参考社区的文档:

    https://etcd.io/docs/v3.4.0/op-guide/hardware/

image

阿里云首页 云原生应用交付平台 相关技术圈