쿠버네티스에서 ActiveMQ(Queue) 포드 및 서비스 배포 가이드
이번 시간에는 여러분이 직접 ActiveMQ(Queue) 서비스를 쿠버네티스에 포드와 서비스로 배포하는 방법을 실습해보겠다.
1. 실습 개요
필요한 이미지는 richardchesterwood/k8s-fleetman-queue:release1이다.
release1 태그를 사용하는 이유는 프로토타입과 구분되는 실제 릴리스 환경에서만 큐가 동작하도록 하기 위함이다.
포드가 실행 중일 때 8161 포트로 큐 관리 콘솔이 노출된다.
관리 콘솔의 기본 아이디와 비밀번호는 각각 admin, admin이다.
NodePort로 8161 포트를 직접 노출하는 것은 권장되지 않으나, 현재는 로컬 환경이므로 30010 포트로 노출한다.
포트 번호는 30000~32767 사이에서 임의로 선택 가능하며, 여기서는 30010을 사용한다.
실습 하기에 앞서 minikube를 실행한다.
2. pods.yaml Queue 추가
포드 정의는 아래와 같이 작성한다.
여러 개의 포드를 한 파일에 정의할 때는 각 리소스 사이에 ---를 반드시 넣는다.
apiVersion: v1
kind: Pod
metadata:
name: queue
labels:
app: queue
spec:
containers:
- name: queue
image: richardchesterwood/k8s-fleetman-queue:release1-arm64
3. services.yaml Queue Service 추가
서비스 정의는 아래와 같이 작성한다.
selector의 app 값이 포드의 label과 일치해야 한다.
apiVersion: v1
kind: Service
metadata:
name: fleetman-queue
spec:
selector:
app: queue
ports:
- name: http
port: 8161
nodePort: 30010
type: NodePort
4. 파일 적용 및 리소스 생성
작성한 yaml 파일을 적용한다.
kubectl apply -f pods.yaml
kubectl apply -f services.yaml
또는, 두 파일이 같은 디렉토리에 있다면 아래처럼 한 번에 적용할 수도 있다.
kubectl apply -f .
변경 사항이 없으면 unchanged라고 표시된다.
5. 리소스 상태 확인
포드와 서비스가 정상적으로 생성되었는지 확인한다.
kubectl get all
포드가 Running 상태인지, 서비스가 정상적으로 노출되었는지 확인한다.
포드 상세 정보는 아래 명령어로 확인한다.
kubectl describe pod queue
6. ActiveMQ 관리 콘솔 접속
minikube의 IP 주소를 확인한다.
minikube ip
브라우저에서 http://<minikube-ip>:30010으로 접속한다.
ActiveMQ 관리 콘솔 화면이 나타나면,
Manage ActiveMQ broker 버튼을 클릭하고
아이디와 비밀번호에 각각 admin, admin을 입력한다.
이후 Queues 메뉴에서 큐의 상태를 확인할 수 있다.
7. 도커 엔진 기반 minikube 환경에서의 포트포워딩
만약 minikube를 도커 엔진 드라이버로 실행 중이라면,
NodePort(30010, 30080 등)로 직접 접근이 불가능하다.
이때는 아래와 같이 포트포워딩 명령어를 실행해야 한다.
kubectl port-forward service/fleetman-webapp 8080:80 &
kubectl port-forward service/fleetman-queue 8161:8161 &
이렇게 하면 내 컴퓨터의 8080, 8161 포트가 각각 webapp 서비스(80포트), queue 서비스(8161포트)로 연결된다.
브라우저에서 http://localhost:8080(webapp), http://localhost:8161(ActiveMQ 콘솔)로 접속하면 된다.
포트포워딩 종료
왜 포트포워딩이 필요한가?
도커 엔진 기반 minikube 환경에서는
클러스터가 내부 가상 네트워크에서 동작하기 때문에
NodePort로 외부에서 바로 접근할 수 없다.
포트포워딩을 통해서만 로컬 PC에서 쿠버네티스 서비스에 직접 접근이 가능하다.
8. 최종 실습 파일
pods.yaml
포드 정의는 아래와 같이 작성한다.
여러 개의 포드를 한 파일에 정의할 때는 각 리소스 사이에 ---를 반드시 넣는다.
apiVersion: v1
kind: Pod
metadata:
name: webapp
labels:
app: webapp
release: "0"
spec:
containers:
- name: webapp
image: richardchesterwood/k8s-fleetman-webapp-angular:release0-arm64
---
apiVersion: v1
kind: Pod
metadata:
name: webapp-release-0-5
labels:
app: webapp
release: "0-5"
spec:
containers:
- name: webapp
image: richardchesterwood/k8s-fleetman-webapp-angular:release0-5-arm64
---
apiVersion: v1
kind: Pod
metadata:
name: queue
labels:
app: queue
release: "0"
spec:
containers:
- name: queue
image: richardchesterwood/k8s-fleetman-queue:release1-arm64
services.yaml
서비스 정의는 아래와 같이 작성한다.
selector의 app 값이 포드의 label과 일치해야 한다.
apiVersion: v1
kind: Service
metadata:
name: fleetman-webapp
spec:
# This defines which pods are going to be represented by this Service
# The service becomes a network endpoint for either other services
# or maybe external users to connect to (eg browser)
selector:
app: webapp
release: "0-5"
ports:
- name: http
port: 80
nodePort: 30080
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
name: fleetman-queue
spec:
# This defines which pods are going to be represented by this Service
# The service becomes a network endpoint for either other services
# or maybe external users to connect to (eg browser)
selector:
app: queue
ports:
- name: http
port: 8161
nodePort: 30010
type: NodePort
'Server-side 개발 & 트러블 슈팅 > 🚢 Kubernetes (쿠버네티스)' 카테고리의 다른 글
[minikube] 쿠버네티스 디플로이먼트(Deployment)를 이용한 롤링 베포, 롤백 가이드 (rolling, rollout) (1) | 2025.04.30 |
---|---|
[minikube] 쿠버네티스 레플리카셋(replicaset)을 이용한 무중단 베포 가이드 (고가용성 유지) (0) | 2025.04.30 |
[minikube] 쿠버네티스 서비스(Service) 구조와 실행 (0) | 2025.04.08 |
[minikube] 쿠버네티스 포드(pod) 구조와 실행 (0) | 2025.04.08 |
[minikube] Kubernetes 실습을 위한 Minikube 설치 가이드 (Mac / Windows / Linux) (0) | 2025.04.08 |
댓글