안녕하세요!
저번 포스팅에서 EKS에 접속한데 이어서,
기본적으로 k9s를 통해 작업 편의성을 높히고
kubeflow를 설치하고 실습하는 과정을 진행해보고자 합니다.
k8s를 사용하기 위해서 kubectl을 사용하지만 CLI 특성상 로그나 모니터링 등의 작업 편의성이 떨어집니다.
ec2에서 터미널로 작업을 진행하시는 경우가 아니라면(GUI환경이라면), lens를 설치해 편하게 쿠버네티스를 관리할 수 있지만, CLI 환경에서 좀 더 체계화 된 작업 툴을 소개하고자 합니다.
k9s는 리눅스, OSX, Window 플랫폼을 지원하며 다양한 설치 방법을 제공합니다.
실행파일도 제공하기 때문에 실행파일을 다운로드 받아 /usr/bin 경로로 복사한 후 실행시켜봅시다!
https://github.com/derailed/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
kfctl : Kubeflow 배포 및 관리에 사용됩니다. kfctl 배포 프로세스는 다음 명령으로 구성되어 있습니다.
kfctl build
- (선택 사항) 배포의 다양한 리소스를 정의하는 구성 파일을 만듭니다. 선택적으로 실행합니다, kfctl build하기 전에 리소스를 편집하기 위해 kfctl apply를 실행할 수 있습니다.kfctl apply
- 클러스터의 리소스 생성 또는 업데이트kfctl delete
- 이전에 생성된 리소스 삭제AWS에서 kfctl 작업을 할 때 Kubeflow앱 디렉터리에는 다음 파일과 디렉터리가 포함됩니다.
Kubeflow 배포와 관련된 구성을 정의하는 구성 YAML 파일입니다.
aws_config는 샘플 eksctl 클러스터 구성 파일과 IAM 정책을 정의하는 JSON 파일 이 포함된 디렉터리입니다.
kustomize 는 Kubeflow 애플리케이션용 kustomize 패키지를 포함하는 디렉토리입니다.
eksctl, kubectl, awsctl 같이 kubeflow에도 쿠베플로우 컴포넌트를 배포/관리 하기 위한 커맨드라인툴이 존재합니다.
쿠베플로우 설치의 시작도 kfctl을 먼저 설치한 후에 진행됩니다.
kfctl의 릴리즈 정보는 https://github.com/kubeflow/kfctl/releases에서 확인 가능하며, 소스코드와 실행파일 둘 다 제공하고 있습니다.
혹은 퍼블릭 클라우드 서비스 환경에서 쿠베플로우를 사용하고자 한다면,
쿠베플로우 공식 사이트에서 패키지화 된 설치 방법을 제공하니 버전과 방법을 확인하고 다운로드 받으시길 바랍니다.
저는 aws EKS에서 쿠베플로우를 사용하고자 하니 공식적으로 지원하고 있는 버전인 1.2버전을 다운로드 받아보겠습니다!
EKS 클러스터는 이미 구성되어 있으니 넘어갑니다. EKS 클러스터가 없다면 링크를 참고해 생성해주세요!
$ 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 설치를 다룹니다!
export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.2-branch/kfdef/kfctl_aws.v1.2.0.yaml"
export AWS_CLUSTER_NAME=<YOUR EKS CLUSTER NAME>
mkdir ${AWS_CLUSTER_NAME} && cd ${AWS_CLUSTER_NAME}
wget -O kfctl_aws.yaml $CONFIG_URI
배포하기 전에 로컬 구성 파일을 수정할 수 있습니다. 선호하는 편집기로 다음과 같이 파일을 편집하세요.
기본적으로 사용자 이름은 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
배포를 진행하기 전에 EKS 백업부터 진행하고 오겠습니다.
kfctl apply -V -f kfctl_aws.yaml
kubectl -n kubeflow get all