如何在命令行上访问kube-apiserver?

时间:2019-06-11 11:07:40

标签: kubernetes

要查看安装Knative的文档,需要启用了MutatingAdmissionWebhook接纳控制器的Kubernetes集群v1.11或更高版本。因此,为此查看文档,我看到以下命令:

kube-apiserver -h | grep enable-admission-plugins

但是,kube-apiserver在master上的docker容器内运行。以admin身份登录到master,安装后在命令行上看不到此信息。我需要采取什么步骤来运行此命令?这可能是一个基本的码头工人问题,但我在Kubernetes文档中的任何地方都看不到这个问题。

所以我真正需要知道的是,此命令行是否是设置这些插件的最佳方法,以及如何准确输入容器以执行命令行。

Where is kube-apiserver located

我应该进入容器吗?容器的名称是什么?如何输入它来执行命令?

2 个答案:

答案 0 :(得分:1)

这是旧的,如果它对有需要的人有益。 @Nick_Kh 的回答已经足够好了,只是想扩展一下。

如果 api-server pod 无法为您提供 shell 访问权限,您可以像这样使用 kubectl exec 直接执行命令:

kubectl exec -it kube-apiserver-rhino -n  kube-system -- kube-apiserver -h | grep enable-admission-plugins

在这种情况下,我想知道启用的默认准入插件是什么,每次尝试访问 pod 的 shell(bash、sh 等)时,都会出现如下错误:

[root@rhino]# kubectl exec -it kube-apiserver-rhino -n  kube-system -- /bin/sh
OCI runtime exec failed: exec failed: container_linux.go:367: starting container process caused: exec: "/bin/sh": stat /bin/sh: no such file or directory: unknown
command terminated with exit code 126

答案 1 :(得分:0)

我认为您在第一个问题中指出的来自@embik的答案是相当不错的,但是我将尝试阐明对您有用的某些方面。

正如@embik在他的回答中提到的那样,kube-apiserver二进制文件实际上位于K8s api服务器Pod内的特定容器上,因此您可以自由检查它,只需在该Pod上执行/bin/sh

kubectl exec -it $(kubectl get pods -n kube-system| grep kube-apiserver|awk '{print $1}') -n kube-system -- /bin/sh

您也许可以通过kube-apiserver命令在此Pod中传播所需的enable-admission-plugins,但是一旦api-server Pod重新生成(即主节点重启等),任何修改都将消失。

位于/etc/kubernetes/manifests/kube-apiserver.yaml中的基本api-server配置。节点代理kubelet控制kube-apiserver运行时Pod,并且每次运行状况检查不成功时,kubelet都会向K8 Scheduler发送请求,以便从中重新创建此受影响的Pod主要kube-apiserver.yaml文件。