Kubeflow, aws EKS 환경에서의 argo, minio 관련 이슈 해결 방법

노하람·2021년 12월 1일
0

안녕하세요, 오늘은 kubeflow에서 파이프라인 구축 중 파이프라인이 작동하지 않는 이슈를 해결하면서 알게 된 해결 방법을 공유해보고자 합니다.

일단 aws EKS 클러스터에서 정상적으로 Kubeflow를 설치하셨다는 가정하에 내용을 진행하겠습니다.

이슈 내용은 다양하겠지만 Pod describe나, logs 등을 살펴보면서 해결을 시도하셨을 겁니다.
이슈가 발생했을 때의 로그들을 모두 기록해두지 않았지만 대충 보면 아래의 내용과 비슷합니다.

  • MountVolume.SetUp failed for volume "docker-sock" : hostPath type check failed: /var/run/docker.sock is not a socket file
  • This step is in Error state with this message: Error (exit code 1): key unsupported: cannot get key for artifact location, because it is invalid
  • Error(exit code 2)

등등, 처음엔 Docker 문제부터 시작해서 아티팩트 저장소를 가져오지 못하고, 파이프라인 코드 자체에 문제가 있는 등의 다양한 문제를 겪었습니다.

EKS에서 Kubeflow를 설치하면 기본 설정값이 있는데, 이 설정을 변경해주면 정상적으로 파이프라인을 실행할 수 있습니다.

도커 관련 문제

  1. 도커를 실행시켰는지 확인합니다.
  2. kubernetes 1.2 이후부터는 도커를 정식으로 지원하지 않습니다.(호환은 됩니다.), 다른 워커플로 실행기를 이용해줄겁니다.
  3. argo 버전으로 인한 이슈가 존재하는 것 같습니다. 저는 argo를 3.1.14 버전으로 업데이트하고, argo workflow executor를 변경해주고 나서야 파이프라인 실행 시 오류가 해결되었습니다.
  4. 기본 워크플로가 어떻게 설정되어 있는지 configmap을 확인하고, 변경해줍니다.
    • kubectl edit configmap workflow-controller-configmap -n kubeflow
    • containerRuntimeExecutor: emissary 혹은 containerRuntimeExecutor: pns로 변경해줍니다.(기본은 docker입니다.)
    • s3 관련해서 minio로 오브젝트 저장소로 기본 설정되어 있을 겁니다. aws s3 관련 세팅을 진행해주시고(버킷 생성, 관련 정책 생성 등) s3 내용을 변경해주시면 되겠습니다.
    • my-s3-credentials라는 이름으로 secret도 생성해주시면 되겠습니다.
apiVersion: v1
data:
  config: |
    {
    executorImage: argoproj/argoexec:v3.1.14,
    containerRuntimeExecutor: emissary,
    artifactRepository:
    {
        s3: {
            endpoint: s3.amazonaws.com,
            bucket: mlpl,
            accessKeySecret: {
                name: my-s3-credentials,
                key: accesskey
            },
            secretKeySecret: {
                name: my-s3-credentials,
                key: secretkey
            }
        }
    }
    }
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"config":"{\nexecutorImage: argoproj/argoexec:v2.3.0,\ncontainerRuntimeExecutor: docker,\nartifactRepository:\n{\n    s3: {\n        bucket: mlpipeline,\n        keyPrefix: artifacts,\n        endpoint: minio-service.kubeflow:9000,\n        insecure: true,\n        accessKeySecret: {\n            name: mlpipeline-minio-artifact,\n            key: accesskey\n        },\n        secretKeySecret: {\n            name: mlpipeline-minio-artifact,\n            key: secretkey\n        }\n    }\n}\n}\n"},"kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"argo","app.kubernetes.io/name":"argo","kustomize.component":"argo"},"name":"workflow-controller-configmap","namespace":"kubeflow"}}
  creationTimestamp: "2021-11-16T23:38:33Z"
  labels:
    app.kubernetes.io/component: argo
    app.kubernetes.io/name: argo
    kustomize.component: argo
  name: workflow-controller-configmap
  namespace: kubeflow
  resourceVersion: "31127767"
  uid: f2db86b2-55d2-4755-b215-b20c64c11fc9
- `kubectl rollout restart deployment workflow-controller -n kubeflow`
profile
MLOps, MLE 직무로 일하고 있습니다😍

0개의 댓글