我在亚马逊网络服务中有一个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
发布于 2016-06-16 21:04:52
因此,事实证明组件状态是一个转移注意力的问题。真正的问题是因为我的控制器配置是错误的。已将主服务器设置为http://master_ip:8080而不是http://127.0.0.1:8080。apiserver的不安全端口未公开给外部接口,因此控制器无法连接。
切换到环回不安全或:443解决了我的问题。
在使用日志超立方体和kubelet-wrapper时,您会丢失/var/ CoreOS /containers中自动链接的容器日志。要找到它们,您可以执行以下操作:
ls -latr /var/lib/docker/containers/*/*-json.log
我实际上能够以这种方式看到导致我的问题的错误。
发布于 2017-06-22 08:43:05
我认为您的kube-apiserver的配置缺少--etcd-server=xxx
选项
https://stackoverflow.com/questions/37845949
复制相似问题