我正在尝试构建一个安装有
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
任何人都可以帮我解决这个问题吗?
该问题可能源于 Kubernetes 环境中的权限、内存/资源限制或 kubectl 配置。确保:
非root用户sreuser具有必要的权限。 您的 Pod 有足够的内存/CPU 资源,并考虑设置资源请求/限制。 kubectl 已正确配置为与集群通信,可能需要适当的 kubeconfig 或服务帐户角色。 通过调整所使用的 shell 或安装 bash,解决了 shell 差异(在 Alpine 中使用 bash)。 解决这些问题应该有助于解决在 pod 中执行 kubectl 命令时容器重新启动的问题。