더북(TheBook)

2. kubectl exec 명령을 실행해 파드 컨테이너의 셸(shell)에 접속합니다. 명령에서 exec는 execute(실행)를 의미하며, i 옵션은 stdin(standard input, 표준 입력)이고, t는 tty (teletypewriter)1를 뜻합니다. 이 두 개를 합친 it는 표준 입력을 명령줄 인터페이스로 작성한다는 의미가 됩니다. 그리고 파드인 nginx-pod에 /bin/bash를 실행해 nginx-pod의 컨테이너에서 배시(bash) 셸에 접속합니다.

[root@m-k8s ~]# kubectl exec -it nginx-pod -- /bin/bash
root@nginx-pod:/#

Tip ☆ kubectl exec에서 '- -'의 의미


'--'exec에 대한 인자 값을 나누고 싶을 때 사용합니다. 이해하기 쉽게 예제를 봅시다. nginx-pod에서 /run의 내용을 보고 싶다면 파드 이름 뒤에 ls /run을 입력하면 됩니다. '--'를 사용할 때는 보이지 않던 DEPRECATED 메시지가 함께 표시됩니다.

[root@m-k8s ~]# kubectl exec -it nginx-pod ls /run
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
lock nginx.pid secrets utmp

이번에는 /run의 권한을 보고 싶다면 어떻게 할까요? -l(long listing format) 옵션을 붙여 확인하면 될 것 같습니다. 하지만 실행하면 다음과 같이 에러가 발생합니다. 이는 -lexec의 옵션으로 인식하기 때문에 그렇습니다.

[root@m-k8s ~]# kubectl exec -it nginx-pod ls -l /run
Error: unknown shorthand flag: 'l' in -l
See 'kubectl exec --help' for usage.

이런 경우에 명령어를 구분해야 하는데, 이때 '--'를 사용합니다.

[root@m-k8s ~]# kubectl exec -it nginx-pod -- ls -l /run
total 4
drwxrwxrwt. 2 root root  6 Aug  3 07:00 lock
-rw-r--r--. 1 root root  2 Aug 12 02:06 nginx.pid
drwxr-xr-x. 4 root root 39 Aug 12 02:06 secrets

이처럼 필요하지 않아도 exec를 사용할 때 명시적으로 '--'를 사용하면 에러를 줄일 수 있습니다. 그래서 '--'을 사용하지 않고 바로 명령을 실행하면 DEPRECATED를 표시해 향후 버전에서는 사용하지 못하게 하면서 명령어에 일관성을 주려는 것입니다.

 

 


1 과거에는 전신 타자기를 뜻하는 용어였으나 현재는 명령줄 인터페이스로 대체됐습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.