kubernetes - 无法检查 ETCD 集群运行状况

标签 kubernetes high-availability etcd

在遵循( https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/ )针对 HA 外部 ETCD 的官方指导后,我尝试检查 etcd 集群的运行状况,但是,它引发了一些我正在努力解决的错误。请帮忙。

用于检查引发错误的 etcd 集群运行状况的命令:

docker run --rm -it \
--net host \
-v /etc/kubernetes:/etc/kubernetes k8s.gcr.io/etcd:3.4.3-0 etcdctl \
--cert /etc/kubernetes/pki/etcd/peer.crt \
--key /etc/kubernetes/pki/etcd/peer.key \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--endpoints https://${HOST0}:2379 endpoint health --cluster

三台裸机主机,全部启用 ufw,整个主机上允许使用 2379 和 2380 端口。

错误:

Error: failed to fetch endpoints from etcd cluster member list: context deadline exceeded ```

**etcd docker image**:
``` k8s.gcr.io/etcd     3.4.3-0             303ce5db0e90        9 months ago        288MB ````

最佳答案

超过上下文期限是grpc客户端无法建立连接时返回的一个不清楚的错误。您可以设置ETCDCTL_API=2,然后您可以获得正确的错误消息。
另外,您可以更改 etcd 中的一些代码来调试此错误。
请参阅#10087

当我应用正确的证书/ key 对时,您可以解决此问题。

假设您使用 kubeadm 来启动集群,该文件夹下应该有几个证书/ key 对:

# ls -l /etc/kubernetes/pki/etcd/
total 32
-rw-r--r--    1 root     root          1017 Nov 12 15:32 ca.crt
-rw-------    1 root     root          1679 Nov 12 15:32 ca.key
-rw-r--r--    1 root     root          1094 Nov 12 15:32 healthcheck-client.crt
-rw-------    1 root     root          1675 Nov 12 15:32 healthcheck-client.key
-rw-r--r--    1 root     root          1180 Nov 12 15:32 peer.crt
-rw-------    1 root     root          1675 Nov 12 15:32 peer.key
-rw-r--r--    1 root     root          1180 Nov 12 15:32 server.crt
-rw-------    1 root     root          1679 Nov 12 15:32 server.key

# etcdctl --version
etcdctl version: 3.3.1
API version: 2

# ETCDCTL_API=3 etcdctl snapshot save snapshot.db \
  --cacert /etc/kubernetes/pki/etcd/ca.crt \
  --cert /etc/kubernetes/pki/etcd/server.crt \
  --key /etc/kubernetes/pki/etcd/server.key
Snapshot saved at snapshot.db

# ETCDCTL_API=3 etcdctl --write-out=table snapshot status snapshot.db
+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| b9d500f7 |    72966 |       1194 |     4.9 MB |

您也可以尝试按照此说明 error-context-deadline-exceeded-accessing 进行操作.

看看:context-deadline-exceeded .

关于kubernetes - 无法检查 ETCD 集群运行状况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63289800/

相关文章:

kubernetes - Openshift 上的 Spring Eureka

kubernetes - 在节点之间首选调度副本

spring-boot - 微服务未在所有 Eureka 实例上注册

ssl - 如何修复etcd集群 "error "tls : first record does not look like a TLS handshake""

kubernetes - 如何将 Kubernetes DiskPressure 状态从 true 更改为 false?

kubernetes - 如何从 kubernetes 嗅探所有 DNS 记录?

node.js - Minikube 与 Istio 服务不可用(http 状态 503)Node.js 连接到 Etcd

service-discovery - 我如何使用 confd 获取使用 etcd 生成的 key 字符串值

kubernetes - 在 Kubernetes 中,使用复制 Controller 时如何设置 Pod 的名称?

wcf - 通过 WCF 使用高可用性 RabbitMQ 服务器对