369 lines
9.3 KiB
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
|