我正在使用 Linux-amd64 架构的 Docker 容器中本地运行一个项目。启动脚本运行以下命令
kubectl create configmap -o yaml
--dry-run=true
--from-file ./configs/local/grafana
grafana-dashboards-source-config |
kubectl apply -f -
它在我的 MacOS 上运行良好,但在 Docker 容器内运行时,它会失败并出现The connection to the server localhost:8080 was refused - did you specify the right host or port?
错误。在在线浏览资源时,许多帖子建议使用这些命令来解决问题
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
但是在我的 Docker 容器中,我找不到/kubernetes
目录,因此找不到admin.conf
文件。 我在我的 Dockerfile 中使用COPY --from=lachlanevenson/k8s-kubectl:v1.10.3 /usr/local/bin/kubectl /usr/local/bin/kubectl
命令来安装 kubectl 并kubectl version --client
返回
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
我想知道在创建 Docker 镜像时安装 kubectl 的正确方法是什么,以便我可以找到kubernetes/admin.conf
文件,或者是否有办法在安装 kubectl 后生成它?
如果主要思想是在集群中的容器中使用 kubectl,您可以使用service account
来访问 Kubernetes API Server。您通常可以按照以下步骤操作。
- 在群集上创建具有相关权限的服务帐户
- 将服务帐户设置为工作负载(部署、有状态集、Pod 等)
- 将配置映射设置为使用服务帐户(/var/run/secrets/kubernetes.io/serviceaccount/) 此链接可能很有用。