我正在使用 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 ..
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)
不可以。请考虑将其alpine视为包含 BusyBox 和包管理器的基础映像,或者构建(或查找)具有您需要预安装的工具的自定义映像。
BusyBox 构建为单个二进制文件,其中包含许多常见 Linux 工具的实现。所述BusyBox的文档包括包含命令的列表。如果不编写 C 代码,就无法在其中“安装”更多命令。
BusyBox 确实包含 的实现wget,它可能适用于您的目的 ( wget -O- http://other-service)。
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)。
正如其他人所说,答案是否定的,您需要使用另一张图像。
有:
curlimages/curlradial/busyboxplus:curlnixery.dev/curl图像尺寸:
$ 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)
| 归档时间: |
|
| 查看次数: |
13830 次 |
| 最近记录: |