[k8s] 2. 파드 - 컨테이너의 기본 단위
SightStudio
·2020. 10. 10. 18:03
쿠버네티스에는 셀 수도 없을 만큼 많은 리소스 종류와 컴포넌트가 있습니다.
그중에 이번엔 제일 기초가 되는 파드에 대해 알아보도록 하겠습니다.
- 1. Pod(파드) 란
파드는 제일 기초적인 리소스로, 쿠버네티스 상의 컨테이너 애플리케이션의 기본 단위입니다.
파드는 1개 이상의 컨테이너로 구성된 집합입니다.
다음과 같이 기본적인 nginx 파드를 만들어보았습니다.
nginx-pod.yaml 이라는 파일을 만들고 아래의 내용을 입력합니다.
apiVersion: v1
kind: Pod
metadata:
name: my-nginx-pod
spec:
containers:
- name : my-nginx-container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
이후 아래의 명령어를 입력하면 pod가 생성됩니다.
kubectl apply -f nginx-pod.yaml
kubectl describe pods <파드 이름> 커맨드를 통해 파드의 상태를 볼 수 있습니다.
여기서 중요하게 봐야할 부분은 IP입니다.
필자의 환경(docker for mac)에서는 10번대 IP로 잡히는데 이는 A Class Private IP 대역입니다.
즉 사설 IP이기 때문에 파드는 클러스터 외부에서 접근 할 수 없고, 내부에서만 접근할 수 있습니다.
쿠버네티스 외부 또는 내부에서 pod로 잡근하려면 Service 라는 k8s 오브젝트를 따로 생성해야합니다.
현재로썬 방법이 없으니, 임시로 테스트용 파드를 따로 만들어 진행해보겠습니다.
# 임시 파드 생성 후 bash 셀 접속
kubectl run -i --tty --rm debug \
--image=alicek106/ubuntu:curl --restart=Never bash
# 이전에 만든 파드 접근 - ip는 개인 환경마다 다릅니다.
curl 10.1.0.58
테스트용 파드를 만들어 접근해보니 nginx 초기 페이지가 응답으로 오는것을 볼 수 있습니다.
당연히 아래 클러스터 외부에서 접근
했을때는 응답을 받지 못하고 timeout이
발생한걸 알 수 있습니다.
k8s 오브젝트는 delete -f 로
삭제할 수 있습니다.
예시)
kubectl delete -f nginx-pod.yaml
- k8s 파드와 도커 컨테이너
아래가 같이 파드에 사이드카 컨테이너를 추가하고 새로 갱신해줍니다.
apiVersion: v1
kind: Pod
metadata:
name: my-nginx-pod
spec:
containers:
- name : my-nginx-container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
- name: ubuntu-sidecar-container
image: alicek106/rr-test:curl
command: ["tail"]
args: ["-f", "/dev/null"] # 컨테이너 유지
컨테이너 갱신은 아래와 같이 replace --force를 사용합니다.
kubectl replace -f nginx-pod.yaml --force
다음과 같이 사이드카 컨테이너 bash에 접근하고 localhost에 요청을 보내봤습니다.
kubectl exec -it my-nginx-pod -c ubuntu-sidecar-container bash
파드내 다른 nginx 컨테이너에 접근 할 수 있는것을
볼 수 있습니다.
이는 파드 내의 컨테이너들이 네트워크 스페이스와 같은
리눅스 네임스페이스를 공유하기 때문입니다.
www.yes24.com/Product/Goods/84927385
'개발 > devops' 카테고리의 다른 글
로드밸런서에 대해 알아보자 (3) | 2021.10.13 |
---|---|
프로메테우스에 대해 알아보자 (0) | 2021.08.07 |
[k8s] 5. 서비스 - 파드를 연결하고 외부에 노출 (1) | 2020.10.11 |
[k8s] 4. 디플로이먼트 - 레플리카셋, 파드 배포 관리 (0) | 2020.10.11 |