k8s

CKA 준비 (5) Side-car Container Pod 실행하기

Joon0464 2022. 5. 24. 22:04

이 게시물은 아래 강의를 참고 하였습니다.
참고 강의 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