본문 바로가기
Kubernetes/Cert

[CKA] 스토리지 유형

by lumination 2025. 2. 10.

1) Persistent Volumes 문제

문제

List all persistent volumes sorted by capacity, saving the full kubectl output to /opt/KUCC00102/volume_list. Use kubectl's own functionality for sorting the output, and do not manipulate it any further.

풀이

  • 클러스터 내의 모든 Persistent Volumes를 가져와서 저장 용량을 기준으로 정렬된 목록을 출력한다.
# PersistentVolumes을 용량별로 정렬해서 조회
kubectl get pv --sort-by=.spec.capacity.storage

 

2) emptyDir 문제

문제

Create a pod as follows:

  • Name: non-persistent-redis
  • container Image: redis
  • Volume with name: cache-control
  • Mount path: /data/redis
  • The pod should launch in the staging namespace and the volume must not be persistent.
apiVersion: v1
kind: Pod
metadata:
  name: non-persistent-redis
  namespace: staging
spec:
  containers:
  - name: redis
    image: redis
    volumeMounts:
    - name: cache-control
      mountPath: /data/redis
  volumes:
  - name: cache-control
    emptyDir: {}

 

3) pvc와 pod 만들기 (스토리지 클래스는 이미 생성되어있음, storage 증설) 문제

문제

Create a new PersistentVolumeClaim

  • Name: pv-volume
  • Class: csi-hostpath-sc
  • Capacity: 10Mi

Create a new Pod which mounts the PersistentVolumeClaim as a volume:

  • Name: web-server
  • Image: nginx
  • Mount path: /usr/share/nginx/html
  • Configure the new Pod to have ReadWriteOnce Finally, using kubectl edit or kubectl patch PersistentVolumeClaim to a capacity of 70Mi and record that change.
# PVC 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 10Mi
  storageClassName: csi-hostpath-sc
  
  
# POD 생성 후 마운트
apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  volumes:
    - name: volume
      persistentVolumeClaim:
        claimName: pv-volume
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: volume

 

 

4) 사이드카 컨테이너 생성해서 로그 추출하기 (emptydir 사용) 문제

CKA(Certified Kubernetes Administrator) 시험에서는 사이드카 컨테이너를 생성하고 해당 사이드카 컨테이너를 통해 로그를 추출하는 문제가 출제될 수 있습니다. 이 문제를 해결하기 위해서는 사이드카 컨테이너와 로그 추출을 위한 적절한 설정을 해야 합니다. 대표적으로 emptyDir 볼륨을 활용하여 로그를 공유하는 방법이 있습니다.

아래는 이러한 문제를 해결하는 YAML 파일의 예시입니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: main-container
    image: nginx
    volumeMounts:
    - name: shared-log
      mountPath: /var/log/nginx
  - name: sidecar-container
    image: busybox
    command: ['sh', '-c', 'while true; do date >> /var/log/nginx/access.log; sleep 1; done']
    volumeMounts:
    - name: shared-log
      mountPath: /var/log/nginx
  volumes:
  - name: shared-log
    emptyDir: {}

이 예시에서는 nginx 이미지를 사용하는 메인 컨테이너와 busybox 이미지를 사용하는 사이드카 컨테이너가 포함된 파드를 생성합니다. 사이드카 컨테이너는 간단한 명령을 실행하여 주기적으로 /var/log/nginx/access.log 파일에 현재 날짜를 기록합니다.

주요 포인트는 다음과 같습니다:

  1. 메인 컨테이너(main-container)와 사이드카 컨테이너(sidecar-container)를 정의합니다.
  2. 메인 컨테이너는 nginx 이미지를 사용하며, /var/log/nginx 경로에 마운트될 공유 볼륨을 정의합니다.
  3. 사이드카 컨테이너는 busybox 이미지를 사용하며, /var/log/nginx 경로에 마운트될 공유 볼륨을 정의하고, 해당 볼륨에 로그를 기록하는 간단한 스크립트를 실행합니다.
  4. 공유 볼륨은 emptyDir 유형으로 정의되어 있어서, 파드의 라이프사이클 동안에만 유지되는 임시 디렉토리를 생성합니다.

이렇게 하면 사이드카 컨테이너가 메인 컨테이너와 함께 동작하여 로그를 추출할 수 있습니다. 이러한 유형의 문제는 CKA 시험에서 출제될 수 있으므로 실습과 함께 이해하는 것이 중요합니다.

 

 

 

'Kubernetes > Cert' 카테고리의 다른 글

[CKA] PV 생성  (0) 2025.02.11
[CKA] Node 유형  (0) 2025.02.10
[CKA] Service 유형  (0) 2025.02.09
[CKA] Pod 유형  (0) 2025.02.07
[CKA] Apiserver Crash  (0) 2025.02.03