Files
Olares/frameworks/tapr/config/cluster/deploy/nats_deployment.yaml

369 lines
9.3 KiB
YAML

{{ $nats_rootpath := printf "%s%s" .Values.rootPath "/userdata/dbdata" }}
{{- $namespace := printf "%s" "os-system" -}}
{{- $nats_secret := (lookup "v1" "Secret" $namespace "nats-secrets") -}}
{{- $nats_password := "" -}}
{{ if $nats_secret -}}
{{ $nats_password = (index $nats_secret "data" "nats_password") }}
{{ else -}}
{{ $nats_password = randAlpha 64 | b64enc }}
{{- end -}}
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nats-data-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: '50Gi'
hostPath:
path: {{ $nats_rootpath }}/nats_data
type: DirectoryOrCreate
persistentVolumeReclaimPolicy: Delete
volumeMode: Filesystem
storageClassName: nats-data-sc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nats-data-pvc
namespace: {{ .Release.Namespace }}
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: '50Gi'
volumeMode: Filesystem
volumeName: nats-data-pv
storageClassName: nats-data-sc
---
apiVersion: v1
kind: Secret
metadata:
name: nats-secrets
namespace: os-system
type: Opaque
data:
nats_password: {{ $nats_password }}
---
# Source: nats/templates/nats-box/contexts-secret.yaml
apiVersion: v1
kind: Secret
metadata:
labels:
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
app.kubernetes.io/component: nats
name: nats-box-contexts
stringData:
default.json: |
{
"url": "nats://nats"
}
type: Opaque
---
# Source: nats/templates/config-map.yaml
apiVersion: v1
data:
nats.conf: |
{
"http_port": 8222,
"jetstream": {
"max_file_store": 10102410241024,
"max_memory_store": 0,
"store_dir": "/data"
},
"accounts": {
"terminus": {
"jetstream": enabled,
"users": [
{
"user": "admin",
"password": $ADMIN_PASSWORD,
"permissions": {
"publish": {
"allow": [">"]
},
"subscribe": {
"allow": [">"]
}
}
}
]
}
},
"port": 4222,
"pid_file": "/var/run/nats/nats.pid",
"server_name": "nats-0"
}
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
app.kubernetes.io/component: nats
name: nats-config
namespace: {{ .Release.Namespace }}
---
# Source: nats/templates/headless-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
app.kubernetes.io/component: nats
name: nats-headless
spec:
clusterIP: None
ports:
- appProtocol: tcp
name: nats
port: 4222
targetPort: nats
- appProtocol: http
name: monitor
port: 8222
targetPort: monitor
publishNotReadyAddresses: true
selector:
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
app.kubernetes.io/component: nats
---
# Source: nats/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
app.kubernetes.io/component: nats
name: nats
spec:
ports:
- appProtocol: tcp
name: nats
port: 4222
targetPort: nats
selector:
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
app.kubernetes.io/component: nats
---
# Source: nats/templates/nats-box/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: nats-box
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
applications.app.bytetrade.io/author: bytetrade.io
name: nats-box
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: nats-box
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
template:
metadata:
labels:
app.kubernetes.io/component: nats-box
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
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.14.3
name: nats-box
volumeMounts:
- mountPath: /etc/nats-contexts
name: contexts
- mountPath: /data
name: nats-data
enableServiceLinks: false
volumes:
- name: contexts
secret:
secretName: nats-box-contexts
- hostPath:
path: {{ .Values.rootPath }}/userdata/dbdata/nats_data
type: DirectoryOrCreate
name: nats-data
---
# Source: nats/templates/stateful-set.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/component: nats
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
applications.app.bytetrade.io/author: bytetrade.io
name: nats
spec:
podManagementPolicy: Parallel
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: nats
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
serviceName: {{ .Release.Name}}-headless
template:
metadata:
annotations:
checksum/config: e37e733aab5e99b5d785f54115b3c34dfb02b80d350b62e5b211794a2ad060ec
labels:
app.kubernetes.io/component: nats
app.kubernetes.io/name: nats
app.kubernetes.io/instance: nats
spec:
initContainers:
- name: generate-config
image: busybox:1.28
command:
- sh
- -c
- |
if [ ! -f /data/config/nats.conf ]; then
cat /etc/nats-config/nats.conf > /data/config/nats.conf
else
echo "nats config file already exists"
fi
volumeMounts:
- mountPath: /etc/nats-config
name: config
readOnly: false
- mountPath: /data
name: nats-data
containers:
- args:
- --config
- /data/config/nats.conf
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: SERVER_NAME
value: $(POD_NAME)
- name: ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: nats-secrets
key: nats_password
image: nats:2.10.17-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: 8222
name: monitor
readinessProbe:
failureThreshold: 3
httpGet:
path: /healthz?js-server-only=true
port: monitor
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
startupProbe:
failureThreshold: 90
httpGet:
path: /healthz
port: monitor
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
volumeMounts:
- mountPath: /var/run/nats
name: pid
- mountPath: /etc/nats-config
name: config
readOnly: false
- mountPath: /data
name: nats-data
- args:
- -pid
- /var/run/nats/nats.pid
- -config
- /data/config/nats.conf
image: beclab/nats-server-config-reloader:v1
name: reloader
env:
- name: ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: nats-secrets
key: nats_password
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
add:
- SYS_PTRACE
volumeMounts:
- mountPath: /var/run/nats
name: pid
- mountPath: /etc/nats-config
name: config
readOnly: false
- mountPath: /data
name: nats-data
enableServiceLinks: false
shareProcessNamespace: true
volumes:
- configMap:
name: nats-config
name: config
- emptyDir: {}
name: pid
- name: nats-data
persistentVolumeClaim:
claimName: nats-data-pvc