我将ICP V2.1安装到RHEL VMWare映像中。重新启动映像后,ICP无法启动文档中的第一个已知问题(Kubernetes控制器管理器在主服务器或集群重新启动后无法启动)。但是,规定的分辨率不会让我的系统继续运行。
以下是正在运行的广告连播列表:
NAME READY STATUS RESTARTS AGE calico-node-amd64-dtl47 2/2运行14 20h filebeat-ds-amd64-mvcsj 1/1运行8 20h k8s-etcd-192.168.232.131 1/1运行7 20h k8s-mariadb-192.168.232.131 1/1运行7 20h k8s-master-192.168.232.131 2/3 CrashLoopBackOff 15 17m k8s-proxy-192.168.232.131 1/1运行7 20h 计量读卡器-amd64-gkwt4 1/1运行7 20h 监控 - prometheus-nodeexporter-amd64-sghrv 1/1运行7 20h
删除k8s-master-192.168.232.131 pod并允许它重新启动只会将其重新置于CrashLoopBackOff状态。以下是控制器管理器日志中最后一行的显示方式:
F1029 23:55:07.345341 1 controllermanager.go:176]错误构建控制器上下文:无法从服务器获取支持的资源:无法检索服务器API的完整列表:servicecatalog.k8s.io/v1alpha1:错误服务器("错误:'拨打tcp 10.0.0.145:443:getsockopt:连接被拒绝' \ n为了达到:' https://10.0.0.145:443/apis/servicecatalog.k8s.io/v1alpha1'" )阻止了请求成功
直接删除容器或删除故障的控制器主扩展坞容器无效。似乎另一项服务还没有启动,或者无法启动。我等了几个小时才看看问题是否自行解决,但无济于事。
...谢谢
答案 0 :(得分:1)
在修复https://github.com/kubernetes/kubernetes/pull/49495之前,如果registered extension-apiserver未准备就绪,则kuberentes控制器管理器无法启动。在ICP中,服务目录实现为extension-apiserver。
通常在重新启动ICP主控后,kubelet将首先以静态pod启动k8s管理服务。之后,它将从kubernetes api服务器获取pods / nodes / service信息,然后启动所有pod,包括目录api服务。对于这种情况,整个群集都被恢复。
但是对于你的情况,有一种竞争条件,当kubelet从kuberentes api服务器获取pod信息并启动所有pod时,它还没有从kubernetes api服务器获取节点信息。因此,由于未满足nodeSelector,kubelet无法启动目录api服务。整个集群无法恢复。
在ICP 2.1.0.1的下一版本中,kuberentes将通过https://github.com/kubernetes/kubernetes/pull/49495的修正升级到1.8.2。该问题将得到彻底解决。
在此之前,您可以尝试以下解决方法。
如果您的令牌在重新启动后已过期,并且您无法再访问GUI以重新建立它,请使用kubectl命令的
-s flag
形式。
删除v1alpha1.servicecatalog.k8s.io
的apiservices kubectl delete apiservices v1alpha1.servicecatalog.k8s.io
kubectl -s 127.0.0.1:8888 delete apiservices v1alpha1.servicecatalog.k8s.io
删除死控制器管理器
docker rm <k8s controller manager>
等到服务目录开始
通过重新注册v1alpha1.servicecatalog.k8s.io的apiservice来恢复服务目录apiservices
kubectl apply -f cluster/cfc-components/service-catalog/apiregistration.yaml
kubectl -s 127.0.0.1:8888 apply -f cluster/cfc-components/service-catalog/apiregistration.yaml