【问题标题】:configure kubectl to reach cluster on docker配置 kubectl 以访问 docker 上的集群
【发布时间】:2021-07-20 19:50:30
【问题描述】:

我正面临一个有趣的挑战,我正在尝试在具有适当配置的 docker 映像中运行 kubectl,以访问我的集群。

我已经能够创建图像,kubecod

    FROM ubuntu:xenial
    
    WORKDIR /project
    
    RUN apt-get update && apt-get install -y \
        curl
    
    RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.21.0/bin/linux/amd64/kubectl
    
    RUN chmod +x ./kubectl
    
    RUN mv ./kubectl /usr/local/bin/kubectl
    
    ENTRYPOINT ["kubectl"]
    #
    CMD ["version"]

当我运行映像时,容器运行正常,给了我预期的答案。

Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.2", GitCommit:"f5743093fd1c663cb0cbc89748f730662345d44d", GitTreeState:"clean", BuildDate:"2020-09-16T13:41:02Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"18+", GitVersion:"v1.18.9-eks-d1db3c", GitCommit:"d1db3c46e55f95d6a7d3e5578689371318f95ff9", GitTreeState:"clean", BuildDate:"2020-10-20T22:18:07Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}

但是,我的目标是创建一个将 kubectl 连接到我的节点的图像。读取doc,需要在~/.kube/config以下文件夹中添加配置文件

我创建了另一个 Dockerfile 来构建另一个映像 kubedock,其中包含正确的配置文件和必要目录的创建 .kube

FROM ubuntu:xenial

#setup a working directory
WORKDIR /project 

RUN apt-get update && apt-get install -y \
    curl

RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.21.0/bin/linux/amd64/kubectl

RUN chmod +x ./kubectl

RUN mv ./kubectl /usr/local/bin/kubectl

#create the directory 
RUN mkdir .kube

#Copy the config file to the .kube folder
COPY ./config .kube

ENTRYPOINT ["kubectl"]

CMD ["cluster-info dump"]

但是,当我在容器中运行新映像时,我收到以下消息


me@os:~/_projects/kubedock$ docker run --name kubecont kubedock
Error: unknown command "cluster-info dump" for "kubectl"
Run 'kubectl --help' for usage.

不知道我错过了什么。

欢迎任何提示。

干杯。

【问题讨论】:

  • 要使其对 EKS 起作用,您不仅需要 kubectl 二进制文件,还需要 AWS CLI,用户的 ~/.kube/config 文件,和 i> 当前有效的一组 AWS 凭证。将大量主机/用户上下文推送到隔离的 Docker 容器中。在主机上安装 Kubernetes 和 AWS CLI 工具可能会容易得多。
  • @DavidMaze 我只需要~/.kube/config,因为我们设置了一些内部配置;不需要 AWS cli,也不需要 AWS 凭证,因为内部系统可以处理除配置文件之外的所有事情。

标签: linux docker kubernetes kubectl


【解决方案1】:

我不清楚你的 K8s 集群在哪里运行, 如果你在 GKE 中运行你的集群,你需要运行类似的东西:

gcloud container clusters get-credentials $CLUSTER_NAME --zone $CLUSTER_ZONE

这将在用户主目录中创建 ~/.config/gcloud 文件树。

在 AWS EKS 上,您需要设置 ~/.aws/credentials 和其他 IAM 设置。

我建议您发布您的 K8s 集群运行位置的详细信息,我们可以从那里获取。

PS 如果你将工作用户的主机主目录挂载/复制到 docker 中,它可能会工作。

【讨论】:

    【解决方案2】:

    答案是这样的

        CMD ["cluster-info","dump"]
    

    或者当kubectl命令行中有空格时,用逗号隔开。

    【讨论】:

      猜你喜欢
      • 2016-07-18
      • 2020-02-20
      • 2022-07-10
      • 1970-01-01
      • 2021-11-02
      • 2019-10-11
      • 2018-10-19
      • 2016-08-29
      • 1970-01-01
      相关资源
      最近更新 更多