1장
-
쿠버네티스 클러스터의 모든 상태 정보를 저장하는 유일한 컴포넌트는? a. API 서버 b. 스케줄러 c. etcd d. 쿠블릿
-
구글이 매주 수십억 개의 컨테이너를 관리하기 위해 사용했던 내부 시스템은? a. Docker b. Borg c. Linux d. CNCF
-
워커 노드에서 실행되며 컨테이너를 실행하고 상태를 보고하는 에이전트는? a. 쿠브 프록시 b. 컨트롤러 c. 쿠블릿 d. 컨테이너 런타임
-
다음 중 마이크로서비스가 몇 개 이상일 때 쿠버네티스 도입이 가장 권장되는가? a. 1개 b. 5개 c. 10개 d. 20개
-
개발자가 결과 상태를 기술하면 시스템이 이를 실현하고 유지하는 모델의 명칭은? 정답: 선언적 모델
-
하드웨어 세부 사항을 숨기고 전체 클러스터를 하나의 배포 영역으로 보이게 하는 계층은? 정답: 인프라 추상화
-
kubectl명령줄 도구가 실제로 통신하는 중앙 컴포넌트의 명칭은? 정답: API 서버 -
마이크로서비스 환경에서 왜 쿠버네티스 같은 자동화 시스템이 필수적인가? 모놀리스와 달리 수백 개의 독립된 프로세스로 나뉘어 배포되므로 수동 관리가 불가능하며 각 서비스의 의존성과 장애 대응을 개별적으로 자동화해야 하기 때문임
-
새 애플리케이션 인스턴스를 실행할 노드를 결정하는 과정과 담당 컴포넌트를 설명하시오 스케줄러가 가용 리소스를 고려해 최적의 노드를 결정하고 API 서버를 통해 정보를 업데이트하면 해당 노드의 쿠블릿이 이를 감지해 컨테이너를 실행함
-
직접 구축 대신 관리형 서비스(GKE 등) 사용이 조직에 유리한 이유는? 쿠버네티스 자체의 설치와 관리는 극도로 복잡하고 전문 지식이 필요하므로 운영 부담을 전문가에게 맡기고 개발자는 앱 구현에만 집중하기 위함임
2장
-
쿠버네티스가 다양한 컨테이너 기술(Docker, CRI-O 등)을 지원할 수 있게 해주는 인터페이스는? a. API Server b. CRI c. etcd d. Kubelet
-
다음 중 도커의 경량 대안이며 OCI 표준을 준수하는 런타임은? a. rkt b. runC c. CRI-O d. Kata
-
컨테이너가 호스트 머신에서 직접 실행되는 것과 같다고 볼 때, 공유되는 요소는? a. OS 파일시스템 b. 애플리케이션 라이브러리 c. OS 커널 d. 패키지 매니저
-
컨테이너화된 애플리케이션의 로그는 주로 어디로 출력해야 하는가? a. /var/log/app.log b. 표준 출력(stdout) c. API 서버 d. etcd
-
컨테이너를 가상 머신처럼 격리된 공간으로 보이게 만드는 리눅스 커널 기능을 무엇이라 하는가? 정답: 네임스페이스(Namespace)
-
쿠버네티스의 기본 배포 단위이며 하나 이상의 컨테이너 그룹을 의미하는 것은? 정답: 포드(Pod)
-
책에서 소개된 실습용 데모 애플리케이션의 이름은? 정답: Kiada
-
왜 한 컨테이너 안에 여러 프로세스를 실행하는 것을 권장하지 않는가? 컨테이너 기술 자체가 단일 프로세스 관리에 최적화되어 설계되었으므로 여러 프로세스를 넣으면 관리가 어렵고 컨테이너의 장점인 격리와 자가 치유 기능을 활용하기 힘들기 때문
-
CRI의 도입이 쿠버네티스 생태계에 주는 이점은 무엇인가? 쿠버네티스 코드를 수정하지 않고도 도커 외에 다양한 컨테이너 런타임(CRI-O, runC 등)을 플러그인 형태로 사용할 수 있게 하여 유연성을 제공함
-
가상 머신과 비교했을 때 컨테이너의 리소스 효율성이 높은 이유는? 가상 머신은 각 인스턴스마다 전체 게스트 OS를 실행해야 하지만 컨테이너는 호스트 OS의 커널을 공유하며 프로세스 수준의 격리만 제공하기 때문임
3장
-
쿠버네티스에서 컨테이너를 직접 배포하지 않고 사용하는 최소 배포 단위는? a. Container b. Node c. Pod d. Cluster
-
클러스터 상태를 조회하거나 명령을 내릴 때 사용하는 CLI 도구의 이름은? a. docker b. gcloud c. kubectl d. kube-admin
-
Pod가 삭제되고 다시 생성되어도 유지되는 고정된 진입점(IP)을 제공하는 객체는? a. Deployment b. Service c. ReplicaSet d. Node
-
로컬 PC에서 단일 노드 클러스터를 실행하기 위해 커뮤니티에서 유지 관리하는 도구는? a. Docker Desktop b. Minikube c. GKE d. EKS
-
kubectl이 어느 클러스터와 통신할지 결정하는 정보를 담은 설정 파일의 이름은? kubeconfig -
Pod를 어느 워커 노드에서 실행할지 결정하는 프로세스를 무엇이라 하는가? 스케줄링(Scheduling)
-
복제본 개수를 늘려 시스템의 처리 능력을 향상시키는 과정을 무엇이라 하는가? 수평적 확장(Scaling out)
-
왜 사용자는 Pod를 직접 생성하기보다 Deployment를 통해 생성해야 하는가? Deployment는 자가 치유 기능을 제공하여 Pod가 실패할 경우 자동으로 새 인스턴스를 생성하고 원하는 복제본 수를 유지하며 선언적 관리를 가능하게 하기 때문
-
서비스 타입 중 LoadBalancer가 하는 역할과 클라우드 인프라와의 관계를 설명하시오 LoadBalancer 타입은 외부 클라이언트가 접근할 수 있는 공인 IP를 제공하며 쿠버네티스가 클라우드 인프라에 외부 로드 밸런서를 프로비저닝하도록 요청하여 연결함
-
Pod가 일시적(Ephemeral)이라는 특성이 서비스 주소 지정에 어떤 문제를 일으키며 쿠버네티스는 이를 어떻게 해결하는가? Pod는 언제든 종료되거나 교체될 수 있으며 그때마다 IP가 바뀌어 고정 주소로 접근하기 어려움 쿠버네티스는 Service 객체를 통해 Pod들이 바뀌어도 유지되는 정적 IP를 제공하여 이 문제를 해결함
4장
-
쿠버네티스 API 오브젝트의 필드 중 ‘원하는 상태’를 기술하는 섹션은? ① Metadata ② Spec ③ Status ④ Type Metadata
-
API 서버가 오브젝트를 반환할 때 사용하는 기본 데이터 포맷은? ① YAML ② XML ③ JSON ④ TOML
-
Event 오브젝트가 생성된 후 자동으로 삭제되는 시점은? ① 10분 뒤 ② 1시간 뒤 ③ 24시간 뒤 ④ 삭제되지 않음
-
Node 오브젝트의 상태 정보 중 디스크 공간 부족을 나타내는 조건은? ① MemoryPressure ② PIDPressure ③ DiskPressure ④ Ready
-
API 리소스와 오브젝트 유형에 대한 도움말과 필드 설명을 터미널에서 확인하는 명령은? 정답 : kubectl explain
-
오브젝트의 실제 상태를 보고하고 결과를 Status에 기록하는 컴포넌트의 명칭은? 정답 : 컨트롤러(Controller)
-
Node 오브젝트를 API 서버에 등록하고 관리하는 노드 상의 에이전트는? 정답 : 쿠블릿(Kubelet)
-
쿠버네티스에서 ‘선언적 모델’이 운영 효율성을 높이는 이유를 설명하시오. 답안 : 사용자가 개별적인 명령을 내리는 대신 최종 목표 상태(Spec)만 정의하면 시스템이 자가 치유와 상태 일치 루프를 통해 자동으로 그 상태를 유지하기 때문임
-
오브젝트의 Spec과 Status 섹션이 없는 경우는 어떤 경우이며 그 이유는 무엇인가? 답안 : Event 오브젝트와 같이 정적인 데이터만 포함하는 경우임 별도의 컨트롤러가 상태를 일치시킬 필요가 없으므로 원하는 상태와 실제 상태를 구분하지 않음
-
디버깅 시 Event 오브젝트를 확인해야 하는 이유는 무엇인가? 답안 : 컨트롤러가 상태를 일치시키는 과정에서 수행한 작업 내용이나 실패 원인(Warning)이 기록되어 있어 오브젝트가 왜 정상 상태가 아닌지 파악할 수 있기 때문임
5장
-
포드에 대한 설명으로 틀린 것은? ① 하나의 포드는 여러 노드에 걸쳐 실행될 수 있다. ② 포드 내의 컨테이너들은 네트워크 네임스페이스를 공유한다. ③ 포드는 쿠버네티스의 최소 배포 단위이다. ④ 전형적인 컨테이너는 하나의 프로세스만 실행한다.
-
포드의 상태(Phase) 중 컨테이너 이미지를 내려받거나 예약 중인 상태는? ① Running ② Succeeded ③ Pending ④ Failed
-
초기화 컨테이너에 대한 설명으로 옳은 것은? ① 메인 컨테이너와 동시에 시작된다. ② 모든 초기화 컨테이너는 순차적으로 실행되어야 한다. ③ 초기화 컨테이너가 실패해도 메인 컨테이너는 시작된다. ④ 포드당 하나만 정의할 수 있다.
-
실행 중인 컨테이너 안에서 명령어를 실행하기 위해 사용하는 도구는? ① kubectl logs ② kubectl exec ③ kubectl cp ④ kubectl attach
-
주 컨테이너 기능을 보완하기 위해 포드에 추가되는 보조 컨테이너 패턴의 명칭은? 정답: 사이드카
-
포드의 IP 주소와 실행 중인 노드 정보를 포함하여 상세 정보를 보여주는 명령어 옵션은? 정답: -o wide
-
로컬 컴퓨터의 파일을 실행 중인 컨테이너로 복사하는 명령어는? 정답: kubectl cp
-
왜 프런트엔드와 백엔드 프로세스를 하나의 포드가 아닌 별개의 포드로 분리해야 하는가? 답안: 두 프로세스는 확장 요구사항이 다를 수 있으며, 포드 단위로 수평 확장이 이루어지므로 각기 다른 노드에서 독립적으로 복제하고 관리하기 위함임
-
포드 내의 컨테이너들이 localhost를 통해 통신할 수 있는 이유는 무엇인가? 답안: 포드 내의 모든 컨테이너가 동일한 네트워크 네임스페이스와 IP 주소, 포트 공간을 공유하기 때문
-
초기화 컨테이너가 메인 컨테이너 실행 전 Precondition을 체크하는 용도로 사용되는 사례를 설명하시오. 답안: 메인 애플리케이션이 의존하는 외부 서비스가 준비될 때까지 시작을 지연시키거나, 보안 저장소에서 인증서를 미리 내려받는 등의 작업에 사용됨
6장
-
포드의 수명 주기 중 “노드에 할당되었지만 이미지를 내려받는 중”인 단계는? ① Running ② Pending ③ Succeeded ④ Unknown
-
컨테이너 재시작이 반복될 때 삽입되는 최대 지연 시간은? ① 1분 ② 5분 ③ 10분 ④ 지연 시간 없음
-
라이브니스 프로브 실패로 컨테이너가 강제 종료될 때, 프로세스가 반환하는 종료 코드(Exit Code)는? ① 0 ② 1 ③ 137 ④ 255
-
다음 중 라이브니스 프로브가 지원하지 않는 방식은? ① HTTP GET ② Exec ③ TCP Socket ④ UDP Ping
-
컨테이너 재시작 실패가 반복될 때 표시되는 포드 상태 메시지는? 정답: CrashLoopBackOff
-
포드 종료 시 안전한 마감을 위해 부여되는 시간 설정의 명칭은? 정답: terminationGracePeriodSeconds / 삭제 유예 기간
-
컨테이너 시작 직후 메인 프로세스와 비동기적으로 실행되는 훅은? 정답: Post-start hook
-
애플리케이션 초기화 시간이 매우 긴 경우, 왜 라이브니스 프로브만 사용하는 것보다 스타트업 프로브를 병용하는 것이 유리한가? 답안: 라이브니스 프로브만 쓰면 앱이 기동 중인데도 건강하지 않다고 판단해 무한 재시작에 빠질 수 있으나, 스타트업 프로브는 앱이 뜰 때까지 충분한 시간을 벌어주며 라이브니스를 비활성화하기 때문임
-
쿠버네티스에서 컨테이너를 종료하는 3단계 시퀀스를 설명하시오. 답안: 1) 설정된 경우 Pre-stop 훅 실행, 2) 메인 프로세스에 TERM 신호 전송, 3) 유예 기간 내 미종료 시 KILL 신호로 강제 종료
-
재시작 정책(restartPolicy)이 Never인 포드에서 포스트 시작 훅(Post-start hook)이 실패하면 포드 상태는 어떻게 되는가? 답안: 포드의 상태는
Completed로 표시됨
7장
-
포드의 수명 주기와 동일한 생애 주기를 가지며, 처음엔 비어있는 볼륨 타입은? ① hostPath ② nfs ③ emptyDir ④ gcePersistentDisk
-
emptyDir 볼륨을 디스크 대신 메모리(RAM)에 생성하도록 설정하는 필드는? ① storage: Memory ② medium: Memory ③ fsType: tmpfs ④ type: RAM
-
다음 중 hostPath 볼륨의 특징으로 틀린 것은? ① 노드 파일시스템의 특정 경로에 접근할 수 있다. ② 시스템 수준의 포드(로그 수집 등)에서 주로 사용한다. ③ 포드가 다른 노드로 이동해도 데이터를 유지할 수 있다. ④ 보안상 위험하므로 주의해서 사용해야 한다.
-
컨테이너 내부에서 볼륨의 특정 파일이나 하위 경로만 마운트하고 싶을 때 사용하는 필드는? ① subPath ② mountOnly ③ filePath ④ partial
-
볼륨을 읽기 전용으로 마운트하기 위해
volumeMounts섹션 아래 설정하는 필드명은? 정답: readOnly -
볼륨을 생성하고 설정하는 필드는
spec.volumes이고, 이를 컨테이너에 연결하는 필드는? 정답: volumeMounts -
Google 클라우드 환경에서 영구 저장소를 위해 사용하는 볼륨 타입 명칭은? 정답: gcePersistentDisk
-
**왜 데이터베이스 데이터를 저장할 때 hostPath보다 네트워크 부착 저장소(GCE PD 등)를 권장하는가? 답안: hostPath는 특정 노드의 로컬 디스크에 데이터를 저장하므로 포드가 다른 노드로 재스케줄링되면 기존 데이터에 접근할 수 없게 되지만, 네트워크 저장소는 노드 이동 시에도 함께 부착될 수 있어 영속성을 보장하기 때문임
-
사이드카 패턴에서 공유 볼륨이 수행하는 역할은 무엇인가? 답안: 주 컨테이너와 보조 컨테이너가 동일한 볼륨을 마운트하여 서로의 파일 시스템을 통해 데이터를 주고받거나 보완 작업을 수행할 수 있게 함
-
init 컨테이너와 emptyDir 볼륨을 조합하여 어떤 작업을 자동화할 수 있는가? 답안: 메인 컨테이너가 시작되기 전, init 컨테이너가 외부 소스(Git 등)에서 데이터를 받아 emptyDir 볼륨을 채워 넣어 메인 앱에 필요한 데이터를 미리 준비할 수 있음
8장
-
다음 중 여러 노드에서 동시에 읽기 전용으로 마운트할 수 있는 PersistentVolume의 접근 모드는? (p.378) ① ReadWriteOnce ② ReadOnlyMany ③ ReadWriteMany ④ WriteOnceMany
-
PVC가 삭제된 후 PV 오브젝트는 남지만 상태가 ‘Released’가 되어 재사용을 방지하는 기본 회수 정책은? (p.400) ① Delete ② Recycle ③ Retain ④ Archive
-
동적 프로비저닝을 사용할 때, 특정 볼륨 유형(예: pd-ssd)을 정의하기 위해 사용하는 오브젝트는? (p.450) ① PersistentVolume ② PersistentVolumeClaim ③ StorageClass ④ ConfigMap
-
클라우드 환경에서 블록 스토리지를 여러 노드에 동시에 Read/Write 모드로 연결할 수 없는 이유는? (p.350) ① 쿠버네티스 소프트웨어의 버그 ② 블록 스토리지 기술 자체의 물리적 제한 ③ etcd의 저장 용량 부족 ④ API 서버의 응답 지연
-
PVC 매니페스트에서 동적 프로비저닝을 사용하지 않고 기존 PV에 명시적으로 바인딩하기 위해 빈 문자열("")로 설정해야 하는 필드는? (정답: storageClassName, p.383)
-
PVC에서 특정 PV를 이름으로 직접 지칭하여 바인딩하고 싶을 때 사용하는 필드는? (정답: volumeName, p.383)
-
볼륨 바인딩을 포드가 실제 스케줄링될 때까지 지연시키는 StorageClass의 설정 옵션은? (정답: WaitForFirstConsumer, p.447, p.448)
-
왜 개발자가 포드 매니페스트에 직접 NFS 주소나 GCE PD 명칭을 적으면 안 되는지 설명하시오. (답안: 매니페스트가 특정 클러스터 인프라에 종속되어 다른 환경(다른 클라우드나 온프레미스)으로 옮길 때마다 수동으로 수정해야 하므로 이식성이 떨어지기 때문임. p.360, p.361)
-
동적 프로비저닝(Dynamic Provisioning)이 관리자의 부담을 줄여주는 이유를 설명하시오. (답안: 관리자가 수많은 PV를 미리 생성해둘 필요 없이, 사용자가 PVC를 생성할 때 시스템이 실시간으로 실제 저장소를 생성하고 PV를 자동으로 등록해주기 때문임. p.428, p.429, p.462)
-
PV의 회수 정책이 ‘Retain’인 경우, 다른 사용자가 해당 PV를 다시 사용하기 위해 관리자가 거쳐야 하는 과정은? (답안: PV 오브젝트를 수동으로 삭제하고 재생성하거나, PV 매니페스트에서 claimRef 정보를 제거하여 상태를 ‘Available’로 되돌려야 함. p.396, p.397)
9장
-
컨테이너 이미지의 ENTRYPOINT를 오버라이드하기 위해 포드 spec에서 사용하는 필드는? ① args ② command ③ env ④ image
-
다음 중 Downward API를 통해 주입할 수 있는 정보가 아닌 것은? ① 포드의 IP ② 노드의 이름 ③ 포드의 CPU 제한 ④ 클러스터의 전체 노드 수
-
ConfigMap 변경 시 볼륨으로 마운트된 파일들이 한꺼번에 업데이트되도록 돕는 기술적 요소는? ① 하드 링크 ② 심볼릭 링크 ③ etcd 스냅샷 ④ 컨테이너 재시작
-
Secret 볼륨에 마운트된 데이터가 저장되는 물리적 위치는? ① 워커 노드의 SSD ② etcd 저장소 ③ 메모리(tmpfs) ④ 네트워크 스토리지
-
Secret 매니페스트 작성 시 인코딩되지 않은 문자열을 직접 입력할 수 있는 필드명은? (정답: stringData,)
-
설정값이 없을 때도 컨테이너가 정상 기동되도록 설정 참조 시 추가하는 필드는? (정답: optional,)
-
여러 개의 ConfigMap과 Secret을 하나의 디렉터리에 마운트할 때 사용하는 볼륨 타입은? (정답: projected,)
-
왜 민감한 데이터를 환경 변수(env)보다 볼륨 마운트 방식으로 전달하는 것이 더 안전한가? (답안: 환경 변수는 로그에 노출되거나
kubectl describe명령으로 쉽게 확인될 위험이 크지만, 볼륨 마운트 방식은 파일 권한을 제어할 수 있고 메모리에만 존재하도록(tmpfs) 설정할 수 있기 때문임) -
Downward API가 ‘Kubernetes-agnostic’한 설계인 이유는 무엇인가? (답안: 애플리케이션이 자신의 메타데이터를 얻기 위해 쿠버네티스 API 서버에 직접 요청을 보낼 필요 없이, 익숙한 환경 변수나 파일 시스템을 통해 정보를 얻을 수 있게 해주기 때문임)
-
Immutable ConfigMap을 사용했을 때 얻을 수 있는 운영상의 이점을 설명하시오. (답안: 실수로 설정이 변경되는 것을 방지하여 안정성을 높이고, Kubelet이 API 서버의 변경 사항을 계속 모니터링할 필요가 없어 대규모 클러스터에서 API 서버의 부하를 줄여줌)
10장
-
다음 중 네임스페이스에 속하지 않는(Cluster-scoped) 리소스는? (p.519) ① Pod ② ConfigMap ③ Node ④ Event
-
레이블 셀렉터 중 ‘특정 레이블 키의 존재 여부’만으로 객체를 찾는 방식은? (p.567) ① Equality-based ② Field selector ③ Set-based ④ Annotation
-
네임스페이스 삭제 시 일어나는 현상으로 옳은 것은? (p.535) ① 네임스페이스 객체만 삭제되고 내부 포드는 유지된다. ② 네임스페이스 내부의 모든 객체가 자동으로 삭제된다. ③ 삭제 명령은 즉시 완료되며 취소할 수 없다. ④ 서비스(Service) 객체는 수동으로 먼저 지워야 한다.
-
어노테이션(Annotation)의 특징이 아닌 것은? (p.591-592) ① 레이블보다 큰 용량의 데이터를 담을 수 있다. ② 객체를 필터링하는 셀렉터의 조건으로 사용할 수 있다. ③ 도구들이 객체의 상태 정보를 기록하는 용도로 사용한다. ④ 문자열 값 내에 공백이나 특수문자를 포함할 수 있다.
-
kubectl명령 실행 시 매번 네임스페이스를 지정하지 않도록 현재 컨텍스트를 수정하는 명령 옵션은? (정답: —current —namespace, p.530) -
포드 매니페스트 내에서 특정 레이블을 가진 노드에만 포드를 실행하도록 강제하는 필드명은? (정답: nodeSelector, p.582)
-
레이블 값의 최대 길이는 몇 자인가? (정답: 63자, p.591)
-
왜 개발 환경과 운영 환경을 네임스페이스만으로 분리하는 것을 권장하지 않는가? (답안: 네임스페이스는 논리적 분리와 이름 충돌 방지 기능만 제공할 뿐, 물리적인 노드 자원을 공유하므로 런타임 격리가 완벽하지 않아 운영 환경의 안정성을 해칠 수 있기 때문임. p.534-535)
-
레이블 셀렉터의 두 가지 유형(Equality-based, Set-based)의 차이점을 설명하시오. (답안: 등치 기반은 값이 같은지 혹은 다른지만 비교할 수 있으나, 집합 기반은 특정 값 목록에 포함되는지(in) 또는 레이블 키 자체가 존재하는지 등을 따질 수 있어 더 정교한 쿼리가 가능함. p.566-567)
-
쿠버네티스 API가 진화하는 과정에서 어노테이션이 수행하는 역할은 무엇인가? (답안: 정식 API 필드를 추가하기 전 신기능을 실험하는 임시 저장소 역할을 하며, 실제 운영에서 효용성이 입증되면 이후 정식 필드로 승격되고 어노테이션은 제거됨. p.593)
11장
-
서비스 유형 중 외부 클라우드 인프라에 로드 밸런서 생성을 요청하는 것은? (p.639) ① ClusterIP ② NodePort ③ LoadBalancer ④ ExternalName
-
서비스의 ClusterIP에 대해 ping을 보냈을 때 발생하는 현상은? (p.627) ① 포드로 전달된다. ② 즉시 응답이 온다. ③ 응답이 오지 않는다. ④ 에러 메시지가 출력된다.
-
준비성 프로브(Readiness Probe)가 실패한 포드에 대해 서비스가 취하는 행동은? (p.677) ① 컨테이너를 재시작한다. ② 포드를 삭제한다. ③ 엔드포인트 목록에서 제외한다. ④ 노드를 교체한다.
-
헤드리스 서비스(Headless Service)를 만들기 위해 설정해야 하는 값은? (p.662) ① type: Headless ② clusterIP: None ③ selector: None ④ ports: []
-
서비스가 트래픽을 전달할 대상 포드들을 결정하기 위해 사용하는 필드의 명칭은? (정답: 레이블 셀렉터 / selector, p.603)
-
클러스터 DNS에서 서비스 이름이 해석되는 기본 도메인 접미사는? (정답: cluster.local, p.620)
-
서비스가 참조하는 실제 포드들의 IP 주소와 포트 정보를 담고 있는 보조 객체의 이름은? (정답: Endpoints / EndpointSlice, p.644, p.648)
-
왜 클라이언트는 포드 IP에 직접 연결하지 않고 서비스 IP를 통해 연결해야 하는가? (답안: 포드는 언제든 소멸하고 재생성될 수 있어 IP 주소가 계속 바뀌지만, 서비스 IP는 고정되어 있어 클라이언트가 주소 변경에 신경 쓰지 않고 안정적으로 통신할 수 있기 때문임. p.599, p.602)
-
준비성 프로브(Readiness Probe)에서 외부 종속성(예: 외부 데이터베이스)을 체크하는 것이 권장되지 않는 이유는? (답안: 일시적인 네트워크 지연 등으로 외부 서비스 연결이 끊겼을 때, 포드 자체는 정상임에도 불구하고 모든 포드가 서비스에서 제외되어 전체 시스템 장애로 이어질 수 있기 때문임. p.696, p.697)
-
스테이트풀셋(StatefulSet)에서 일반 서비스와 헤드리스 서비스를 함께 사용하는 이유는 무엇인가? (답안: 일반 서비스는 클라이언트에게 단일 진입점을 제공하기 위함이고, 헤드리스 서비스는 분산 시스템의 멤버(포드)들이 서로의 개별 주소를 DNS를 통해 찾기(Peer Discovery) 위함임. p.880, p.911)
12장
-
다음 중 인그레스가 서비스(Service) 오브젝트와 비교했을 때 갖는 가장 큰 장점은? (p.697) ① 포드 간 통신 속도 향상 ② 각 서비스마다 공인 IP를 할당할 필요 없음 ③ 내부 네트워크 격리 강화 ④ 데이터베이스 복제 자동화
-
인그레스 객체 생성을 감시하고 리버스 프록시 설정을 갱신하는 컴포넌트는? (p.703) ① Kube-Proxy ② API Server ③ Ingress Controller ④ Scheduler
-
인그레스에서 특정 호스트 이름에 대해 TLS 인증서를 적용할 때 참조하는 객체는? (p.727) ① ConfigMap ② Secret ③ PersistentVolume ④ ServiceAccount
-
다음 중 인그레스가 지원하는 경로 매칭 타입(pathType)이 아닌 것은? (p.720) ① Exact ② Prefix ③ Regex ④ ImplementationSpecific (교재 12.1 표 기반)
-
트래픽 요청이 인그레스에 정의된 어떤 규칙과도 일치하지 않을 때 트래픽을 처리하는 서비스의 명칭은? (정답: 디폴트 백엔드 / Default Backend, p.723)
-
클러스터에 여러 인그레스 컨트롤러가 있을 때, 특정 인그레스가 어떤 컨트롤러에 의해 처리될지 명시하는 객체는? (정답: IngressClass, p.736)
-
서비스가 인그레스를 통해 노출될 때, 서비스 객체의
type은 일반적으로 무엇으로 설정되는가? (정답: ClusterIP, p.701) -
왜 인그레스를 통한 TLS 종단(Termination) 처리가 개발자에게 편리함을 주는가? (답안: 개별 애플리케이션 포드마다 복잡한 TLS 인증서 관리 및 복호화 로직을 구현할 필요 없이, 인그레스 프록시에서 이를 일괄 처리해주기 때문임. p.728)
-
인그레스 컨트롤러와 리버스 프록시의 관계를 설명하시오. (답안: 컨트롤러는 API 서버를 모니터링하여 인그레스 규칙의 변경사항을 감지하는 제어부 역할을 하며, 리버스 프록시는 컨트롤러에 의해 생성된 설정에 따라 실제 트래픽을 배분하는 실행부 역할을 함. p.703)
-
쿠키 기반 세션 고정(Session Affinity) 기능을 인그레스에서 설정할 때 왜 어노테이션(Annotation)을 자주 사용하는가? (답안: 쿠버네티스 인그레스 API 표준에는 L7 세부 설정 필드가 부족하므로, Nginx나 GKE 등 각 인그레스 컨트롤러 구현체마다 제공하는 고유 기능을 활성화하기 위해 어노테이션을 활용함. p.729-730)
13장
-
레플리카셋의 복제본 수(replicas)를 3에서 5로 변경했을 때 일어나는 일은? (p.758-759) ① 기존 포드 3개가 모두 재시작된다. ② 새로운 포드 2개가 추가로 생성된다. ③ 아무 일도 일어나지 않는다. ④ 기존 포드가 삭제되고 5개가 새로 생성된다.
-
레플리카셋이 삭제될 때 종속된 포드들을 함께 삭제하는 쿠버네티스의 메커니즘은? (p.757) ① 오토 스케일링 ② 가비지 컬렉션 ③ 스케줄링 ④ 롤링 업데이트
-
레플리카셋 스케일 다운 시 가장 먼저 삭제되는 포드는? (p.761) ① 가장 오래 실행된 포드 ② 준비 상태(Ready)인 포드 ③ 노드에 아직 할당되지 않은 포드 ④ 이름이 가장 빠른 포드
-
포드 매니페스트에서 이 포드를 제어하는 레플리카셋 정보를 확인할 수 있는 필드는? (p.755-756) ① metadata.labels ② metadata.ownerReferences ③ spec.template ④ status.phase
-
레플리카셋 컨트롤러가 상태를 일치시키기 위해 관찰-비교-조정 과정을 반복하는 루프의 명칭은? (정답: 조정 루프 / Reconciliation Loop, p.771-772)
-
레플리카셋 객체는 삭제하되 관리하던 포드들은 클러스터에 남겨두고 싶을 때 사용하는 옵션은? (정답: —cascade=orphan, p.790)
-
레플리카셋의 구성 요소 중 생성 후에는 절대 변경할 수 없는 필드는? (정답: 레이블 셀렉터 / selector, p.766)
-
레플리카셋의 ‘포드 템플릿’을 수정했을 때, 왜 현재 실행 중인 포드들은 즉시 바뀌지 않는지 설명하시오. (답안: 레플리카셋 컨트롤러는 포드 수를 맞추는 역할만 할 뿐, 실행 중인 포드의 내용을 수정하는 기능은 없기 때문임. 템플릿은 오직 포드 수가 부족하여 ‘새로 만들 때’만 사용되는 쿠키 커터와 같음. p.768, p.792)
-
노드 장애 상황에서 레플리카셋이 포드 가용성을 보장하는 과정을 설명하시오. (답안: 노드 장애로 인해 포드가
Terminating상태가 되거나 응답이 없으면, 레플리카셋 컨트롤러는 실제 포드 수가 원하는 수보다 적음을 감지하고 건강한 다른 노드에 새 포드 인스턴스를 생성함. p.780-781) -
특정 포드를 레플리카셋의 관리 범위에서 벗어나게 하여 디버깅하고 싶을 때 어떤 조치를 취해야 하는가? (답안: 해당 포드의 레이블을 변경하여 레플리카셋의 레이블 셀렉터와 일치하지 않게 만들면 됨. 그러면 레플리카셋은 포드 하나가 부족하다고 판단해 새 포드를 만들고, 기존 포드는 독립적인 객체가 됨. p.784-785)
14장
-
디플로이먼트가 포드를 관리하기 위해 내부적으로 자동으로 생성하고 제어하는 객체는? ① Pod ② Service ③ ReplicaSet ④ Namespace
-
디플로이먼트의 업데이트 전략 중 서비스 가동 중지 시간이 발생하는 전략은? ① RollingUpdate ② Recreate ③ Canary ④ Blue/Green
-
업데이트 중 잘못된 버전임을 감지했을 때, 가장 빠르게 이전 버전으로 되돌리는 명령은? ① kubectl delete ② kubectl apply ③ kubectl rollout undo ④ kubectl edit
-
디플로이먼트가 여러 레플리카셋을 구분하기 위해 사용하는 특수 레이블은? ① app ② version ③ pod-template-hash ④ revision
-
포드가 생성된 후 실제 트래픽을 받을 수 있는 ‘Available’ 상태가 되기까지 기다려야 하는 최소 시간을 설정하는 필드는? (정답: minReadySeconds,)
-
디플로이먼트가 보관하는 이전 실행 이력의 최대 개수를 정의하는 필드는? (정답: revisionHistoryLimit,)
-
배포 진행 상태(진행 중, 완료 등)를 확인하기 위해 사용하는 kubectl 명령은? (정답: kubectl rollout status,)
-
왜 실무에서는 레플리카셋을 직접 사용하기보다 디플로이먼트를 사용하는 것이 권장되는가? (답안: 레플리카셋은 포드 복제본의 수를 유지하는 기능만 있지만, 디플로이먼트는 포드 템플릿 수정을 통한 선언적 업데이트, 롤백, 배포 전략 설정 등 애플리케이션 수명 주기 관리에 필수적인 기능을 자동화해주기 때문임)
-
RollingUpdate 전략에서 maxSurge와 maxUnavailable 필드가 수행하는 역할은 무엇인가? (답안: maxSurge는 업데이트 중 의도한 복제본 수보다 얼마나 더 많은 포드를 동시에 띄울 수 있는지 결정하고, maxUnavailable은 업데이트 중 동시에 삭제되어 사용할 수 없는 상태가 되어도 되는 포드의 최대치를 결정하여 배포 속도와 가용성 사이의 균형을 조절함)
-
새 버전의 포드가 기동 직후 크래시(Crash)가 발생할 경우, 디플로이먼트의 롤아웃이 중단되는 매커니즘을 설명하시오. (답안: 새 포드가 준비성 프로브를 통과하지 못하면 Ready 상태가 되지 않고, 따라서
minReadySeconds를 충족하지 못해 Available 상태로 전환되지 않음. 디플로이먼트 컨트롤러는 새 포드가 Available해질 때까지 다음 단계의 업데이트를 진행하지 않으므로 전체 롤아웃이 중단됨)
15장
-
스테이트풀셋 포드들에게 개별적인 DNS 주소를 부여하기 위해 반드시 함께 생성해야 하는 객체는? (p.850-851) ① LoadBalancer Service ② Headless Service ③ Ingress ④ ConfigMap
-
스테이트풀셋의 기본 포드 관리 정책(
podManagementPolicy)은? (p.905) ① Parallel ② OrderedReady ③ RollingUpdate ④ OnDelete -
스테이트풀셋을 스케일 다운할 때 가장 먼저 삭제되는 포드는? (p.893) ① 0번 포드 ② 가장 최근에 생성된(가장 높은 번호) 포드 ③ 가장 오래된 포드 ④ 랜덤하게 선택된 포드
-
스테이트풀셋의 업데이트 전략 중 특정 인덱스 이상의 포드만 먼저 업데이트하도록 제어하는 필드는? (p.922) ① maxSurge ② maxUnavailable ③ partition ④ revisionHistoryLimit
-
스테이트풀셋에서 각 포드마다 독립적인 PVC를 자동으로 생성하기 위해 spec에 정의하는 섹션 이름은? (정답: volumeClaimTemplates, p.856)
-
한 번에 최대 하나의 포드만 실행되도록 보장하여 데이터 오염을 방지하는 원칙을 무엇이라 하는가? (정답: at-most-one semantics, p.880)
-
스테이트풀셋의 업데이트 이력을 스냅샷 형태로 저장하는 API 객체의 명칭은? (정답: ControllerRevision, p.920)
-
왜 스테이트풀셋은 스케일 다운 시 PVC를 자동으로 삭제하지 않는가? (답안: 데이터는 앱의 가장 중요한 자산이므로, 실수로 포드 수를 줄였을 때 데이터까지 영구적으로 소실되는 것을 방지하기 위해 사용자가 직접 PVC를 삭제하도록 설계됨. p.894)
-
분산 시스템에서 ‘피어 디스커버리(Peer Discovery)‘를 위해 스테이트풀셋과 헤드리스 서비스를 조합하는 이유를 설명하시오. (답안: 각 노드가 서로의 존재를 알아야 하므로 Cluster IP를 통한 추상화 대신, 헤드리스 서비스가 제공하는 개별 포드의 DNS 고유 주소를 사용하여 서로를 식별하고 통신하기 위함임. p.868, p.870)
-
노드 장애로 인해 포드 상태가 ‘Unknown’이 되었을 때, 스테이트풀셋 컨트롤러가 즉시 새 포드를 만들지 않는 이유는 무엇인가? (답안: 네트워크 일시 단절일 경우 기존 포드가 여전히 실행 중일 수 있으며, 새 포드를 즉시 만들면 동일한 정체성과 볼륨을 가진 두 개의 포드가 동시에 실행되어 데이터가 오염될 위험이 있기 때문임. p.884)
16장
-
다음 중 데몬셋이 포드를 생성하는 기준은? (p.946, p.949) ① 사용자가 지정한 replicas 수 ② 클러스터 내의 전체 노드 수 ③ 컨트롤 플레인 노드의 수 ④ 가용 가능한 CPU 용량
-
데몬셋 포드를 마스터 노드에 배포하기 위해 필요한 설정은? (p.962) ① nodeSelector ② PriorityClass ③ Tolerations ④ hostNetwork
-
데몬셋의 업데이트 전략 중 수동으로 포드를 삭제해야 새 버전이 반영되는 방식은? (p.979) ① RollingUpdate ② Recreate ③ OnDelete ④ Parallel
-
시스템에 자원이 부족할 때 데몬셋 포드가 퇴출당하지 않도록 설정하는 필드는? (p.992) ① schedulerName ② priorityClassName ③ hostPath ④ runtimeClassName
-
데몬셋 포드가 호스트 노드의 네트워크 환경을 그대로 사용하여 노드 IP로 통신하게 만드는 필드는? (정답: hostNetwork, p.999)
-
클라이언트 포드가 같은 노드에 있는 데몬 포드와만 통신하도록 서비스에 설정하는 정책은? (정답: internalTrafficPolicy: Local, p.1002)
-
특정 노드(예: GPU 노드)에만 데몬셋을 배포하기 위해 사용하는 PodSpec 내의 필드는? (정답: nodeSelector, p.967)
-
왜 데몬셋 포드에 system-node-critical****과 같은 높은 우선순위를 부여해야 하는가? (답안: 에이전트 포드는 노드 운영에 필수적인 서비스를 제공하므로, 자원이 부족한 상황에서 일반 워크로드 포드 때문에 퇴출되어 시스템 전체의 가시성이나 네트워크 기능이 마비되는 것을 방지하기 위함임. p.993)
-
데몬셋 컨트롤러가 노드 추가를 감지했을 때 수행하는 작업을 설명하시오. (답안: 새 노드가 추가되면 컨트롤러는 해당 노드에 데몬셋의 레이블 셀렉터에 일치하는 포드가 없음을 감지하고, 노드 어피니티가 설정된 새 포드 인스턴스를 해당 노드에 생성함. p.949, p.965)
-
hostPath 볼륨을 사용하는 데몬셋 포드의 보안상 위험성에 대해 설명하시오. (답안: 호스트 노드의 파일시스템에 직접 접근할 수 있으므로, 해당 컨테이너를 장악한 공격자가 노드의 중요한 설정 파일을 수정하거나 노드 전체의 프로세스를 조작할 위험이 있음. p.988)
17장
-
Job 리소스의 Pod 템플릿에서 사용할 수 없는
restartPolicy는? (p.1018) ① OnFailure ② Never ③ Always ④ 모두 사용 가능 -
Job이 5번 성공해야 하고 동시에 2개씩 실행되게 하려면 설정해야 할 값은? (p.1033) ① completions: 2, parallelism: 5 ② completions: 5, parallelism: 2 ③ replicas: 5 ④ replicas: 2
-
Indexed Job에서 각 Pod에 부여된 인덱스 번호를 확인할 수 있는 환경 변수는? (p.1065) ① POD_INDEX ② JOB_INDEX ③ JOB_COMPLETION_INDEX ④ COMPLETION_ID
-
CronJob에서 스케줄을 “매분” 실행되도록 설정하는 값은? (p.1095) ①
* * * * *②0 * * * *③@daily④1 * * * * -
Job이 무한히 실패하는 것을 방지하기 위해 전체 실행 시간을 제한하는 필드는? (정답: activeDeadlineSeconds, p.1047)
-
CronJob이 생성한 이전 Job들의 이력을 제한하기 위해 설정하는 필드는? (정답: successfulJobsHistoryLimit, p.1105)
-
Job 컨트롤러가 Pod를 생성할 때 자동으로 부여하는 레이블 이름은? (정답: job-name, p.1022)
-
왜 Job 환경에서 restartPolicy: Always****를 사용할 수 없는지 설명하시오. (답안:
Always는 프로세스가 성공적으로 종료되어도 다시 시작시키므로, 작업의 ‘완료’를 목표로 하는 Job의 논리와 충돌하기 때문임. p.1018) -
Indexed Job이 대규모 데이터 처리 시 갖는 장점은 무엇인가? (답안: 각 Pod에 고유한 인덱스가 부여되므로, 이를 활용해 전체 데이터셋 중 자신이 처리해야 할 특정 부분(정수 기반 파티션)을 식별하여 중복 없이 분산 처리할 수 있음. p.1051, p.1061)
-
노드 장애 발생 시 Job이 생성한 Pod는 어떻게 처리되는가? (답안: Job 컨트롤러는 Pod가 실행 중인 노드가 실패하여 Pod가 사라지면, 성공 횟수를 맞추기 위해 다른 건강한 노드에 새 Pod 인스턴스를 스케줄링하여 작업을 이어나감. p.1011, p.1106)