인프런 커뮤니티 질문&답변

CoonZaCCang님의 프로필 이미지

작성한 질문수

대세는 쿠버네티스 [초급~중급]

POD의 Container Command 중 copy 관련 문의드립니다.

작성

·

329

1

POD내부에서 파일을 복사할 목적으로 Container Command에서 아래와 같이 복사 명령을 넣으면

CrashLoopBackOff이 나오고 logs에도 아무런 로그도 없고 describe에서도 오류 관련된 내용을 찾을 수 없습니다 

해당 Pod에 접속하여 명령을 수행하면 정상  수행됩니다.

yaml 에서 command를 제거하면 RUNNING됩니다. kubernetes.io의 기본 템플릿인데요

혹시 copy 커맨드 정의가 잘못된 부분이 있을지요?

apiVersion: v1

kind: Pod

metadata:

  name: myapp-pod16

  labels:

    app: myapp

spec:

  containers:

  - name: myapp-container

    image: tomcat:7.0

    command: ['sh','-c','cp ./RUNNING.txt ./webapps']

상대경로 절대경로로 지정해도 마찬가지이네요.

감사합니다.

답변 3

1

CoonZaCCang님의 프로필 이미지
CoonZaCCang
질문자

답변 달아주셔서 감사합니다. 늦게 확인을 하였네요. 참고해주신 사이트 뿐 아니라 k8s 사이트를 보고 여러 시도를 해도 

copy 가 되지 않습니다 . copy command를 넣지 않으면 컨테이너는 정상 실행되고요 해당 컨테이너에서 copy를 시도하면

잘 수행됩니다. 테스트를 위해 tomcat7  이미지에 RUNNING.txt를 temp폴더에 copy 하는 것인데 잘 안되네요.

컨테이너 command에만 넣으면 CrashLoopBackOff 만 나옵니다. 혹시 copy 커맨드 샘플 yaml이 있을까요? 

■ 테스트 yaml

------------------------------------------------------------------------------------------------

apiVersion: v1

kind: Pod

metadata:

  name: myapp-test

  labels:

    app: myapp

spec:

  containers:

  - name: myapp-container

    image: tomcat:7.0

    command: ['cp', '/usr/local/tomcat/RUNNING.txt', '/usr/local/tomcat/temp']

------------------------------------------------------------------------------------------

case1.  - 실패

command: ["cp", "/usr/local/tomcat/RUNNING.txt", "/usr/local/tomcat/temp"]

command: ['cp', '/usr/local/tomcat/RUNNING.txt', '/usr/local/tomcat/temp']

case2. - 실패

  command: 

    - "cp"

    - "/usr/local/tomcat/RUNNING.txt"

    - "/usr/local/tomcat/temp"

case3. - 실패

    command: ["/bin/sh"]

    args: ["-c", "cp /usr/local/tomcat/RUNNING.txt /usr/local/tomcat/temp"]

0

일프로님의 프로필 이미지
일프로
지식공유자

답변이 없어서 어떻게 진행되고 계신가 궁금했습니다.

일단 제가 참고하시라고 한 부분은 command 의 사용법이 아니라 initContainer를 사용하는 부분을 말씀드린건데요.

적어놓으신 command의 사용법에는 문제가 없습니다^^

본 컨테이너의 동작 전에 어떤 작업을 해야할 때는 initContainer를 사용해야하고요.

본 컨테이너에 cp 명령을 넣으면 그 명령이 실행되자마자 컨테이너가 종료되는 동작이 맞습니다. 

---

추가: 위에 initContainer 참고 사이트에 대한 부연설명 해드리자면 

initContainer에서 busybox 라는 이미지를 하나 더 띄어서 특정 명령을 실행하게 시킬수가 있고,

본 컨테이너인 nginx와 busybox 의 volumeMount는 emptyDir로 연결되어 있기 때문에 busybox에서 파일을 복사하게되면 nginx에서 한것과 같은 동작이 되는 셈입니다.

0

일프로님의 프로필 이미지
일프로
지식공유자

안녕하세요. 

아래 링크 예제를 보시고, 원하는 작업을 하기 위해서 어떻게 해줘야 할지 한번 고민해보시기 바랍니다.

https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/#create-a-pod-that-has-an-init-container

보시고 안되시면 또 질문주시고요.

감사합니다.