在 kubernetes pod 中需要一个可用的 CURL 二进制文件

Need a CURL binary availble inside kubernetes pod

我想将自己放在 kubernetes pod 中并执行 CURL 命令。不幸的是,我在任何地方都找不到可以使用 curl(并且与 kubernetes 兼容)的工作图像...

  1. 我用 Alpine 和 CURL 尝试了一些 docker 图像,但每次都以 crashLoopBackOff 结束。我猜这意味着容器退出了,因为 docker 图像在执行自身后退出...
  2. 我也尝试单独使用 alpine 和 ubuntu 的图像,但每次它也以 crashloopBackOff 结束。
  3. 我设法在一些图像中执行,但它从未安装 CURL,APT-GET 或 APK 都无法正常工作。

要执行到容器中,我正在做一个简单的 kubectl exec -it POD_ID /bin/bash

有人知道包含 CURL 二进制文件且不会在 kubernetes 中崩溃的最小 docker 图像吗?

PS:这是为了测试目的,所以它不需要坚如磐石或任何东西

感谢


更新 1 这是我用来部署所有潜在图像的 yaml :

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: blue
  namespace: default
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: blue
    spec:
      containers:
      - name: blue-website
        image: SOME_IMAGE:latest
        resources:
          requests:
            cpu: 0.1
            memory: 200

我不认为它坏了,因为它适用于某些图像。

你可以使用这张图片nightfury1204/alpine-curl

我为了自己的测试目的创建了上面的图像。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: curl
  labels:
    name: curl
spec:
  serviceName: "curl"
  selector:
    matchLabels:
      app: curl
  replicas: 1
  template:
    metadata:
      labels:
        app: curl
    spec:
      containers:
      - name: curl
        image: nightfury1204/alpine-curl
        command:
          - "sh"
          - "-c"
          - >
            while true; do
              sleep 3600;
            done

要执行到 pod 中,请使用此 kubectl exec -it curl-0 sh

您得到 CrashLoopBackOff 是因为容器在启动后完成,因为它没有任何任务要处理。简单的解决方法是 运行 容器中的命令以无限期地保持它 运行ning。这样你就可以执行到容器中并 运行 curl.

在这里,修改yaml来做到这一点:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: blue
  namespace: default
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: blue
    spec:
      containers:
      - name: blue-website
        image: scrapinghub/httpbin:latest
        command:
        - sleep
        - "3600"
        resources:
          requests:
            cpu: 0.1
            memory: 200

您可以跳过清单并根据需要使用 kubectl run 启动其中一个 pods。 即

kubectl run curl -it --rm --image=curlimages/curl -- sh

这将从 curlimages/curl 图像创建一个名为 curl 的部署,并在其中为您提供交互式 (-it) shell。当您退出时,部署将被删除 (--rm)。

使用来自 https://hub.docker.com/r/byrnedo/alpine-curl/byrnedo/alpine-curl 图片。 也没有必要在部署中使用 latest 标记。没有它也能工作,只是

containers:
  - name: blue-website
    image: byrnedo/alpine-curl