인프라/kubernetes
kubernetes 파드
kwon92
2021. 8. 23. 12:21
파드 소개
한 파드에 여러 컨테이너가 있고 항상 하나의 노드에서 뜬다.
왜 파드가 필요할까?
왜 컨테이너를 직접 실행하지 않고 파드를 이용해 멀티플 컨테이너를 띄울까?
한 머신에서 여러 프로세스를 띄워야할때 컨테이너는 하나에 한 프로세스만 띄우게 되어있으니
여러 프로세스를 띄우면 이를 관리하는것도 사용자가 해야된다.
그래서 이런 컨테이너를 묶어서 관리해줄 구조가 필요한데, 이게 파드가 필요한 이유다.
파드 이해하기
파드는 여러 컨테이너를 함께 묶기 때문에 안에 있는 컨테이너들은 같은 hostname 과 network interface 를 가진다.
파드 안의 컨테이너가 동일한 네트워크에서 실행되기 때문에 ip주소와 포트를 공유하게 되고
따라서 파드 안에 컨테이너들은 같은 포트를 사용하지 않도록 해야한다.
파일 시스템은 약간 다른데, 파일시스템은 컨테이너 이미지에서 오기 때문에 다른 컨테이너끼리 완전히 독립이되지만,
볼륨을 사용하면 같은 파일시스템을 공유 할 수 있다.
파드를 어떻게 만드나
쿠버네티스 리소스는 일반적으로 REST API 엔드포인트에 JSON 이나 YAML 파일을 전송해서 생성한다.
파드를 정의하는 주요 부분
- metadata - 파드의 이름, 네임스페이스 레이블 등 기타 정보들
- spec - 파드 컨테이너, 볼륨, 기타 데이터등 파드 자체에 대한 실제 명세
- status - status 는 read only 데이터고 만들때는 필요없다. 파드 상태, 컨테이너 설명과 상태등 현재 실행 중인 파드에 관한 정보들이 있다.
yaml 정의 작성하기
apiVersion: v1. //쿠버네티스 API 버전
kind: Pod //오브젝트 종류가 파드
metadata: name: kubia-manual //파드 이름
spec:
containers:
- image: luksa/kubia //컨테이너 이미지
name: kubia //컨테이너 이름
ports: - containerPort: 8080 //애플리케이션 포트
protocol: TCP
kubectl create 명령으로 파드 만들기
//오브젝트 속성 설명 $ kubectl explain pods
//오브젝트 속성 세부 설명 $ kubectl explain pods.spc
//파드 만들기 $ kubectl create -f kubia-manual.yaml
//파드 정의 보기 $ kubectl get po kubia-manual -o (yaml or json)
//파드 목록에서 생성된 파드 보기 $ kubectl get pods
//파드의 로그 확인 $ kubectl logs kubia-manual
//파드안의 특정 컨테이너 로그 확인 $ kubectl logs kubia-manual -c kubia
파드에 요청 보내기
로컬 네트워크 포트를 파드 포트로 포워딩한다.
$ kubectl port-forward kubia-manual 8888:8080
레이블
파드를 레이블로 부분 집합 분류를 할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: kubia-manual-v2
labels:
creation_method: manual
env: prod
spec:
containers:
- image: luksa/kubia
name: kubia
ports:
- containerPort: 8080
protocol: TCP
NameSpace
레이블이 겹칠 수 있는 오브젝트 그룹을 만들었다면
네임스페이스는 겹치지 않는 그룹으로 분할하고자 할 때 사용한다.
같은 리소스를 개발, 운영 환경 등으로 분리해서 사용 할 수 있게 해준다.