728x90
문제 4: 멀티 컨테이너 Pod 생성하기
문제 설명
- 작업 클러스터: k8s
- 목표:
- 4개의 컨테이너(nginx, redis, memcached, consul)를 포함하는 Pod를 생성합니다.
- Pod 이름은 eshop-frontend입니다.
풀이 전략
- Pod YAML 템플릿 생성:
- kubectl run 명령어를 사용하여 기본 YAML 템플릿을 생성합니다.
- --dry-run 옵션으로 실제 리소스는 생성하지 않고 YAML 형식으로 출력합니다.
- 출력된 YAML 파일을 저장합니다.
- YAML 수정:
- YAML 파일을 열고 추가 컨테이너들을 정의합니다.
- 각 컨테이너는 이름(name)과 이미지(image)를 지정합니다.
- Pod 생성:
- 수정된 YAML 파일을 적용하여 Pod를 생성합니다.
- Pod 상태 확인:
- kubectl get pod 명령어로 생성된 Pod와 컨테이너들이 제대로 실행되고 있는지 확인합니다.
풀이 과정
1. Pod YAML 파일 생성
kubectl run eshop-frontend --image=nginx --dry-run=client -o yaml > 3-2.yaml
- 명령어 설명:
- kubectl run: Pod를 생성하는 명령어입니다.
- eshop-frontend: 생성할 Pod의 이름입니다.
- --image=nginx: Pod 내에 기본으로 추가할 컨테이너의 이미지입니다.
- --dry-run=client: 명령어 실행 결과만 확인하고 실제 리소스는 생성하지 않습니다.
- -o yaml: 결과를 YAML 형식으로 출력합니다.
- > 3-2.yaml: 출력된 YAML 내용을 3-2.yaml 파일로 저장합니다.
- 결과:
- 3-2.yaml 파일에 기본 YAML 템플릿이 생성됩니다.
2. YAML 파일 수정
vi 3-2.yaml
- 작업:
- 텍스트 편집기로 3-2.yaml 파일을 엽니다.
- 기본적으로 생성된 nginx 컨테이너 외에 추가 컨테이너를 정의합니다.
- 수정된 최종 YAML 파일은 아래와 같아야 합니다:
apiVersion: v1
kind: Pod
metadata:
name: eshop-frontend
spec:
containers:
- image: nginx
name: nginx-container
- image: redis
name: redis-container
- image: memcached
name: memcached-container
- image: consul
name: consul-container
- 추가된 내용:
- 각 컨테이너에 대해 image와 name을 지정했습니다.
3. Pod 생성
kubectl apply -f 3-2.yaml
- 명령어 설명:
- kubectl apply: YAML 파일의 내용을 Kubernetes 클러스터에 적용합니다.
- -f 3-2.yaml: 적용할 YAML 파일을 지정합니다.
- 결과:
- pod/eshop-frontend created 메시지가 출력됩니다.
- eshop-frontend라는 이름의 Pod가 생성됩니다.
4. Pod 상태 확인
kubectl get pod
- 명령어 설명:
- kubectl get pod: 클러스터에 있는 Pod의 상태를 확인합니다.
- 결과:
- 생성된 eshop-frontend Pod와 4개의 컨테이너(nginx, redis, memcached, consul)가 실행 중인지 확인합니다.
- 출력 예시:
sql코드 복사NAME READY STATUS RESTARTS AGE eshop-frontend 4/4 Running 0 1m
문제 풀이 요약
- kubectl run 명령어를 사용하여 기본 YAML 템플릿을 생성.
- 텍스트 편집기를 사용하여 YAML 파일에 4개의 컨테이너 정의 추가.
- kubectl apply 명령어로 수정된 YAML 파일을 클러스터에 적용.
- Pod와 컨테이너 상태를 확인하여 정상적으로 실행되었는지 검증.
문제 5: Sidecar Container Pod 생성하기
문제 설명
- 작업 클러스터: k8s
- 목표:
- 기존 eshop-cart-app Pod에 로그 스트리밍을 처리하는 사이드카 컨테이너를 추가합니다.
- 새로 추가될 사이드카 컨테이너 이름은 price이며, 다음 명령을 실행합니다
/bin/sh -c "tail -n+1 -f /var/log/cart-app.log"
- /var/log 디렉터리를 마운트하여 cart-app.log 파일에 접근할 수 있어야 합니다.
- 제약 조건:
- 기존의 eshop-cart-app Pod와 cart-app 컨테이너는 수정하지 않습니다.
풀이 전략
- YAML 파일 생성:
- kubectl get pod 명령어로 기존 eshop-cart-app Pod의 YAML 파일을 가져옵니다.
- 기존 Pod의 구성을 저장한 뒤 수정할 준비를 합니다.
- 사이드카 컨테이너 추가:
- 생성된 YAML 파일에 새로운 컨테이너(price)를 정의합니다.
- busybox 이미지를 사용하며, 명령어를 실행하고 로그 파일을 읽도록 설정합니다.
- 볼륨을 사용하여 /var/log를 마운트합니다.
- Pod 적용:
- 수정된 YAML 파일을 클러스터에 적용하여 사이드카 컨테이너가 추가된 Pod를 실행합니다.
- 로그 확인:
- kubectl logs 명령어를 사용하여 price 컨테이너가 로그를 스트리밍하는지 확인합니다.
풀이 과정
1. 기존 Pod YAML 파일 가져오기
kubectl get pod eshop-cart-app -o yaml > 3-3.yaml
- 설명:
- kubectl get pod: 기존 Pod의 상세 정보를 가져옵니다.
- -o yaml: 출력 결과를 YAML 형식으로 표시합니다.
- > 3-3.yaml: 결과를 파일로 저장합니다.
- 결과:
- eshop-cart-app Pod의 YAML 파일이 3-3.yaml로 저장됩니다.
2. YAML 파일 수정
vi 3-3.yaml
- 작업 내용:
- containers 항목에 새로운 컨테이너를 추가합니다.
- 볼륨 마운트를 설정하여 /var/log 디렉터리를 공유합니다.
- 최종 YAML 파일:
apiVersion: v1
kind: Pod
metadata:
name: eshop-cart-app
spec:
containers:
- name: cart-app
image: busybox
command:
- /bin/sh
- -c
- "i=1; while :; do echo \"$i: Price: $((RANDOM % 10000 + 1))\" >> /var/log/cart-app.log; i=$((i+1)); sleep 2; done"
volumeMounts:
- name: varlog
mountPath: /var/log
- name: price
image: busybox
args:
- /bin/sh
- -c
- tail -n+1 -f /var/log/cart-app.log
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
emptyDir: {}
- 추가된 항목:
- price 컨테이너:
- busybox 이미지 사용.
- tail -n+1 -f /var/log/cart-app.log 명령어를 실행하여 로그 스트리밍.
- volumes:
- emptyDir를 사용하여 /var/log를 공유.
- volumeMounts란 무엇인가?
- volumeMounts는 Kubernetes Pod의 컨테이너와 **볼륨(volume)**을 연결하는 설정입니다.
즉, Pod에 정의된 볼륨을 특정 경로에 마운트하여 컨테이너 내부에서 볼륨을 사용할 수 있게 합니다 - volumeMounts.name: Pod의 volumes에서 정의된 이름과 연결됩니다.
- mountPath: 컨테이너 내부 경로로, 볼륨이 마운트됩니다.
- 컨테이너 간 데이터 공유:
- 동일한 볼륨을 여러 컨테이너에서 마운트하면 데이터 공유가 가능합니다.
- 연결 원리:
- volumeMounts.name은 volumes.name과 일치해야 볼륨이 컨테이너에 연결됩니다.
- price 컨테이너:
3. Pod 적용
kubectl apply -f 3-3.yaml
- 설명:
- kubectl apply: 수정된 YAML 파일을 Kubernetes 클러스터에 적용합니다.
- -f 3-3.yaml: 적용할 파일 지정.
- 결과:
- 사이드카 컨테이너가 추가된 eshop-cart-app Pod가 실행됩니다.
4. 로그 확인
kubectl logs eshop-cart-app -c price
- 설명:
- kubectl logs: Pod의 로그를 확인하는 명령어.
- -c price: price 컨테이너의 로그를 확인합니다.
- 결과:
- price 컨테이너가 cart-app.log의 내용을 스트리밍하는 것을 확인할 수 있습니다.
- 출력 예시
1: Price: 6338
2: Price: 8362
3: Price: 9099
4: Price: 2509
문제 풀이 요약
- 기존 eshop-cart-app Pod의 YAML 파일을 가져옵니다.
- 새로운 사이드카 컨테이너를 추가하고 로그 파일을 읽도록 설정합니다.
- 수정된 YAML 파일을 클러스터에 적용합니다.
- price 컨테이너가 로그 스트리밍을 수행하는지 확인합니다.
728x90
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스] CKA - Mock Exam2 정리 (0) | 2025.01.18 |
---|---|
[쿠버네티스] CKA - Mock Exam 정리 (0) | 2025.01.17 |
Kubernetes RBAC(Role-Based Access Control) 정리 (0) | 2024.12.22 |
[쿠버네티스] 아키텍쳐 정리 및 간단한 실습 정리 (4) | 2024.12.15 |
[쿠버네티스] kube- 관련 개념 정리 (0) | 2024.12.11 |