BYEONGJO's RESEARCH BLOG

new blog in tistory



TroubleShooting

MLOps - Kubeflow 설치시 error

본 포스팅은 지구별 여행자를 보고 겪은 시행착오를 담았습니다.

1 master node, 3 worker node로 구성된 Kubernetes 환경이 있었다. MLOps에 관심이 생기고, 이 환경에 Kubeflow을 설치해서 ML training 부터 serving 까지의 pipeline을 직접 해보고 싶었다.

Kubeflow 설치를 위해 블로그, medium 등 많은 자료를 뒤적이며 설치해봤지만, 항상 에러를 맛보았다. 본 포스팅에는 대표적으로 어떤 에러가 있었고, 어떻게 해결했는지에 대해 적어본다.

Kubeflow 설치 시 반복되는 Error

kfctl을 설치 후, kfctl apply -f kfctl_istio_~~.yaml 을 통해 istio 기반 kubeflow 설치 해야하는 단계가 있다.

하지만 webhook.cert-manager.io 설치가 진행되는 도중 에러가 생겨, 계속 retry 할 때가 있다. 이 retry가 5번 이상 반복되는 것을 기다리면 자동으로 해결이 된다. 하지만 config.webhook.serving.knative.dev 설치 중 무한히 에러가 반복될 때가 있다.

결론부터 얘기를 하자면, 이는 주로 kubeflow를 재설치 할 때 생기는 문제이다. kubeflow을 재설치 하기위해 kfctl delete -f kfctl_istio_~~.yaml를 할 경우 관련 모든 resource들이 꺠끗하게 지워지지 않는다.

우선 namespace 부터 terminating stuck이 생긴다. 이는 delete namespace을 참고하면 해결할 수 있다.

하지만, namespace에 관련된 모든 pod, svc, deploy 등을 지웠다 해도, kube-system 등의 namespace에 존재하는 자원들, 혹은 pvc, crd 등은 또 따로 삭제를 해야한다. Kubeflow Github Issue를 보면 어느정도 삭제를 할 수 있지만, 쿠브플로우 쿠버네티스에서 머신러닝이 처음이라면! 책을 통해 좋은 code를 발견하였다.

위 code를 통해 kubeflow, istio 등 과 관련된 resource를 지우고 다시 설치해보면 config.webhook.serving.knative.dev 에러 없이 설치가 완료되는 것을 확인할 수 있다.

istio-proxy OOMKilled

Kubeflow 설치가 완료된 후 설치된 pod 등을 확인해보면, istio-system namespace 안에 주기적인 에러로 계속 재시작되는 pod(istio-policy를 포함한)을 확인할 수 있다. 이는 공통된 하나의 container에서 OOMKilled error가 발생해서 생긴 일이다. 해당 pod 들을 kubectl describe 명령어로 살펴보면 모두 istio-proxy container를 사용한다.

istio-proxy:
    Container ID:  ...
    Image:         docker.io/istio/proxyv2:1.1.6
    Image ID:      ...
    Ports:         9091/TCP, 15004/TCP, 15090/TCP
    Host Ports:    0/TCP, 0/TCP, 0/TCP
    Args:
      proxy
      --domain
      $(POD_NAMESPACE).svc.cluster.local
      --serviceCluster
      istio-telemetry
      --templateFile
      /etc/istio/proxy/envoy_telemetry.yaml.tmpl
      --controlPlaneAuthPolicy
      NONE
    State:          Running
      Started:      Wed, 22 Jul 2020 09:31:43 +0900
    Last State:     Terminated
      Reason:       OOMKilled
      Exit Code:    255
      Started:      Wed, 22 Jul 2020 09:23:00 +0900
      Finished:     Wed, 22 Jul 2020 09:26:39 +0900
    Ready:          True
    Restart Count:  81
    ...

이를 해결하기 위해 몇 번이나 재설치를 해봤지만 해결되지 않았고, istio를 따로 설치 해보았다. istio 설치는 URL을 참고하였다. 그 후, istio 제외 한 kubeflow을 설치 해주면 된다.

kfctl_istio_~~.yaml 속 밑의 두 kustomizeConfig을 지우고 설치를 하면 모든 것이 정상 설치되며, istio-ingressgateway를 통해 kubeflow dashboard 또한 접속이 가능해진다.

  - kustomizeConfig:
      parameters:
      - name: namespace
        value: istio-system
      repoRef:
        name: manifests
        path: istio/istio-crds
    name: istio-crds
  - kustomizeConfig:
      parameters:
      - name: namespace
        value: istio-system
      repoRef:
        name: manifests
        path: istio/istio-install
    name: istio-install

References