• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    해결됨

deployment를 통한 pod 배포 및 volume 질문 드립니다.

20.02.10 11:16 작성 조회수 462

1

안녕하세요.

deployment를 통한 여러개의 pod배포시, volume에 대해 문의드립니다.

deployment에서 pod Spec에 volume을 정의할 경우, pod가 여러개라면 문제가 발생할 수 있지 않은지요?

1. pv 정의

2. pvc 정의

3. deployment에서 volume정의. pod는 nginx 구동하도록 구성

(nginx는 /var/log 아래에 파일로 로그를 생성하도록 구성됨)

spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/log"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

위와 같이 했을 경우, 3개의 pod가 동일한 /var/log경로에 작업을 하고, 동일한 파일이름으로 로그 파일을 생성할 텐데, 

이러한 경우 문제가 발생할 수 있지 않은지요? 

nginx에서 yyyy-mm-dd.log의 파일형식으로 로깅을 남긴다고 가정할 경우, 동일한 파일(ex. 2020-02-10.log)에 3개 pod에서 접근을 해서 파일을 기록할 텐데, 이와 같은 경우에는 어떻게 처리할 수 있을지 궁금합니다.

답변 6

·

답변을 작성해보세요.

1

BrownK님의 프로필

BrownK

질문자

2020.02.20

확인이 늦었네요.

바쁘실텐데 답변 감사합니다~

명확히 딱 정리되었으면 좋겠는데 ㅜ.ㅜ 링크 참조하겠습니다!

좋은 하루 되셔요

1

BrownK님의 프로필

BrownK

질문자

2020.02.13

감사합니다.

혹 찾으시면 알려주세요~ 열심히 구글링해봐도 명확한 자료가 없네요. ;;

1

BrownK님의 프로필

BrownK

질문자

2020.02.12

답변 감사합니다!

말씀해주신 "각 pod의 환경변수값을 활용하여 구분"이라는 아이디어가 궁금했습니다.

제가 쓰는 app에 맞게 수정해서 처리할 수 있네요. 감사합니다.

언급하신 내용 중에, 아래 내용에 대해 추가로 여쭤보고 싶습니다.

"Pod마다 자신의 환경변수에는 해당 pod의 이름이 들어가 있습니다"

pod 여러개를 생성해서 env로 환경 변수를 찍어보니, 제가 작업해주지는 않았지만, hostname이 구성이 되어 있더군요.

k8s에서 pod 생성 시 환경변수를 구성해 준다고는 알고 있었는데, 혹시 어떤 환경변수를 지정해주는지를 알 수 있을까요? k8s 공식문서를 뒤져보고 있긴하나, 명확히 a,b,c,d... 환경 변수를 지정해 준다는 참조 자료를 못찾겠네요. 알고 계신 공식 문서가 있으시면 알려주실 수 있을런지요. 아래 문서 내용을 찾기는 했습니다.

https://kubernetes.io/docs/concepts/containers/container-environment-variables/

공유해주신 지식으로 열심히 해보고 있습니다. 

항상 질문 드릴때마다 하는 말이지만, 중급 기대하고 있어요~~

0

틈틈이 찾아봤는데 그나마 아래 링크 내용이 도움이 될것 같아요.

https://stackoverflow.com/questions/45759205/what-environment-variables-are-created-in-kubernetes-by-default

0

저도 질문 주셔서 당연히 정의된 문서가 있지 않을까 해서 한번 찾아봤는데, 

의외로 정리된 문서가 안보이네요!!??

나중에라도 찾게되면 답문 드릴께요 ^^;

0

안녕하세요. 

잘 정리된 질문 주셔서 감사합니다^^ 보통 질문을 이해하는데 오래걸리거든요.

일단 StatefulSet을 쓰면 Pod마다 각자 PVC가 생성이 되서 해당 문제가 발생하지는 않을꺼고, 

Deployment를 썼을 경우 Pod가 한 PVC와 연결이 되기 때문에, 말씀하신 것과 같이 여러 Pod가 동일 path와 name에 접근하게 되는 문제가 발생합니다.

그래서 파일을 나눌려면 결국 Pod1.2020-20-10.log, Pod2.2020-02-10.log 이런식으로 해당 Pod(Pod1, Pod2)에서 파일을 떨구도록 만들어야 구별이 가능해지겠죠.

그리고 Pod마다 자신의 환경변수에는 해당 pod의 이름이 들어가 있습니다. 

그렇기 때문에 nginx 설정을 통해서 로그파일의 포맷을 수정할 수 있는데, 로그파일의 이름을 환경변수에서 불러와서 이름 앞에 붙이면 위해서 말한 예로 파일들이 만들어 져서 구별이 되지겠네요.

제가 위에 방법을 설명드렸지만 해결방법에 대해서 정답은 없습니다. 

그리고 nginx건 tomcat이건 Pod를 만들때 로그 파일 포맷이름을 변경하는 부분은 각자 문서들을 찾아봐야 하는 부분입니다. 거기에 인자값으로 환경변수 Pod이름을 넣는 거고요. 

저도 nginx에 대해서 log 파일 포맷을 수정해보진 않아서 정확하게 어느 부분을 수정하시면 된다고까지는 말씀드릴 수 없지만, 단순 의문이 아닌 해당 부분을 구현해보고 싶으신거면 그부분을 한번 찾아보시고, 영 답을 못찾을 경우 저도 한번 검토를 해보도록 할께요. 

감사합니다.