구성 퀴즈

이 퀴즈는 Kubernetes의 구성 관련 개념인 ConfigMap, Secret, 환경 변수, 리소스 요청 및 제한 등에 대한 이해도를 테스트합니다.

객관식 문제

  1. Kubernetes에서 민감한 정보를 저장하기 위해 사용하는 리소스는 무엇인가요?

    • A) ConfigMap

    • B) Secret

    • C) Volume

    • D) Deployment

chevron-right정답 보기hashtag

정답: B) Secret

설명: Secret은 비밀번호, OAuth 토큰, SSH 키와 같은 민감한 정보를 저장하기 위한 Kubernetes 리소스입니다. Secret은 기본적으로 base64로 인코딩되어 저장되며, 포드에 파일이나 환경 변수로 마운트할 수 있습니다. ConfigMap은 민감하지 않은 구성 데이터를 저장하는 데 사용됩니다.

  1. Kubernetes에서 ConfigMap의 주요 목적은 무엇인가요?

    • A) 컨테이너 이미지 저장

    • B) 애플리케이션 구성 데이터 저장

    • C) 네트워크 정책 정의

    • D) 포드 스케줄링 제어

chevron-right정답 보기hashtag

정답: B) 애플리케이션 구성 데이터 저장

설명: ConfigMap은 키-값 쌍 형태로 구성 데이터를 저장하는 Kubernetes 리소스입니다. 이를 통해 애플리케이션 코드와 구성을 분리할 수 있으며, 환경별로 다른 구성을 사용할 수 있습니다. ConfigMap은 환경 변수, 명령줄 인수 또는 구성 파일로 컨테이너에 마운트할 수 있습니다.

  1. Kubernetes에서 포드의 리소스 요청(requests)과 제한(limits)의 차이점은 무엇인가요?

    • A) 요청은 포드가 사용할 수 있는 최소 리소스, 제한은 최대 리소스

    • B) 요청은 포드가 사용할 수 있는 최대 리소스, 제한은 최소 리소스

    • C) 요청은 스케줄링에만 사용되고, 제한은 런타임에만 적용됨

    • D) 요청은 CPU에만 적용되고, 제한은 메모리에만 적용됨

chevron-right정답 보기hashtag

정답: A) 요청은 포드가 사용할 수 있는 최소 리소스, 제한은 최대 리소스

설명: 리소스 요청(requests)은 포드가 보장받을 수 있는 최소 리소스 양을 지정하며, 스케줄러가 포드를 노드에 배치할 때 이 값을 사용합니다. 리소스 제한(limits)은 포드가 사용할 수 있는 최대 리소스 양을 지정하며, 이 값을 초과하면 포드가 제한되거나(CPU의 경우) 종료될 수 있습니다(메모리의 경우).

  1. Kubernetes에서 Secret 데이터를 포드에 제공하는 방법이 아닌 것은 무엇인가요?

    • A) 환경 변수로 제공

    • B) 볼륨으로 마운트

    • C) 이미지 레지스트리 자격 증명으로 사용

    • D) 네트워크 인터페이스로 제공

chevron-right정답 보기hashtag

정답: D) 네트워크 인터페이스로 제공

설명: Kubernetes에서 Secret 데이터를 포드에 제공하는 방법은 환경 변수로 제공, 볼륨으로 마운트, 이미지 레지스트리 자격 증명으로 사용하는 방법이 있습니다. 네트워크 인터페이스를 통해 Secret을 제공하는 방법은 Kubernetes에서 지원하지 않습니다.

  1. Kubernetes에서 ConfigMap을 생성하는 방법이 아닌 것은 무엇인가요?

    • A) 리터럴 값에서 생성

    • B) 파일에서 생성

    • C) 디렉토리에서 생성

    • D) 네트워크 요청에서 생성

chevron-right정답 보기hashtag

정답: D) 네트워크 요청에서 생성

설명: Kubernetes에서 ConfigMap을 생성하는 방법은 리터럴 값에서 생성(--from-literal), 파일에서 생성(--from-file), 디렉토리에서 생성(--from-file=<디렉토리>)이 있습니다. 네트워크 요청에서 직접 ConfigMap을 생성하는 방법은 Kubernetes에서 기본적으로 제공하지 않습니다.

  1. Kubernetes에서 포드의 서비스 계정을 지정하는 필드는 무엇인가요?

    • A) spec.serviceAccount

    • B) spec.serviceAccountName

    • C) metadata.serviceAccount

    • D) spec.account

chevron-right정답 보기hashtag

정답: B) spec.serviceAccountName

설명: Kubernetes에서 포드의 서비스 계정은 spec.serviceAccountName 필드를 통해 지정합니다. 이 필드를 통해 포드가 사용할 서비스 계정을 지정할 수 있으며, 지정하지 않으면 네임스페이스의 기본 서비스 계정이 사용됩니다.

  1. Kubernetes에서 Secret 데이터의 기본 인코딩 방식은 무엇인가요?

    • A) AES-256

    • B) Base64

    • C) SHA-256

    • D) 인코딩하지 않음

chevron-right정답 보기hashtag

정답: B) Base64

설명: Kubernetes에서 Secret 데이터는 기본적으로 Base64로 인코딩되어 저장됩니다. 이는 단순한 인코딩일 뿐 암호화가 아니므로, 추가적인 보안 조치가 필요합니다. Kubernetes 1.13부터는 etcd에 저장된 Secret 데이터를 암호화하는 기능을 제공합니다.

  1. Kubernetes에서 환경 변수를 설정하는 방법 중 가장 권장되지 않는 것은 무엇인가요?

    • A) ConfigMap에서 가져오기

    • B) Secret에서 가져오기

    • C) 포드 스펙에 직접 하드코딩

    • D) Downward API를 통해 가져오기

chevron-right정답 보기hashtag

정답: C) 포드 스펙에 직접 하드코딩

설명: 환경 변수를 포드 스펙에 직접 하드코딩하는 것은 구성과 코드를 분리하는 원칙에 위배되므로 권장되지 않습니다. ConfigMap이나 Secret을 사용하여 환경 변수를 관리하면 애플리케이션 코드를 변경하지 않고도 구성을 변경할 수 있으며, Downward API를 사용하면 포드의 메타데이터나 리소스 정보를 환경 변수로 제공할 수 있습니다.

  1. Kubernetes에서 포드의 QoS(Quality of Service) 클래스 중, 모든 컨테이너에 리소스 요청과 제한이 설정되어 있고, 요청과 제한이 동일한 경우의 QoS 클래스는 무엇인가요?

    • A) Guaranteed

    • B) Burstable

    • C) BestEffort

    • D) Critical

chevron-right정답 보기hashtag

정답: A) Guaranteed

설명: Guaranteed QoS 클래스는 포드의 모든 컨테이너에 리소스 요청과 제한이 설정되어 있고, 요청과 제한이 동일한 경우에 할당됩니다. 이 클래스의 포드는 리소스 부족 시 가장 마지막에 종료됩니다. Burstable은 일부 컨테이너에만 요청과 제한이 설정되어 있거나, 요청과 제한이 다른 경우에 할당되며, BestEffort는 요청과 제한이 모두 설정되지 않은 경우에 할당됩니다.

  1. Kubernetes에서 ConfigMap이나 Secret의 변경 사항이 포드에 자동으로 반영되는 경우는 언제인가요?

    • A) 항상 자동으로 반영됨

    • B) 볼륨으로 마운트된 경우에만 자동으로 반영됨

    • C) 환경 변수로 사용된 경우에만 자동으로 반영됨

    • D) 자동으로 반영되지 않고 포드를 재시작해야 함

chevron-right정답 보기hashtag

정답: B) 볼륨으로 마운트된 경우에만 자동으로 반영됨

설명: ConfigMap이나 Secret이 볼륨으로 마운트된 경우, Kubernetes는 주기적으로(기본값은 약 1분) 마운트된 파일을 업데이트합니다. 그러나 환경 변수로 사용된 경우에는 포드가 생성될 때 한 번만 설정되므로, 변경 사항을 반영하려면 포드를 재시작해야 합니다. 이는 환경 변수가 프로세스의 시작 시점에 설정되기 때문입니다.

실습 문제

  1. ConfigMap과 Secret을 생성하고, 이를 포드에 환경 변수와 볼륨으로 마운트하는 방법을 설명하세요.

chevron-right정답 보기hashtag

정답:

  1. ConfigMap 생성:

  1. Secret 생성:

  1. 환경 변수와 볼륨으로 마운트하는 포드 생성:

  1. 리소스 적용:

  1. 환경 변수 확인:

  1. 마운트된 볼륨 확인:

  1. 파일 내용 확인:

  1. 포드에 리소스 요청과 제한을 설정하고, QoS 클래스를 확인하는 방법을 설명하세요.

chevron-right정답 보기hashtag

정답:

  1. 다양한 QoS 클래스를 가진 포드 생성:

Guaranteed QoS 포드:

Burstable QoS 포드:

BestEffort QoS 포드:

  1. 포드 생성:

  1. QoS 클래스 확인:

  1. 포드 상세 정보 확인:

  1. 리소스 사용량 모니터링:

QoS 클래스 결정 규칙:

  • Guaranteed: 모든 컨테이너에 리소스 요청과 제한이 설정되어 있고, 요청과 제한이 동일한 경우

  • Burstable: 적어도 하나의 컨테이너에 리소스 요청이 설정되어 있지만, Guaranteed 조건을 충족하지 않는 경우

  • BestEffort: 모든 컨테이너에 리소스 요청과 제한이 설정되지 않은 경우

  1. Downward API를 사용하여 포드의 메타데이터와 리소스 정보를 컨테이너에 제공하는 방법을 설명하세요.

chevron-right정답 보기hashtag

정답:

  1. Downward API를 사용하는 포드 생성:

  1. 포드 생성:

  1. 환경 변수 확인:

  1. 볼륨 파일 확인:

Downward API 사용 가능한 필드:

환경 변수로 사용 가능한 필드:

  • metadata.name - 포드 이름

  • metadata.namespace - 포드 네임스페이스

  • metadata.uid - 포드 UID

  • metadata.labels['<KEY>'] - 포드 레이블 값

  • metadata.annotations['<KEY>'] - 포드 어노테이션 값

  • status.podIP - 포드 IP 주소

  • spec.nodeName - 포드가 실행 중인 노드 이름

  • spec.serviceAccountName - 포드의 서비스 계정 이름

  • status.hostIP - 포드가 실행 중인 노드 IP 주소

리소스 필드:

  • requests.cpu - CPU 요청

  • limits.cpu - CPU 제한

  • requests.memory - 메모리 요청

  • limits.memory - 메모리 제한

마지막 업데이트