2

我已将 ICP V2.1 安装到 RHEL VMWare 映像中。重新启动映像后,ICP 无法启动,这似乎是文档中的第一个已知问题(Kubernetes 控制器管理器在主节点或集群重新启动后无法启动)。但是,规定的分辨率并没有让我的系统运行。

这是正在运行的 pod 列表:

NAME READY STATUS RESTARTS AGE calico-node-amd64-dtl47 2/2 Running 14 20h filebeat-ds-amd64-mvcsj 1/1 Running 8 20h k8s-etcd-192.168.232.131 1/1 Running 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 Metering-reader-amd64-gkwt4 1/1 运行 7 20h monitoring-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:服务器上的错误( "错误: 'dial tcp 10.0.0.145:443: getsockopt: connection denied'\nTying to reach: ' https://10.0.0.145:443/apis/servicecatalog.k8s.io/v1alpha1 '") 已阻止请求成功

直接移除 pod 或者移除失败的控制器主 docker 容器没有任何效果。似乎另一个服务尚未启动,或者无法启动。我已经等了几个小时,看看问题是否自行解决,但无济于事。

谢谢...

4

1 回答 1

1

在修复https://github.com/kubernetes/kubernetes/pull/49495之前,如果注册的 extension-apiserver未准备好,kuberentes 控制器管理器无法启动。在 ICP 中,服务目录实现为 extension-apiserver。

通常ICP master重启后,kubelet会先启动k8s管理服务作为静态pod。之后,它将从 kubernetes api server 获取 pods/nodes/service 信息,然后启动所有 pods,包括目录 api 服务。在这种情况下,整个集群都会被恢复。

但是,对于您的情况,存在一种竞争条件,即当 kubelet 从 kuberentes api 服务器获取 pod 信息并启动所有 pod 时,它还没有从 kubernetes api 服务器获取节点信息。导致kubelet启动catalog api服务失败,原因是没有满足nodeSelector。整个集群恢复失败。

在 ICP 2.1.0.1 的下一个版本中,kuberentes 将升级到 1.8.2,修复https://github.com/kubernetes/kubernetes/pull/49495。问题将得到彻底解决。

在此之前,您可以尝试以下解决方法。

-s flag如果您的令牌在重新启动后已过期并且您不再有权访问 GUI 来重新建立它,请使用 kubectl 命令的形式。

  1. 删除 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

  2. 删除死控制器管理器

    docker rm <k8s controller manager>

  3. 等到服务目录启动

  4. 通过重新注册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

于 2017-10-30T18:45:16.447 回答