k3s 里的 etcd
安装 etcdctl
ETCD_VERSION="v3.5.5"
ETCD_URL="https://github.com/etcd-io/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz"
curl -sL ${ETCD_URL} | sudo tar -zxv --strip-components=1 -C /usr/local/bin
etcdctl 命令
k3s 里面的 etcd 需要一些配置,我会将这个下面的内容放到一个文件里,然后使用这个文件操作 etcd
ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt \
--cert=/var/lib/rancher/k3s/server/tls/etcd/server-client.crt \
--key=/var/lib/rancher/k3s/server/tls/etcd/server-client.key \
$@
在 server 节点上添加上面的 shell,然后就可以使用 etcdctl 命令了。比如查看 etcd 节点 bash ./etcd.sh member list
member list
查看注册上来的节点,但是并一定表示注册的就可用
endpoint status
查看 leader
日志
在 k3s 里可以这么查看 etcd 的日志
journalctl -u k3s | grep etcd
报错
Mar 13 15:54:43 HKG-A-MY9G0EJ13HOVZXPH k3s[224040]: {"level":"warn","ts":"2025-03-13T15:54:43.444648+0800","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"1.999898891s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/health\" ","response":"","error":"context deadline exceeded"}
这里是 etcd 处理请求超时了。
apply request took too long:etcd 处理请求的时间过长。took:"1.999898891s":实际处理时间为 1.999 秒。expected-duration:"100ms":预期处理时间为 100 毫秒。prefix:"read-only range ":这是一个只读请求。request:"key:\"/registry/health\" ":请求的键是/registry/health。error:"context deadline exceeded":请求超时,因为处理时间超过了上下文设置的截止时间。
修改 /etc/rancher/k3s/config.yaml
etcd-arg:
- "--log-level=debug"
- "--election-timeout=5000"
- "--heartbeat-interval=500"
- "--request-timeout=10s"
etcd 新节点被拒绝
Mar 17 01:09:23 HKG-A-MY9G0EJ13HOVZXPH k3s[290994]: {"level":"warn","ts":"2025-03-17T01:09:23.6942go:247] "Successfully synced" key="vvps1"48+0800","caller":"embed/config_logging.go:170","msg":"rejected connection on peer endpoint","remogo:247] "Successfully synced" key="v"te-addr":"146.56.142.1:45440","server-name":"v","error":"local error: tls: bad rec48+0800","caller":"embed/config_logging.go:170","msg":"rejected connection on peer endpoint","remoteord MAC"}
这是什么意思
查看集群状态
etcdctl endpoint status --cluster -w table
Read other posts