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

pw136qt2  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(7)|浏览(75)

我正在使用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

并登录以查找kubernetes集群的网络情况:

kubectl exec -it busybox /bin/bash

让我惊讶的是busybox没有curl,为什么busybox的包里没有curl命令呢?我上网查了一下,发现文件里没有提到如何在busybox里添加curl,我试着安装curl,但是没有办法,有没有办法在busybox里添加curl包呢?

q5lcpyga

q5lcpyga1#

简而言之,你不能。
为什么?
因为busybox没有软件包管理器,比如:好吃,apk,或apt-get..

实际上,您有两种解决方案:

1.使用修改后的busybox

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

image: progrium/busybox

然后道:

kubectl exec -it busybox -- opkg-install curl

2.或者如果您的关注点使用最少的图像,您可以使用阿尔卑斯

image: alpine:3.12

然后:

kubectl exec -it alpine -- apk --update add curl
dfty9e19

dfty9e192#

不可以。考虑将alpine作为基础映像,而不是包括BusyBox和一个包管理器,或者构建(或查找)一个预安装了所需工具的自定义映像。
BusyBox是一个二进制文件,其中包含了许多常用Linux工具的实现。BusyBox documentation包含了一个命令列表。如果不编写C代码,就无法在其中“安装”更多的命令。
BusyBox确实包含wget的实现,它可能适合您的目的(wget -O- http://other-service)。

von4xj4u

von4xj4u3#

BusyBox有一个wget的子集。curl的使用模式在您的操作系统中比BusyBox附带的要复杂得多。
为了阐明我的意思,请在您的操作系统中运行以下命令:

$ wget --help | wc -l
207

在Busybox容器内运行wget的help时,应该会给予一个最小子集包:

$ docker run --rm busybox wget --help 2>&1 | wc -l
20

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

$ 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

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

vd8tlhqk

vd8tlhqk4#

正如@abdennour所建议的,我不再坚持使用busybox了。Alpine是一个非常轻量级的Linux容器映像,正如其他人在这里建议的那样,您可以在其中安装任何类似UNIX的工具来方便地完成您的故障排除任务。实际上,我在.bashrc的dotfiles中使用了这个函数来旋转一个方便的临时准备好的Alpine pod:

## This function takes an optional argument to run a pod within a Kubernetes NS, if it's not provided it fallsback to `default` NS.
function kalpinepod () { kubectl run -it --rm --restart=Never --image=alpine handytools -n ${1:-default} -- /bin/ash }

❯ kalpinepod kube-system
If you don't see a command prompt, try pressing enter.
/ # cat /etc/resolv.conf
search kube-system.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.245.0.10
options ndots:5
/ # apk --update add curl openssl
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
(1/6) Installing ca-certificates (20191127-r5)
(2/6) Installing brotli-libs (1.0.9-r3)
(3/6) Installing nghttp2-libs (1.42.0-r1)
(4/6) Installing libcurl (7.74.0-r1)
(5/6) Installing curl (7.74.0-r1)
(6/6) Installing openssl (1.1.1j-r0)
Executing busybox-1.32.1-r3.trigger
Executing ca-certificates-20191127-r5.trigger
OK: 9 MiB in 20 packages
xkrw2x1b

xkrw2x1b5#

或者只是将静态构建的curl复制到Busybox中:https://github.com/moparisthebest/static-curl/releases

ttcibm8c

ttcibm8c6#

径向具有busybox images的叠加,添加cURL。docker pull radial/busyboxplus:curl
他们也有第二个图像cURL + Git. docker pull radial/busyboxplus:git

2jcobegt

2jcobegt7#

正 如 其他 人 所 说 , 答案 是 否定 的 , 你 需要 使用 另 一 种 图像 。
有 :

图像 大小 :

$ 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

中 的 每 一 个

相关问题