# storage-mysql

* 必须存在动态存储(例如动态存储名： local)



```yaml
# 动态存储不需要手动去创建 PV ，直接创建 PVC 即可
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: local

---
apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
spec:
  clusterIP: None
  ports:
    - name: mysql
      port: 3306
  selector:
    app: mysql

---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-sta
spec:
  serviceName: mysql-svc
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  # For Deployment
  #strategy:
  #  type:  RollingUpdate
  #  rollingUpdate:
  #    maxSurge: 25%
  #    maxUnavailable: 25%
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:8.0
          imagePullPolicy: IfNotPresent
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123456"
            - name: MYSQL_ROOT_HOST
              value: "%"
            - name: MYSQL_DEFAULT_AUTHENTICATION_PLUGIN
              value: mysql_native_password
            - name: TZ
              value: Asia/Shanghai
          ports:
            - containerPort: 3306
          resources:
            requests:
              memory: "200Mi"
              cpu: "0.1"
            limits:
              memory: "2Gi"
              cpu: "1"
          livenessProbe:
            exec:
              command:
              - mysqladmin
              - ping
              - -h127.0.0.1
              - -uroot
              - -p${MYSQL_ROOT_PASSWORD}
            initialDelaySeconds: 60
            timeoutSeconds: 5
            periodSeconds: 10
            failureThreshold: 3
          readinessProbe:
            exec:
              command:
              - mysqladmin
              - ping
              - -h127.0.0.1
              - -uroot
              - -p${MYSQL_ROOT_PASSWORD}
            initialDelaySeconds: 60
            timeoutSeconds: 5
            periodSeconds: 10
            failureThreshold: 3
          volumeMounts:
            - name: mysql-data
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-data
          persistentVolumeClaim:
            claimName: mysql-pvc

# 临时容器测试
# [root@master pv_pvc_test]# kubectl run mysql-client --rm -it --image=mysql:8.0 --restart=Never -- mysql -h mysql-svc.default.svc.cluster.local -uroot -p123456 -e "select version()"
# mysql: [Warning] Using a password on the command line interface can be insecure.
# +-----------+
# | version() |
# +-----------+
# | 8.0.37    |
# +-----------+
# pod "mysql-client" deleted
```
