쿠버네티스 파드 내부로 접근하기

2021-12-22

.

Data_Engineering_TIL(20211222)

[학습자료]

쿠버네티스 공식문서를 읽고 공부한 내용입니다.

https://kubernetes.io/ko/docs/tasks/debug-application-cluster/get-shell-running-container/#%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%97%90%EC%84%9C-%EA%B0%9C%EB%B3%84-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0

https://kubernetes.io/ko/docs/tasks/debug-application-cluster/get-shell-running-container/#%ED%8C%8C%EB%93%9C%EC%97%90-%ED%95%9C-%EA%B0%9C-%EC%9D%B4%EC%83%81%EC%9D%98-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EA%B0%80-%EC%9E%88%EC%9D%84-%EA%B2%BD%EC%9A%B0-%EC%85%B8%EC%97%90-%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0

[학습내용]

  • 파드에 한개 컨테이너가 있을 경우 셸에 접근하기
$ kubectl get pods
NAME              READY   STATUS    RESTARTS   AGE
myapp-0            1/1     Running   0          47m
myapp-1            1/1     Running   0          50m
myapp-2            1/1     Running   0          53m
myapp-3            1/1     Running   0          56m
myapp-4            1/1     Running   0          58m
myapp-dev-0        1/1     Running   0          53m
myapp-dev-1        1/1     Running   0          55m
myapp-dev-2        1/1     Running   0          58m
myapp-registry-0   1/1     Running   0          57m

$ kubectl exec --stdin --tty myapp-dev-0 -- /bin/bash
myapp@myapp-dev-0:/opt/myapp/myapp-current$ whoami
myapp
myapp@myapp-dev-0:/opt/myapp/myapp-current$ pwd
/opt/myapp/myapp-current
myapp@myapp-dev-0:/opt/myapp/myapp-current$ exit
exit
  • 컨테이너에서 개별 명령어 실행하기

셸이 아닌 일반적인 커맨드 환경에서 다음처럼 동작중인 컨테이너의 환경 변수를 출력할 수 있다.

$ kubectl exec myapp-dev-0 env
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
PATH=/usr/local/openjdk-8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=myapp-dev-0
JAVA_HOME=/usr/local/openjdk-8
LANG=C.UTF-8

...

$ kubectl exec myapp-dev-0 -- ls /
bin
boot
dev
etc
home
keys
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
  • 파드에 두개 이상의 컨테이너가 있을 경우 셸에 접근하기

만일 파드에 한 개 이상의 컨테이너가 있을 경우,kubectl exec 명령어에 -container 혹은 c 옵션을 사용해서 컨테이너를 지정하면 된다. 예를 들어, my-pod라는 이름의 파드가 있다고 가정해 보자. 이 파드에는main-apphelper-app이라는 이름의 두 컨테이너가 있을때. 다음 명령어는 main-app컨테이너에 대한 셸에 접근하는 명령어이다.

# 축약형 옵션인 -i 와 -t 는 각각 --stdin 와 --tty 옵션에 대응된다.
kubectl exec -i -t my-pod --container main-app -- /bin/bash