본문 바로가기
Compute/kubernetis

kubernetes pod의 컨테이너 진입 옵션 --sh 와 bash의 차이

by 조청유곽 2024. 12. 9.
반응형

쿠버네티스의 컨테이너에 들어갈 때, --sh와 bash 옵션을 사용한다. 

이 옵션의 차이가 뭔지 확인해보자 

 

kubectl exec -n kube-system etcd-k8s-master -it -- sh와
kubectl exec -n kube-system etcd-k8s-master -it bash 명령어는 쿠버네티스 클러스터에서 etcd-k8s-master Pod의 컨테이너 내부로 들어가기 위해 사용되며, 주된 차이점은 쉘 환경에 있다. 

 

 

1. 명령어 구성

kubectl exec: 특정 Pod의 컨테이너에서 명령어를 실행.
-n kube-system: kube-system 네임스페이스에 있는 Pod를 대상으로 함.
etcd-k8s-master: 실행할 대상 Pod 이름.
-it: Pod 내부의 터미널로 상호작용 가능하게 설정.
sh 또는 bash: 실행할 쉘 환경.

 

 

2. 차이점: sh와 bash

sh (Bourne Shell):
더 단순하고 기본적인 쉘.
최소한의 기능만 제공하며, 시스템에 Bash가 없을 때도 사용 가능.
대부분의 Unix 계열 시스템에서 기본적으로 설치되어 있음.
일부 복잡한 스크립트와 명령 구문은 지원하지 않을 수 있음.
bash (Bourne Again Shell):
sh를 확장한 쉘로, 고급 기능(히스토리, 배열, 문자열 처리 등)을 제공.
스크립팅에 더 적합하고, 대화형으로 사용하기 편리.
시스템에 설치되어 있지 않을 수도 있음(특히 컨테이너 이미지가 최소화된 경우).

 

 

3. 사용성

sh 사용:
대부분의 컨테이너에서 sh는 기본적으로 설치되어 있어 정상적으로 작동.
최소한의 인터페이스로 시스템 내부 점검 가능.
bash 사용:
bash가 설치된 컨테이너에서만 실행 가능.
설치되지 않은 경우, 다음과 같은 오류 발생:

error: unable to start command 'bash': exec: "bash": executable file not found in $PATH

 

 

4. 적용 예시
(1) 컨테이너가 경량 이미지일 경우:

alpine, busybox와 같은 경량 이미지는 기본적으로 bash가 없고, sh만 포함.
이런 경우, sh 명령어로 진입해야 함.

 

(2) 표준 Linux 배포 이미지일 경우:

Ubuntu, CentOS 같은 배포판은 기본적으로 bash를 포함.
이 경우 bash를 사용하는 것이 편리.

 

 

5. 비교 예제
(1) sh 사용

kubectl exec -n kube-system etcd-k8s-master -it -- sh

 - 최소한의 쉘 환경.
 - 대화형으로 간단한 명령어 실행.
 - 예: ls, cd, cat 등 기본 명령 사용.

 

 

(2) bash 사용

kubectl exec -n kube-system etcd-k8s-master -it bash

 - 더 풍부한 쉘 기능 제공.
 - 탭 자동 완성, 명령 히스토리, 스크립트 작성 등.
 - 예: ls --color=auto(색상 출력), 배열 처리 등 고급 명령어 사용 가능.

 

 

6. 결론

sh: 모든 컨테이너에서 기본적으로 사용할 수 있는 단순한 쉘.
bash: 더 강력한 기능을 제공하지만, 컨테이너에 설치되어 있어야 사용 가능.

 

 

7. 기타 / Pod의 쉘 환경을 확인 방법

kubectl exec -n kube-system etcd-k8s-master -it -- ls /bin /usr/bin

 

 

더 자세한 내용은 아래의 쿠버네티스 공홈을 방문!! 

 

반응형