Kubernetes – 如何在容器中运行kubectl命令?
在一个容器内的容器中,我怎样才能使用kubectl运行一个命令? 例如,如果我需要在容器中做这样的事情:
kubectl得到豆荚
我试过这个:在我的dockerfile中,我有这些命令:
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl RUN chmod +x ./kubectl RUN sudo mv ./kubectl /usr/local/bin/kubectl
编辑:我正在尝试OSX文件,我已经纠正它到Linux二进制文件。 (由@svenwltr纠正
在创builddocker文件时,这是成功的,但是当我运行kubectl时,
kubectl get pods
我得到这个错误:
连接到服务器:被拒绝 – 你指定了正确的主机或端口?
当我在本地进行部署时,如果我的docker-machine没有运行,但是在一个容器内,docker-machine如何运行,我遇到了这个错误?
在本地,我通过运行以下命令来解决这个错误:(dev是docker-machine的名字)
docker-machine env dev eval $(docker-machine env dev)
有人可以告诉我,我需要做什么?
我会使用kubernetes API,你只需要安装curl,而不是kubectl
,其余的是安宁的。
curl http://localhost:8080/api/v1/namespaces/default/pods
我在我的一个apiservers上面运行命令。 将localhost更改为apiserver ip地址/ dns名称 。
根据您的configuration,您可能需要使用ssl或提供客户端证书。
为了findapi端点,可以使用--v=8
和kubectl
。
例:
kubectl get pods --v=8
资源:
Kubernetes API文档
第一个问题
/usr/local/bin/kubectl: cannot execute binary file
它看起来像你下载kubectl
的OSX二进制kubectl
。 在Docker中运行时,您可能需要Linux版本:
https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
第二个问题
如果您在适当configuration的Kubernetes集群中运行kubectl
,它应该能够连接到apiserver。
kubectl
基本上使用这个代码来findapiserver并进行身份validation: github.com/kubernetes/client-go/rest.InClusterConfig
意即:
- apiserver的主机和端口存储在环境variables
KUBERNETES_SERVICE_HOST
和KUBERNETES_SERVICE_PORT
。 - 访问令牌安装到
var/run/secrets/kubernetes.io/serviceaccount/token
。 - 服务器证书安装到
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
。
这是所有数据kubectl
需要知道连接到apiserver。
一些想法,为什么这可能无法正常工作:
- 容器不在Kubernetes中运行。
- 使用相同的Docker主机是不够的。 容器需要作为一个pod定义的一部分运行。
- 访问受限于使用授权插件 (这不是默认设置)。
- 服务帐户凭据由pod定义 (
spec.serviceAccountName
)覆盖。