Part 5: 모범 사례와 보안 퀴즈
Spark 4.2.0 / Hadoop 3.5.0 / AWS SDK v2 2.35.4.
1. Spark 4.2의 검증한 Hadoop/S3A 버전 조합은?
정답 보기
Hadoop client와 hadoop-aws는 3.5.0으로 맞추며 AWS SDK v2 bundle 2.35.4와 Maven이 해결한 runtime 의존성을 포함합니다. 다른 이미지·EMR에는 그 번들의 버전을 다시 확인합니다.
2. SDK v2 조합의 IRSA provider는?
정답 보기
software.amazon.awssdk.auth.credentials.WebIdentityTokenFileCredentialsProvider입니다. 이전 com.amazonaws.auth.WebIdentityTokenCredentialsProvider는 이 조합에서 자동 변환되지 않습니다.
3. Pod Identity를 사용할 때 바뀌는 것은?
정답 보기
ContainerCredentialsProvider, service-account association, pods.eks.amazonaws.com trust와 Agent/노드 권한을 사용합니다. IRSA annotation과 OIDC 설정이 이를 대신하지 않습니다.
4. 기본 S3A chain이 IRSA도 자동 사용하나요?
정답 보기
검증한 Hadoop 3.5.0 chain에는 container/instance wrapper가 있지만 web-identity provider는 없습니다. 필요한 provider를 명시하고 실제 유효 ID와 prefix 접근을 검증합니다.
5. Driver·executor·History Server의 ServiceAccount를 나누는 이유는?
정답 보기
Driver의 Kubernetes API 관리 권한과 각 프로세스의 S3 데이터 권한을 분리하기 위해서입니다. History Server는 cleaner를 끈 읽기 전용 역할로 시작할 수 있습니다.
6. namespace Role은 자신의 executor만 관리하게 제한하나요?
정답 보기
아닙니다. 명시된 리소스·verb를 namespace 범위로 허용하며 이 규칙에는 Pod label 기반 소유권 제한이 없습니다. Pod 생성·다른 SA 사용·host 접근은 admission과 신뢰 경계로 함께 제한합니다.
7. ClusterRole은 항상 클러스터 전체 권한을 뜻하나요?
정답 보기
아닙니다. RoleBinding이 ClusterRole을 참조하면 namespaced 리소스 권한은 그 binding namespace로 제한할 수 있습니다. 규칙과 binding 종류·범위를 함께 확인합니다.
8. spark.authenticate=true가 Spark UI 로그인도 제공하나요?
정답 보기
아닙니다. 내부 연결 인증입니다. Kubernetes가 생성한 app secret은 executor 환경으로 전달될 수 있어 Pod 조회 권한도 중요합니다. UI 사용자 인증·인가·TLS는 별도입니다.
9. 역할 label만 사용한 NetworkPolicy의 문제는?
정답 보기
같은 namespace의 다른 작업 executor도 조건을 만족합니다. 예제는 고유 run ID를 driver/executor label과 정책에 같이 넣습니다. Label 자체가 인증 수단은 아니므로 위조 가능한 Pod 생성 권한도 고려합니다.
10. NetworkPolicy를 적용하면 허용된 포트 외 모든 경로가 막히나요?
정답 보기
정책은 합산되고 CNI 집행이 필요합니다. 이 예제는 ingress만 제한합니다. Egress, node/hostNetwork, 다른 allow 정책, DNS/API/AWS endpoint와 추가 plugin 경로는 별도로 검토합니다.
11. 고정 포트와 spark.port.maxRetries=0을 같이 쓰는 이유는?
정답 보기
포트 충돌 시 다른 포트로 이동하지 않고 실패하도록 해 NetworkPolicy와 실제 listener가 어긋나지 않게 합니다. 추가 endpoint를 사용할 때는 그 포트·보안도 따로 구성합니다.
12. PrometheusServlet과 executor 집계 endpoint는 같은가요?
정답 보기
아닙니다. /metrics/prometheus/는 driver Dropwizard registry이고 /metrics/executors/prometheus/는 driver가 수집한 executor 집계입니다. Executor마다 별도 Spark UI가 생기지 않으며 series·label·단위도 대조해야 합니다.
13. JMX Java agent와 Operator chart 메트릭에 관한 올바른 설명은?
정답 보기
Agent는 JVM 안에서 실행되고 별도 프로세스가 아닙니다. Operator chart 기본 메트릭은 Operator 자체이며 Spark JVM마다 agent를 자동 설치하지 않습니다.
14. PodMonitor 리소스를 만들기만 하면 수집되나요?
정답 보기
Prometheus의 PodMonitor label/namespace selector, discovery RBAC, 실제 Pod port/path와 NetworkPolicy가 모두 맞아야 합니다. Targets UP과 실제 series를 확인하며 짧은 작업은 scrape 사이에 끝날 수 있습니다.
15. Driver Pod 객체가 남아 있으면 작업 종료 후 UI도 남나요?
정답 보기
JVM이 끝나면 live UI는 서비스되지 않습니다. History Server는 별도 보존한 event log로 재구성하며 stdout/stderr나 checkpoint를 대신 읽는 것이 아닙니다.
16. History Server 설정 파일은 mount만 하면 적용되나요?
정답 보기
아닙니다. 예제는 spark-class org.apache.spark.deploy.history.HistoryServer --properties-file 경로로 명시적으로 읽고 foreground로 실행합니다. 파일 경로와 로그 디렉터리·S3 identity를 함께 확인합니다.
17. History Server가 모든 과거 작업의 모든 정보를 복원하나요?
정답 보기
Event log가 실제로 보존되어 읽을 수 있어야 합니다. 누락·손상·미flush·삭제·compaction이 정보에 영향을 줍니다. 이벤트 로그는 데이터 복구용 checkpoint나 출력 백업이 아닙니다.
18. Production에서 Operator·cluster mode·IRSA만이 정답인가요?
정답 보기
아닙니다. 검증된 직접 제출·Operator·EMR, client/cluster mode와 IRSA/Pod Identity를 요구에 맞게 선택합니다. 권한·데이터 정확성·복구·네트워크·리소스·비용을 실제 환경에서 시험해야 합니다.