Skip to content

Commit 2dcbe7b

Browse files
authored
Sigs add kingbase (#15)
* init * support mysql
1 parent 422878d commit 2dcbe7b

1 file changed

Lines changed: 223 additions & 0 deletions

File tree

template/kingbase/index.yaml

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
apiVersion: app.sealos.io/v1
2+
kind: Template
3+
metadata:
4+
name: kingbase
5+
spec:
6+
title: 'Kingbase'
7+
author: 'Sealos'
8+
description: 'Kingbase 单机版模板,基于 StatefulSet 部署,提供 TCP NodePort 暴露与持久化数据目录。'
9+
readme: ''
10+
icon: 'https://www.kingbase.com.cn/favicon.ico'
11+
templateType: inline
12+
categories:
13+
- database
14+
defaults:
15+
app_name:
16+
type: string
17+
value: kingbase-${{ random(8) }}
18+
db_user:
19+
type: string
20+
value: kingbase
21+
db_password:
22+
type: string
23+
value: ${{ random(16) }}
24+
db_mode:
25+
type: choice
26+
value: oracle
27+
inputs:
28+
storage:
29+
description: 'database storage size (Gi)'
30+
type: string
31+
default: '1'
32+
required: false
33+
db_mode:
34+
description: 'database mode for first initialization, optional: oracle / pg / mysql'
35+
type: choice
36+
default: ${{ defaults.db_mode }}
37+
options:
38+
- oracle
39+
- pg
40+
- mysql
41+
required: false
42+
db_user:
43+
description: 'database initialization username'
44+
type: string
45+
default: ${{ defaults.db_user }}
46+
required: false
47+
db_password:
48+
description: 'database initialization password'
49+
type: string
50+
default: ${{ defaults.db_password }}
51+
required: false
52+
service_port:
53+
description: 'database service port'
54+
type: string
55+
default: '54321'
56+
required: false
57+
58+
---
59+
apiVersion: v1
60+
kind: Service
61+
metadata:
62+
name: ${{ defaults.app_name }}
63+
labels:
64+
app: ${{ defaults.app_name }}
65+
cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }}
66+
spec:
67+
type: NodePort
68+
selector:
69+
app: ${{ defaults.app_name }}
70+
ports:
71+
- port: 54321
72+
targetPort: 54321
73+
protocol: TCP
74+
name: kingdb
75+
76+
---
77+
apiVersion: apps/v1
78+
kind: StatefulSet
79+
metadata:
80+
name: ${{ defaults.app_name }}
81+
annotations:
82+
originImageName: sealos.hub:5000/kingbase_v009r001c010b0004_single_x86:v1
83+
deploy.cloud.sealos.io/minReplicas: '1'
84+
deploy.cloud.sealos.io/maxReplicas: '1'
85+
deploy.cloud.sealos.io/resize: '${{ inputs.storage }}Gi'
86+
labels:
87+
app: ${{ defaults.app_name }}
88+
cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }}
89+
spec:
90+
replicas: 1
91+
revisionHistoryLimit: 1
92+
podManagementPolicy: OrderedReady
93+
serviceName: ${{ defaults.app_name }}
94+
selector:
95+
matchLabels:
96+
app: ${{ defaults.app_name }}
97+
updateStrategy:
98+
type: RollingUpdate
99+
rollingUpdate:
100+
maxUnavailable: 50%
101+
minReadySeconds: 10
102+
persistentVolumeClaimRetentionPolicy:
103+
whenDeleted: Retain
104+
whenScaled: Retain
105+
template:
106+
metadata:
107+
labels:
108+
app: ${{ defaults.app_name }}
109+
spec:
110+
automountServiceAccountToken: false
111+
terminationGracePeriodSeconds: 10
112+
securityContext:
113+
fsGroup: 1000
114+
fsGroupChangePolicy: OnRootMismatch
115+
initContainers:
116+
- name: fix-permissions
117+
image: busybox:1.36
118+
command:
119+
- sh
120+
- -c
121+
- |
122+
mkdir -p /home/kingbase/userdata/data /run/user/1000 /var/run /tmp /var/tmp
123+
chown -R 1000:1000 /home/kingbase /run/user/1000 /var/run /tmp /var/tmp
124+
chmod -R 700 /home/kingbase /run/user/1000
125+
chmod 1777 /tmp /var/tmp /var/run
126+
echo "=== fix-permissions completed ==="
127+
volumeMounts:
128+
- name: vn-homevn-kingbasevn-userdata
129+
mountPath: /home/kingbase/userdata
130+
securityContext:
131+
runAsUser: 0
132+
containers:
133+
- name: ${{ defaults.app_name }}
134+
image: sealos.hub:5000/kingbase_v009r001c010b0004_single_x86:v1
135+
imagePullPolicy: Always
136+
securityContext:
137+
runAsUser: 1000
138+
runAsGroup: 1000
139+
allowPrivilegeEscalation: false
140+
command:
141+
- sh
142+
- -c
143+
- |
144+
export PGDATA=/home/kingbase/userdata/data
145+
export PATH=/opt/kingbase/bin:$PATH
146+
export DB_MODE="${DB_MODE:-pg}"
147+
export DB_USER="${DB_USER:-kingbase}"
148+
export DB_PASSWORD="${DB_PASSWORD:-kingbase123}"
149+
export DB_PORT="${DB_PORT:-54321}"
150+
echo "=== PGDATA = $PGDATA ==="
151+
echo "=== DB_MODE = $DB_MODE ==="
152+
153+
case "$DB_MODE" in
154+
oracle|pg|mysql)
155+
;;
156+
*)
157+
echo "ERROR: unsupported DB_MODE: $DB_MODE, allowed values: oracle / pg / mysql"
158+
exit 1
159+
;;
160+
esac
161+
162+
if [ ! -f "$PGDATA/PG_VERSION" ] && [ ! -f "$PGDATA/kingbase.conf" ]; then
163+
echo "=== Initializing database with image bootstrap ==="
164+
PWFILE="$(mktemp)"
165+
printf '%s\n' "$DB_PASSWORD" > "$PWFILE"
166+
initdb -D "$PGDATA" --locale=en_US.UTF-8 --encoding=UTF8 --username="$DB_USER" --pwfile="$PWFILE" --dbmode="$DB_MODE"
167+
rm -f "$PWFILE"
168+
echo "listen_addresses='*'" >> "$PGDATA/kingbase.conf"
169+
echo "port=$DB_PORT" >> "$PGDATA/kingbase.conf"
170+
echo "host all all 0.0.0.0/0 md5" >> "$PGDATA/pg_hba.conf"
171+
echo "host all all ::/0 md5" >> "$PGDATA/pg_hba.conf"
172+
echo "--dbmode=$DB_MODE" > "$PGDATA/initdb.conf"
173+
echo "=== initdb.conf mode recorded: $DB_MODE ==="
174+
echo "=== bootstrap completed ==="
175+
else
176+
echo "=== Database already initialized ==="
177+
if [ -f "$PGDATA/initdb.conf" ]; then
178+
echo "=== Existing initdb.conf mode ==="
179+
grep -- '--dbmode=' "$PGDATA/initdb.conf" || true
180+
fi
181+
fi
182+
183+
echo "=== Starting Kingbase server ==="
184+
exec kingbase -D "$PGDATA" -p "$DB_PORT"
185+
env:
186+
- name: PGDATA
187+
value: /home/kingbase/userdata/data
188+
- name: DB_MODE
189+
value: ${{ inputs.db_mode }}
190+
- name: DB_USER
191+
value: ${{ inputs.db_user }}
192+
- name: DB_PASSWORD
193+
value: ${{ inputs.db_password }}
194+
- name: DB_PORT
195+
value: "54321"
196+
ports:
197+
- containerPort: 54321
198+
name: kingdb
199+
protocol: TCP
200+
resources:
201+
requests:
202+
cpu: 100m
203+
memory: 102Mi
204+
limits:
205+
cpu: '1'
206+
memory: 1Gi
207+
volumeMounts:
208+
- name: vn-homevn-kingbasevn-userdata
209+
mountPath: /home/kingbase/userdata
210+
volumeClaimTemplates:
211+
- metadata:
212+
name: vn-homevn-kingbasevn-userdata
213+
annotations:
214+
path: /home/kingbase/userdata
215+
value: '${{ inputs.storage }}'
216+
storageType: local
217+
spec:
218+
accessModes:
219+
- ReadWriteOnce
220+
resources:
221+
requests:
222+
storage: ${{ inputs.storage }}Gi
223+
volumeMode: Filesystem

0 commit comments

Comments
 (0)