# mysql.yaml — MySQL 8.0 数据库 (StatefulSet + Service + 持久化卷) # ---------------------------------------------------------------------------- # 组件: # - mysql-headless (Headless Service): 为 StatefulSet 提供稳定网络标识 mysql-0 # - mysql (ClusterIP Service): 供后端以 mysql:3306 连接 # - mysql (StatefulSet): 单实例 MySQL 8.0 # 账号: 用户 aiops / 密码 aiops_pass_2026 / 数据库 aiops (密码来自 aiops-secret) # 持久化: volumeClaimTemplates 8Gi (依赖集群 StorageClass 动态供应) # # 部署: kubectl apply -f mysql.yaml # ---------------------------------------------------------------------------- --- # Headless Service — StatefulSet 稳定标识 apiVersion: v1 kind: Service metadata: name: mysql-headless namespace: devops labels: app.kubernetes.io/name: mysql app.kubernetes.io/component: database spec: clusterIP: None selector: app.kubernetes.io/name: mysql ports: - name: mysql port: 3306 targetPort: 3306 --- # ClusterIP Service — 供应用连接 apiVersion: v1 kind: Service metadata: name: mysql namespace: devops labels: app.kubernetes.io/name: mysql app.kubernetes.io/component: database spec: type: ClusterIP selector: app.kubernetes.io/name: mysql ports: - name: mysql port: 3306 targetPort: 3306 --- # StatefulSet apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql namespace: devops labels: app.kubernetes.io/name: mysql app.kubernetes.io/component: database spec: serviceName: mysql-headless replicas: 1 selector: matchLabels: app.kubernetes.io/name: mysql template: metadata: labels: app.kubernetes.io/name: mysql spec: containers: - name: mysql image: mysql:8.0 imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: aiops-secret key: mysql-root-password - name: MYSQL_DATABASE value: aiops - name: MYSQL_USER value: aiops - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: aiops-secret key: database-password - name: TZ value: Asia/Shanghai args: # 字符集 - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci # 兼容旧客户端认证方式(8.0 默认 caching_sha2_password) - --default-authentication-plugin=mysql_native_password ports: - name: mysql containerPort: 3306 livenessProbe: exec: command: - sh - -c - 'mysqladmin ping -h 127.0.0.1 -uroot -p"$MYSQL_ROOT_PASSWORD"' initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 readinessProbe: exec: command: - sh - -c - 'mysqladmin ping -h 127.0.0.1 -uroot -p"$MYSQL_ROOT_PASSWORD"' initialDelaySeconds: 10 periodSeconds: 10 timeoutSeconds: 5 resources: requests: cpu: 250m memory: 1Gi limits: cpu: "1" memory: 2Gi volumeMounts: - name: data mountPath: /var/lib/mysql # ---- 持久化卷 (8Gi) ---- volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 8Gi # storageClassName: standard # 按集群实际 StorageClass 调整,留空使用默认