Microk8s로 kubeflow 구축하기!

노하람·2022년 1월 21일
0
post-custom-banner

MicroK8s는 소규모 엔터프라이즈 Kubernetes 클러스터입니다.

  • 엔터프라이즈 : 실질적인 비즈니스 문제를 해결하기 위해 엔지니어링 분야와 컴퓨터 과학을 결합한 아키텍처를 설명하는 포괄적인 용어
    Minikube보단 프로덕션에 가까우며, kubeadm/kubespray보단 덜 프로덕션스럽다 랄까요?

그래도 클러스터 구축 방법이 매우 간단(Microk8s의 kubeflow addon 활성화)하여
구축하고 테스트해보고자 합니다.

MicroK8을 사용하여 Kubeflow 설치 및 활성화

MicroK8을 사용하여 Kubeflow를 실행하려면 MicroK8을 설치하고 기본 서비스를 활성화한 다음 Kubeflow를 활성화해야 합니다.

  • 참고: Kubeflow를 활성화하고 실행하려면 MicroK8s 버전 1.18, 1.19, 1.20 또는 1.21이 필요합니다. 최신 버전(1.22)은 현재 Kubeflow 자체에서 지원되지 않습니다.

다음 명령을 실행하여 MicroK8을 설치합니다.

  1. sudo snap install microk8s --classic --channel=1.21/stable

  2. 관리자 그룹에 자신(현재 사용자) 추가:

    • 저는 일반 사용자계정(sysadmin@tyan)으로 진행해봤습니다. 루트로 접속하지 않은 상황입니다.
    • sudo usermod -a -G microk8s $USER
    • sudo chown -f -R $USER ~/.kube
    • 당신이해야 할 exit현재의 세션이 변경 내용을 적용하려면 다시 로그인합니다. (접속 끊고 다시 ssh 로그인했습니다!)
  3. MicroK8이 실행 중인지 확인합니다.

    • microk8s status --wait-ready
  4. 다음 명령을 실행하여 Kubeflow를 배포합니다. 관련 정보

    • microk8s enable gpu istio host-access
    • microk8s enable kubeflow --bundle=cs:kubeflow --password=rnd
    • bundle은 풀버전, lite, edge 버전중에 설정할 수 있습니다.
    • password는 쿠버플로 대시보드 로그인 비밀번호입니다. (id는 admin입니다.)
    • hostname은 쿠버플로 대시보드가 응답하는 호스트 이름입니다. MetalLB에서 가져온 http://<ip주소>.nip.io/ 로 기본 설정됩니다.
    • 자동으로 dns, storage, ingress, metallb(10.64.140.43-10.64.140.49)는 활성화됩니다.
  5. 배포 프로세스는 몇 분(저는 20분 이상 걸렸습니다.) 정도 걸릴 수 있습니다. 완료되면 스크립트에 나온 포트 번호와 자격 증명을 인쇄하여 Kubeflow 대시보드에 액세스합니다.

    • http://10.64.140.43.nip.io
    • 역시 호스트 머신(우분투 서버)에서는 접속되는데 제 mac에서는 아직 접속할 수 없군요. 좀 더 시도
    • 일단 배포 상태를 확인해봅시다. microk8s.kubectl get pods -A
      - 나중엔 sudo snap alias microk8s.kubectl mk로 변경해서 간단히 쓰도록 합시다.

    • ingress-gateway가 LoadBalance 타입으로 생성되어 있고, metallb도 동작중이니 외부 접속을 정상적으로 이루어져야 합니다. 밑에서 액세스에 관해 더 살펴봅시다!

Kubeflow 대시보드 액세스

=============

  1. 외부에서 대시보드에 액세스하는 방법은 SOCKS(Socket Secure) proxy를 이용하는 방법과 coredns를 수정하는 방법이 있습니다. 먼저 coredns를 손보는 방법을 사용해보겠습니다.

Linux 서버에서

Linux 시스템에 직접 MicroK8을 설치한 경우 Kubeflow 대시보드를 다음과 같이 볼 수 있습니다.(확인 완료)

  1. 웹 브라우저 창을 엽니다.
  2. Kubeflow를 활성화한 후 제공된 링크에 액세스합니다(예: 10.64.140.43.nip.io).

Windows, macOS, Multipass 또는 가상 머신에서

  • 첫 섹션에선 일반적인 방법 설명을, 두번째 섹션에선 직접 macOS에서 진행해보도록 하겠습니다.

Windows, macOS, Multipass 또는 가상 머신에서 MicroK8을 실행할 때 Kubeflow 대시보드에 액세스하려면 SOCKS 프록시를 생성해야 합니다.

  1. exit명령 을 사용하여 터미널의 현재 세션에서 로그아웃합니다.

  2. SSH 매개변수로 SOCKS 프록시를 활성화하는 -D9999사용하여 시스템에 대한 연결을 다시 설정합니다.

    • 리눅스 서버에서 진행하는 경우
      - 공인(public) IP 획득 : curl ifconfig.me
    • VM의 경우 다음 명령을 실행합니다. 여기서 <machine_public_ip>은 컴퓨터의 공용 IP입니다.
      - ssh -D9999 ubuntu@<machine_public_ip>
    • Windows, macOS 또는 Multipass에서는 다음을 사용하여 먼저 IP를 확인할 수 있습니다.
      - multipass list
    • 그런 다음 이 명령을 실행 <multipass_public_ip>하여 해당 IP로 바꿉니다.
      - ssh -D9999 multipass@<multipass_public_ip>
  3. 호스트 운영 체제 또는 브라우저에서 설정 > 네트워크 > 네트워크 프록시로 이동하고 다음을 가리키는 SOCKS 프록시를 활성화 127.0.0.1:9999합니다.

  4. 마지막으로 다음을 통해 Kubeflow 대시보드에 액세스합니다.

    • 새 웹 브라우저 창을 엽니다.
    • Kubeflow를 활성화한 후 제공된 링크에 액세스(예: 10.64.140.43.nip.io).

ssh로 대시보드 접근

  • 추후 microk8s로 쿠버네티스 다시 구축했을 때 시도해 볼 예정입니다.
  • 임시로 Minikube에서 사용한 SSH 접근방법을 가져왔습니다. 혹시 급하신 분은 참고만 해주세요!

ssh로 Local port forwarding, Remote port forwarding, Dynamic port forwarding이 가능합니다.

  • 내부망에서 사용할 목적일 경우 유용합니다. 이 방법은 외부에서 공용IP로 접속하는 방법이 아닙니다.

제가 현재 로컬 포트 포워드만 사용할 계획이기 때문에 로컬 포트 포워딩을 기준으로 설명드리겠습니다.

  • SSH 터널링 명령어 : ssh -L [로컬에서 사용할 포트]:[최종 접근할 목적지] [SSH 서버 주소]
  • 예) ssh -L 2464:192.168.49.2:80 sysadmin@192.168.0.8
    - 현재 내 로컬에서 localhost:2464로 요청할건데, ssh로 접근할 서버는 sysadmin@192.168.0.8(내 리눅스 서버)이고 최종 접근할 목적지는 192.168.49.2:80(리눅스 내 VM 클러스터 내 서비스의 external-ip)야.
    • 내가 위의 명령어를 터미널에 입력하면 ssh 서버 주소로 접속해주고, 그 이후부터는 내 로컬에서 브라우저에 localhost:2464를 입력하면 192.168.49.2:80으로 포워딩해줘.
profile
MLOps, MLE 직무로 일하고 있습니다😍
post-custom-banner

0개의 댓글