k8s-infra-cluster/infra/nats-cluster.yaml
2026-03-25 11:46:39 +01:00

372 lines
20 KiB
YAML

---
# Source: nats/templates/pod-disruption-budget.yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
labels:
app.kubernetes.io/component: nats
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nats
app.kubernetes.io/version: 2.12.5
helm.sh/chart: nats-2.12.5
name: nats-cluster
spec:
maxUnavailable: 1
selector:
matchLabels:
app.kubernetes.io/component: nats
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/name: nats
---
# Source: nats/templates/nats-box/contexts-secret.yaml
apiVersion: v1
kind: Secret
metadata:
labels:
app.kubernetes.io/component: nats-box
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nats
app.kubernetes.io/version: 2.12.5
helm.sh/chart: nats-2.12.5
name: nats-cluster-box-contexts
stringData:
default.json: |
{
"url": "nats://nats-cluster"
}
type: Opaque
---
# Source: nats/templates/config-map.yaml
apiVersion: v1
data:
nats.conf: |
{
"cluster": {
"name": "nats-cluster",
"no_advertise": true,
"port": 6222,
"routes": [
"nats://nats-cluster-0.nats-cluster-headless:6222",
"nats://nats-cluster-1.nats-cluster-headless:6222",
"nats://nats-cluster-2.nats-cluster-headless:6222"
]
},
"http_port": 8222,
"jetstream": {
"max_file_store": 10Gi,
"max_memory_store": 0,
"store_dir": "/data"
},
"lame_duck_duration": "30s",
"lame_duck_grace_period": "10s",
"pid_file": "/var/run/nats/nats.pid",
"port": 4222,
"server_name": $SERVER_NAME
}
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/component: nats
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nats
app.kubernetes.io/version: 2.12.5
helm.sh/chart: nats-2.12.5
name: nats-cluster-config
---
# Source: nats/templates/headless-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: nats
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nats
app.kubernetes.io/version: 2.12.5
helm.sh/chart: nats-2.12.5
name: nats-cluster-headless
spec:
clusterIP: None
ports:
- appProtocol: tcp
name: nats
port: 4222
targetPort: nats
- appProtocol: tcp
name: cluster
port: 6222
targetPort: cluster
- appProtocol: http
name: monitor
port: 8222
targetPort: monitor
publishNotReadyAddresses: true
selector:
app.kubernetes.io/component: nats
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/name: nats
---
# Source: nats/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: nats
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nats
app.kubernetes.io/version: 2.12.5
helm.sh/chart: nats-2.12.5
name: nats-cluster
spec:
ports:
- appProtocol: tcp
name: nats
port: 4222
targetPort: nats
selector:
app.kubernetes.io/component: nats
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/name: nats
---
# Source: nats/templates/nats-box/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: nats-box
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nats
app.kubernetes.io/version: 2.12.5
helm.sh/chart: nats-2.12.5
name: nats-cluster-box
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: nats-box
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/name: nats
template:
metadata:
labels:
app.kubernetes.io/component: nats-box
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nats
app.kubernetes.io/version: 2.12.5
helm.sh/chart: nats-2.12.5
spec:
containers:
- args:
- sh
- -ec
- trap true INT TERM; sleep infinity & wait
command:
- sh
- -ec
- |
work_dir="$(pwd)"
mkdir -p "$XDG_CONFIG_HOME/nats"
cd "$XDG_CONFIG_HOME/nats"
if ! [ -s context ]; then
ln -s /etc/nats-contexts context
fi
if ! [ -f context.txt ]; then
echo -n "default" > context.txt
fi
cd "$work_dir"
exec /entrypoint.sh "$@"
- --
image: natsio/nats-box:0.19.3
name: nats-box
resources: null
volumeMounts:
- mountPath: /etc/nats-contexts
name: contexts
enableServiceLinks: false
volumes:
- name: contexts
secret:
secretName: nats-cluster-box-contexts
---
# Source: nats/templates/stateful-set.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/component: nats
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nats
app.kubernetes.io/version: 2.12.5
helm.sh/chart: nats-2.12.5
name: nats-cluster
spec:
podManagementPolicy: Parallel
replicas: 3
selector:
matchLabels:
app.kubernetes.io/component: nats
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/name: nats
serviceName: nats-cluster-headless
template:
metadata:
annotations: null
labels:
app.kubernetes.io/component: nats
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nats
app.kubernetes.io/version: 2.12.5
helm.sh/chart: nats-2.12.5
spec:
containers:
- args:
- --config
- /etc/nats-config/nats.conf
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: SERVER_NAME
value: $(POD_NAME)
image: nats:2.12.5-alpine
lifecycle:
preStop:
exec:
command:
- nats-server
- -sl=ldm=/var/run/nats/nats.pid
livenessProbe:
failureThreshold: 3
httpGet:
path: /healthz?js-enabled-only=true
port: monitor
initialDelaySeconds: 10
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 5
name: nats
ports:
- containerPort: 4222
name: nats
- containerPort: 6222
name: cluster
- containerPort: 8222
name: monitor
readinessProbe:
failureThreshold: 3
httpGet:
path: /healthz?js-server-only=true
port: monitor
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
resources: {}
startupProbe:
failureThreshold: 90
httpGet:
path: /healthz
port: monitor
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
volumeMounts:
- mountPath: /etc/nats-config
name: config
- mountPath: /var/run/nats
name: pid
- mountPath: /data
name: nats-cluster-js
- args:
- -pid
- /var/run/nats/nats.pid
- -config
- /etc/nats-config/nats.conf
image: natsio/nats-server-config-reloader:0.21.1
name: reloader
volumeMounts:
- mountPath: /var/run/nats
name: pid
- mountPath: /etc/nats-config
name: config
enableServiceLinks: false
shareProcessNamespace: true
terminationGracePeriodSeconds: 60
volumes:
- configMap:
name: nats-cluster-config
name: config
- emptyDir: {}
name: pid
volumeClaimTemplates:
- metadata:
name: nats-cluster-js
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: longhorn
---
# Source: nats/templates/tests/request-reply.yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
helm.sh/hook: test
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
labels:
app.kubernetes.io/component: test-request-reply
app.kubernetes.io/instance: nats-cluster
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nats
app.kubernetes.io/version: 2.12.5
helm.sh/chart: nats-2.12.5
name: nats-cluster-test-request-reply
spec:
containers:
- args:
- sh
- -ec
- nats reply --echo echo & pid="$!"; sleep 1; nats request echo hi > /tmp/resp;
kill "$pid"; wait; grep -qF hi /tmp/resp
command:
- sh
- -ec
- |
work_dir="$(pwd)"
mkdir -p "$XDG_CONFIG_HOME/nats"
cd "$XDG_CONFIG_HOME/nats"
if ! [ -s context ]; then
ln -s /etc/nats-contexts context
fi
if ! [ -f context.txt ]; then
echo -n "default" > context.txt
fi
cd "$work_dir"
exec /entrypoint.sh "$@"
- --
image: natsio/nats-box:0.19.3
name: nats-box
resources: null
volumeMounts:
- mountPath: /etc/nats-contexts
name: contexts
enableServiceLinks: false
restartPolicy: Never
volumes:
- name: contexts
secret:
secretName: nats-cluster-box-contexts