【问题标题】:kubernetes allow privileged local testing clusterkubernetes 允许特权本地测试集群
【发布时间】:2015-12-10 03:37:13
【问题描述】:

我正忙着在本地电脑上使用https://github.com/kubernetes/kubernetes/blob/master/docs/getting-started-guides/docker.md 测试 kubernetes

启动一个 dockerized 单节点 k8s 集群。我需要在 k8s 中运行一个特权容器(它运行 docker 以便从 dockerfiles 构建图像)。到目前为止,我所做的是将安全上下文 privileged=true 添加到 pod 配置中,该配置在尝试创建 pod 时返回禁止。我知道您必须使用--allow-privileged=true 在节点上启用特权,我已经通过将参数 arg 添加到第二步(运行主节点和工作节点)来完成此操作,但是在创建 pod 时它仍然返回禁止。

有人知道如何在这个 dockerized k8s 中启用特权进行测试吗?

这是我运行k8s master 的方式:

docker run --privileged --net=host -d -v /var/run/docker.sock:/var/run/docker.sock  gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube kubelet --api-servers=http://localhost:8080 --v=2 --address=0.0.0.0 --allow-privileged=true --enable-server --hostname-override=127.0.0.1 --config=/etc/kubernetes/manifests

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    更新:从 Kubernetes 1.1 版本开始,现在默认启用特权模式(在 apiserver 和 kubelet 中)。


    要启用特权容器,您需要在启动时将 --allow-privileged 标志传递给 Kubernetes apiserver 到 Kubelet。用于在单节点 docker 示例中启动 Kubernetes apiserver 的清单文件已捆绑到映像中(来自 master.json),但您可以制作该文件的本地副本,将 --allow-privileged=true 标志添加到 apiserver 命令行,然后将您在第二步中传递给 Kubelet 的 --config 标志更改为包含您修改的文件的目录。

    【讨论】:

    • 我已经通过将编辑后的 ​​master.json 文件挂载为卷来尝试此操作,并验证它是否正确挂载。然而,这会导致 api 服务器无法运行。你确定它必须在api服务器上完成吗?从我读过的内容来看,您必须在每个 kubelet 上允许特权。
    • 你需要在kubelet apiserver上做(抱歉之前不是很清楚,我已经更新了答案)。
    • 啊,反正我已经这样做了,我实际上并没有正确查看 master.json,也没有意识到 master.json 中的 ${VERSION} 在运行时正在动态更改生成文件。修复后它现在可以工作了。
    • 顺便提一下,如果我要更改一些代码,例如添加存储插件或修改调度程序,那么将 kubernetes dockerize 有多容易?自动构建是否会创建用于 dockerize kubernetes 的 hyperkube 二进制文件?目前,makefile 从官方 k8s 版本下载这个二进制文件,而不是使用机器上构建的二进制文件。
    • 如果您想更改一些代码并运行自定义版本的调度程序或 kubelet,您可以修改 makefile 以从您自己的 docker 注册表(私有或公共)推送/拉取并构建自己的hyperkube 图像。
    猜你喜欢
    • 2021-04-01
    • 2019-03-26
    • 1970-01-01
    • 2019-02-03
    • 2019-11-06
    • 1970-01-01
    • 2018-12-27
    • 2019-11-29
    • 1970-01-01
    相关资源
    最近更新 更多