feat(nats): install NATS

This commit is contained in:
Masaki Yatsu
2025-12-04 15:48:53 +09:00
parent d9ee90c32c
commit 6fa0d27f7d
4 changed files with 242 additions and 0 deletions

View File

@@ -28,6 +28,7 @@ mod longhorn
mod metabase mod metabase
mod mlflow mod mlflow
mod minio mod minio
mod nats
mod nvidia-device-plugin mod nvidia-device-plugin
mod fairwinds-polaris mod fairwinds-polaris
mod oauth2-proxy mod oauth2-proxy

113
nats/justfile Normal file
View File

@@ -0,0 +1,113 @@
set fallback := true
export NATS_NAMESPACE := env("NATS_NAMESPACE", "nats")
export NATS_CHART_VERSION := env("NATS_CHART_VERSION", "2.12.2")
export NATS_REPLICAS := env("NATS_REPLICAS", "1")
export NATS_JETSTREAM_ENABLED := env("NATS_JETSTREAM_ENABLED", "true")
export NATS_JETSTREAM_STORAGE_SIZE := env("NATS_JETSTREAM_STORAGE_SIZE", "10Gi")
export NATS_JETSTREAM_MEMORY_SIZE := env("NATS_JETSTREAM_MEMORY_SIZE", "256Mi")
[private]
default:
@just --list --unsorted --list-submodules
# Add Helm repository
add-helm-repo:
helm repo add nats https://nats-io.github.io/k8s/helm/charts/
helm repo update nats
# Remove Helm repository
remove-helm-repo:
helm repo remove nats
# Create NATS namespace
create-namespace:
#!/bin/bash
set -euo pipefail
if ! kubectl get namespace ${NATS_NAMESPACE} &>/dev/null; then
kubectl create namespace ${NATS_NAMESPACE}
fi
kubectl label namespace ${NATS_NAMESPACE} \
pod-security.kubernetes.io/enforce=restricted \
pod-security.kubernetes.io/enforce-version=latest \
pod-security.kubernetes.io/warn=restricted \
pod-security.kubernetes.io/warn-version=latest \
--overwrite
# Delete NATS namespace
delete-namespace:
kubectl delete namespace ${NATS_NAMESPACE} --ignore-not-found
# Install NATS
install:
#!/bin/bash
set -euo pipefail
just create-namespace
just add-helm-repo
gomplate -f values.gomplate.yaml -o values.yaml
helm upgrade --install nats nats/nats \
--version ${NATS_CHART_VERSION} \
-n ${NATS_NAMESPACE} \
-f values.yaml \
--wait
echo ""
echo "NATS installed successfully"
echo "Namespace: ${NATS_NAMESPACE}"
echo "Replicas: ${NATS_REPLICAS}"
echo "JetStream enabled: ${NATS_JETSTREAM_ENABLED}"
echo ""
echo "Internal URL: nats://nats.${NATS_NAMESPACE}.svc:4222"
# Upgrade NATS
upgrade:
#!/bin/bash
set -euo pipefail
gomplate -f values.gomplate.yaml -o values.yaml
helm upgrade nats nats/nats \
--version ${NATS_CHART_VERSION} \
-n ${NATS_NAMESPACE} \
-f values.yaml \
--wait
echo "NATS upgraded successfully"
# Uninstall NATS
uninstall:
#!/bin/bash
set -euo pipefail
if ! gum confirm "Are you sure you want to uninstall NATS?"; then
echo "Aborted"
exit 0
fi
helm uninstall nats -n ${NATS_NAMESPACE} --wait --ignore-not-found
just delete-namespace
echo "NATS uninstalled"
# Show NATS status
status:
kubectl get pods -n ${NATS_NAMESPACE}
kubectl get svc -n ${NATS_NAMESPACE}
# Show NATS logs
logs:
kubectl logs -n ${NATS_NAMESPACE} -l app.kubernetes.io/name=nats -f
# Show server info via monitoring endpoint
server-info:
kubectl exec -n ${NATS_NAMESPACE} nats-0 -c nats -- \
wget -qO- http://localhost:8222/varz | head -50
# Show JetStream info via monitoring endpoint
js-info:
kubectl exec -n ${NATS_NAMESPACE} nats-0 -c nats -- \
wget -qO- http://localhost:8222/jsz
# Port forward for local testing
port-forward:
@echo "NATS available at localhost:4222"
@echo "Monitor available at http://localhost:8222"
kubectl port-forward -n ${NATS_NAMESPACE} svc/nats 4222:4222 8222:8222

64
nats/values.gomplate.yaml Normal file
View File

@@ -0,0 +1,64 @@
config:
cluster:
enabled: {{ if gt (conv.ToInt .Env.NATS_REPLICAS) 1 }}true{{ else }}false{{ end }}
replicas: {{ .Env.NATS_REPLICAS }}
jetstream:
enabled: {{ .Env.NATS_JETSTREAM_ENABLED }}
fileStore:
enabled: true
dir: /data
pvc:
enabled: true
size: {{ .Env.NATS_JETSTREAM_STORAGE_SIZE }}
memoryStore:
enabled: true
maxSize: {{ .Env.NATS_JETSTREAM_MEMORY_SIZE }}
monitor:
enabled: true
port: 8222
container:
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 500m
memory: 512Mi
merge:
securityContext:
runAsUser: 1000
runAsNonRoot: true
allowPrivilegeEscalation: false
seccompProfile:
type: RuntimeDefault
capabilities:
drop:
- ALL
reloader:
enabled: true
merge:
securityContext:
runAsUser: 1000
runAsNonRoot: true
allowPrivilegeEscalation: false
seccompProfile:
type: RuntimeDefault
capabilities:
drop:
- ALL
podTemplate:
merge:
spec:
securityContext:
fsGroup: 1000
seccompProfile:
type: RuntimeDefault
natsBox:
enabled: false

64
nats/values.yaml Normal file
View File

@@ -0,0 +1,64 @@
config:
cluster:
enabled: false
replicas: 1
jetstream:
enabled: true
fileStore:
enabled: true
dir: /data
pvc:
enabled: true
size: 10Gi
memoryStore:
enabled: true
maxSize: 256Mi
monitor:
enabled: true
port: 8222
container:
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 500m
memory: 512Mi
merge:
securityContext:
runAsUser: 1000
runAsNonRoot: true
allowPrivilegeEscalation: false
seccompProfile:
type: RuntimeDefault
capabilities:
drop:
- ALL
reloader:
enabled: true
merge:
securityContext:
runAsUser: 1000
runAsNonRoot: true
allowPrivilegeEscalation: false
seccompProfile:
type: RuntimeDefault
capabilities:
drop:
- ALL
podTemplate:
merge:
spec:
securityContext:
fsGroup: 1000
seccompProfile:
type: RuntimeDefault
natsBox:
enabled: false