#!/bin/bash
# 配置参数
NAMESPACE="my-app"
FRONTEND_IMAGE="my-frontend:latest"
BACKEND_IMAGE="my-backend:latest"
DB_IMAGE="mysql:5.7"
DB_ROOT_PASSWORD="mysecretpassword"
# 创建命名空间
kubectl create namespace $NAMESPACE
# 部署MySQL数据库
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
namespace: $NAMESPACE
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: $NAMESPACE
spec:
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: $NAMESPACE
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: $DB_IMAGE
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: $DB_ROOT_PASSWORD
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
EOF
# 部署后端服务
kubectl apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
name: backend
namespace: $NAMESPACE
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
namespace: $NAMESPACE
spec:
selector:
matchLabels:
app: backend
strategy:
type: Recreate
template:
metadata:
labels:
app: backend
spec:
containers:
- image: $BACKEND_IMAGE
name: backend
ports:
- containerPort: 8080
EOF
# 部署前端服务
kubectl apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
name: frontend
namespace: $NAMESPACE
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: frontend
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
namespace: $NAMESPACE
spec:
selector:
matchLabels:
app: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: frontend
spec:
containers:
- image: $FRONTEND_IMAGE
name: frontend
ports:
- containerPort: 80
EOF
echo "Application deployed successfully in namespace $NAMESPACE"