chore(k8s): add production kubernetes manifests for pengzhan-dev namespace
Build and Push Docker Image / build (push) Successful in 1m5s

This commit is contained in:
2026-09-16 23:13:53 -07:00
parent 17b3e2d7d8
commit d865ee2d2b
6 changed files with 152 additions and 0 deletions
+6
View File
@@ -0,0 +1,6 @@
apiVersion: v1
kind: Namespace
metadata:
name: pengzhan-dev
labels:
app.kubernetes.io/name: pengzhan-dev
+8
View File
@@ -0,0 +1,8 @@
apiVersion: v1
kind: Secret
metadata:
name: pengzhan-secrets
namespace: pengzhan-dev
type: Opaque
stringData:
ADMIN_SECRET: "admin"
+12
View File
@@ -0,0 +1,12 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pengzhan-content-pvc
namespace: pengzhan-dev
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 5Gi
+87
View File
@@ -0,0 +1,87 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: pengzhan-web
namespace: pengzhan-dev
labels:
app: pengzhan-web
spec:
replicas: 1
revisionHistoryLimit: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: pengzhan-web
template:
metadata:
labels:
app: pengzhan-web
spec:
securityContext:
fsGroup: 1000
fsGroupChangePolicy: "OnRootMismatch"
initContainers:
- name: init-content-perms
image: busybox:1.36
imagePullPolicy: IfNotPresent
command: ["sh", "-c"]
args:
- |
mkdir -p /app/content/data
chown -R 1000:1000 /app/content || true
volumeMounts:
- name: content-data
mountPath: /app/content
containers:
- name: pengzhan-web
image: git.pengzhan.dev/haopengzhan/pengzhan.dev:latest
imagePullPolicy: Always
ports:
- containerPort: 3000
name: http
env:
- name: NODE_ENV
value: "production"
- name: PORT
value: "3000"
- name: CONTENT_DIR
value: "/app/content"
- name: ADMIN_SECRET
valueFrom:
secretKeyRef:
name: pengzhan-secrets
key: ADMIN_SECRET
volumeMounts:
- name: content-data
mountPath: /app/content
livenessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 15
periodSeconds: 30
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 2
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
volumes:
- name: content-data
persistentVolumeClaim:
claimName: pengzhan-content-pvc
+15
View File
@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: pengzhan-web
namespace: pengzhan-dev
labels:
app: pengzhan-web
spec:
type: ClusterIP
selector:
app: pengzhan-web
ports:
- name: http
port: 80
targetPort: 3000
+24
View File
@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pengzhan-ingress
namespace: pengzhan-dev
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
rules:
- host: pengzhan.dev
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: pengzhan-web
port:
number: 80
tls:
- hosts:
- pengzhan.dev
secretName: pengzhan-dev-tls