如何通过Docker镜像在Kubernetes容器中安装Kubectl

时间:2018-08-07 01:05:02

标签: docker kubernetes dockerfile

我想在容器中运行'kubectl'命令,因此我想在构建Docker映像时通过容器安装kubectl。 任何帮助表示赞赏!

5 个答案:

答案 0 :(得分:5)

您只需要将kubectl(例如/usr/local/bin/kubectl)二进制文件和kubeconfig(例如/root/.kube/config)映射到您的容器中。

例如(用于部署的Yaml文件):

      containers:
      - image: container-image-name
        name: container-name
        volumeMounts:
        - name: kubectl-binary
          mountPath: /usr/local/bin/kubectl
          readOnly: true
        - name: kubectl-config
          mountPath: /root/.kube/config
          readOnly: true
      volumes:
      - name: kubectl-binary
        hostPath:
          path: /usr/local/bin/kubectl
      - name: kubectl-config
        hostPath:
          path: /root/.kube/config

P.S。

使用以下命令在每个节点上下载kubectl二进制文件,并将/root/.kube/config复制到每个节点:

$ curl -L https://dl.k8s.io/v1.10.6/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl

答案 1 :(得分:2)

将其放入您的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 mv ./kubectl /usr/local/bin

答案 2 :(得分:0)

Weike的解决方案对我来说适用于不同的kubectl路径,如果有人在寻找解决方案以将kubectl安装在Docker映像中,那么这里就是Docker文件(如果需要,它还会安装python和kubernetes python客户端api)通过python客户端api访问群集):

def create_alarm_object(self, request, form):
    self.object = Alarm.objects.create(...)
    # no `save` call needed, `create` already creates and returns the saved object.

这也是我的部署文件,用于将kubectl二进制文件和配置映射到容器,以便在pod中访问kubernetes容器中的kubectl:

FROM base_image

WORKDIR /tmp


RUN  /usr/bin/curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl \
     && chmod +x ./kubectl  \
     &&  mv ./kubectl /usr/local/bin/kubectl \
     && zypper install -y python2 \
     && zypper install -y python2-pip \
     && pip install kubernetes \
     && zypper install -y git \
     && zypper clean -a \
     && git clone --recursive https://github.com/kubernetes-client/python.git \
     && cd python \
     && python setup.py install

答案 3 :(得分:0)

如果您有docker,则可以执行任何您真正想要的操作,因为您可以拉动并启动任何图像。因此,如果您要构建和部署:

docker login
docker build foo/bar .
docker push
docker run -v ~/.kube:/root/.kube lachlanevenson/k8s-kubectl set image deploy bar app=foo/bar

答案 4 :(得分:0)

kubectl 是用 go 编写的,所以是完全独立的。

因此,您可以从另一个已经包含它的容器中复制它。就像我在这里所做的一样,从 bitnami/kubectl:1.20.9 复制它:

FROM bitnami/kubectl:1.20.9 as kubectl

FROM ubuntu-or-whatever-image:tag

# Do whatever you need to with the
# ubuntu-or-whatever-image:tag image, then:

COPY --from=kubectl /opt/bitnami/kubectl/bin/kubectl /usr/local/bin/

与摆弄 curl 相比,我更喜欢这个,因为现在您正在利用 Docker 缓存 bitnami/kubectl:1.20.9 图像的能力。