查看安装 Knative 的文档需要 Kubernetes 集群 v1.11 或更新版本并启用 MutatingAdmissionWebhook 准入控制器。因此,检查文档,我看到以下命令:
kube-apiserver -h | grep enable-admission-plugins
Run Code Online (Sandbox Code Playgroud)
但是,kube-apiserver 在 master 上的 docker 容器内运行。以管理员身份登录以掌握,安装后我没有在命令行上看到这个。我需要采取哪些步骤来运行此命令?它可能是一个基本的 docker 问题,但我在 Kubernetes 文档中的任何地方都没有看到这个问题。
所以我真正需要知道的是,这个命令行是否是设置这些插件的最佳方式,以及如何准确地进入容器来执行命令行。
我应该进入容器吗?容器的名称是什么,如何输入它来执行命令?
这是古老的,但如果它是为了有需要的人的利益的话。@Nick_Kh 的答案已经足够好了,只是想扩展它。
如果 api-server pod 无法为您提供 shell 访问权限,您可以直接使用 kubectl exec 执行命令,如下所示:
kubectl exec -it kube-apiserver-rhino -n kube-system -- kube-apiserver -h | grep enable-admission-plugins
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想知道启用的默认准入插件是什么,每次我尝试访问 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
Run Code Online (Sandbox Code Playgroud)
我认为您在最初的问题中指出的@embik 的回答相当不错,但我会尝试阐明一些对您有用的方面。
正如@embik 在他的回答中提到的,kube-apiserver二进制文件实际上驻留在 K8s api-server Pod 内的特定容器中,因此您可以自由检查它,只需/bin/sh在该 Pod 上执行:
kubectl exec -it $(kubectl get pods -n kube-system| grep kube-apiserver|awk '{print $1}') -n kube-system -- /bin/sh
您可能能够通过此 Pod 内的命令传播所需的enable-admission-pluginskube-apiserver,但是一旦 api-server Pod 重新生成,即主节点重启等,任何修改都将消失。
位于/etc/kubernetes/manifests/kube-apiserver.yaml. 节点代理kubelet控制kube-apiserver运行时 Pod,每次健康检查不成功时都会kubelet向 K8s调度程序发送请求,以便从主kube-apiserver.yaml文件重新创建这个受影响的 Pod 。
| 归档时间: |
|
| 查看次数: |
5340 次 |
| 最近记录: |