我有一个正在运行的单节点kubernetes集群。一切正常,但是当我运行“kubectl get cs”(kubectl get componentstatus)时,它显示了etcd的两个实例。我已经运行了一个etcd实例。[root@master01 vagrant]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
etcd-1 Healthy {"health": "true"}
[root@master01 vagrant]# etcdctl member list
19ef3eced66f4ae3: name=master01 peerURLs=http://10.0.0.10:2380 clientURLs=http://0.0.0.0:2379 isLeader=true
[root@master01 vagrant]# etcdctl cluster-health
member 19ef3eced66f4ae3 is healthy: got healthy result from http://0.0.0.0:2379
cluster is healthy
Etcd作为docker容器运行。在/etc/systemd/system/etcd.service文件中,提到了单个etcd集群。(http://10.0.0.10:2380)/usr/local/bin/etcd \
--name master01 \
--data-dir /etcd-data \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://0.0.0.0:2379 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-advertise-peer-urls http://10.0.0.10:2380 \
--initial-cluster master01=http://10.0.0.10:2380 \
--initial-cluster-token my-token \
--initial-cluster-state new \
同样在api服务器配置文件中,使用/etc/kubernetes/manifests/api-srv.yaml --etcd-servers标志。- --etcd-servers=http://10.0.0.10:2379,
[root@master01 manifests]# netstat -ntulp |grep etcd
tcp6 0 0 :::2379 :::* LISTEN 31109/etcd
tcp6 0 0 :::2380 :::* LISTEN 31109/etcd
任何人都知道为什么它在“kubectl get cs”中显示etcd-0和etcd-1吗?任何帮助表示赞赏。
最佳答案
尽管@Jyothish Kumar S自己找到了根本原因并解决了该问题-这是一个好习惯,要为将来会遇到相同问题的人们提供一个答案。
问题来自API服务器配置文件/etc/kubernetes/manifests/api-srv.yaml
中的配置错误,其中--etcd-servers
设置不当。
可以在here中找到kube-apiserver
的所有标志及其描述。
因此,问题出在--etcd-servers=http://10.0.0.10:2379,
行的最后一个逗号中。该逗号被解释为新的ETCD服务器记录http://:::2379
,这就是为什么在"kubectl get cs"
输出中我们能够看到两个etcd记录而不是一个的原因。
配置etcd时请注意此方面。
关于kubernetes - kubectl获取componentStatus显示额外的etcd实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51595224/