본문 바로가기

k8s

1. Pod

728x90

- Pod IP 는 Pod가 생성될 때 부여되고, Pod 삭제 후 재생성시 IP가 변경.

- Pod IP는 Cluster 내에서만 연결 가능하고, Cluster 외부에서는 통신이 불가.

※ 통신이 가능하게 하려면 Container를 Service로 연결하고, 그 이후에 Service를 통해서 컨테이너 간에 통신이 가능하다.

- Pod 내부에 여러 개의 Container를 추가할 수 있고, 이 Container가 하나의 App의 기능을 한다.

- Pod 내부의 Container끼리는 localhost로 Port만 지정해서 호출이 가능

- Container 간에 같은 Port를 노출시키면 Pod 생성시 아래와 같은 Port 충돌 에러가 발생.

[root@k8s-master ~]# kubectl logs pod-2 -c 
container2 node:events:497 throw er; // Unhandled 'error' event ^ Error: 
listen EADDRINUSE: address already in use :::8080 at ...

 

Pod 생성을 위한 yaml 예시

# apiVersion
# 작성하는 yaml이 v1 버전의 kubernetes API 버전 문법으로 해석.
# Deployment의 경우, apiVersion: apps/v1 이런 식으로 작성
apiVersion: v1

# kind 
# 어떤 리소스를 만들건지 정의, Deployment? Pod? Service?
kind: Pod

# metadata
# 리소스의 이름(위에서 Pod를 정의했으니, 여기선 'Pod'의 이름이 된다.)
metadata:
  name: pod-1

# Pod를 어떻게 동작시킬지 정의하는 부분
# 컨테이너, 볼륨, 네트워크, 재시작 정책, 환경변수, 리소스 제한 등 정의 가능
spec:
  # Pod 안에서 실행할 컨테이너 목록
  # 하나의 Pod 안에는 여러 개의 컨테이너 정의가 가능
  # 업무간의 연관성이 높은 컨테이너를 묶어서 하나의 Pod로 만든다.
  
  containers:
  	# Pod 내부에서 구분하기 위한 이름
  - name: container1
  
  	# 어떤 Docker 이미지를 사용할 것인가?
    image: kubetm/p8000
        
    ports:
    # 컨테이너가 사용할 Port
    # 외부에서 접근하기 위해 사용하는 Port가 아니다.
    # 외부에서 접근하기 위해서는 Service / NodePort / LoadBalancer / Ingress 등 필요
    - containerPort: 8000
    
  - name: container2
    image: kubetm/p8080
    ports:
    - containerPort: 8080

 

※ 같은 Pod 안에 정의된 Container들은 네트워크를 공유한다.

container1과 container2는 같은 IP를 사용한다는 의미. (같은 Pod = 같은 Network Namespace!!)

 

 

'k8s' 카테고리의 다른 글

6. kubectl [create | apply | get | describe | delete | exec]  (0) 2026.05.08
5. Node Schedule  (0) 2026.05.07
4. Service  (0) 2026.05.07
3. labels  (0) 2026.05.07
쿠버네티스 DAY1  (0) 2023.04.17