Pod

심규환·2022년 1월 28일
0

Kubernetes

목록 보기
5/5
post-thumbnail

1. Pod

Pod란, 내부에 컨테이너들이 최소 한 개 이상 가지고 있는 단위입니다. 컨테이너 내부끼리 통신이 가능하며 컨테이너별 Port를 설정할 수 있습니다.
A 컨테이너에 8080을 주고 B 컨테이너에 8000을 주면 A 컨테이너에서 localhost:8000으로 B 컨테이너에 접근이 가능합니다.
Port는 중복이 불가능합니다. Pod 생성시 고유 IP(ClusterIP)를 할당해주고 이 IP는 클러스터 내부에서만 사용이 가능합니다. 새로 생성할 때마다 새 IP를 할당해 주기 때문에 휘발성입니다.
일반적으로 Deployment를 사용해서 생성하는 편이라 Pod를 직접 생성 할 일은 없습니다.

SimplePod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
spec:
  containers:                 // containers 아래에 컨테이너들을 설정합니다.
  - name: container1               
    image: tmkube/p8000        // container1 이미지
    ports:
    - containerPort: 8000            // container1 Port 설정
  - name: container2        
    image: tmkube/p8080           // container2 이미지
    ports:
- containerPort: 8080             // container2 Port 설정

1-1 생성

#kubectl apply -f SimplePod.yaml

1-2 확인

다음 명령어로 생성한 Pod의 ClusterIP를 확인할 수 있습니다.
#kubectl describe pods/pod-1 | more

컨테이너 통신 확인
#curl 10.32.0.5:8000

컨테이너 접속
#kubectl exec --stdin --tty pod-1 -- /bin/bash!

현재 container1에 접속한 상태이다. 이제 container 2와 통신이 잘 이루어지는지 확인해보자.

2. Label

각각의 파드나 오브젝트별로 Label을 key:value 값으로 설정해 줄 수 있는데. 보통 사용방법으로는 pod를 프로덕션, 개발, db 등 환경을 나눠서 Lable을 정해준 뒤, 서비스를 필요에 맞게 설정해 놓고 pod를 끌어오게 합니다.
그러면 pod1~6까지 만들어보고 각각 라벨을 분류해 보겠습니다.

출처 : https://www.inflearn.com/users/@kubetm
https://kubetm.github.io/k8s/03-beginner-basic-resource/pod/

위의 이미지를 참고해서 type, lo를 분류하여 6개의 pod를 만듭니다.

Pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:
    type: web
    lo: dev
spec:
  containers:
  - name: container
image: kubetm/init

2-1 Label Selector

'lo: production'에 해당하는 Pod만을 가져오는 service를 생성합니다.

proService.yaml
apiVersion: v1
kind: Service
metadata:
  name: svc-for-prod
spec:
  selector:
    lo: production
  ports:
  - port: 8080

#kubectl apply -f proService.yaml
Service를 실행하면 label 셀렉터가 'lo:production'에 맞는 Pod를 끌어와서 하나의 묶음으로 만들고 ClusterIp를 생성한다.

3. Node Schedule

Pod를 생성할 때, 원하는 Node를 선정해서 사용할 수 있습니다. 보통은 스케쥴러가 자동으로 할당해줍니다.

node.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-3
spec:
  nodeSelector:
    kubernetes.io/hostname: node1
  containers:
  - name: container
image: kubetm/init

4. 명령어

Create
-> yaml 파일을 생성
#kubectl create -f ./pod.yaml

-> 명령어 실행과 함께 작성
#kubectl create -f <<END
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: container
image: kubetm/init
END

Apply
#kubectl appy -f ./pod.yaml

Get
-> 기본 Pod 리스트 조회
#kubectl get pods -n default

-> 세부 정보 조회
#kubectl get pods -o wide

->Pod 이름 지정
#kubectl get pod pod1

-> Json 형태로 출력
#kubectl get pod pod1 -o json

Desribe
#kubectl describe pod pod1

Delete
#kubectl delete -f ./pod.yaml

Exec
#kubectl exec pod1 -it /bin/bash

-> 컨테이너가 둘 이상일 때
#kubectl exec pod1 -c con1 -it /bin/bash

profile
장생농씬가?

0개의 댓글