Argo 워크플로를 디버깅하는 방법

8004 단어 kubernetes
Argo Workflows는 Kubernetes에서 일련의 컨테이너(또는 그래프)를 실행하여 이를 하나의 워크플로로 묶는 도구입니다.

비교적 젊은 프로젝트이므로 오류 메시지 및 문서와 같은 것은 여전히 ​​약간의 작업이 필요합니다.

그동안 워크플로가 예상대로 작동하지 않을 때 취할 수 있는 몇 가지 단계는 다음과 같습니다.

Argo CLI로 워크플로 검사



간단한 문제의 경우 Argo CLI는 MESSAGE 출력의 argo get 열에 간단한 설명을 포함합니다.

$ argo get workflow-template-dag-diamond 
Name:                workflow-template-dag-diamond
Namespace:           default
ServiceAccount:      default
Status:              Succeeded
Conditions:          
 Completed           True
Created:             Mon Mar 01 08:51:26 -0500 (7 minutes ago)
Started:             Mon Mar 01 08:51:26 -0500 (7 minutes ago)
Finished:            Mon Mar 01 08:51:36 -0500 (7 minutes ago)
Duration:            10 seconds
Progress:            1/1
ResourcesDuration:   5s*(1 cpu),5s*(100Mi memory)

STEP                              TEMPLATE                                               PODNAME                                   DURATION  MESSAGE
 ✔ workflow-template-dag-diamond  diamond                                                                                                      
 └─✔ A                            workflow-template-whalesay-template/whalesay-template  workflow-template-dag-diamond-2997968480  6s


문제를 파악하기에 충분하지 않은 메시지가 있는 경우 실패한 단계의 PODNAME를 복사하고 using kubectl to describe the Pod에 대한 섹션으로 건너뜁니다.

유용한 메시지가 없으면 워크플로를 설명하세요.

kubectl을 사용하여 워크플로 설명



때로는 argo getMESSAGE 열에 잘 맞지 않는 전체 워크플로 문제가 있습니다.
kubectl describe workflow 이벤트 목록을 포함하여 워크플로에 대한 더 많은 세부 정보를 인쇄합니다. 이벤트에는 종종 무엇이 잘못되었는지에 대한 세부 정보가 포함됩니다.

$ kubectl describe workflow workflow-template-dag-diamond
Name:         workflow-template-dag-diamond

...

Events:
  Type    Reason                 Age    From                 Message
  ----    ------                 ----   ----                 -------
  Normal  WorkflowRunning        8m42s  workflow-controller  Workflow Running
  Normal  WorkflowNodeSucceeded  8m32s  workflow-controller  Succeeded node workflow-template-dag-diamond.A
  Normal  WorkflowNodeSucceeded  8m32s  workflow-controller  Succeeded node workflow-template-dag-diamond
  Normal  WorkflowSucceeded      8m32s  workflow-controller  Workflow completed



kubectl을 사용하여 Pod 설명



Pod가 실패하면 단서가 될 수 있는 여러 장소가 있습니다. 하나는 Pod와 관련된 이벤트입니다.

파드 이름은 예측할 수 없으므로(종종 -93750129와 같은 임의의 접미사를 가짐) argo get를 사용하여 의심되는 파드의 이름을 가져옵니다.

그런 다음 kubectl describe po를 사용하여 이벤트를 포함한 파드 세부 정보를 확인합니다.

$ kubectl describe po workflow-template-dag-diamond-2997968480
Name:         workflow-template-dag-diamond-2997968480

...

Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  36s                default-scheduler  Successfully assigned default/workflow-template-dag-diamond-2997968480 to docker-desktop
  Normal   Pulled     35s                kubelet            Container image "argoproj/argoexec:v2.12.9" already present on machine
  Normal   Created    35s                kubelet            Created container wait
  Normal   Started    35s                kubelet            Started container wait
  Warning  Failed     31s                kubelet            Failed to pull image "docker/whalesay": rpc error: code = Unknown desc = Error response from daemon: Head https://registry-1.docker.io/v2/docker/whalesay/manifests/latest: x509: certificate is valid for auth.docker.io, not registry-1.docker.io
  Normal   Pulling    17s (x2 over 35s)  kubelet            Pulling image "docker/whalesay"
  Warning  Failed     16s (x2 over 31s)  kubelet            Error: ErrImagePull
  Warning  Failed     16s                kubelet            Failed to pull image "docker/whalesay": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate is valid for auth.docker.io, not registry-1.docker.io
  Normal   BackOff    5s (x2 over 30s)   kubelet            Back-off pulling image "docker/whalesay"
  Warning  Failed     5s (x2 over 30s)   kubelet            Error: ImagePullBackOff


프록시 문제로 인해 Docker Hub에서 가져오기가 방지되어 이 워크플로가 실패했습니다.

실패가 단계의 컨테이너 중 하나 내부에 있기 때문에 때때로 문제가 이벤트에 표시되지 않습니다.

kubectl을 사용하여 파드 로그 읽기



Argo Workflows의 일부로 실행되는 Pod에는 wait , main , 때로는 init 의 두 개 또는 세 개의 컨테이너가 있습니다.
wait 사이드카는 main 컨테이너(귀하의 코드)를 주시하고 Argo Workflow 컨트롤러(또 다른 Pod)와 단계 진행 상황에 대해 통신하기 위해 Argo에 의해 주입됩니다.
main 컨테이너는 yaml에서 워크플로를 정의할 때 설정한 컨테이너입니다. (image , command , args , source 항목을 찾아 이 Pod 구성의 일부를 확인하십시오.)
init 컨테이너(있는 경우)도 Argo에 의해 주입됩니다. 아티팩트를 Pod로 가져오는 것과 같은 작업을 수행합니다.

로그를 읽으려면 kubectl logs 를 사용하십시오. 예를 들어:

$ kubectl logs workflow-template-dag-diamond-2997968480 init
error: container init is not valid for pod workflow-template-dag-diamond-2997968480
C02D507EMD6P:test_workflows ekmed$ kubectl logs workflow-template-dag-diamond-2997968480 wait
time="2021-03-01T14:09:18.339Z" level=info msg="Starting Workflow Executor" version=v2.12.9
time="2021-03-01T14:09:18.346Z" level=info msg="Creating a docker executor"
time="2021-03-01T14:09:18.346Z" level=info msg="Executor (version: v2.12.9, build_date: 2021-02-16T22:51:48Z) initialized (pod: default/workflow-template-dag-diamond-2997968480) with template:\n{\"name\":\"whalesay-template\",\"arguments\":{},\"inputs\":{\"parameters\":[{\"name\":\"message\",\"value\":\"A\"}]},\"outputs\":{},\"metadata\":{},\"container\":{\"name\":\"\",\"image\":\"docker/whalesay\",\"command\":[\"cowsay\"],\"resources\":{}}}"
time="2021-03-01T14:09:18.346Z" level=info msg="Waiting on main container"
time="2021-03-01T14:14:17.998Z" level=info msg="Alloc=4699 TotalAlloc=14633 Sys=70080 NumGC=6 Goroutines=7"

initwait의 로그는 Argo에서 가져오기 때문에 읽기가 약간 어려울 수 있습니다. main 에 대한 로그는 구성된 image 에서 가져오므로 아마도 더 익숙할 것입니다.

kubectl을 사용하여 워크플로 컨트롤러 로그 읽기



Argo는 모든 단계를 실행하는 프로세스를 통해 워크플로를 안내하는 "워크플로 컨트롤러"라는 포드와 함께 제공됩니다.

다른 모든 디버깅 기술이 실패하면 워크플로 컨트롤러 로그에 유용한 정보가 포함될 수 있습니다.

먼저 Pod 이름을 찾습니다. 기본 Argo 설치 명령을 사용한 경우 Pod는 argo 네임스페이스에 있습니다.

$ kubectl get po -n argo
NAME                                  READY   STATUS    RESTARTS   AGE
argo-server-6bb488c6c8-ff88g          1/1     Running   0          40m
workflow-controller-57db6b46f-7qfr9   1/1     Running   0          40m
$ kubectl logs workflow-controller-57db6b46f-7qfr9 -n argo

... lots of stuff here ...


도움을 요청



이러한 방법으로 문제가 해결되지 않으면 ask a question on StackOverflow , start a discussion on GitHub 또는 ask in the Argo Slack .

이것들은 내가 사용하는 도구 중 일부일 뿐입니다. 제가 놓치고 있는 부분이 있다면 댓글 부탁드립니다!

좋은 웹페이지 즐겨찾기