반응형
이번 글에서는 이전 글에서 생성한 Podman 컨테이너 이미지를 Kubernetes 환경에서 테스트 이미지로 활용해보았습니다.
Kubernetes 환경에서 배포를 진행하기 위해 작성한 YAML 파일을 소개하며 실제로 배포 및 서비스 구성하였으며, 실습을 통해 구성한 요소들에 대한 개념을 설명한 후, 실습 과정이 나타나 있습니다.
🔹 Kubernetes 구성요소 개념

1. Pod
- Kubernetes에서 가장 기본적인 배포 단위로, Pod는 컨테이너를 담는 껍데기
- 같은 Pod의 컨테이너끼리는 localhost로 통신이 가능
- 하나 이상의 컨테이너 그룹으로, 동일한 노드에서 실행
- 컨테이너 간 스토리지와 네트워크 리소스를 공유
- 같은 Pod 안의 컨테이너들은 같은 네트워크 네임스페이스(IP, 포트)와 볼륨을 공유한다.
2. Container
- 실제 실행되는 애플리케이션 단위
- Pod 내에 포함됨
- Docker 또는 Podman 등의 런타임 위에서 실행되며, 하나의 이미지로부터 생성된다.
3. Deployment
- Pod를 관리하고, 원하는 상태(desired state)를 유지시켜 주는 컨트롤러
- Pod 생성, 업데이트, 롤백 등을 자동화
- 지정된 수의 Pod(replica 개수)를 항상 유지하고, 장애 시 자동 복구
4. Service
- 클러스터 내부 또는 외부에서 Pod에 접근할 수 있게 하는 리소스
- Pod들의 IP가 바뀌어도 항상 일정한 접근 경로를 보장해주는 네트워크 프록시 역할
- Pod에 대해 네트워크 추상화를 제공
- IP 주소 및 DNS 이름을 통해 접근 가능
- ClusterIP, NodePort, LoadBalancer 등의 타입 제공
- ClusterIP : 클러스터 내부 통신용(default)
- NodePort : 외부에서 클러스터 노드 IP:Port으로 접근이 가능(=포트포워딩) *이번 테스트에서 사용한 네트워크 유형*
- LoadBalancer : 클라우드 환경에서 로드밸런서 생성
- 외부에서 pod으로 접속하기 위해서는 NodePort나 LoadBalancer 사용해야 한다.
🔹 환경 및 구성
- Kubernetes 클러스터 (1 마스터, 2 워커 노드)
- Podman으로 생성한 컨테이너 이미지
- 로컬 컨테이너 이미지 저장소 (Local Registry)
1. Kubernetes 배포(Deployment) 구성
Podman을 통해 만들어진 이미지를 기반으로 Kubernetes에 배포를 수행합니다. 아래는 Kubernetes Deployment YAML 파일 예시입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
app: myapp
spec:
replicas: 3 # 3개 pod가 항상 유지
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: 192.168.0.10:5000/myapp-env:init # 로컬 레지스트리 이미지
imagePullPolicy: Always
command: ["/bin/bash", "-c", "/app/procstart.sh && tail -f /dev/null"]
ports:
- containerPort: 22
- replicas: 컨테이너 복제본 개수 지정
- image: Podman을 통해 로컬 레지스트리에 등록한 이미지 사용
- imagePullPolicy: 항상 최신 이미지를 가져오도록 설정
2. Kubernetes 서비스(Service) 구성
생성한 Pod에 외부에서 접근할 수 있도록 NodePort 타입의 서비스를 설정합니다.
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
selector:
app: myapp
ports:
- name: ssh
port: 22
targetPort: 22
nodePort: 30022 # Host에서 실제 오픈할 포트(포트포워딩)
- type: NodePort: 외부에서 노드의 포트를 통해 접근 가능하도록 설정
- nodePort: Kubernetes가 자동으로 할당하는 포트 번호
3. Kubernetes 리소스 배포
구성한 YAML 파일을 사용하여 Kubernetes 클러스터에 리소스를 생성합니다.
kubectl apply -f myapp-deployment.yaml
kubectl apply -f myapp-service.yaml
배포된 리소스 상태는 다음 명령어로 확인할 수 있습니다.
kubectl get deployments
kubectl get pods -o wide
kubectl get services
배포된 pod 접속은 아래 명령어로 가능합니다.
# pod 접속
kubectl exec -it [Pod ID] -- /bin/bash
# 실행 중인 Pod의 컨테이너 로그 조회
# 자동 실행 쉘 스크립트(/app/processstart.sh) 정상 실행 확인
kubectl logs [Pod ID]
# 만약 Pod 실행이 비정상일 경우 아래 명령어로 상세 정보 확인 가능
kubectl describe pod [Pod ID]
🔹 마무리
이렇게 Podman으로 생성한 로컬 컨테이너 이미지를 Kubernetes 환경에서 손쉽게 배포하고 서비스를 구성할 수 있었습니다.
다음에는 Kubernetes 구성요소들에 대해 개념을 더 익히고 새로운 리소스 자동화 방식들을 알아보겠습니다!

반응형
'기술 공부 > Cloud&Container' 카테고리의 다른 글
| AWS VPC 네트워킹 구성 실습 - Public/Private 서브넷과 ALB (0) | 2026.02.08 |
|---|---|
| [Kubernetes 실습 #4] 웹 기반 K8s 관리 시스템 개발 과정 (1) | 2025.08.13 |
| [Kubernetes 실습 #3] kubectl 명령어의 한계와 웹 기반 관리 시스템 구상 (3) | 2025.08.10 |
| [Kubernetes 실습 #1] Podman을 이용한 컨테이너 이미지 생성 및 로컬 레지스트리에 Push하기 (0) | 2025.07.19 |
| 2024. 12 AWS Certified Solutions Architect – Associate (SAA C03) 자격증 취득 후기 (1) | 2025.07.13 |