gpt4 book ai didi

Kubernetes:如何检查 etcd 组件服务的健康状况?

转载 作者:行者123 更新时间:2023-12-02 11:49:42 37 4
gpt4 key购买 nike

我在 AWS 中有一个 k8s 集群,看起来部分正常,但实际上不会进行部署。查看组件的健康状况时,etcd 显示为不健康。这似乎是 etcd 端点被查询为 http 与 https 的问题:

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 配置:
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 不健康是否会导致问题,因为我们还有许多其他证书。
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
/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

最佳答案

所以事实证明,组件状态是一个红鲱鱼。真正的问题是由于我的 Controller 配置错误。主设置为 http://master_ip:8080而不是 http://127.0.0.1:8080 . apiserver 的不安全端口未暴露给外部接口(interface),因此 Controller 无法连接。

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

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

ls -latr /var/lib/docker/containers/*/*-json.log

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

关于Kubernetes:如何检查 etcd 组件服务的健康状况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37845949/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com