namespace가 다른 pod 끼리의 통신 2
kubeflow에서 kfp 라이브러리를 이용해서 pipeline 데이터를 받아오는 pod를 생성해보는 글이다.
.
.
.
.
.
.
.
.
pod를 생성하는데 작성한 파일들은 다음과 같다.
가장 먼저 nerdctl을 사용해 이미지를 build 할 때 사용할 Dockerfile을 작성했다. container 내부의 코드 동작 환경을 구성해주는 내용으로, 사용할 ubuntu version, apt update, 작업 디렉토리, requirements 설치 등이 적혀있다.
그 다음으로 pod의 생성과 동작을 관리하기 위해 deployment와 service yaml 파일을 작성했다. 앞서 말한 것과 같이 이미 pod가 데이터를 주고 받을 kubeflow pod에 대한 정보를 알고 있기 때문에 이를 바탕으로 전체적인 그림을 그릴 수 있다. 그리고 pod 내부에서 사용하는 환경변수를 설정하기 위해 configmap을 작성했다.
Configmap은 Kubernetes의 리소스로, 설정 데이터를 key-value 형식으로 관리할 수 있기 때문에 편리하며 이 설정 내용은 pod 내부의 container에서 환경 변수로 설정된다. 그렇기 때문에 python 환경에서 os
라이브러리를 사용하면 해당 설정 내용을 굉장히 쉽게 가져올 수 있다.
마지막으로 flask server를 동작시키는 내용의 python 파일을 작성했으며, 필요한 python 패키지들을 requirements에 한번에 작성했다. 추가적으로, init.py는 pyhton이 해당 디렉토리를 디렉토리가 아닌 패키지로 인식하도록 하는 파일로 내용은 따로 작성해 주지 않아도된다. setup.py는 해당 패키지를 배포하는데 사용하는 파일로 필수적이진 않지만 기본적인 정보를 작성해봤다. 참고로, Dockerfile에서 RUN pip3 install .
명령어를 사용할 때 필요한 파일이다.
pod를 생성했을 때 pod가 생성되지 않고 자꾸 죽는 현상이 자꾸 생겼었는데, pod 내부에서 실행될 python 파일을 실행해주는 command를 추가해주지 않아서 그랬엇다… 이렇게 되면 당연히 pod는 죽게되고 log는 남지도 않고 kubectl describe를 해도 딱히 정보가 나오지 않기 때문에 빠트리면 안되겠다… python 파일을 실행시키는 내용은 deployment.yaml 파일이나 Dockerfile에 작성해주면된다.
생성한 pod는 kubeflow의 ml-pipeline-ui pod에서 kfp 라이브러리를 기반으로 API를 생성하여 pipeline 관련된 정보를 가져올 수 있다. 연합학습을 위한 pod를 생성하는 것이 최종 목표이기 때문에 앞으로 더 많은 기능을 추가하여 pod를 발전시킬 예정이다.