集群运维实战
把 PHP + MySQL 网站部署到 K8s:MySQL 用 StatefulSet + PVC 持久化,PHP 应用用 Deployment + Service,Nginx 用 Ingress 对外暴露。
清单
这个规模对学习足够:一个 Secret(数据库密码)、一个 PVC、一个 MySQL Deployment+Service、一个应用 Deployment+Service、一个 Ingress。
代码示例
# mysql.yaml(核心部分)
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels: { app: mysql }
template:
metadata:
labels: { app: mysql }
spec:
containers:
- name: mysql
image: mysql:8
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef: { name: db-secret, key: password }
volumeMounts:
- { name: data, mountPath: /var/lib/mysql }
volumes:
- name: data
persistentVolumeClaim:
claimName: mysql-data
---
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector: { app: mysql }
ports:
- { port: 3306, targetPort: 3306 }
# 应用
kubectl apply -f mysql.yaml
kubectl get pods -w
# 应用连接串:mysql://用户名:密码@mysql:3306/库名
# (集群内 mysql 即 Service 名,可直接解析)