继续获取连接被拒绝的Kubernetes Cron作业的错误状态?

继续获取连接被拒绝的Kubernetes Cron作业的错误状态?,kubernetes,kubernetes-cronjob,Kubernetes,Kubernetes Cronjob,我正在尝试编写一个cron作业,该作业将命中它正在提取映像的应用程序的rest端点。 下面是示例代码: --- apiVersion: batch/v1beta1 kind: CronJob metadata: name: {{ .Chart.Name }}-cronjob labels: app: {{ .Release.Name }} chart: {{ .Chart.Name }}-{{ .Chart.Version }} release: {{ .Rele

我正在尝试编写一个cron作业,该作业将命中它正在提取映像的应用程序的rest端点。 下面是示例代码:

---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: {{ .Chart.Name }}-cronjob
  labels:
    app: {{ .Release.Name }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version }}
    release: {{ .Release.Name }}
spec:
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 2
  failedJobsHistoryLimit: 2
  startingDeadlineSeconds: 1800
  jobTemplate:
    spec:
      template:
        metadata:
          name: {{ .Chart.Name }}-cronjob
          labels:
            app: {{ .Chart.Name }}
        spec:
          restartPolicy: OnFailure
          containers:
            - name: demo
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
              command: ["/bin/sh", "-c", "curl http://localhost:8080/hello"]
              readinessProbe:
                httpGet:
                  path: "/healthcheck"
                  port: 8081
                initialDelaySeconds: 300
                periodSeconds: 60
                timeoutSeconds: 30
                failureThreshold: 3
              livenessProbe:
                httpGet:
                  path: "/healthcheck"
                  port: 8081
                initialDelaySeconds: 300
                periodSeconds: 60
                timeoutSeconds: 30
                failureThreshold: 3
              resources:
                requests:
                  cpu: 200m
                  memory: 2Gi
                limits:
                  cpu: 1
                  memory: 6Gi
  schedule: "*/5 * * * *"
但我一直遇到
*curl:(7)无法连接到本地主机端口8080:连接被拒绝*
。 我可以从创建容器并立即抛出的事件中看出:退出重新启动失败的容器。 我已经有了运行演示应用程序的pods,它运行得很好,就在我试图指向这个现有应用程序并点击rest端点时,我开始遇到连接被拒绝的错误

查看日志时的精确输出:

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (7) Failed to connect to localhost port 8080: Connection refused
事件日志:

Container image "wayfair/demo:728ac13-as_test_cron_job" already present on machine
9m49s       Normal    Created                pod/demo-cronjob-1619108100-ndrnx   Created container demo
6m17s       Warning   BackOff                pod/demo-cronjob-1619108100-ndrnx   Back-off restarting failed container
5m38s       Normal    SuccessfulDelete       job/demo-cronjob-1619108100         Deleted pod: demo-cronjob-1619108100-ndrnx
5m38s       Warning   BackoffLimitExceeded   job/demo-cronjob-1619108100         Job has reached the specified backoff limit

作为K8的新手,任何指针都是有用的

您正试图使用curl连接到
localhost:8080
,从我对CronJob定义的理解来看,这是没有意义的

来自文档(位于)

在配置文件中定义的命令参数 覆盖容器提供的默认命令和参数 形象。如果定义了参数,但未定义命令,则默认值为 命令与新参数一起使用

注意:命令字段对应于某些容器中的入口点 运行时。请参阅下面的注释

如果为映像定义命令,即使映像将使用其默认入口点(或命令,取决于您使用的容器类型)在本地主机的8080端口上启动rest应用程序,该命令也会覆盖入口点,并且不会启动任何应用程序


如果您需要启动应用程序,然后执行其他操作,如卷发等,我建议使用
.sh
脚本或类似的方法,取决于工作目标。

您正试图使用curl连接到
localhost:8080
,从我对您的CronJob定义的理解来看,这是没有意义的

来自文档(位于)

在配置文件中定义的命令参数 覆盖容器提供的默认命令和参数 形象。如果定义了参数,但未定义命令,则默认值为 命令与新参数一起使用

注意:命令字段对应于某些容器中的入口点 运行时。请参阅下面的注释

如果为映像定义命令,即使映像将使用其默认入口点(或命令,取决于您使用的容器类型)在本地主机的8080端口上启动rest应用程序,该命令也会覆盖入口点,并且不会启动任何应用程序


如果您需要启动应用程序,然后执行其他操作,如curl等,我建议使用
.sh
脚本或类似的东西,具体取决于作业目标。

为什么就绪性和活性探针指向端口8081,而curl指向8080,curl不应该指向8081吗?应用程序设置的方式是healthcheck指向8081&应用程序在8080上运行,因此curl命令需要在8080上运行为什么就绪性和活动性探针指向端口8081,curl指向8080,curl不应该指向8081吗?应用程序设置的方式是healthcheck指向8081&应用程序在8080上运行,因此curl命令需要在8080Thank@aa上运行,我能够删除命令的覆盖,并且能够启动容器,但我仍然想访问该应用程序的几个rest端点。你能建议如何调用这个有一堆卷发的shell脚本吗?还有,执行的顺序不是一个问题吗?因为我只想在应用程序启动后运行这些命令。是的,我想你应该把web应用程序进程放在前台,做一段时间轮询它(可能在健康端点上卷曲到200?),直到它准备好,然后卷曲,然后关闭所有东西。要同时运行这两个程序,如果您使用的是Docker,请检查官方文档()。另一种选择是保持REST应用程序始终在其自己的部署中启动和运行,然后让CronJob仅启动制作各种卷曲的bash脚本。或者让CronJob启动2个容器。谢谢@a,我能够删除命令的覆盖,并且能够启动容器,但是我仍然希望访问该应用程序的几个rest端点。你能建议如何调用这个有一堆卷发的shell脚本吗?还有,执行的顺序不是一个问题吗?因为我只想在应用程序启动后运行这些命令。是的,我想你应该把web应用程序进程放在前台,做一段时间轮询它(可能在健康端点上卷曲到200?),直到它准备好,然后卷曲,然后关闭所有东西。要同时运行这两个程序,如果您使用的是Docker,请检查官方文档()。另一种选择是保持REST应用程序始终在其自己的部署中启动和运行,然后让CronJob仅启动制作各种卷曲的bash脚本。或者让CronJob启动2个容器。