是否可以将 curl 安装到 kubernetes pod 中的 busybox

Dol*_*hin 11 kubernetes

我正在使用 busybox 检测 kubernetes v1.18 pod 中的网络问题。我像这样创建了busybox:

apiVersion: v1
kind: Pod
metadata:
    name: busybox
    namespace: default
spec:
    containers:
    - name: busybox
    image: busybox:1.28
    command:
        - sleep
        - "3600"
    imagePullPolicy: IfNotPresent
    restartPolicy: Always
Run Code Online (Sandbox Code Playgroud)

并登录查看kubernetes集群网络情况:

 kubectl exec -it busybox /bin/bash
Run Code Online (Sandbox Code Playgroud)

让我惊讶的是,busybox 不包含 curl。为什么bosybox 没有打包curl 命令?我正在从互联网上搜索,但没有找到关于如何将 curl 添加到 busybox 的文档。我试图安装 curl 但发现没有办法做到这一点。无论如何,是否可以将curl软件包添加到 busybox 以便我可以使用它?

Abd*_*UMI 16

简短的回答是,你不能。

为什么?

因为busybox 没有包管理器,比如:yum、apk 或apt-get ..

Acutally你有两个解决方案:

1.要么使用修改过的busybox

您可以使用其他 busybox 映像,例如progrium/busybox,它提供opkg-install作为包管理器。

image: progrium/busybox
Run Code Online (Sandbox Code Playgroud)

然后:

kubectl exec -it busybox -- opkg-install curl
Run Code Online (Sandbox Code Playgroud)

2. 或者如果您担心使用最小图像,您可以使用 alpine

image: alpine:3.12
Run Code Online (Sandbox Code Playgroud)

然后:

kubectl exec -it alpine -- apk --update add curl
Run Code Online (Sandbox Code Playgroud)


Dav*_*aze 7

不可以。请考虑将其alpine视为包含 BusyBox 和包管理器的基础映像,或者构建(或查找)具有您需要预安装的工具的自定义映像。

BusyBox 构建为单个二进制文件,其中包含许多常见 Linux 工具的实现。所述BusyBox的文档包括包含命令的列表。如果不编写 C 代码,就无法在其中“安装”更多命令。

BusyBox 确实包含 的实现wget,它可能适用于您的目的 ( wget -O- http://other-service)。


Muh*_*man 6

BusyBox 有一个wget. 在您的操作系统中,curl 的使用模式比 Busybox 附带的使用模式要复杂得多。

为了澄清我的意思,请在您的操作系统中运行以下命令:

$ wget --help | wc -l
207
Run Code Online (Sandbox Code Playgroud)

在 Busybox 容器内运行 wget 的帮助时,应该会为您提供一个最小子集包:

$ docker run --rm busybox wget --help 2>&1 | wc -l
20
Run Code Online (Sandbox Code Playgroud)

在 K8s 中,您可以运行以下命令:

$ kubectl run -i --tty --rm busybox --image=busybox -- sh
If you don't see a command prompt, try pressing enter.
/ # wget
BusyBox v1.33.1 (2021-06-07 17:33:50 UTC) multi-call binary.

Usage: wget [-cqS] [--spider] [-O FILE] [-o LOGFILE] [--header 'HEADER: VALUE'] [-Y on/off]
    [--no-check-certificate] [-P DIR] [-U AGENT] [-T SEC] URL...

Retrieve files via HTTP or FTP

    --spider    Only check URL existence: $? is 0 if exists
    --no-check-certificate  Don't validate the server's certificate
    -c      Continue retrieval of aborted transfer
    -q      Quiet
    -P DIR      Save to DIR (default .)
    -S          Show server response
    -T SEC      Network read timeout is SEC seconds
    -O FILE     Save to FILE ('-' for stdout)
    -o LOGFILE  Log messages to FILE
    -U STR      Use STR for User-Agent header
    -Y on/off   
Run Code Online (Sandbox Code Playgroud)

如果curl您的用例需要一些东西,我建议使用Alpine这是busybox+一个最小的包管理器和libc实现,这样您就可以轻松地实现apk add --no-cache curl并获得真实的结果curl(甚至apk add --no-cache wget获得“真正的” wget 而不是 BusyBox 的wget)。


Mat*_*ann 6

正如其他人所说,答案是否定的,您需要使用另一张图像。

有:

图像尺寸:

$ docker images -f "reference=*/*curl"
REPOSITORY           TAG       IMAGE ID       CREATED       SIZE
curlimages/curl      latest    ab35d809acc4   9 days ago    11MB
radial/busyboxplus   curl      71fa7369f437   8 years ago   4.23MB
nixery.dev/curl      latest    aa552b5bd167   N/A           56MB
Run Code Online (Sandbox Code Playgroud)