이 글은 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
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에서 로그인을 해본다.
로그인을 하면 demo라는 버킷(s3와 비슷한 것)을 볼 수 있는데 클릭해서 보면 데이터들을 확인할 수 있다.
stackablectl stacklet credentials superset superset
해당 데이터들은 job을 통해 tmp 디렉터리로 이동한 후 curl 을 사용하여 taxi 데이터를 다운 받고 데이터를 복사한 것으로 보인다.
kubectl get job load-ny-taxi-data -o yaml | kubectl neat | cat -l yaml -p
trino 또한 stackablectl stacklet list 명령어를 통해 확인한 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
trino를 2로 바꾸면 operator가 바뀐내용을 확인하고 worker node를 1대 더 기동한다.
배치 및 배포가 완료되면, worker node가 2로 바뀐 것을 확인할 수 있다. (시간이 조금 걸림)
Worker node가 2개인 것을 아래와 같이 확인할 수 있다.
superset도 stackablectl stacklet list 명령어를 통해 확인한 endpoints 경로로 접근 가능하다.
superset의 Dashboard에 있는 Taxi data를 클릭하면, trino로 쿼리가 들어가는 것을 실시간으로 볼 수 있다.
Taxi data를 클릭하니 인피니티 모양이 나오면서 연산(?)을 열심히 하는 걸로 보이고, trino dashboard를 보니까 아까와 다르게 쿼리를 확인 할 수 있었다.
각각의 쿼리를 아래와 같이 예쁜 그래프로 확인할 수 있다. (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 중인 것을 확인할 수 있다.
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/
'CloudNetaStudy > [Study] DOIK' 카테고리의 다른 글
[5주차] Kafka & Strimzi Operator (0) | 2023.11.17 |
---|---|
[4주차] Percona Operator for MongoDB (1) | 2023.11.06 |
[3주차] Cloud Native PostgreSQL (0) | 2023.11.01 |
[2주차] K8S Operator & Inno DB (0) | 2023.10.26 |
[2주차] 실습 환경 세팅하기 (0) | 2023.10.25 |