본문 바로가기
CloudNetaStudy/[Study] DOIK

[6주차] Stackable Operator

by HeeWorld 2023. 11. 25.

이 글은 CloudNet@ 팀 gasida님의 스터디 DOIK 2기 내용 및 실습으로 작성된 글입니다.

 


 

What is Stackable?

 

 

 

Kubernetes를 사용하는 모든 환경에서 데이터 인프라를 배포, 확장 및 관리할 수 있는 Operator이다. 

(Stackable은 Kubernetes를 기반으로 클러스터를 관리)

빅데이터 플랫폼으로부터 시작되었으며, 지금은 아래와 같이 다양한 서비스를 지원하고 있다.

 

stackable은 cli로 사용할 수도 있지만, gui로도 사용할 수 있다. 

- 공식문서 참고: https://docs.stackable.tech/management/stable/cockpit/

 

 

실습

 

Stackable 설치

 

stackable을 사용하기 위해 아래와 같이 작업을 진행했고, 우리가 사용할 release은 23.7로 최근에 업데이트 된 것으로 보인다.

 

자동완성을 위한 bash 파일을 wget으로 다운받은 뒤에 /etc/bash_completion.d/ 아래로 bash 파일을 옮겼다.

 

 

아래 명령어를 사용하면 제공되는 operator와 stack demo 등 버전과 함께 확인이 가능하다.

 

# Operator
stackablectl operator list

# Stack
stackablectl stack list

# Demo : Stackable release 설치 > 스택 구성 > 데이터 구성
stackablectl demo list

 

 

 

파이프 라인을 잘모른다면 위 demo대로 설치하면 사용할 수 있음.

 

Demo1: Trino-Taxi-Data 

 

데모를 설치하기 전에 새로운 터미널을 열어서 모니터링을 할 수 있도록 watch를 사용해서 get pod,job,svc,pvc을 걸었다.

 

watch -d "kubectl get pod -n stackable-operators;echo;kubectl get pod,job,svc,pvc"

 

trino-taxi-data 설치를 진행하였고, 아래 모니터링 터미널에서 새로운 pod들이 생성되는 것을 볼 수 있다.

(설치 시간은 대략 8-10분 정도 소요)

 

 

설치가 완료되면 아래와 같이 pod, svc, job, pvc 등을 확인할 수 있다.

 

 

stackable도 helm 차트를 사용하며, 설치 완료 후에 확인해보니 필요한 서비스들이 구성된 것으로 보인다.

 

 

많은 pod들이 배포가 된 것으로 보이며, 배포한 뒤에 stackablectl stacklet list 명령어를 사용해서 현재 배포된 정보를 볼 수 있다.

minio endpoints에 있는 저 링크를 통해 접속하면 web 화면을 볼 수 있다.

만약 접근이 되지 않는다면 아래 커맨드를 사용해서 접근될 수 있도록 등록해주자!

 

 

 

# web에 접근이 되지 않을 때
# 워커노드의 '#-nodegroup-ng1-remoteAccess' 보안 그룹에 자신의 집 공인IP 접속 허용 추가
NGSGID=$(aws ec2 describe-security-groups --filters Name=group-name,Values='*ng1*' --query "SecurityGroups[*].[GroupId]" --output text)
aws ec2 authorize-security-group-ingress --group-id $NGSGID --protocol '-1' --cidr $(curl -s ipinfo.io/ip)/32

 

해당 커맨드 사용 후에 web 정상접근 확인

 

아래 명령어를 사용해서 접속정보를 확인 후 web에서 로그인을 해본다.

로그인을 하면 demo라는 버킷(s3와 비슷한 것)을 볼 수 있는데 클릭해서 보면 데이터들을 확인할 수 있다.

 

stackablectl stacklet credentials superset superset

 

 

parquet 형식의 데이터를 볼 수 있음, 해당 데이터는 다운로드도 가능함.

 

해당 데이터들은 job을 통해 tmp 디렉터리로 이동한 후 curl 을 사용하여 taxi 데이터를 다운 받고 데이터를 복사한 것으로 보인다.

 

아래 명령어를 통해 확인할 수 있음.

 

kubectl get job load-ny-taxi-data -o yaml | kubectl neat | cat -l yaml -p

 

trino 또한 stackablectl stacklet list 명령어를 통해 확인한 endpoints 경로로 접근 가능하다.

 

 

endpoints에서 나온 경로로 접근

 

계정(admin/ad******)으로 로그인하면 아래 UI를 확인할 수 있다. 

실제로 쿼리가 들어오면 실시간으로 확인할 수 있다.

 

 

Active Workers에 있는 숫자 1을 누르면 아래와 같이 node를 확인할 수 있다.

실제로 쿼리가 들어오면 처리하는 건 2번째에 있는 node이고, 1번째에 있는 node는 코디네이터 역할을 한다.

 

 

trino worker node는 지금 현재 1개인데, 2개로 증설해보았다.

아래 명령어를 사용하여 json 파일을 보면 "replicas": 1로 되어있는 것을 확인할 수 있다. (내용이 조금 길다.)

 

kubectl get trinocluster trino -o json | cat -l json -p

 

현재 replicas가 1로 확인

 

trino를 2로 바꾸면 operator가 바뀐내용을 확인하고 worker node를 1대 더 기동한다.

배치 및 배포가 완료되면, worker node가 2로 바뀐 것을 확인할 수 있다. (시간이 조금 걸림)

 

로그도 함께 확인

 

아까는 1개였는데 지금은 2개로 확인됨.

 

Worker node가 2개인 것을 아래와 같이 확인할 수 있다.

 

 

현재 replicas가 2로 바뀐 걸로 확인

 

superset도 stackablectl stacklet list 명령어를 통해 확인한 endpoints 경로로 접근 가능하다.

 

 

위에서 확인한 endpoint 경로로 접근

 

superset의 Dashboard에 있는 Taxi data를 클릭하면, trino로 쿼리가 들어가는 것을 실시간으로 볼 수 있다.

 

Dashboard의 "Taxi data"를 클릭!

 

Taxi data를 클릭하니 인피니티 모양이 나오면서 연산(?)을 열심히 하는 걸로 보이고, trino dashboard를 보니까 아까와 다르게 쿼리를 확인 할 수 있었다.

 

열심히 연산중

 

실시간으로 보이는 쿼리들 열심히 running 중 (worker node를 2대로 냅두었다.)

 

각각의 쿼리를 아래와 같이 예쁜 그래프로 확인할 수 있다. (Superset 에서)

 

쿼리한 데이터를 가지고 그래프를 확인할 수 있음.

 

Superset에서도 data query가 가능하여, superset에서 query를 실행해보았다.

상단 메뉴바에서 SQL → SQL Lab 클릭!

 

그리고 왼쪽에 Schema랑 Table schema 선택후 우측에 query 문을 넣은 다음에 Run을 클릭하고 바로 trino로 이동한다.

 

 

select
  format_datetime(tpep_pickup_datetime, 'YYYY/MM') as month,
  count(*) as trips,
  sum(total_amount) as sales,
  avg(duration_min) as avg_duration_min
from ny_taxi_data
group by 1
order by 1

 

위에서 실행한 쿼리가 아래와 같이 running 중인 것을 확인할 수 있다.

 

worker node를 통해 분산 중임.

 

superset에서 결과를 아래와 같이 확인할 수 있다.

 

 

실습을 완료한 뒤에 불편하지만 하나씩 demo를 지워준다.

아래 커맨드 참고하여 삭제 진행했다.

#
kubectl delete supersetcluster,supersetdb superset
kubectl delete trinocluster trino && kubectl delete trinocatalog hive
kubectl delete hivecluster hive
kubectl delete s3connection minio
kubectl delete opacluster opa

#
helm uninstall postgresql-superset
helm uninstall postgresql-hive
helm uninstall minio

#
kubectl delete job --all
kubectl delete pvc --all

#
kubectl delete cm create-ny-taxi-data-table-in-trino-script setup-superset-script trino-opa-bundle
kubectl delete secret minio-s3-credentials secret-provisioner-tls-ca superset-credentials superset-mapbox-api-key trino-users
kubectl delete sa superset-sa

# operator 삭제
stackablectl operator uninstall superset trino hive secret opa commons

# 남은 리소스 확인
kubectl get-all -n stackable-operators

 

 

생각보다 내가 알고싶은 Stackable에 대해 구글링을 통해 내용을 찾을 수 없어서 조금 어려운 회차인듯 하다.

물론 다른 스터디 멤버분께서 Stackable에 대해 잘 정리해주셔서 참고해서 보았지만,

기본적인 구조(?)를 알고 보고싶은 나에게 Stackable에 대한 정보는 다시 열심히 구글링을 해봐야겠다. (정보가 안나온다면 내가 서치를 잘못한것...)

 

<참고문서>
https://docs.stackable.tech/home/stable/#_components
https://stackable.tech/en/