반응형
https://youtu.be/5-4X3HylQQo?si=K5sBcyJNptaO4dGx
Yinan Li
- Software Engineer at Google GKE Workload Team
- Apache Spark Contributter


Spark
- Large Scale Data Processing에서 가장 유명한 프레임워크.
- 다양한 language 지원.
- batch, streaming, ML, SQL workload 수행
Kubernetes Submission Client
Spark on Kubernetes는 크게 두 가지 part로 나뉜다.

- 처음에 Empty Driver pod Spec이 있다.
- empty driver에 여러 feature step을 추가한다.
- step 예시: mounting volumes / secrets / 사용자 정의 env variable 추가...
- 일종의 customization.
- 최종 Driver Pod Spec이 만들어지고, k8s의 api server에 pod 생성을 요청한다.
- k8s scheduler가 Driver Pod을 할당하고, 실행한다.
Kubernetes Scheduler Backend

Driver Pod 내부에서 실행되는 로직.
- Executor Pod을 생성, 실행하는 Custom Controller 역할
- Spark Core: handle task scheduling.
- executor pod의 lifecycle 관리... pod 이벤트 기반 작업 실행.
- k8s는 driver pod에서 요청한 executor pod를 생성, 실행 / Network & Logging Support
Under the hood

- 사용자가 master node 정보와 driver spec 명시해서 submit 요청
- k8s가 driver pod 생성 / driver pod는 executor pod 생성을 k8s api에 요청
- k8s가 executor pod를 노드에 할당.
- executor pod는 driver pod와 통신. executor pod에서 발생하는 이벤트에 따라 driver pod가 적당한 동작을 취한다.

Executor Pod가 생성되는 방식은 Driver Pod과 비슷함.
- Empty Pod Spec 받아서
- Steps 진행
- volume mount / access Remote Services (HDFS 같은)...
- Executor Pod Spec 생성 -> API server에 전달

yarn이나 다른 scheduler backend에서는 network connectivity가 granted (Native Connectivity). 하지만 k8s는 다른 방식으로 동작함.
- Executor Pod는 Driver Pod와 FQDN으로 통신.
- 따라서 ubmission Client 쪽에서 headless Service 방식으로 Driver Pod을 노출함.
- 장표에 있는 setup Service / endpoint for driver / blockManager가 이 뜻임


{width=900 height=483}
Dependency Management
- 보통은 컨테이너 프로세스에 필요한 dependency jar파일 같은 걸 이미지에 포함시키는 custom image
- 이미지에 포함할 게 아니라면, remote storage에 jar파일을 두고 받아쓰는 형태.
dependency 실행법
- spark 2.3.x: init container로 다운로드. user-specific location에 다운받을 수 있음.
- spark maintainer들은 이 방식을 좋아하지 않았음.
- spark 2.4.x: spark-submit 명령어에 통합.
- driver container가 spart submit을 client mode로 실행할 때, 필요한 외부 dependency를 가져오는 방식.

spark 2.4 기준 features
- Java, Python, Scala, R support
- Static Resource Allocation: executor가 할당받을 자원을 미리 설정할 수 있음. can't change at runtime.
- driver / executor customize
- hard CPU / Memory Limit 지원. (fractional CPU 사용 가능한게 YARN과 Mesos 대비 차이점)
- 기타 k8s native 기능.

Client Mode (2.4) (2.3버전이 나왔을 때부터 요청했던 요구사항)
- interactive application (jupyter notebook)
- 사용자가 driver pod을 inside / outside cluster 선택할 수 있다.
- 단, outside cluster일 경우 network 설정은 본인이 해야 함. (executor pod과 통신할 수 있게) 이게 불가능한 환경도 있을 거다.
- jupyter notebook 같은 걸 pod로 실행하면...
- in-cluster pod이면 network 설정은 쉬워질 수 있음
- submission client가 실행되지 않기 때문에, headless service같은 건 직접 해야 함.
- 따라서 driver pod가 생성될 때 붙을 label 가지고 미리 label selector기반 headless service를 배포해둬야 함



3.0에서는 kerberos 인증 / kubernetes Operator 지원할 예정
- application-level metrics / driver, executor metrics to Prometheus
- sparkConf 외에도, pod template 기반으로 customize 지원할 예정.
반응형
'학습일지 > kubernetes' 카테고리의 다른 글
| CloudNativeUniversity2025 - Introduction to Cluster API (0) | 2025.12.26 |
|---|---|
| KubeCon2025 - Spark on Kubernetes: A Practical Guide (0) | 2025.12.09 |
| KubeCon2024 - Cluster API Deep Dive - Roadmap to API Graduation (0) | 2025.12.02 |
| KubeCon2024 - Understanding Kubernetes Networking in 30 minutes (0) | 2025.09.18 |
| KubeCon2025 - Efficient Transparent Checkpointing of AI / ML Workloads in k8s (0) | 2025.09.12 |