首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Kubernetes:如何检查etcd组件服务的运行状况?

Kubernetes:如何检查etcd组件服务的运行状况?
EN

Stack Overflow用户
提问于 2016-06-15 21:18:47
回答 2查看 4.2K关注 0票数 2

我在亚马逊网络服务中有一个k8s集群,它看起来部分是向上的,但实际上不会进行部署。在查看组件的运行状况时,etcd显示为不健康。这看起来像是etcd端点被查询为http而不是https的问题:

代码语言:javascript
运行
AI代码解释
复制
kubectl --kubeconfig=Lab_42/kubeconfig.yaml get componentstatuses --namespace=default
NAME                 STATUS      MESSAGE                                                                                                 ERROR
controller-manager   Healthy     ok                                                                                                      
scheduler            Healthy     ok                                                                                                      
etcd-2               Unhealthy   Get http://ip-10-42-2-50.ec2.internal:2379/health: malformed HTTP response "\x15\x03\x01\x00\x02\x02"   
etcd-1               Unhealthy   Get http://ip-10-42-2-41.ec2.internal:2379/health: malformed HTTP response "\x15\x03\x01\x00\x02\x02"   
etcd-0               Unhealthy   Get http://ip-10-42-2-40.ec2.internal:2379/health: malformed HTTP response "\x15\x03\x01\x00\x02\x02" 

我没有使用--ca-config选项,而是将配置值直接放入apiserver运行中。我的apiserver配置:

代码语言:javascript
运行
AI代码解释
复制
command:
  - /hyperkube
  - apiserver
  - --advertise-address=10.42.2.50
  - --admission_control=NamespaceLifecycle,NamespaceAutoProvision,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota
  - --allow-privileged=true
  - --authorization-mode=AlwaysAllow
  - --bind-address=0.0.0.0
  - --client-ca-file=/etc/ssl/kubernetes/k8s-ca.pem
  - --etcd-cafile=/etc/ssl/etcd/etcd-ca.pem
  - --etcd-certfile=/etc/ssl/etcd/etcd-client.pem
  - --etcd-keyfile=/etc/ssl/etcd/etcd-client-key.pem
  - --etcd-servers=https://127.0.0.1:2379
  - --kubelet-certificate-authority=/etc/ssl/kubernetes/k8s-ca.pem
  - --kubelet-client-certificate=/etc/ssl/kubernetes/k8s-apiserver-client.pem
  - --kubelet-client-key=/etc/ssl/kubernetes/k8s-apiserver-client-key.pem
  - --kubelet-https=true
  - --logtostderr=true
  - --runtime-config=extensions/v1beta1/deployments=true,extensions/v1beta1/daemonsets=true,api/all
  - --secure-port=443
  - --service-account-lookup=false
  - --service-cluster-ip-range=10.3.0.0/24
  - --tls-cert-file=/etc/ssl/kubernetes/k8s-apiserver.pem
  - --tls-private-key-file=/etc/ssl/kubernetes/k8s-apiserver-key.pem

实际的问题是,简单的部署实际上不会做任何事情,我不确定etcd是否不健康导致了问题,因为我们还有许多其他的证书。

代码语言:javascript
运行
AI代码解释
复制
kubectl --kubeconfig=Lab_42/kubeconfig.yaml get deployments --namespace=default
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3         0         0            0           2h

如果我使用本地https端点,实际上可以直接查询etcd。

代码语言:javascript
运行
AI代码解释
复制
/usr/bin/etcdctl --ca-file /etc/ssl/etcd/etcd-ca.pem --cert-file /etc/ssl/etcd/etcd-client.pem --key-file /etc/ssl/etcd/etcd-client-key.pem 
--endpoints 'https://127.0.0.1:2379' \
get /registry/minions/ip-10-42-2-50.ec2.internal | jq "."
{
  "kind": "Node",
  "apiVersion": "v1",
  "metadata": {
    "name": "ip-10-42-2-50.ec2.internal",
    "selfLink": "/api/v1/nodes/ip-10-42-2-50.ec2.internal",
...SNIP
EN

回答 2

Stack Overflow用户

发布于 2016-06-16 21:04:52

因此,事实证明组件状态是一个转移注意力的问题。真正的问题是因为我的控制器配置是错误的。已将主服务器设置为http://master_ip:8080而不是http://127.0.0.1:8080。apiserver的不安全端口未公开给外部接口,因此控制器无法连接。

切换到环回不安全或:443解决了我的问题。

在使用日志超立方体和kubelet-wrapper时,您会丢失/var/ CoreOS /containers中自动链接的容器日志。要找到它们,您可以执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
ls -latr /var/lib/docker/containers/*/*-json.log

我实际上能够以这种方式看到导致我的问题的错误。

票数 0
EN

Stack Overflow用户

发布于 2017-06-22 08:43:05

我认为您的kube-apiserver的配置缺少--etcd-server=xxx选项

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37845949

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文