如何在docker容器中操作k8s集群



docker容器running on a docker machine instead of a k8s pod如何操作k8s集群。例如,如果我需要在容器内做这样的事情:

kubectl获取pod

在我的dockerfile中,我安装了kubectl

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

当我运行kubectl get pods时,结果如下:

kubectl get pod
error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable

所以我在docker run命令上将config安装到docker容器中

docker run -v /root/.kube/config:/root/.kube/config my-images

结果如下:

kubectl get pod
Error in configuration: 
* unable to read client-cert /root/.minikube/profiles/minikube/client.crt for minikube due to open /root/.minikube/profiles/minikube/client.crt: no such file or directory
* unable to read client-key /root/.minikube/profiles/minikube/client.key for minikube due to open /root/.minikube/profiles/minikube/client.key: no such file or directory
* unable to read certificate-authority /root/.minikube/ca.crt for minikube due to open /root/.minikube/ca.crt: no such file or directory

这似乎是由于k8s配置文件中的current-context: minikube

然后再次装载身份验证文件,它运行成功。

现在,当我装载-v /root/.kube/config:/root/.kube/config -v /root/.minikube/:/root/.minikube/时,我可以调用kubectl get pods命令或otherwise在容器外操作集群,但是,这不适用于kubeadm or otherwise创建的集群装载。

但我希望能够以统一的方式将所需的配置文件等装载到容器,这样我就可以使用相同的命令来操作k8s集群,该集群可能由minikuberancher k3skubeadm创建

总之,我想为k8s集群的所有情况安装一组统一的文件或目录,如-v file: file -v dir:dir以在以任何方式创建的k8s集群上执行操作。例如获取pod状态、创建、删除各种类型的资源,等等

我需要拥有在k8s 上操作的最大权限

有人能告诉我需要做什么吗?

我认为您可以在运行容器时设置Docker用户

您可以使用显式的用户id和组id运行(在本例中为ubuntu映像(。

$ docker run -it --rm 
--mount "type=bind,src=$(pwd)/shared,dst=/opt/shared" 
--workdir /opt/shared 
--user "$(id -u):$(id -g)" 
ubuntu bash

区别在于"–user"$(id-u(:$(id-g("-它们告诉容器使用当前用户id和组id运行,这是通过运行"id-u"one_answers"id-g"并传递它们的值来动态地通过bash命令替换获得的。

这已经足够好了。这里的问题是,用户和组并不真正存在于容器中。这种方法适用于终端命令,但会话看起来已中断,您将看到一些丑陋的错误消息,如:

"groups: cannot find name for group ID"
"I have no name!"
- your container, complaining

虽然bash有效,但如果这些配置看起来可疑,一些应用程序可能会拒绝运行。

接下来,您必须正确配置和运行Docker容器,这样您就不必与权限错误作斗争,也不必轻松访问文件。

在任何情况下,你都应该在Dockerfile中创建一个非root用户,这是一件好事。你还可以显式地设置用户id和组id。

下面是一个最小的Dockerfile,它希望接收构建时参数,并创建一个名为"user"的新用户:

FROM ubuntu
ARG USER_ID
ARG GROUP_ID
RUN addgroup --gid $GROUP_ID user
RUN adduser --disabled-password --gecos '' --uid $USER_ID --gid $GROUP_ID user
USER user

看看:将用户添加到容器中。

您可以使用这个Dockerfile,用主机uid和gid构建一个新的映像。这个图像需要专门为每台运行它的机器构建,以确保一切正常。

然后,您可以为我们的命令运行use this image。用户id和组id是正确的,而无需在运行容器时指定它们。

$ docker build -t your-image 
--build-arg USER_ID=$(id -u) 
--build-arg GROUP_ID=$(id -g) .
$ docker run -it --rm 
--mount "type=bind,src=$(pwd)/shared,dst=/opt/shared" 
--workdir /opt/shared 
your-image bash

没有必要使用"chown",您将不再使用恼人的权限错误。请看一下这篇非常有趣的文章:kubernetes管理docker,docker共享权限。

相关内容

  • 没有找到相关文章

最新更新