feat: k8s

This commit is contained in:
icey-yu 2025-06-20 15:22:03 +08:00
parent bb4c44f786
commit 30e88ca766
47 changed files with 155 additions and 87 deletions

4
.gitignore vendored
View File

@ -29,7 +29,7 @@ tmp/
bin/ bin/
output/ output/
_output/ _output/
deployments/charts/generated-configs/ kubernetes/charts/generated-configs/
### OpenIM Config ### ### OpenIM Config ###
.env .env
@ -37,7 +37,7 @@ config/config.yaml
config/notification.yaml config/notification.yaml
### OpenIM deploy ### ### OpenIM deploy ###
deployments/openim-server/charts kubernetes/openim-server/charts
# files used by the developer # files used by the developer
.idea.md .idea.md

34
build/build.sh Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env bash
CYAN='\033[0;36m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NO_COLOR='\033[0m'
BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
IMAGE_DIR="$BASE_DIR/images"
if [[ ! -d "$IMAGE_DIR" ]]; then
echo -e "${RED}dir $IMAGE_DIR not exist!${NO_COLOR}"
exit 1
fi
for dir in "$IMAGE_DIR"/*/; do
[[ -d "$dir" ]] || continue
name="$(basename "$dir")"
dockerfile="$dir/Dockerfile"
if [[ -f "$dockerfile" ]]; then
echo -e "${CYAN}Building ${name}:test...${NO_COLOR}"
build_context="${dir}../../../"
if docker build -t "${name}:test" -f "$dockerfile" "$build_context"; then
echo -e "${GREEN}Successfully built ${name}:test${NO_COLOR}"
else
echo -e "${RED}Failed to build ${name}:test${NO_COLOR}"
fi
else
echo -e "${YELLOW}Skipping ${name}: Dockerfile not found${NO_COLOR}"
fi
done

View File

@ -1,19 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: docker-secret
namespace: default
type: kubernetes.io/dockerconfigjson
data:
# {
# "auths": {
# "your.registry.com": {
# "username": "username",
# "password": "psw",
# "email": "openim@example.com",
# "auth": "dXNlcm5hbWU6cHN3"
# }
# }
#}
# Base64 encoded .docerconfigjson content
.dockerconfigjson: "ewogICJhdXRocyI6IHsKICAgICJ5b3VyLnJlZ2lzdHJ5LmNvbSI6IHsKICAgICAgInVzZXJuYW1lIjogInVzZXJuYW1lIiwKICAgICAgInBhc3N3b3JkIjogInBzdyIsCiAgICAgICJlbWFpbCI6ICAgICJvcGVuaW1AZXhhbXBsZS5jb20iLAogICAgICAiYXV0aCI6ICAgICAiZFhObGNtNWhiV1U2Y0hOMyIKICAgIH0KICB9Cn0="

View File

@ -1,8 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: openim-minio-secret
type: Opaque
data:
minio-root-user: cm9vdA== # Base64 encoded "root"
minio-root-password: b3BlbklNMTIz # Base64 encoded "openIM123"

View File

@ -1,8 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: openim-mongo-secret
type: Opaque
data:
mongo_openim_username: b3BlbklN # base64 for "openIM", this user credentials need in authSource database.
mongo_openim_password: b3BlbklNMTIz # base64 for "openIM123"

View File

@ -12,10 +12,9 @@ spec:
labels: labels:
app: openim-msgtransfer-server app: openim-msgtransfer-server
spec: spec:
imagePullSecrets:
- name: docker-secret
containers: containers:
- name: openim-msgtransfer-container - name: openim-msgtransfer-container
# image: openim/openim-msgtransfer:v3.8.3
image: openim-msgtransfer:test image: openim-msgtransfer:test
env: env:
- name: CONFIG_PATH - name: CONFIG_PATH
@ -35,6 +34,11 @@ spec:
secretKeyRef: secretKeyRef:
name: openim-mongo-secret name: openim-mongo-secret
key: mongo_openim_password key: mongo_openim_password
- name: IMENV_KAFKA_USERNAME
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-username
- name: IMENV_KAFKA_PASSWORD - name: IMENV_KAFKA_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@ -12,10 +12,9 @@ spec:
labels: labels:
app: push-rpc-server app: push-rpc-server
spec: spec:
imagePullSecrets:
- name: docker-secret
containers: containers:
- name: push-rpc-server-container - name: push-rpc-server-container
# image: openim/openim-push:v3.8.3
image: openim-push:test image: openim-push:test
env: env:
- name: CONFIG_PATH - name: CONFIG_PATH
@ -25,6 +24,11 @@ spec:
secretKeyRef: secretKeyRef:
name: openim-redis-secret name: openim-redis-secret
key: redis-password key: redis-password
- name: IMENV_KAFKA_USERNAME
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-username
- name: IMENV_KAFKA_PASSWORD - name: IMENV_KAFKA_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@ -12,10 +12,9 @@ spec:
labels: labels:
app: msg-rpc-server app: msg-rpc-server
spec: spec:
imagePullSecrets:
- name: docker-secret
containers: containers:
- name: msg-rpc-server-container - name: msg-rpc-server-container
# image: openim/openim-rpc-msg:v3.8.3
image: openim-rpc-msg:test image: openim-rpc-msg:test
env: env:
- name: CONFIG_PATH - name: CONFIG_PATH
@ -35,6 +34,11 @@ spec:
secretKeyRef: secretKeyRef:
name: openim-mongo-secret name: openim-mongo-secret
key: mongo_openim_password key: mongo_openim_password
- name: IMENV_KAFKA_USERNAME
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-username
- name: IMENV_KAFKA_PASSWORD - name: IMENV_KAFKA_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@ -12,10 +12,9 @@ spec:
labels: labels:
app: user-rpc-server app: user-rpc-server
spec: spec:
imagePullSecrets:
- name: docker-secret
containers: containers:
- name: user-rpc-server-container - name: user-rpc-server-container
# image: openim/openim-rpc-user:v3.8.3
image: openim-rpc-user:test image: openim-rpc-user:test
env: env:
- name: CONFIG_PATH - name: CONFIG_PATH
@ -35,6 +34,11 @@ spec:
secretKeyRef: secretKeyRef:
name: openim-mongo-secret name: openim-mongo-secret
key: mongo_openim_password key: mongo_openim_password
- name: IMENV_KAFKA_USERNAME
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-username
- name: IMENV_KAFKA_PASSWORD - name: IMENV_KAFKA_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@ -0,0 +1,18 @@
apiVersion: v1
kind: Secret
metadata:
name: docker-secret
namespace: default
type: kubernetes.io/dockerconfigjson
stringData:
.dockerconfigjson: |
{
"auths": {
"your.registry.com": {
"username": "username",
"password": "psw",
"email": "openim@example.com",
"auth": "dXNlcm5hbWU6cHN3"
}
}
}

View File

@ -3,5 +3,8 @@ kind: Secret
metadata: metadata:
name: openim-kafka-secret name: openim-kafka-secret
type: Opaque type: Opaque
data: stringData:
inter-broker-user: ""
inter-broker-password: ""
kafka-username: ""
kafka-password: "" kafka-password: ""

View File

@ -0,0 +1,8 @@
apiVersion: v1
kind: Secret
metadata:
name: openim-minio-secret
type: Opaque
stringData:
minio-root-user: root
minio-root-password: openIM123

View File

@ -0,0 +1,11 @@
apiVersion: v1
kind: Secret
metadata:
name: openim-mongo-secret
type: Opaque
stringData:
mongo_initdb_root_username: root
mongo_initdb_root_password: openIM123
mongo_initdb_database: openim_v3
mongo_openim_username: openIM
mongo_openim_password: openIM123

View File

@ -3,5 +3,5 @@ kind: Secret
metadata: metadata:
name: openim-redis-secret name: openim-redis-secret
type: Opaque type: Opaque
data: stringData:
redis-password: b3BlbklNMTIz # "openIM123" in base64 redis-password: openIM123

View File

@ -4,6 +4,6 @@ metadata:
name: openim-api-tls name: openim-api-tls
namespace: default namespace: default
type: kubernetes.io/tls type: kubernetes.io/tls
data: stringData:
tls.crt: <base64-encoded-tls.crt> tls.crt: <tls.crt>
tls.key: <base64-encoded-tls.key> tls.key: <tls.key>

View File

@ -49,6 +49,26 @@ spec:
value: "CONTROLLER" value: "CONTROLLER"
- name: KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE - name: KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE
value: "true" value: "true"
- name: KAFKA_INTER_BROKER_USER
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: inter-broker-user
- name: KAFKA_INTER_BROKER_PASSWORD
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: inter-broker-password
- name: KAFKA_CLIENT_USER
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-username
- name: KAFKA_CLIENT_PASSWORD
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-password
volumeMounts: volumeMounts:
- name: kafka-data - name: kafka-data
mountPath: /bitnami/kafka mountPath: /bitnami/kafka

View File

@ -47,27 +47,27 @@ spec:
- name: MONGO_INITDB_ROOT_USERNAME - name: MONGO_INITDB_ROOT_USERNAME
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: openim-mongo-init-secret name: openim-mongo-secret
key: mongo_initdb_root_username key: mongo_initdb_root_username
- name: MONGO_INITDB_ROOT_PASSWORD - name: MONGO_INITDB_ROOT_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: openim-mongo-init-secret name: openim-mongo-secret
key: mongo_initdb_root_password key: mongo_initdb_root_password
- name: MONGO_INITDB_DATABASE - name: MONGO_INITDB_DATABASE
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: openim-mongo-init-secret name: openim-mongo-secret
key: mongo_initdb_database key: mongo_initdb_database
- name: MONGO_OPENIM_USERNAME - name: MONGO_OPENIM_USERNAME
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: openim-mongo-init-secret name: openim-mongo-secret
key: mongo_openim_username key: mongo_openim_username
- name: MONGO_OPENIM_PASSWORD - name: MONGO_OPENIM_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: openim-mongo-init-secret name: openim-mongo-secret
key: mongo_openim_password key: mongo_openim_password
- name: TZ - name: TZ
value: "Asia/Shanghai" value: "Asia/Shanghai"
@ -94,15 +94,3 @@ spec:
requests: requests:
storage: 5Gi storage: 5Gi
---
apiVersion: v1
kind: Secret
metadata:
name: openim-mongo-init-secret
type: Opaque
data:
mongo_initdb_root_username: cm9vdA== # base64 for "root"
mongo_initdb_root_password: b3BlbklNMTIz # base64 for "openIM123"
mongo_initdb_database: b3BlbmltX3Yz # base64 for "openim_v3"
mongo_openim_username: b3BlbklN # base64 for "openIM"
mongo_openim_password: b3BlbklNMTIz # base64 for "openIM123"

View File

@ -2,10 +2,8 @@ apiVersion: apps/v1
kind: StatefulSet kind: StatefulSet
metadata: metadata:
name: redis-statefulset name: redis-statefulset
labels:
app: redis
spec: spec:
serviceName: "redis-service" serviceName: "redis"
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
@ -20,7 +18,6 @@ spec:
image: redis:7.0.0 image: redis:7.0.0
ports: ports:
- containerPort: 6379 - containerPort: 6379
name: redis
env: env:
- name: TZ - name: TZ
value: "Asia/Shanghai" value: "Asia/Shanghai"
@ -33,18 +30,26 @@ spec:
- name: redis-data - name: redis-data
mountPath: /data mountPath: /data
command: command:
- /bin/sh [
- -c "/bin/sh",
- | "-c",
redis-server \ 'redis-server --requirepass "$REDIS_PASSWORD" --appendonly yes',
--requirepass "$REDIS_PASSWORD" \ ]
--appendonly yes \ volumes:
--dir /data - name: redis-config-volume
volumeClaimTemplates: configMap:
- metadata: name: openim-config
name: redis-data - name: redis-data
spec: persistentVolumeClaim:
accessModes: ["ReadWriteOnce"] claimName: redis-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc
spec:
accessModes:
- ReadWriteOnce
resources: resources:
requests: requests:
storage: 5Gi storage: 5Gi