본문 바로가기
cloud/k8s(문제풀이)

[따배쿠CKA]5.Side-car Container Pod 실행하기

by mozi2 2022. 8. 8.
반응형

* 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

k8s docs 로 임시로 만들어서 확인만 해봄 (강의랑 환경이 달라 완벽하게 테스트하기 어려움)

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" 을 보고 정리한 내용입니다.

 

728x90
반응형