새소식

Cloud Engineering Log

Kubernetes Pod의 Root Directory("/")에서 작업이 필요할 때

  • -

예를 들어, Pod의 Root Directory에 Pod Running과 동시에 Requirements.txt를 둬야할 때가 있다.

 

나는 지금 Longhorn Storage + NFS를 기반으로 컨테이너 파일시스템을 관리하고 있는데, 

(find_pod는 그냥 내가 만든 쿠베용 쉘스크립트 커맨드라인 함수 중 하나다.)

 

무튼 저걸 실행하게 되면,

sh: 1: cannot create /requirements.txt: Permission denied

에러가 발생한다.

 

왜냐하면 저 컨테이너 이미지는 airflow인데,

ls -A
bin  boot  data  data_tmp  dev  .dockerenv  entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  requirements.txt  root  run  sbin  srv  sys  tmp  usr  var
$ ls -ld
drwxr-xr-x 1 root root 4096 May 18 01:44 .
$ whoami
airflow

이런식으로 루트 권한과 whoami를 찍어보면 이미지 빌드과정에서 계정이 airflow로 runuser가 설정되기 때문인 거다.

 

그래서 컨테이너 설정파일에서

위와 같이 쿠버네티스 시큐리티컨텍스트를 설정해주면

(runAsUser:0은 root와 같다)

 

try to exec command: 'find_pod_status etl-engine Running' (1/50 trials)
Waiting for 'pod/etl-engine-74c88c8495-hp8kk' to [Running] state: now [Pending] (1/50 trials)
Waiting for 'pod/etl-engine-74c88c8495-hp8kk' to [Running] state: now [Pending] (2/50 trials)
Waiting for 'pod/etl-engine-74c88c8495-hp8kk' to [Running] state: now [Pending] (3/50 trials)
'/usr/src/app/dags' -> '/usr/local/airflow/dags'
'/usr/src/app/dags/data-remove.py' -> '/usr/local/airflow/dags/data-remove.py'
'/usr/src/app/dags/data-transfer.py' -> '/usr/local/airflow/dags/data-transfer.py'
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
# cd /
# ls -ld
drwxr-xr-x 1 root root 4096 May 18 02:31 .
# whoami
root
# cat requirements.txt
boto3
hdfs

 

굿. 잘된다.

 

물론 시큐리티 건드는 문제라 좀 fgroups나 fsuser 등 각종 설정을 섬세하게 건들면 더 좋겠지만,

간단한 작업이라 그냥 root user privileged로 끝낸 케이스다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.