是否可以在Kubernetes Pod中将curl安装到busybox中

时间:2020-07-11 09:20:02

标签: kubernetes

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

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "field1": "field1Value"
          }
        }
      ]
    }
  }
}

并登录以找到kubernetes集群的网络状况:

apiVersion: v1
kind: Pod
metadata:
    name: busybox
    namespace: default
spec:
    containers:
    - name: busybox
    image: busybox:1.28
    command:
        - sleep
        - "3600"
    imagePullPolicy: IfNotPresent
    restartPolicy: Always

令我惊讶的是,busybox不包含卷曲。为什么bosybox没有打包curl命令?我从互联网上搜索,没有文档谈论如何将curl添加到busybox。我尝试安装curl,但是找不到任何方法。是否有将 kubectl exec -it busybox /bin/bash 软件包添加到busybox中以便我可以使用它?

3 个答案:

答案 0 :(得分:5)

简短的答案是,你不能。

为什么?

因为busybox没有像yum,apk或apt-get那样的软件包管理器。

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

1。要么使用修改后的busybox

您可以使用其他progrium/busybox之类的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

答案 1 :(得分:4)

不。考虑将alpine作为基础映像,而不是包含BusyBox加上程序包管理器的基本映像,或者构建(或查找)具有需要预先安装的工具的自定义映像。

BusyBox被构建为单个二进制文件,其中包含许多常见Linux工具的实现。 BusyBox documentation包含所包含命令的列表。您必须先编写C代码,才能在其中“安装”更多命令。

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

答案 2 :(得分:3)

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

.bashrc