NATS는 고성능의 오픈 소스 메시징 시스템으로, 마이크로서비스, IoT, 클라우드 네이티브 애플리케이션 등 다양한 분야에서 활용되고 있습니다. 이 블로그에서는 Docker-Compose와 Helm을 이용하여 NATS를 설치하고 실행하는 방법을 자세히 설명합니다. 이 가이드를 통해 로컬 개발 환경부터 Kubernetes 클러스터까지 손쉽게 NATS를 설정할 수 있습니다.
사전 준비 사항:
- Docker 및 Docker-Compose가 설치된 환경
- Kubernetes 클러스터 접근 권한
- Helm이 설치된 환경
전체 내용:
- Docker Compose로 설치:
- Localhost에 Docker를 이용하여 설치.
- Kubernetes에 설치:
- Helm을 이용하여 설치.
* Local에 Docker Compose 이용
* 예제에서 데이터 파일을 저장할 로컬경로를 “/data/nats”로 지정 했습니다. 실행을 위한 설정파일인 nats.conf 파일은 외부에서 만들어 컨테이너에 전달 합니다.
user:~$ sudo mkdir -p /data/nats
user:~$ cd /data/nats
user:/data/nats$ vi nats.conf
### NATS Clients Port ###############################################
port: 4222
# PID file shared with configuration reloader.
# pid_file: "/var/run/nats/nats.pid"
### Monitoring #####################################################
http: 8222
server_name: nats-0
server_tags: [
"mem:4Gi",
]
### NATS JetStream ##################################################
jetstream {
max_mem:2G
store_dir: "/data"
max_file:10Gi
unique_tag: "natsuniquetag"
}
### NATS Full Mesh Clustering Setup #################################
# cluster {
# name: natscluster
# port: 6222
# routes = [
# nats://nats-0.nats.nats.svc.cluster.local:6222
# nats://nats-1.nats.nats.svc.cluster.local:6222
# nats://nats-2.nats.nats.svc.cluster.local:6222
# ]
# cluster_advertise: $CLUSTER_ADVERTISE
# connect_retries: 120
# }
lame_duck_grace_period: 10s
lame_duck_duration: 30s
docker-compose.yml
services:
# define nats container
nats:
image: nats:alpine
restart: unless-stopped
container_name: nats
ports:
- "4222:4222" # client port
- "8222:8222" # monitoring port
volumes:
- /data/nats/nats.conf:/etc/nats/nats.conf
- /data/nats:/data
command: -c /etc/nats/nats.conf
실행 & 제거
# start container
user:~$ docker compose up nats -d
# stop container
user:~$ docker container stop
# remove container
user:~$ docker container rm
* Kubernetes에 HELM 이용
Kubernetes 환경에서 NATS을 설치할 때 Helm을 활용하면 간단하고 효율적으로 설치 및 관리를 할 수 있습니다. 이번 방법은 NATS 공식 Helm Chart와 Docker 이미지를 활용해 설치하는 가장 간단한 방법을 소개합니다.
repository 등록
user:~$ helm repo add nats https://nats-io.github.io/k8s/helm/charts/
user:~$ helm repo update
설정 옵션 확인
user:~$ helm show values nats/nats > nats-values.yaml
* Helm에 values에서 설정할 수 있는 옵션과 각 옵션들의 정확한 위치를 확인하기 위해 values.yaml 파일로 저장 합니다.
* 공식문서를 통해 확인할 수도 있습니다. : https://artifacthub.io/packages/helm/nats/nats
* 공식문서를 통해 확인할 수도 있습니다. : https://artifacthub.io/packages/helm/nats/nats
설치
user:~$ helm install nats nats/nats --namespace nats --create-namespace \
--set config.jetstream.enabled=true \
--set config.jetstream.fileStore.pvc.size=5Gi \
--set config.jetstream.fileStore.pvc.storageClassName=local-path
* NATS를 외부에서 접속할 수 있도록 하기 위해 loadBalancer 타입의 service를 만들어 줍니다.
# export port (optional)
user:~$ cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: nats
namespace: nats
spec:
type: LoadBalancer
ports:
- port: 4222
targetPort: 4222
protocol: TCP
selector:
app.kubernetes.io/instance: nats
app.kubernetes.io/name: nats
EOF
* 실행 확인
# Check if it is installed and running properly.
user:~$ kubectl get all -n nats