我想在容器中运行'kubectl'命令,因此我想在构建Docker映像时通过容器安装kubectl。 任何帮助表示赞赏!
答案 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
图像的能力。