如何通过docker镜像在kubernetes容器中安装kubectl二进制文件?

问题描述 投票:0回答:1

我正在尝试构建一个安装有

kubectl binary package
的 docker 镜像,以便稍后在 Kubernetes 部署中将其用作镜像来在不同集群上执行 kubectl 操作。 不幸的是,docker 构建成功,并且如果我使用 docker run 命令在本地运行,kubectl 命令将按预期工作。但是,当我将其部署为 pod 并尝试执行 kubectl 命令时,它会将我抛出,然后容器重新启动。

下面是我的 Dockerfile

FROM python:3.12-alpine3.18

USER root

RUN addgroup -S sregroup  && adduser -S sreuser -G sregroup

# ensure local python is preferred over distribution python
ENV PATH /usr/local/bin:$PATH

# runtime dependencies
RUN set -eux

RUN apk update && \
    apk add --no-cache bash mailx  iputils bind-tools drill netcat-openbsd postfix curl openssl ca-certificates gcc musl-dev libffi-dev openssl-dev git tzdata

RUN pip3 install --no-cache-dir wheel

COPY requirements.txt .

RUN pip3 install --no-cache-dir -r requirements.txt

RUN mkdir /.kube && chmod g+rwX /.kube

RUN curl -LO https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.9/2024-01-04/bin/linux/amd64/kubectl && \
    cp kubectl /usr/local/bin/kubectl && \
    chmod +x /usr/local/bin/kubectl

USER sreuser

ENTRYPOINT ["/bin/sh"]

下面是容器状态和错误

$ k get po
NAME                 READY   STATUS    RESTARTS        AGE
kubectlll-test       1/1     Running   1 (7m40s ago)   8m45s

$ k exec -it kubectlll-test -- /bin/bash
kubectlll-test:/tmp$ kubectl version
command terminated with exit code 137

任何人都可以帮我解决这个问题吗?

docker kubernetes dockerfile amazon-eks kubectl
1个回答
0
投票

该问题可能源于 Kubernetes 环境中的权限、内存/资源限制或 kubectl 配置。确保:

非root用户sreuser具有必要的权限。 您的 Pod 有足够的内存/CPU 资源,并考虑设置资源请求/限制。 kubectl 已正确配置为与集群通信,可能需要适当的 kubeconfig 或服务帐户角色。 通过调整所使用的 shell 或安装 bash,解决了 shell 差异(在 Alpine 中使用 bash)。 解决这些问题应该有助于解决在 pod 中执行 kubectl 命令时容器重新启动的问题。

© www.soinside.com 2019 - 2024. All rights reserved.