feat(deploy): add k01 business cluster manifests for k3s with cnpg, strimzi, redis and mongodb operators
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
REGISTRY_HOST=registry.juwan.xhttp.zip
|
||||
REGISTRY_USERNAME=admin
|
||||
REGISTRY_PASSWORD=
|
||||
|
||||
JWT_SECRET_KEY=
|
||||
ADMIN_USERNAME=admin
|
||||
ADMIN_PASSWORD=
|
||||
ADMIN_EMAIL=admin@juwan.xhttp.zip
|
||||
|
||||
EMAIL_SMTP_HOST=smtp-relay.brevo.com
|
||||
EMAIL_SMTP_PORT=587
|
||||
EMAIL_SMTP_USERNAME=
|
||||
EMAIL_SMTP_PASSWORD=
|
||||
EMAIL_FROM_ADDRESS=dev@juwan.xhttp.zip
|
||||
EMAIL_FROM_NAME=Juwan Team
|
||||
EMAIL_REPLY_TO=
|
||||
|
||||
S3_ENDPOINT=https://s3.juwan.xhttp.zip
|
||||
S3_ACCESS_KEY=
|
||||
S3_SECRET_KEY=
|
||||
S3_BUCKET_NAME=juwan-objectstory
|
||||
S3_REGION=garage
|
||||
|
||||
MONGO_PASSWORD=
|
||||
@@ -0,0 +1,2 @@
|
||||
secrets/
|
||||
.env
|
||||
@@ -0,0 +1,38 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: juwan
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: find-endpoints
|
||||
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: discov-endpoints
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["endpoints"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: ["discovery.k8s.io"]
|
||||
resources: ["endpointslices"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: find-endpoints-discov-endpoints
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
namespace: juwan
|
||||
name: find-endpoints
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: discov-endpoints
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,72 @@
|
||||
apiVersion: kafka.strimzi.io/v1beta2
|
||||
kind: KafkaNodePool
|
||||
metadata:
|
||||
name: controller
|
||||
namespace: kafka
|
||||
labels:
|
||||
strimzi.io/cluster: juwan-kafka
|
||||
spec:
|
||||
replicas: 1
|
||||
roles:
|
||||
- controller
|
||||
storage:
|
||||
type: persistent-claim
|
||||
size: 1Gi
|
||||
deleteClaim: false
|
||||
|
||||
---
|
||||
apiVersion: kafka.strimzi.io/v1beta2
|
||||
kind: KafkaNodePool
|
||||
metadata:
|
||||
name: broker
|
||||
namespace: kafka
|
||||
labels:
|
||||
strimzi.io/cluster: juwan-kafka
|
||||
spec:
|
||||
replicas: 1
|
||||
roles:
|
||||
- broker
|
||||
storage:
|
||||
type: persistent-claim
|
||||
size: 5Gi
|
||||
deleteClaim: false
|
||||
|
||||
---
|
||||
apiVersion: kafka.strimzi.io/v1beta2
|
||||
kind: Kafka
|
||||
metadata:
|
||||
name: juwan-kafka
|
||||
namespace: kafka
|
||||
annotations:
|
||||
strimzi.io/node-pools: enabled
|
||||
strimzi.io/kraft: enabled
|
||||
spec:
|
||||
kafka:
|
||||
version: 4.2.0
|
||||
metadataVersion: 4.2-IV0
|
||||
listeners:
|
||||
- name: plain
|
||||
port: 9092
|
||||
type: internal
|
||||
tls: false
|
||||
config:
|
||||
offsets.topic.replication.factor: 1
|
||||
transaction.state.log.replication.factor: 1
|
||||
transaction.state.log.min.isr: 1
|
||||
default.replication.factor: 1
|
||||
min.insync.replicas: 1
|
||||
entityOperator:
|
||||
topicOperator: {}
|
||||
userOperator: {}
|
||||
|
||||
---
|
||||
apiVersion: kafka.strimzi.io/v1beta2
|
||||
kind: KafkaTopic
|
||||
metadata:
|
||||
name: email-task
|
||||
namespace: kafka
|
||||
labels:
|
||||
strimzi.io/cluster: juwan-kafka
|
||||
spec:
|
||||
partitions: 1
|
||||
replicas: 1
|
||||
Executable
+58
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
K01_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
REPO_ROOT="$(cd "$K01_DIR/../.." && pwd)"
|
||||
SQL_DIR="$REPO_ROOT/desc/sql"
|
||||
FIXTURE_DIR="$REPO_ROOT/deploy/dev/fixture"
|
||||
|
||||
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||
|
||||
declare -A SCHEMA_MAP=(
|
||||
[user-db]=users
|
||||
[player-db]=player
|
||||
[game-db]=game
|
||||
[shop-db]=shop
|
||||
[order-db]=order
|
||||
[wallet-db]=wallet
|
||||
[community-db]=community
|
||||
[review-db]=review
|
||||
[dispute-db]=dispute
|
||||
[notification-db]=notification
|
||||
[search-db]=search
|
||||
)
|
||||
|
||||
psql_exec() {
|
||||
local cluster="$1" sql="$2"
|
||||
kubectl -n juwan exec -i "${cluster}-1" -c postgres -- psql \
|
||||
-v ON_ERROR_STOP=1 -U app -d app <<<"$sql"
|
||||
}
|
||||
|
||||
psql_file() {
|
||||
local cluster="$1" file="$2"
|
||||
kubectl -n juwan exec -i "${cluster}-1" -c postgres -- psql \
|
||||
-v ON_ERROR_STOP=1 -U app -d app < "$file"
|
||||
}
|
||||
|
||||
for cluster in "${!SCHEMA_MAP[@]}"; do
|
||||
domain="${SCHEMA_MAP[$cluster]}"
|
||||
echo ">>> $cluster ($domain)"
|
||||
|
||||
kubectl -n juwan wait --for=condition=Ready "cluster.postgresql.cnpg.io/${cluster}" --timeout=300s
|
||||
|
||||
psql_file "$cluster" "$SQL_DIR/common/update_updated_at_column.sql"
|
||||
|
||||
for f in "$SQL_DIR/$domain"/*.sql; do
|
||||
[ -f "$f" ] || continue
|
||||
echo " schema: $(basename "$f")"
|
||||
psql_file "$cluster" "$f"
|
||||
done
|
||||
|
||||
if [ -f "$FIXTURE_DIR/$domain.sql" ]; then
|
||||
echo " fixture: $domain.sql"
|
||||
psql_file "$cluster" "$FIXTURE_DIR/$domain.sql"
|
||||
fi
|
||||
done
|
||||
|
||||
echo
|
||||
echo "schema + fixture loaded into 11 CNPG clusters"
|
||||
@@ -0,0 +1,41 @@
|
||||
apiVersion: mongodbcommunity.mongodb.com/v1
|
||||
kind: MongoDBCommunity
|
||||
metadata:
|
||||
name: chat-mongodb
|
||||
namespace: juwan
|
||||
spec:
|
||||
members: 1
|
||||
type: ReplicaSet
|
||||
version: "8.2.6"
|
||||
security:
|
||||
authentication:
|
||||
modes:
|
||||
- SCRAM
|
||||
users:
|
||||
- name: app-user
|
||||
db: admin
|
||||
passwordSecretRef:
|
||||
name: chat-mongodb-app-user-password
|
||||
roles:
|
||||
- name: readWrite
|
||||
db: juwan_chat
|
||||
scramCredentialsSecretName: chat-mongodb-app-user-scram
|
||||
additionalMongodConfig:
|
||||
storage.wiredTiger.engineConfig.journalCompressor: zlib
|
||||
statefulSet:
|
||||
spec:
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: data-volume
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
- metadata:
|
||||
name: logs-volume
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 256Mi
|
||||
@@ -0,0 +1,185 @@
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: user-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: player-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: game-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: shop-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: order-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: wallet-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: community-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: review-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: dispute-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: notification-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
namespace: juwan
|
||||
name: search-db
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
|
||||
primaryUpdateStrategy: unsupervised
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
storage:
|
||||
size: 1Gi
|
||||
@@ -0,0 +1,149 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: ratelimit-config
|
||||
namespace: juwan
|
||||
data:
|
||||
ratelimit.yaml: |
|
||||
domain: api
|
||||
descriptors:
|
||||
- key: generic_key
|
||||
value: login
|
||||
descriptors:
|
||||
- key: remote_address
|
||||
rate_limit:
|
||||
unit: MINUTE
|
||||
requests_per_unit: 10
|
||||
- key: generic_key
|
||||
value: register
|
||||
descriptors:
|
||||
- key: remote_address
|
||||
rate_limit:
|
||||
unit: MINUTE
|
||||
requests_per_unit: 5
|
||||
- key: generic_key
|
||||
value: forgot_password_send
|
||||
descriptors:
|
||||
- key: remote_address
|
||||
rate_limit:
|
||||
unit: MINUTE
|
||||
requests_per_unit: 3
|
||||
- key: generic_key
|
||||
value: verify_code_send
|
||||
descriptors:
|
||||
- key: remote_address
|
||||
rate_limit:
|
||||
unit: MINUTE
|
||||
requests_per_unit: 3
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: rl-redis
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: rl-redis
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: rl-redis
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: rl-redis
|
||||
spec:
|
||||
containers:
|
||||
- name: redis
|
||||
image: redis:8.6.2-alpine
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: rl-redis-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- port: 6379
|
||||
targetPort: 6379
|
||||
selector:
|
||||
app: rl-redis
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: ratelimit
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: ratelimit
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: ratelimit
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: ratelimit
|
||||
spec:
|
||||
containers:
|
||||
- name: ratelimit
|
||||
image: envoyproxy/ratelimit:fe26676d
|
||||
command: ["/bin/ratelimit"]
|
||||
env:
|
||||
- name: REDIS_SOCKET_TYPE
|
||||
value: tcp
|
||||
- name: REDIS_URL
|
||||
value: rl-redis-svc:6379
|
||||
- name: USE_STATSD
|
||||
value: "false"
|
||||
- name: RUNTIME_ROOT
|
||||
value: /data
|
||||
- name: RUNTIME_SUBDIRECTORY
|
||||
value: ratelimit
|
||||
- name: RUNTIME_WATCH_ROOT
|
||||
value: "true"
|
||||
- name: LOG_LEVEL
|
||||
value: info
|
||||
ports:
|
||||
- containerPort: 8081
|
||||
name: grpc
|
||||
- containerPort: 6070
|
||||
name: debug
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /data/ratelimit/config
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
volumes:
|
||||
- name: config
|
||||
configMap:
|
||||
name: ratelimit-config
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: ratelimit-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8081
|
||||
targetPort: 8081
|
||||
- name: debug
|
||||
port: 6070
|
||||
targetPort: 6070
|
||||
selector:
|
||||
app: ratelimit
|
||||
@@ -0,0 +1,346 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: user-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: user-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: player-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: player-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: game-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: game-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: shop-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: shop-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: order-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: order-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: wallet-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: wallet-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: community-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: community-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: review-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: review-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: dispute-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: dispute-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: notification-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: notification-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: search-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: search-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: chat-redis
|
||||
namespace: juwan
|
||||
spec:
|
||||
clusterSize: 1
|
||||
kubernetesConfig:
|
||||
image: quay.io/opstree/redis:v7.0.15
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
redisSecret:
|
||||
name: chat-redis
|
||||
key: password
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
@@ -0,0 +1,48 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: authz-adapter
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: authz-adapter
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: authz-adapter
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: authz-adapter
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: authz-adapter
|
||||
image: registry.juwan.xhttp.zip/juwan/authz-adapter:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 9002
|
||||
env:
|
||||
- name: LISTEN_ON
|
||||
value: "0.0.0.0:9002"
|
||||
- name: USER_RPC_TARGET
|
||||
value: "user-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: authz-adapter-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 9002
|
||||
targetPort: 9002
|
||||
selector:
|
||||
app: authz-adapter
|
||||
@@ -0,0 +1,97 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: chat-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: chat-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: chat-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: chat-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: chat-api
|
||||
image: registry.juwan.xhttp.zip/juwan/chat-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: ws
|
||||
containerPort: 8889
|
||||
- name: wt
|
||||
containerPort: 8443
|
||||
hostPort: 8443
|
||||
protocol: UDP
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: MONGO_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: chat-mongodb-app-user-password
|
||||
key: password
|
||||
- name: MONGO_URI
|
||||
value: "mongodb://app-user:$(MONGO_PASSWORD)@chat-mongodb-0.chat-mongodb-svc.juwan.svc.cluster.local:27017/juwan_chat?replicaSet=chat-mongodb&authSource=admin"
|
||||
- name: MONGO_DATABASE
|
||||
value: juwan_chat
|
||||
- name: REDIS_HOST
|
||||
value: chat-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: chat-redis
|
||||
key: password
|
||||
- name: JWT_SECRET_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: jwt-secret
|
||||
key: secret-key
|
||||
- name: CHAT_WT_CERT_FILE
|
||||
value: "/etc/certs/tls.crt"
|
||||
- name: CHAT_WT_KEY_FILE
|
||||
value: "/etc/certs/tls.key"
|
||||
volumeMounts:
|
||||
- name: certs
|
||||
mountPath: /etc/certs
|
||||
readOnly: true
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
volumes:
|
||||
- name: certs
|
||||
secret:
|
||||
secretName: chat-wt-tls
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: chat-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: ws
|
||||
port: 8889
|
||||
targetPort: 8889
|
||||
- name: wt
|
||||
port: 8443
|
||||
targetPort: 8443
|
||||
protocol: UDP
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: chat-api
|
||||
@@ -0,0 +1,136 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: community-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: community-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: community-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: community-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: community-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/community-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: community-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: community-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: community-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: community-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: community-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: community-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: community-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: community-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: community-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: community-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: community-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: community-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: community-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: community-api
|
||||
image: registry.juwan.xhttp.zip/juwan/community-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: COMMUNITY_RPC_TARGET
|
||||
value: "community-rpc-svc.juwan:8080"
|
||||
- name: USER_RPC_TARGET
|
||||
value: "user-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: community-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: community-api
|
||||
@@ -0,0 +1,138 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: dispute-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: dispute-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: dispute-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: dispute-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: dispute-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/dispute-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: dispute-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: dispute-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: dispute-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: dispute-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: dispute-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: dispute-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: dispute-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: dispute-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: dispute-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: dispute-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: dispute-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: dispute-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: dispute-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: dispute-api
|
||||
image: registry.juwan.xhttp.zip/juwan/dispute-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: DISPUTE_RPC_TARGET
|
||||
value: "dispute-rpc-svc.juwan:8080"
|
||||
- name: ORDER_RPC_TARGET
|
||||
value: "order-rpc-svc.juwan:8080"
|
||||
- name: PLAYER_RPC_TARGET
|
||||
value: "player-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: dispute-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: dispute-api
|
||||
@@ -0,0 +1,143 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: email-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: email-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: email-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: email-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: email-api
|
||||
image: registry.juwan.xhttp.zip/juwan/email-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: REDIS_HOST
|
||||
value: user-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: user-redis
|
||||
key: password
|
||||
- name: KAFKA_BROKER
|
||||
value: "juwan-kafka-kafka-bootstrap.kafka:9092"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: email-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: email-api
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: email-mq
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: email-mq
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: email-mq
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: email-mq
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: email-mq
|
||||
image: registry.juwan.xhttp.zip/juwan/email-mq:latest
|
||||
ports:
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: KAFKA_BROKER
|
||||
value: "juwan-kafka-kafka-bootstrap.kafka:9092"
|
||||
- name: EMAIL_SMTP_HOST
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: email-smtp
|
||||
key: host
|
||||
- name: EMAIL_SMTP_PORT
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: email-smtp
|
||||
key: port
|
||||
- name: EMAIL_SMTP_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: email-smtp
|
||||
key: username
|
||||
- name: EMAIL_SMTP_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: email-smtp
|
||||
key: password
|
||||
- name: EMAIL_FROM_ADDRESS
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: email-smtp
|
||||
key: from-address
|
||||
- name: EMAIL_FROM_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: email-smtp
|
||||
key: from-name
|
||||
- name: EMAIL_REPLY_TO
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: email-smtp
|
||||
key: reply-to
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: email-mq-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: email-mq
|
||||
@@ -0,0 +1,43 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: frontend
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: frontend
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: frontend
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: frontend
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: frontend
|
||||
image: registry.juwan.xhttp.zip/juwan/frontend:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 3000
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: frontend-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 3000
|
||||
targetPort: 3000
|
||||
selector:
|
||||
app: frontend
|
||||
@@ -0,0 +1,134 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: game-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: game-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: game-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: game-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: game-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/game-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: game-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: game-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: game-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: game-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: game-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: game-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: game-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: game-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: game-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: game-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: game-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: game-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: game-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: game-api
|
||||
image: registry.juwan.xhttp.zip/juwan/game-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: GAME_RPC_TARGET
|
||||
value: "game-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: game-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: game-api
|
||||
@@ -0,0 +1,134 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: notification-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: notification-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: notification-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: notification-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: notification-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/notification-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: notification-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: notification-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: notification-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: notification-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: notification-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: notification-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: notification-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: notification-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: notification-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: notification-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: notification-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: notification-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: notification-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: notification-api
|
||||
image: registry.juwan.xhttp.zip/juwan/notification-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: NOTIFICATION_RPC_TARGET
|
||||
value: "notification-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: notification-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: notification-api
|
||||
@@ -0,0 +1,127 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: objectstory-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: objectstory-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: objectstory-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: objectstory-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: objectstory-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/objectstory-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: S3_ENDPOINT
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: objectstory-s3
|
||||
key: endpoint
|
||||
- name: S3_ACCESS_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: objectstory-s3
|
||||
key: access-key
|
||||
- name: S3_SECRET_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: objectstory-s3
|
||||
key: secret-key
|
||||
- name: S3_BUCKET_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: objectstory-s3
|
||||
key: bucket
|
||||
- name: S3_REGION
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: objectstory-s3
|
||||
key: region
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: objectstory-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: objectstory-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: objectstory-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: objectstory-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: objectstory-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: objectstory-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: objectstory-api
|
||||
image: registry.juwan.xhttp.zip/juwan/objectstory-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: OBJECTSTORY_RPC_TARGET
|
||||
value: "objectstory-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: objectstory-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: objectstory-api
|
||||
@@ -0,0 +1,138 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: order-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: order-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: order-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: order-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: order-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/order-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: order-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: order-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: order-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: order-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: order-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: order-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: order-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: order-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: order-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: order-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: order-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: order-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: order-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: order-api
|
||||
image: registry.juwan.xhttp.zip/juwan/order-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: ORDER_RPC_TARGET
|
||||
value: "order-rpc-svc.juwan:8080"
|
||||
- name: PLAYER_RPC_TARGET
|
||||
value: "player-rpc-svc.juwan:8080"
|
||||
- name: SHOP_RPC_TARGET
|
||||
value: "shop-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: order-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: order-api
|
||||
@@ -0,0 +1,136 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: player-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: player-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: player-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: player-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: player-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/player-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: player-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: player-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: player-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: player-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: player-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: player-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: player-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: player-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: player-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: player-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: player-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: player-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: player-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: player-api
|
||||
image: registry.juwan.xhttp.zip/juwan/player-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PLAYER_RPC_TARGET
|
||||
value: "player-rpc-svc.juwan:8080"
|
||||
- name: USER_RPC_TARGET
|
||||
value: "user-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: player-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: player-api
|
||||
@@ -0,0 +1,138 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: review-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: review-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: review-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: review-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: review-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/review-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: review-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: review-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: review-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: review-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: review-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: review-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: review-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: review-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: review-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: review-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: review-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: review-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: review-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: review-api
|
||||
image: registry.juwan.xhttp.zip/juwan/review-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: ORDER_RPC_TARGET
|
||||
value: "order-rpc-svc.juwan:8080"
|
||||
- name: PLAYER_RPC_TARGET
|
||||
value: "player-rpc-svc.juwan:8080"
|
||||
- name: REVIEW_RPC_TARGET
|
||||
value: "review-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: review-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: review-api
|
||||
@@ -0,0 +1,134 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: search-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: search-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: search-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: search-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: search-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/search-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: search-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: search-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: search-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: search-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: search-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: search-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: search-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: search-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: search-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: search-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: search-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: search-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: search-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: search-api
|
||||
image: registry.juwan.xhttp.zip/juwan/search-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: SEARCH_RPC_TARGET
|
||||
value: "search-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: search-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: search-api
|
||||
@@ -0,0 +1,138 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: shop-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: shop-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: shop-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: shop-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: shop-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/shop-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: shop-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: shop-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: shop-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: shop-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: shop-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: shop-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: shop-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
- name: USER_RPC_TARGET
|
||||
value: "user-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: shop-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: shop-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: shop-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: shop-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: shop-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: shop-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: shop-api
|
||||
image: registry.juwan.xhttp.zip/juwan/shop-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PLAYER_RPC_TARGET
|
||||
value: "player-rpc-svc.juwan:8080"
|
||||
- name: SHOP_RPC_TARGET
|
||||
value: "shop-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: shop-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: shop-api
|
||||
@@ -0,0 +1,43 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: snowflake
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: snowflake
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: snowflake
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: snowflake
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: snowflake
|
||||
image: registry.juwan.xhttp.zip/juwan/snowflake-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: snowflake-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
selector:
|
||||
app: snowflake
|
||||
@@ -0,0 +1,83 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: user-verifications-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: user-verifications-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: user-verifications-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: user-verifications-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: user-verifications-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/user_verifications-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: user-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: user-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: user-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: user-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: user-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: user-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: user-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
- name: USER_RPC_TARGET
|
||||
value: "user-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: user-verifications-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: user-verifications-rpc
|
||||
@@ -0,0 +1,156 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: user-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: user-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: user-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: user-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: user-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/users-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: user-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: user-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: user-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: user-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: user-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: user-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: user-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
- name: ADMIN_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: admin-bootstrap
|
||||
key: username
|
||||
- name: ADMIN_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: admin-bootstrap
|
||||
key: password
|
||||
- name: ADMIN_EMAIL
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: admin-bootstrap
|
||||
key: email
|
||||
- name: JWT_SECRET_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: jwt-secret
|
||||
key: secret-key
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: user-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: user-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: user-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: user-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: user-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: user-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: user-api
|
||||
image: registry.juwan.xhttp.zip/juwan/users-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: USER_RPC_TARGET
|
||||
value: "user-rpc-svc.juwan:8080"
|
||||
- name: USER_VERIFICATIONS_RPC_TARGET
|
||||
value: "user-verifications-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: user-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: user-api
|
||||
@@ -0,0 +1,134 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: wallet-rpc
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: wallet-rpc
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: wallet-rpc
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: wallet-rpc
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: wallet-rpc
|
||||
image: registry.juwan.xhttp.zip/juwan/wallet-rpc:latest
|
||||
ports:
|
||||
- name: grpc
|
||||
containerPort: 8080
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: PD_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wallet-db-app
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wallet-db-app
|
||||
key: password
|
||||
- name: DB_NAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wallet-db-app
|
||||
key: dbname
|
||||
- name: DB_HOST
|
||||
value: wallet-db-rw.juwan
|
||||
- name: DB_HOST_RO
|
||||
value: wallet-db-ro.juwan
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: REDIS_HOST
|
||||
value: wallet-redis-master.juwan
|
||||
- name: REDIS_PORT
|
||||
value: "6379"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wallet-redis
|
||||
key: password
|
||||
- name: SNOWFLAKE_RPC_TARGET
|
||||
value: "snowflake-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: wallet-rpc-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: wallet-rpc
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: wallet-api
|
||||
namespace: juwan
|
||||
labels:
|
||||
app: wallet-api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: wallet-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: wallet-api
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: registry-creds
|
||||
containers:
|
||||
- name: wallet-api
|
||||
image: registry.juwan.xhttp.zip/juwan/wallet-api:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8888
|
||||
- name: metrics
|
||||
containerPort: 4001
|
||||
env:
|
||||
- name: WALLET_RPC_TARGET
|
||||
value: "wallet-rpc-svc.juwan:8080"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: wallet-api-svc
|
||||
namespace: juwan
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8888
|
||||
targetPort: 8888
|
||||
- name: metrics
|
||||
port: 4001
|
||||
targetPort: 4001
|
||||
selector:
|
||||
app: wallet-api
|
||||
@@ -0,0 +1,118 @@
|
||||
# k01 业务集群部署
|
||||
|
||||
承载 juwan-backend 全部业务的 k3s 单节点集群(演示阶段),后续可扩 k02 / k03。
|
||||
|
||||
## 架构层次
|
||||
|
||||
| 层 | 组件 |
|
||||
|---|---|
|
||||
| 控制面 | k3s server(已禁用内置 traefik) |
|
||||
| Operator | CloudNativePG / Strimzi Kafka / Ot-Container-Kit Redis / MongoDB Community |
|
||||
| 数据 | 11 CNPG Cluster / 12 RedisReplication / Strimzi KRaft Kafka 1 broker / MongoDBCommunity 单实例 |
|
||||
| 网络 | envoy-gateway(NodePort 30080)/ ratelimit + rl-redis |
|
||||
| 业务 | snowflake、authz-adapter、12 rpc、14 api、email-mq、frontend |
|
||||
|
||||
## 入口路径
|
||||
|
||||
```
|
||||
juwan.xhttp.zip
|
||||
├─ /wt/* → center Caddy → k01 chat-api UDP 8443(hostPort)
|
||||
└─ 其他 → center Caddy → k01 envoy-gateway TCP 30080
|
||||
```
|
||||
|
||||
## 前置条件
|
||||
|
||||
- Ubuntu 26.04 LTS,root
|
||||
- center 已部署,registry.juwan.xhttp.zip 可推可拉
|
||||
- DNS:`juwan.xhttp.zip` A 记录指向 k01(140.82.15.92)
|
||||
- 仓库已复制到 `/root/juwan-backend`
|
||||
|
||||
## 首次部署
|
||||
|
||||
```bash
|
||||
cd /root/juwan-backend/deploy/k01
|
||||
|
||||
# 1. zot admin 密码写到文件供 install-k3s 读取
|
||||
echo "<zot-admin-password>" > /root/registry-password
|
||||
chmod 600 /root/registry-password
|
||||
|
||||
# 2. 装 k3s + 4 个 Operator
|
||||
bash install-k3s.sh
|
||||
|
||||
# 3. 准备 .env,填入 zot 凭据 / brevo SMTP / garage S3 凭据等
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
|
||||
# 4. 应用 namespace + RBAC,生成所有 k8s Secret
|
||||
kubectl apply -f 00-base/
|
||||
bash secrets.sh
|
||||
|
||||
# 5. 应用基础设施
|
||||
kubectl apply -f 01-infra/postgres.yaml
|
||||
kubectl apply -f 01-infra/redis.yaml
|
||||
kubectl apply -f 01-infra/mongo.yaml
|
||||
kubectl apply -f 01-infra/kafka.yaml
|
||||
kubectl apply -f 01-infra/ratelimit.yaml
|
||||
kubectl apply -f 01-infra/envoy.yaml
|
||||
|
||||
# 等所有 CNPG Cluster Ready,灌入 schema + fixture
|
||||
bash 01-infra/load-schema.sh
|
||||
|
||||
# 6. 应用业务服务
|
||||
kubectl apply -f 02-service/
|
||||
|
||||
# 7. 观察 pod
|
||||
kubectl -n juwan get pods -w
|
||||
```
|
||||
|
||||
## 凭据管理
|
||||
|
||||
`secrets.sh` 生成的全部明文密码写入 `secrets/` 目录,`chmod 600`,`.gitignore` 已排除。
|
||||
|
||||
| Secret | 用途 |
|
||||
|---|---|
|
||||
| `registry-creds` | imagePullSecret(zot) |
|
||||
| `jwt-secret` | user-rpc 签发 / 校验 JWT |
|
||||
| `admin-bootstrap` | user-rpc 启动时插入 admin 账号 |
|
||||
| `email-smtp` | email-mq 发邮件 |
|
||||
| `objectstory-s3` | objectstory-rpc 接 garage |
|
||||
| `chat-wt-tls` | chat-api WT 自签证书(来自 `deploy/dev/certs`) |
|
||||
| `<domain>-redis` | 12 个 RedisReplication 的 password |
|
||||
| `chat-mongodb-app-user-password` | MongoDB SCRAM 密码 |
|
||||
| `<cluster>-app` | CNPG 自动生成的 PG 凭据 |
|
||||
|
||||
## 已知限制
|
||||
|
||||
- snowflake 使用 Deployment + WorkerId=0。扩到多副本前需让 snowflake 业务代码支持从 env 读 WorkerId。
|
||||
- chat-api UDP 8443 走 hostPort,扩 k02/k03 时新 node 需开放 UDP 8443,DNS 也要做轮询或 LB。
|
||||
- email-api 复用 user-redis 实例(验证码 key 与 user-rpc 共享读写),跟 dev 行为一致。
|
||||
- HPA 暂不部署。加副本前把 `replicas: 1` 改大或加 HPA。
|
||||
|
||||
## 加节点(k02 / k03)
|
||||
|
||||
```bash
|
||||
# 在 k01 取 token
|
||||
cat /var/lib/rancher/k3s/server/node-token
|
||||
|
||||
# 在 k02 上
|
||||
curl -sfL https://get.k3s.io | \
|
||||
K3S_URL=https://140.82.15.92:6443 K3S_TOKEN=<token> \
|
||||
sh -
|
||||
|
||||
# 复制 registries.yaml
|
||||
scp root@140.82.15.92:/etc/rancher/k3s/registries.yaml \
|
||||
/etc/rancher/k3s/registries.yaml
|
||||
systemctl restart k3s-agent
|
||||
```
|
||||
|
||||
## 与 center 协同
|
||||
|
||||
| 事项 | 哪一边 |
|
||||
|---|---|
|
||||
| `juwan.xhttp.zip` LE 证书 | center Caddy 自动签 |
|
||||
| WebTransport 终结 | center Caddy(PR 7669 fork) |
|
||||
| WebTransport 上游 | k01 chat-api UDP 8443(hostPort) |
|
||||
| envoy-gateway 上游 | k01 NodePort 30080 |
|
||||
| 镜像拉取 | k01 containerd → registry.juwan.xhttp.zip |
|
||||
| S3 后端 | k01 objectstory-rpc → s3.juwan.xhttp.zip → center Garage |
|
||||
| CD 触发 | gitea Actions runner(在 center) → kubectl 远程操作 k01 |
|
||||
Executable
+78
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REGISTRY_HOST="registry.juwan.xhttp.zip"
|
||||
CNPG_VERSION="1.29.0"
|
||||
STRIMZI_VERSION="1.0.0"
|
||||
REDIS_OP_VERSION="0.24.0"
|
||||
MONGODB_OP_VERSION="1.8.0"
|
||||
|
||||
if ! command -v kubectl >/dev/null 2>&1; then
|
||||
curl -sfL https://get.k3s.io | \
|
||||
INSTALL_K3S_EXEC="--disable=traefik --write-kubeconfig-mode=644" \
|
||||
sh -
|
||||
fi
|
||||
|
||||
if ! command -v helm >/dev/null 2>&1; then
|
||||
curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | \
|
||||
gpg --dearmor -o /usr/share/keyrings/helm.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" \
|
||||
> /etc/apt/sources.list.d/helm-stable-debian.list
|
||||
apt-get update
|
||||
apt-get install -y helm
|
||||
fi
|
||||
|
||||
if [ ! -f /root/registry-password ]; then
|
||||
echo "need /root/registry-password (zot admin password)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p /etc/rancher/k3s
|
||||
cat > /etc/rancher/k3s/registries.yaml <<EOF
|
||||
mirrors:
|
||||
${REGISTRY_HOST}:
|
||||
endpoint:
|
||||
- "https://${REGISTRY_HOST}"
|
||||
configs:
|
||||
${REGISTRY_HOST}:
|
||||
auth:
|
||||
username: admin
|
||||
password: $(cat /root/registry-password)
|
||||
EOF
|
||||
|
||||
systemctl restart k3s
|
||||
|
||||
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||
|
||||
until kubectl get nodes >/dev/null 2>&1; do sleep 2; done
|
||||
|
||||
K01_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
kubectl apply -f "${K01_DIR}/00-base/"
|
||||
|
||||
kubectl apply -f \
|
||||
"https://github.com/cloudnative-pg/cloudnative-pg/releases/download/v${CNPG_VERSION}/cnpg-${CNPG_VERSION}.yaml"
|
||||
|
||||
kubectl create namespace kafka 2>/dev/null || true
|
||||
kubectl apply -n kafka \
|
||||
-f "https://github.com/strimzi/strimzi-kafka-operator/releases/download/${STRIMZI_VERSION}/strimzi-cluster-operator-${STRIMZI_VERSION}.yaml"
|
||||
|
||||
helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/ 2>/dev/null || true
|
||||
helm repo add mongodb https://mongodb.github.io/helm-charts 2>/dev/null || true
|
||||
helm repo update
|
||||
|
||||
helm upgrade --install redis-operator ot-helm/redis-operator \
|
||||
--version "${REDIS_OP_VERSION}" \
|
||||
--namespace redis-operator --create-namespace
|
||||
|
||||
helm upgrade --install mongodb-kubernetes mongodb/mongodb-kubernetes \
|
||||
--version "${MONGODB_OP_VERSION}" \
|
||||
--namespace mongodb-operator --create-namespace \
|
||||
--set operator.watchNamespace=juwan
|
||||
|
||||
kubectl -n cnpg-system rollout status deploy/cnpg-controller-manager --timeout=300s
|
||||
kubectl -n kafka rollout status deploy/strimzi-cluster-operator --timeout=300s
|
||||
kubectl -n redis-operator rollout status deploy/redis-operator --timeout=300s
|
||||
kubectl -n mongodb-operator rollout status deploy/mongodb-kubernetes-operator --timeout=300s
|
||||
|
||||
echo
|
||||
echo "k3s + 4 operators ready"
|
||||
Executable
+89
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
K01_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
cd "$K01_DIR"
|
||||
|
||||
if [ ! -f .env ]; then
|
||||
echo ".env not found, copy from .env.example and fill in" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -a
|
||||
. ./.env
|
||||
set +a
|
||||
|
||||
mkdir -p secrets
|
||||
chmod 700 secrets
|
||||
|
||||
write_secret() {
|
||||
local name="$1" value="$2"
|
||||
printf '%s\n' "$value" > "secrets/$name"
|
||||
chmod 600 "secrets/$name"
|
||||
}
|
||||
|
||||
JWT_SECRET_KEY="${JWT_SECRET_KEY:-$(openssl rand -hex 32)}"
|
||||
ADMIN_PASSWORD="${ADMIN_PASSWORD:-$(openssl rand -hex 16)}"
|
||||
write_secret jwt-secret "$JWT_SECRET_KEY"
|
||||
write_secret admin-password "$ADMIN_PASSWORD"
|
||||
|
||||
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||
|
||||
kubectl -n juwan create secret docker-registry registry-creds \
|
||||
--docker-server="${REGISTRY_HOST}" \
|
||||
--docker-username="${REGISTRY_USERNAME}" \
|
||||
--docker-password="${REGISTRY_PASSWORD}" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
kubectl -n juwan create secret generic jwt-secret \
|
||||
--from-literal=secret-key="$JWT_SECRET_KEY" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
kubectl -n juwan create secret generic admin-bootstrap \
|
||||
--from-literal=username="${ADMIN_USERNAME}" \
|
||||
--from-literal=password="$ADMIN_PASSWORD" \
|
||||
--from-literal=email="${ADMIN_EMAIL}" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
kubectl -n juwan create secret generic email-smtp \
|
||||
--from-literal=host="${EMAIL_SMTP_HOST}" \
|
||||
--from-literal=port="${EMAIL_SMTP_PORT}" \
|
||||
--from-literal=username="${EMAIL_SMTP_USERNAME}" \
|
||||
--from-literal=password="${EMAIL_SMTP_PASSWORD}" \
|
||||
--from-literal=from-address="${EMAIL_FROM_ADDRESS}" \
|
||||
--from-literal=from-name="${EMAIL_FROM_NAME}" \
|
||||
--from-literal=reply-to="${EMAIL_REPLY_TO:-}" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
kubectl -n juwan create secret generic objectstory-s3 \
|
||||
--from-literal=endpoint="${S3_ENDPOINT}" \
|
||||
--from-literal=access-key="${S3_ACCESS_KEY}" \
|
||||
--from-literal=secret-key="${S3_SECRET_KEY}" \
|
||||
--from-literal=bucket="${S3_BUCKET_NAME}" \
|
||||
--from-literal=region="${S3_REGION}" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
DEV_CERTS="$(cd "$K01_DIR/../dev/certs" && pwd)"
|
||||
kubectl -n juwan create secret tls chat-wt-tls \
|
||||
--cert="${DEV_CERTS}/tls.crt" \
|
||||
--key="${DEV_CERTS}/tls.key" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
DOMAINS=(user player game shop order wallet community review dispute notification search chat)
|
||||
for d in "${DOMAINS[@]}"; do
|
||||
pwd_val="$(openssl rand -hex 16)"
|
||||
write_secret "redis-${d}-password" "$pwd_val"
|
||||
kubectl -n juwan create secret generic "${d}-redis" \
|
||||
--from-literal=password="$pwd_val" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
done
|
||||
|
||||
MONGO_PASSWORD="${MONGO_PASSWORD:-$(openssl rand -hex 16)}"
|
||||
write_secret mongo-password "$MONGO_PASSWORD"
|
||||
kubectl -n juwan create secret generic chat-mongodb-app-user-password \
|
||||
--from-literal=password="$MONGO_PASSWORD" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
echo
|
||||
echo "secrets/ written, k8s Secrets applied to namespace juwan"
|
||||
echo "admin password: $ADMIN_PASSWORD"
|
||||
Reference in New Issue
Block a user