이 게시물은 아래 강의를 참고 하였습니다.
참고 강의 https://www.youtube.com/watch?v=KdATmTulf7s&list=PLApuRlvrZKojqx9-wIvWP3MPtgy2B372f&index=1
이론)
하나의 Pod에 다음 2가지의 컨테이너가 동작할 때
1) nginx 컨테이너 -> 별도의 Kubenetes volume에 rw로 마운트하여 error.log와 access.log 를 저장하도록 설정 -> Main container
2) 로그 분석 컨테이너 -> 별도의 Kubernetes volume에 ro로 마운트하여 error.log와 access.log를 분석 -> Side-car container
실습 전 환경 구성)
# yaml 파일 생성
$ sudo vi 1.yaml
apiVersion: v1
kind: Pod
metadata:
name: eshop-cart-app
spec:
containers:
- image: busybox
name: cart-app
command:
- /bin/sh
- -c
- 'i=1;while :;do echo -e "$i: Price: $((RANDOM % 10000 + 1))" >> /var/log/cart-app.log;
i=$((i+1)); sleep 2; done'
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- emptyDir: {}
name: varlog
# 실습환경을 위한 Pod 생성
$ sudo kubectl apply -f 1.yaml
문제)
An existing Pod needs to be integrated into the Kubernetes built-in logging architecture (e.g. kubectl logs).
Adding a streaming sidecar container is a good and common way to accomplish this requirement.
- Add a sidecar container named sidecar, using busybox image, to existing Pod eshop-cart-app
- The new sidecar container has to run the following command: /bin/sh, -c, "tail -n+1 -F /var/log/cart-app.log
- Use a volume, mounted at /var/log, to make the log file cart-app.log available to the sidecar container.
- Don't modify the cart-app
답안)
검색 키워드 : logging
# 현재 존재하는 pod 정보 yaml 파일로 생성
$ sudo kubectl get pods eshop-cart-app -o yaml > eshop.yaml
# eshop.yaml 수정
$ sudo vi ./eshop.yaml 를 다음과 같이 수정
apiVersion: v1
kind: Pod
metadata:
name: eshop-cart-app
spec:
containers:
- command:
- /bin/sh
- -c
- 'i=1;while :;do echo -e "$i: Price: $((RANDOM % 10000 + 1))" >> /var/log/cart-app.log;
i=$((i+1)); sleep 2; done'
image: busybox
name: cart-app
volumeMounts:
- mountPath: /var/log
name: varlog
volumes:
- emptyDir: {}
name: varlog
https://kubernetes.io/docs/concepts/cluster-administration/logging/#sidecar-container-with-logging-agent 를 참고하여 선택된 부분을 똑같이 복사하여 eshop.yaml 파일에 붙여넣는다.
apiVersion: v1
kind: Pod
metadata:
name: eshop-cart-app
spec:
containers:
- command:
- /bin/sh
- -c
- 'i=1;while :;do echo -e "$i: Price: $((RANDOM % 10000 + 1))" >> /var/log/cart-app.log;
i=$((i+1)); sleep 2; done'
image: busybox
name: cart-app
volumeMounts:
- mountPath: /var/log
name: varlog
- name: sidecar
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -F /var/log/cart-app.log']
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- emptyDir: {}
name: varlog
수정 완료 후 아래 명령어 이어서 진행
# 기존에 동작중인 pod 제거
$ sudo kubectl delete pods eshop-cart-app --force
# 새로 작성한 yaml 파일로 pod 생성
$ sudo kubectl apply -f eshop.yaml
# 정상 동작 확인
$ sudo kubectl get pods
'k8s' 카테고리의 다른 글
CKA 준비 (7) Rolling Update & Roll Back (0) | 2022.05.30 |
---|---|
CKA 준비 (6) Deployment & Pod Scale (0) | 2022.05.30 |
CKA 준비 (4) multi-container Pod 생성하기 (0) | 2022.05.24 |
CKA 준비 (3) Static pod 생성하기 (0) | 2022.05.23 |
CKA 준비 (2) Pod 생성하기 (0) | 2022.05.23 |