* Side-car Container Pod 란?
예를들어 A 라는 nginx 컨테이너가 있으면 이 컨테이너는 log 가 남겨진다(/var/log/html)
별도의 쿠버네티스 볼륨을 만든다(varlog 라는)
이볼륨을 A 컨테이너에 mount 를 한다.(read,write 가능, 데이터 저장한다 varlog 에)
-> 이전 /var/log/html 에 쌓이는 로그가 varlog에 쌓이게 된다.(accss.log, error.log)
클라이언트가 varlog 의 데이터를 가공해서 사용하고 싶을때는 어떻게 할까?
B라는 컨테이너를 만들어 데이터가 쌓이는 경로를 (/data/) varlog 로 마운트 해주는 방식이다.
A는 varlog 에 로그를 기록하고 B 컨테이너에서는 varlog 에 기록된 데이터를 갖고와서 사용한다.
-> 별도의 컨테이너를 sidecar container 이라고 하고, A 컨테이너를 main 이라고 한다.
=> 하나의 파드 안에서 두개의 컨테이너와 저장소가 같이 만들어져서 동작하는 것
An existing Pod needs to be integreated 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.
Task:
- Add a sidecar container named sidecar, using the busybox image, to the existingPod 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 cert-app.log availabel to the sidecar container
- Don't modify the cart-app.
1. 운영중인 파드의 yaml 파일을 만들어야한다. ( docs: Logging architecture)
: 문제를 잘 보면 기존 운영중인 yaml 은 수정하지 않고(cart-app), 새로운 sidecar 커네이너를 만들어 경로만 작성해준다.
kubectl get pods eshop-cart-app
k get pod eshop-cart-app -o yaml > eshop-cart-app.yaml
apiVersion: v1
kind: Pod
metadata:
name: eshop-cart-app
spec:
containers:
- name: cart-app
image: busybox:1.28
args:
- /bin/sh
- -c
- >
i=0;
while true;
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
*인강에서확인된 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
2 sidecar container 을 만들기
: 기존 파드는 수정하지 않고 추가 함.
* main 컨테이너의 command 의 ***.log 를 통일해줘야 한다. (sidecar이랑)
* 추가한 컨테이너를 보면
:sidecar 이라는 이름의 (image: nginx) 컨테이너는 /var/log/cart-app.log 와 공유되고, /var/log/와 공유된다.
: 따라서 새로 만드는 컨테이너의 로그파일 명도 main 과 동일해야한다.
3. 기존거 삭제하고 재 패포
kubectl delte pod eshop-cart-app
강제 삭제 삭제안될 시
kubectl delete pod eshop-cart-app --force
k apply -f eshop.yaml
4. 로그 정보가 확인
kubectl logs eshop-cart-app -c sidecar
: 로그 정보가 확인되면 됨
* 본 게시글은 "TTABAE-LEARN" 을 보고 정리한 내용입니다.
'cloud > k8s(문제풀이)' 카테고리의 다른 글
[따배쿠CKA]7. Rolling Update & Roll Back (1) | 2022.08.08 |
---|---|
[따배쿠CKA]6. Deployment & Pod Scale (0) | 2022.08.08 |
[따배쿠CKA]4.Multi-container Pod 생성하기 (0) | 2022.08.08 |
[따배쿠CKA-3]Static-Pod 생성하기 (1) | 2022.08.03 |
[따배쿠CKA-2] Pod 생성하기 (0) | 2022.08.03 |