Kubernetes 인터뷰 질문 및 답변 (전문가 – 6년 경력)
Source: Dev.to
위의 링크에 있는 전체 텍스트를 제공해 주시면, 해당 내용을 한국어로 번역해 드리겠습니다. (코드 블록, URL 및 마크다운 형식은 그대로 유지됩니다.)
1. Kubernetes Architecture
Q1. What happens when you run kubectl apply -f deployment.yaml?
Answer:
kubectl apply 를 실행하면 요청이 kube‑apiserver 로 전송됩니다.
- API 서버는 YAML을 검증하고 인증 및 권한을 확인한 뒤 원하는 상태를 etcd 에 저장합니다.
- 컨트롤러는 새로운 원하는 상태를 감지하고 ReplicaSet 을 생성합니다.
- 스케줄러 가 파드가 실행될 노드를 결정합니다.
- 해당 노드의 kubelet 이 이미지를 가져와 컨테이너를 시작합니다.
Q2. What is etcd and why is it critical?
Answer:
- etcd 는 전체 클러스터 상태를 보관하는 분산 키‑값 저장소 입니다.
- etcd 가 다운되거나 손상되면 Kubernetes 가 정상적으로 동작할 수 없습니다.
- 따라서 운영 환경에서는 백업, 암호화, 고가용성(HA) etcd 구성이 필수적입니다.
2. 워크로드 및 컨트롤러
Q3. Deployment, StatefulSet, DaemonSet의 차이점은?
답변:
| 리소스 | 사용 사례 |
|---|---|
| Deployment | 무상태 애플리케이션(예: 웹 서비스) |
| StatefulSet | 상태 저장 애플리케이션(예: 데이터베이스, Kafka) – 안정적인 네트워크 ID와 영구 스토리지를 제공 |
| DaemonSet | 노드당 하나의 파드 – 일반적으로 로깅, 모니터링, 보안 에이전트에 사용 |
Q4. 언제 Job 또는 CronJob을 사용하나요?
답변:
- Job – 데이터베이스 마이그레이션과 같은 일회성 작업.
- CronJob – 백업이나 정리 작업과 같은 정기적인 예약 작업.
3. Networking (Very Important)
Q5. How does traffic reach a pod from the internet?
Answer:
Typical flow:
Internet → Load Balancer → Ingress → Service → Pod
- Ingress는 라우팅 규칙을 처리합니다.
- Service는 트래픽을 적절한 파드로 로드밸런싱합니다.
- Pod이 최종적으로 요청을 제공합니다.
Q6. Difference between Service types?
Answer:
| 유형 | 노출 |
|---|---|
| ClusterIP | 내부 전용 (기본값) |
| NodePort | 각 노드의 IP와 포트에 서비스를 노출 |
| LoadBalancer | 클라우드 로드밸런서를 프로비저닝 (프로덕션 급) |
Q7. What is a NetworkPolicy?
Answer:
NetworkPolicy는 어떤 파드가 어떤 파드와 통신할 수 있는지를 정의합니다.
- 기본적으로 트래픽은 제한이 없습니다.
- 프로덕션 환경에서는 보안을 위해 트래픽을 제한(제로 트러스트)하는 것이 일반적입니다.
4. 구성 및 비밀
Q8. 프로덕션에서 비밀을 어떻게 관리합니까?
Answer:
가능하면 비밀을 Kubernetes에 직접 저장하지 마세요. 일반적인 통합:
- AWS Secrets Manager
- AWS SSM Parameter Store
- HashiCorp Vault
비밀은 external‑secrets, CSI 드라이버 또는 유사한 메커니즘을 통해 런타임에 주입됩니다.
Q9. Kubernetes 비밀은 암호화됩니까?
Answer:
- 기본적으로 비밀은 base64‑인코딩만 되어 있으며 암호화되지 않습니다.
- 프로덕션에서는 휴지 상태 암호화를 활성화하고 RBAC로 접근을 제한합니다.
5. 스토리지 및 상태 저장 애플리케이션
Q10. PV, PVC, 그리고 StorageClass에 대해 설명하세요.
Answer:
| Component | Description |
|---|---|
| PV (PersistentVolume) | 클러스터가 프로비저닝한 실제 스토리지 리소스입니다. |
| PVC (PersistentVolumeClaim) | 파드/개발자가 요청하는 스토리지 요구 사항입니다. |
| StorageClass | 스토리지가 동적으로 프로비저닝되는 방식을 정의합니다(예: 유형, 재사용 정책). |
개발자는 PVC를 사용하고, 인프라 계층은 StorageClass에 따라 PV를 생성·관리합니다.
Q11. 쿠버네티스에서 데이터베이스를 실행하시겠습니까?
Answer:
네, 하지만 주의가 필요합니다. 프로덕션 데이터베이스의 경우 다음을 보장하세요:
- StatefulSets 로 배포
- persistent storage(적절한 PV) 사용
- 신뢰할 수 있는 backup strategy 구현
- 복제본을 분산시키기 위한 anti‑affinity rules 적용
대부분의 경우 관리형 데이터베이스 서비스를 사용하는 것이 더 나은 선택일 수 있습니다.
6. 리소스 관리 및 스케일링
Q12. requests와 limits의 차이점은?
Answer:
- Requests – 컨테이너에 보장되는 리소스(스케줄링에 사용).
- Limits – 컨테이너가 사용할 수 있는 최대 리소스.
포드가 memory limit을 초과하면 노드에 메모리가 남아 있더라도 OOMKilled됩니다.
Q13. HPA는 어떻게 작동하나요?
Answer:
**Horizontal Pod Autoscaler (HPA)**는 CPU, 메모리 또는 사용자 정의 메트릭(예: Prometheus)과 같은 지표를 기반으로 포드 복제본 수를 자동으로 조정합니다.
Q14. 노드에 메모리가 있는데도 포드가 재시작되는 이유는?
Answer:
포드가 memory limit을 초과했기 때문이며, 이는 노드 전체 메모리가 아니라 컨테이너별로 적용되는 제한입니다.
7. 보안 (시니어 수준)
Q15. 쿠버네티스 클러스터를 어떻게 보호합니까?
답변:
- RBAC를 최소 권한 원칙에 따라 적용합니다.
- 컨테이너를 non‑root 사용자로 실행합니다.
- Pod Security Standards(또는 PSP)를 적용합니다.
- 트래픽을 제한하기 위해 NetworkPolicies를 사용합니다.
- 컨테이너 이미지의 취약점을 스캔합니다.
- 정책 적용을 위해 어드미션 컨트롤러(예: OPA/Gatekeeper)를 배포합니다.
Q16. RBAC란 무엇입니까?
답변:
**Role‑Based Access Control (RBAC)**는 Roles, ClusterRoles, RoleBindings, ClusterRoleBindings를 사용하여 클러스터 내에서 누가 무엇을 할 수 있는지를 관리합니다.
Q17. 권한이 상승된 컨테이너를 어떻게 방지합니까?
답변:
- 권한 상승을 금지하기 위해 Pod Security Standards(또는 이전의 PodSecurityPolicy)를 사용합니다.
- 권한이 있는 보안 컨텍스트를 차단하는 OPA/Gatekeeper 정책을 적용합니다.
8. Helm
Q18. 왜 Helm을 사용합니까?
Answer:
Helm은 Kubernetes 애플리케이션을 차트로 패키징하여 다음을 제공합니다:
- 버전 관리된 릴리스
- 재사용 가능한 매니페스트를 위한 템플릿화
- values 파일을 통한 환경별 구성
Q19. Helm으로 여러 환경을 어떻게 관리합니까?
Answer:
별도의 values 파일을 유지합니다:
values-dev.yamlvalues-stage.yamlvalues-prod.yaml
차트를 설치하거나 업그레이드할 때 환경별로 값을 오버라이드합니다.
9. GitOps & Argo CD
Q20. GitOps란 무엇인가?
Answer:
GitOps는 Git을 단일 진실 소스(single source of truth) 로 간주하여 원하는 클러스터 상태를 관리합니다. 클러스터는 Git 저장소와 실시간 상태를 지속적으로 조정(reconcile)합니다.
Q21. Argo CD는 무엇을 하는가?
Answer:
Argo CD:
- Git에 정의된 원하는 상태와 실제 클러스터 상태를 지속적으로 비교합니다.
- 동기화(Sync) 를 수행하고, 드리프트를 감지하며, 자동으로 롤백(rollback) 할 수 있습니다.
Q22. App‑of‑Apps 패턴이란?
Answer:
부모 Argo CD 애플리케이션이 여러 자식 애플리케이션을 관리하는 방식으로, 대규모 다중 서비스 환경을 깔끔하게 관리할 수 있게 해줍니다.
10. 문제 해결 및 운영
Q23. Pod가 CrashLoopBackOff 상태입니다. 어떻게 하시겠습니까?
Answer:
kubectl logs <pod>– 컨테이너 로그를 확인합니다.kubectl describe pod <pod>– 이벤트와 상태 세부 정보를 봅니다.- 최근 구성 또는 시크릿 변경 사항을 확인합니다.
- 필요하면 컨테이너 이미지를 로컬에서 테스트합니다.
Q24. 프로덕션이 중단되었습니다. 첫 번째 단계는?
Answer:
- 알림 및 모니터링 대시보드를 검토합니다.
- Pod 및 노드 상태를 확인합니다 (
kubectl get pods,kubectl get nodes). - 최근 배포 또는 구성 변경 사항을 파악합니다.
- 필요하면 문제를 일으킨 변경을 롤백합니다.
- 이해관계자에게 현재 상황 및 예상 복구 시간을 전달합니다.
11. 클라우드 쿠버네티스 (EKS 예시)
Q25. EKS에서 IRSA란 무엇인가?
Answer:
**IAM Roles for Service Accounts (IRSA)**는 파드가 AWS IAM 역할을 안전하게 맡을 수 있게 하여, 컨테이너에 정적 AWS 자격 증명을 삽입할 필요를 없애줍니다.
Q26. 노드 그룹과 Fargate의 차이점은?
Answer:
| 기능 | 노드 그룹 | Fargate |
|---|---|---|
| 제어 | EC2 인스턴스(크기, AMI 등)를 직접 관리합니다 | 완전 관리형 서버리스 파드 |
| 비용 | EC2 인스턴스 비용을 지불합니다(잠재적으로 낮음) | 파드당 비용은 높지만 인프라 관리가 필요 없습니다 |
| 사용 사례 | 맞춤형 OS, GPU 등 필요 작업 | 간단한 작업, 급증하는 잡, 혹은 무운영을 원할 때 |
12. 디자인 및 아키텍처
Q27. 어떻게 …
(필요에 따라 나머지 질문을 계속하십시오.)
다중 팀을 위한 쿠버네티스 설계?
답변
- 별도 네임스페이스
- 팀별 RBAC
- 리소스 할당량
- 네트워크 정책
- 환경별 GitOps
Q28. 단일 클러스터 또는 다중 클러스터?
답변
- 소규모 팀 → 단일 클러스터
- 대규모 조직 / 컴플라이언스 → 다중 클러스터
리스크, 비용, 격리 요구 사항에 따라 다릅니다.
최종 인터뷰 팁 (매우 중요)
면접관이 듣는 항목:
- 명확한 사고
- 프로덕션 경험
- 트레이드‑오프
- 보안 마인드셋