首页 文章

kubernetes控制器到API通信

提问于
浏览
0

我've a requirement where I need to create/write ConfigMap and this code will be part of kube-controller-manager.I'm部署我的kubernetes与单主和kubernetes组件作为pod运行 . 我正在使用"k8s.io/client-go/rest"来获取与API通信的客户端 .

import "k8s.io/client-go/rest"
.
.
.
rest.InClusterConfig()

根据code InClusterConfig检查kubernetes服务环境变量,即"KUBERNETES_SERVICE_HOST" "KUBERNETES_SERVICE_PORT" . 甚至它检查服务令牌(/var/run/secrets/kubernetes.io/serviceaccount/token) .

我面临的问题是当控制器管理器出现时,环境变量("KUBERNETES_SERVICE_HOST" "KUBERNETES_SERVICE_PORT")不存在,并且也未安装服务令牌(/var/run/secrets/kubernetes.io/serviceaccount/token) .

“k8s.io/client-go/rest”不应该从控制器管理器中使用?如果不应该使用那么从控制器管理器传递API以创建/写入configMaps的最佳方法是什么?

1 回答

  • 0

    为了创建k8s资源(pods,configmaps,deployments等),你的集群必须处于稳定状态,这意味着kube-apiserver,kube-controller-manager和kube-scheduler必须处于就绪状态 . 根据我对您的描述的理解,您使用静态清单将kubernetes组件部署为pod,在这种情况下,这些pod不是纯粹由kubernetes管理的,这些是docker(rkt)容器,一旦处于运行状态,就连接到kubernetes . 因此,他们没有任何kubernetes特定的pod环境配置(正如你所注意到的,他们缺少kubernetes的秘密和环境),这就是你不能使用 InClusterConfig() 方法的原因 . 另一件事是,从kube-controller-manager中创建任何kubernetes资源看起来不是一个好主意 . 但是如果你真的想这样做,那么使用 BuildConfigFromFlags() 来自 k8s.io/client-go/tools/clientcmd ,在这个函数中你可以手动指定kube-apiserver url和kubeconfig文件位置并重用kube-controller-manager标志 .

相关问题