配置 kubectl 以在 docker 上访问集群
configure kubectl to reach cluster on docker
我正面临一个有趣的挑战,我正在尝试 运行 kubectl 在具有适当配置的 docker 图像中,以访问我的集群。
我已经能够创建图像了,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.
不确定我错过了什么。
欢迎任何提示。
干杯。
答案是
CMD ["cluster-info","dump"]
或者kubectl
命令行中有space时,用逗号隔开
我不清楚你的 K8s 集群在哪里 运行ning,
如果您 运行 您在 GKE 中的集群,您将需要 运行 像这样的东西:
gcloud container clusters get-credentials $CLUSTER_NAME --zone $CLUSTER_ZONE
这将在用户主目录中创建 ~/.config/gcloud 文件树。
在 AWS EKS 上,您需要设置 ~/.aws/credentials 和其他 IAM 设置。
我建议您 post 您的 K8s 集群 运行ning 位置的详细信息,我们可以从那里获取它。
PS 也许如果您 mount/copy 工作用户的主机主目录进入 docker 它会工作。
我正面临一个有趣的挑战,我正在尝试 运行 kubectl 在具有适当配置的 docker 图像中,以访问我的集群。
我已经能够创建图像了,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.
不确定我错过了什么。
欢迎任何提示。
干杯。
答案是
CMD ["cluster-info","dump"]
或者kubectl
命令行中有space时,用逗号隔开
我不清楚你的 K8s 集群在哪里 运行ning, 如果您 运行 您在 GKE 中的集群,您将需要 运行 像这样的东西:
gcloud container clusters get-credentials $CLUSTER_NAME --zone $CLUSTER_ZONE
这将在用户主目录中创建 ~/.config/gcloud 文件树。
在 AWS EKS 上,您需要设置 ~/.aws/credentials 和其他 IAM 设置。
我建议您 post 您的 K8s 集群 运行ning 位置的详细信息,我们可以从那里获取它。
PS 也许如果您 mount/copy 工作用户的主机主目录进入 docker 它会工作。