Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Get a Shell to a Running Container
동작중인 컨테이너의 셸에 접근하기
이 페이지는 동작중인 컨테이너에 접근하기 위해 kubectl exec
을 사용하는
방법에 대해 설명한다.
시작하기 전에
쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와 통신할 수 있도록 설정되어 있어야 한다. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 적어도 2개 포함된 클러스터에서 실행하는 것을 추천한다. 만약, 아직 클러스터를 가지고 있지 않다면, minikube를 사용해서 생성하거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있다.
컨테이너의 셸에 접근하기
이 예시에서는 하나의 컨테이너를 가진 파드를 생성할 것이다. 이 컨테이너는 nginx 이미지를 실행한다. 해당 파드에 대한 설정 파일은 다음과 같다.
apiVersion: v1
kind: Pod
metadata:
name: shell-demo
spec:
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: nginx
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
hostNetwork: true
dnsPolicy: Default
파드를 생성한다.
kubectl apply -f https://k8s.io/examples/application/shell-demo.yaml
다음을 통해 컨테이너가 동작하고 있는지 확인할 수 있다.
kubectl get pod shell-demo
동작중인 컨테이너의 셸에 접근한다.
kubectl exec --stdin --tty shell-demo -- /bin/bash
참고:
kubectl 명령어 인자와 사용하고자 하는 명령어의 인자를 구분하기 위해서는 이중 대시(--
)를 사용할 수 있다.셸에 접근해서 다음처럼 루트 디렉토리를 확인해 볼 수 있다.
# Run this inside the container
ls /
접근한 셸에서 다른 명령어도 한번 실행해 보아라. 다음은 실행해 볼 명령의 예시이다.
# You can run these example commands inside the container
ls /
cat /proc/mounts
cat /proc/1/maps
apt-get update
apt-get install -y tcpdump
tcpdump
apt-get install -y lsof
lsof
apt-get install -y procps
ps aux
ps aux | grep nginx
nginx의 최상단 페이지 작성하기
앞에서 생성한 파드에 대한 설정을 살펴보아라. 파드에는
emptyDir
볼륨이 사용되었고, 이 컨테이너는 해당 볼륨을
/usr/share/nginx/html
경로에 마운트하였다.
접근한 셸 환경에서 /usr/share/nginx/html
디렉터리에 index.html
파일을
생성해 보아라.
# Run this inside the container
echo 'Hello shell demo' > /usr/share/nginx/html/index.html
셸 환경에서 nginx 서버에 GET 요청을 시도해보면 다음과 같다.
# Run this in the shell inside your container
apt-get update
apt-get install curl
curl http://localhost/
출력 결과는 여러분이 index.html
파일에 작성한 텍스트를 출력할 것이다.
Hello shell demo
셸 사용이 모두 끝났다면 exit
을 입력해 종료하라.
exit # To quit the shell in the container
컨테이너에서 개별 명령어 실행하기
셸이 아닌 일반적인 커맨드 환경에서 다음처럼 동작중인 컨테이너의 환경 변수를 출력할 수 있다.
kubectl exec shell-demo env
다른 명령어도 한번 실행해 보아라. 다음은 실행해 볼 명령의 예시이다.
kubectl exec shell-demo -- ps aux
kubectl exec shell-demo -- ls /
kubectl exec shell-demo -- cat /proc/1/mounts
파드에 한 개 이상의 컨테이너가 있을 경우 셸에 접근하기
만일 파드에 한 개 이상의 컨테이너가 있을 경우, kubectl exec
명령어에
--container
혹은 -c
옵션을 사용해서 컨테이너를 지정하라. 예를 들어,
여러분이 my-pod라는 이름의 파드가 있다고 가정해 보자. 이 파드에는 main-app 과
helper-app 이라는 이름의 두 컨테이너가 있다. 다음 명령어는 main-app
컨테이너에 대한 셸에 접근할 것이다.
kubectl exec -i -t my-pod --container main-app -- /bin/bash
참고:
축약형 옵션인-i
와 -t
는 각각 --stdin
와 --tty
옵션에 대응된다.다음 내용
- kubectl exec를 참고한다.