集群运维实战

Kubernetes 教程 · 第 8 章 · 8 次浏览

把 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 名,可直接解析)