aws EKS에 kubeflow 설치, 사용하기

노하람·2021년 10월 7일
0

안녕하세요!
저번 포스팅에서 EKS에 접속한데 이어서,
기본적으로 k9s를 통해 작업 편의성을 높히고
kubeflow를 설치하고 실습하는 과정을 진행해보고자 합니다.

k9s

k8s를 사용하기 위해서 kubectl을 사용하지만 CLI 특성상 로그나 모니터링 등의 작업 편의성이 떨어집니다.
ec2에서 터미널로 작업을 진행하시는 경우가 아니라면(GUI환경이라면), lens를 설치해 편하게 쿠버네티스를 관리할 수 있지만, CLI 환경에서 좀 더 체계화 된 작업 툴을 소개하고자 합니다.

k9s는 리눅스, OSX, Window 플랫폼을 지원하며 다양한 설치 방법을 제공합니다.
실행파일도 제공하기 때문에 실행파일을 다운로드 받아 /usr/bin 경로로 복사한 후 실행시켜봅시다!
https://github.com/derailed/k9s 에서 릴리즈 정보와 기타 운영체제의 다운로드를 제공합니다.

  1. k9s 설치
$ wget https://github.com/derailed/k9s/releases/download/v0.24.15/k9s_Linux_x86_64.tar.gz
$ tar xzvf k9s_Linux_x86_64.tar.gz
$ sudo mv k9s /usr/bin
$ k9s

  1. k9s 사용
    • 콜론(:)을 누르면 명령어를 입력할 수 있는 영역이 노출됩니다.
    • 예시로, kube-system 네임스페이스에 있는 파드 리스트를 확인해봅시다. 입력창에 ns(namespace)를 입력하고 엔터를 누르면 네임스페이스의 리스트가 나옵니다.
    • 키보드 방향키로 kube-system을 선택 후 엔터를 입력하면 kube-system에 속해있는 파드 리스트를 확인할 수 있습니다.
    • 파드 리스트 중에서 etcd로 시작하는 파드를 선택해 L(logs) 키를 눌러 로그를 확인해 봅시다.
    • 그 외 삭제나 수정, 구성 등도 단축키를 통해서 실행이 가능하기 때문에 kubectl보다 편하게 사용할 수 있습니다. 종료는 ctrl+C 입니다.

배포 프로세스의 이해

kfctl : Kubeflow 배포 및 관리에 사용됩니다. kfctl 배포 프로세스는 다음 명령으로 구성되어 있습니다.

  • kfctl build - (선택 사항) 배포의 다양한 리소스를 정의하는 구성 파일을 만듭니다. 선택적으로 실행합니다, kfctl build하기 전에 리소스를 편집하기 위해 kfctl apply를 실행할 수 있습니다.
  • kfctl apply - 클러스터의 리소스 생성 또는 업데이트
  • kfctl delete - 이전에 생성된 리소스 삭제

앱 레이아웃

AWS에서 kfctl 작업을 할 때 Kubeflow앱 디렉터리에는 다음 파일과 디렉터리가 포함됩니다.

  1. Kubeflow 배포와 관련된 구성을 정의하는 구성 YAML 파일입니다.

    • 아래 연습에서는 GitHub 기반 구성 YAML 파일의 복사본을 사용하여 Kubeflow를 배포합니다( CONFIG_URI아래 참조).
    • kfctl build 또는 kfctl apply를 실행하면 필요에 따라 사용자 정의할 수 있는 로컬 버전의 구성 파일과 함께 작동합니다.
  2. aws_config는 샘플 eksctl 클러스터 구성 파일과 IAM 정책을 정의하는 JSON 파일 이 포함된 디렉터리입니다.

  3. kustomize 는 Kubeflow 애플리케이션용 kustomize 패키지를 포함하는 디렉토리입니다.

    • kfctl build 또는 kfctl apply를 실행할 때 디렉토리가 생성됩니다.
    • Kubernetes 리소스를 사용자 지정할 수 있습니다(매니페스트를 수정하고 kfctl apply 다시 실행).

kfctl

eksctl, kubectl, awsctl 같이 kubeflow에도 쿠베플로우 컴포넌트를 배포/관리 하기 위한 커맨드라인툴이 존재합니다.
쿠베플로우 설치의 시작도 kfctl을 먼저 설치한 후에 진행됩니다.
kfctl의 릴리즈 정보는 https://github.com/kubeflow/kfctl/releases에서 확인 가능하며, 소스코드와 실행파일 둘 다 제공하고 있습니다.

혹은 퍼블릭 클라우드 서비스 환경에서 쿠베플로우를 사용하고자 한다면,
쿠베플로우 공식 사이트에서 패키지화 된 설치 방법을 제공하니 버전과 방법을 확인하고 다운로드 받으시길 바랍니다.

  • kfctl은 현재 Linux 및 macOS 사용자만 사용할 수 있습니다. Windows를 사용하는 경우 kfctlWSL(Linux용 Windows 하위 시스템)에 설치할 수 있습니다.

저는 aws EKS에서 쿠베플로우를 사용하고자 하니 공식적으로 지원하고 있는 버전인 1.2버전을 다운로드 받아보겠습니다!

  • 전제조건 : kubectl, aws CLI(v2이상), eksctl, aws-iam-authenticator(aws cli가 버전 1.15 이하일 때만)

EKS 클러스터는 이미 구성되어 있으니 넘어갑니다. EKS 클러스터가 없다면 링크를 참고해 생성해주세요!

Kubeflow 설치 환경 준비

  1. Kubeflow 릴리스 페이지에서 kfctl v1.2.0 릴리스를 다운로드 하고 압축을 풀어 적용시키겠습니다.
    $ wget https://github.com/kubeflow/kfctl/releases/download/v1.2.0/kfctl_v1.2.0-0-gbc038f9_linux.tar.gz
    $ tar -xvf kfctl_v1.2.0-0-gbc038f9_linux.tar.gz
    $ export PATH=$PATH:$PWD
    $ sudo mv kfctl /usr/bin
    $ kfctl

여기서는 스탠다드나, Dex를 활용하는 기존 쿠버네티스 클러스터 환경이 아닌 AWS EKS 클라우드 환경에서의 kubeflow 설치를 다룹니다!

  1. 쿠브플로우는 배포 플랫폼에 따라 배포 설정 파일을 제공합니다.
    • 이미 설치된 쿠버네티스 클러스터 환경에서 설치를 진행할 경우(온프레미스 환경)
      - 쿠베플로우 커뮤니티에서 지원하는 스탠다드 쿠베플로우 버전
      - Arrikto라는 벤더사에서 지원하는 Dex for authentication 버전
      - Dex for authentication 버전은 사용자 인증 시스템을 제공합니다.(다중 사용자 기능 필요시)
    • 퍼블릭 클라우드 서비스 환경일 경우
      - AWS(https://www.kubeflow.org/docs/distributions/aws/deploy/install-kubeflow/)
      - Azure
      - Google Cloud Platform
      - IBM Cloud Private 등
    • AWS는 EKS라는 쿠버네티스 서비스를 제공하기 때문에, 먼저 EKS 클러스터를 통해 쿠버네티스 환경을 구축합니다. IAM, 클러스터 리전, 위커 롤(Worker roles) 등 리소스 사용 권한 관련 정보들을 확인 후, 쿠베플로우 설치를 진행합니다.
    • 여기서도 보통 버전과 인증 버전으로 나누어지는데 사용자 인증은 Amazon Congnito 서비스를 통해 이루어집니다. 상세 내용은 위의 링크를 확인하세요!
  2. 구성 파일에 대한 환경 변수를 설정합니다.
    • 옵션 1 : Dex를 사용한 인증에 기본 구성 파일 사용
    export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.2-branch/kfdef/kfctl_aws.v1.2.0.yaml"
    • 옵션 2: 또는 이 구성 파일을 사용하여 AWS Cognito에서 다중 사용자 인증을 활성화 합니다. 이 구성에 대한 자세한 내용은 계속 진행하기 전에 인증 및 권한 부여를 참조하세요.
    • 저는 일단 최대한 간단하게 설치를 진행해보기 위해서 옵션 1 방법으로 진행하겠습니다.
  3. Amazon EKS 클러스터의 이름으로 환경 변수를 설정합니다.
    export AWS_CLUSTER_NAME=<YOUR EKS CLUSTER NAME>
  4. 마지막으로 클러스터에 대한 배포 디렉터리를 만들고 변경한 다음 kfctl 구성 파일을 다운로드 합니다.
    mkdir ${AWS_CLUSTER_NAME} && cd ${AWS_CLUSTER_NAME}
    wget -O kfctl_aws.yaml $CONFIG_URI

Kubeflow 구성

배포하기 전에 로컬 구성 파일을 수정할 수 있습니다. 선호하는 편집기로 다음과 같이 파일을 편집하세요.

기본적으로 사용자 이름은 admin@kubeflow.org로 설정되고 암호는 12341234입니다.
Kubeflow 배포를 보호하려면 이 구성을 변경하십시오.

v1.0.1부터 Kubeflow는 IRSA(서비스 계정용 AWS IAM 역할) 사용을 지원합니다 .
이를 통해 노드 인스턴스 역할에 필요한 정책을 연결하는 것과 달리 Kubernetes 클러스터의 특정 서비스 계정에 바인딩된 세분화된 정책 구성이 가능합니다.

kfctl는 두 가지 역할(roles)를 생성합니다.
kf-user-{AWS-지역}-{클러스터 이름}
KF-admin-{AWS-지역}-{클러스터 이름} 입니다.
두 service accounts(kf-admin, kf-user)는 kubeflow namespace 안에 있습니다.
kf-admin 역할은 AWS 서비스와 통신해야 하는 alb-ingress-controller, profile-controller 또는 모든 Kubeflow 제어 평면 구성 요소(control plane components)와 같은 구성 요소에서 맡는 반면
kf-user 역할은 사용자 애플리케이션에서 사용할 수 있습니다.

이는 Amazon EKS에서 관리하는 클러스터에서만 사용할 수 있습니다. AWS의 DIY Kubernetes의 경우 aws/amazon-eks-pod-identity-webhook에서 구성 옵션을 확인하십시오.

필수 IAM 정책을 EKS 노드 인스턴스 역할에 연결하는 방법은 계속 지원되지만(아래 옵션 2), 서비스 계정에 IAM 역할을 사용하는 것이 좋습니다.

eksctl를 사용하여 서비스 계정에 사용할 IAM 역할을 생성한 경우 역할을 생성할 때 지정한 서비스 계정에서는 이 작업이 이미 완료되어 있습니다.

kfctl은 클러스터의 IAM OIDC 자격 증명 공급자를 만들거나 재사용하고, 필요한 IAM 역할을 만들고, Kubernetes 서비스 계정과 역할을 바인딩하는 신뢰 관계를 구성합니다.

이것이 기본 구성입니다. 이 구성 파일 섹션을 AWS 리전으로 업데이트하기만 하면 됩니다.

region: ${AWS_REGION} (e.g. us-west-2)
enablePodIamPolicy: true
  • 기본적으로 kf-user-{aws-region}-{cluster-name} IAM 역할에는 정책이 연결되어 있지 않으므로 필요에 따라 구성할 수 있습니다.

Kubeflow 배포

배포를 진행하기 전에 EKS 백업부터 진행하고 오겠습니다.

  1. 다음 명령을 실행하여 Kubeflow 클러스터를 초기화합니다.
kfctl apply -V -f kfctl_aws.yaml
  1. kubeflow 네임스페이스에서 모든 리소스가 준비될 때까지 기다립니다..
kubectl -n kubeflow get all
profile
MLOps, MLE 직무로 일하고 있습니다😍

0개의 댓글