跳至内容

调试暂停

v3.3 及更高版本

简介

debug pause功能允许在单个工作流步骤执行前、执行后或前后暂停以进行调试,然后从暂停状态释放这些步骤。目前该功能仅在配合使用Emissary Executor时支持。

为了暂停容器,需要使用环境变量:

  • ARGO_DEBUG_PAUSE_AFTER - 在执行后暂停步骤
  • ARGO_DEBUG_PAUSE_BEFORE - 在执行前暂停步骤

示例工作流:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: pause-after-
spec:
  entrypoint: argosay
  templates:
    - name: argosay
      container:
        image: argoproj/argosay:v2
        env:
          - name: ARGO_DEBUG_PAUSE_AFTER
            value: 'true'

为了将步骤从暂停状态释放,会使用名为/var/run/argo/ctr/main/after/var/run/argo/ctr/main/before的标记文件,这些文件对应步骤被暂停的时机。当使用容器中没有可用shell时,暂停步骤功能可以与ephemeral containers结合使用。

示例

1) 创建一个设置了调试暂停环境的工作流,在本示例中 ARGO_DEBUG_PAUSE_AFTER 将被设置,因此该步骤将在用户代码执行后暂停。

pause-after.yaml

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: pause-after-
spec:
  entrypoint: argosay
  templates:
    - name: argosay
      container:
        image: argoproj/argosay:v2
        env:
          - name: ARGO_DEBUG_PAUSE_AFTER
            value: 'true'
argo submit -n argo --watch pause-after.yaml

在目标容器中创建一个shell,或在pod中创建一个临时容器,本示例中使用了临时容器。

kubectl debug -n argo -it POD_NAME --image=busybox --target=main --share-processes

为了能够访问工作流步骤使用的持久化卷,必须使用--share-processes参数。

临时容器可用于执行调试操作。调试完成后,创建标记文件以允许工作流步骤继续执行。当使用进程命名空间共享时,容器文件系统可通过/proc/$pid/root链接对Pod中的其他容器可见。

touch /proc/1/root/var/run/argo/ctr/main/after

有问题吗?

Search on GitHub Discussions and Slack.