此项目采用单实例部署,切勿在生产环境使用!

1. 说明

MariaDB 需要镜像 mariadb:10.5。部署完成后,集群内部地址为:

1
svc-mariadb.core-middle.svc.cluster.local:3306

2. 创建 PVC

导入以下配置,创建PVC。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-mariadb-data
  namespace: core-middle
  labels:
    app: mariadb
spec:
  storageClassName: 'sc-nfs-share'
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi

3. 管理员用户配置

将管理员用户配置导入到 Secret 中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
apiVersion: v1
kind: Secret
metadata:
  name: secret-mariadb-root
  namespace: core-middle
  labels:
    app: mariadb
type: Opaque
stringData:
  password: 'mysql-root-password' (1)
其中
1 你需要将其配置成一个更安全的密码

4. 创建 MariaDB 服务器

使用以下配置创建 MariaDB 服务器。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: sts-mariadb
  namespace: core-middle
  labels:
    app: mariadb
spec:
  serviceName: mariadb-server
  selector:
    matchLabels:
      app: mariadb
  replicas: 1
  template:
    metadata:
      labels:
        app: mariadb
    spec:
      containers:
        - name: mariadb
          image: mariadb:10.8
          volumeMounts:
            - name: mariadb-data
              mountPath: /var/lib/mysql
          env:
            - name: MARIADB_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: secret-mariadb-root
                  key: password
            - name: MARIADB_ROOT_HOST
              value: "%"
          livenessProbe:
            exec:
              command:
                - bash
                - "-c"
                - |
                  mysqladmin -uroot -p$MARIADB_ROOT_PASSWORD ping &> /dev/null
            initialDelaySeconds: 20
            periodSeconds: 2
            timeoutSeconds: 5
      volumes:
        - name: mariadb-data
          persistentVolumeClaim:
            claimName: pvc-mariadb-data

5. 关联Service

将 MariaDB 服务关联到 Service 下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mariadb
  name: svc-mariadb
  namespace: core-middle
spec:
  ports:
    - port: 3306
  selector:
    app: mariadb

6. 测试

使用以下命令查看实例部署情况:

1
kubectl get pods,secrets,services,deployments,pvc -n core-middle -l app=mariadb

如果一切无误的话可使用以下命令测试 MariaDB ,输出结果如下所示。

测试命令
1
2
MYSQL_PASSWD=$(kubectl get secrets -n core-middle  secret-mariadb-root -o jsonpath='{.data.password}' | base64 -d)
kubectl exec -it -n core-middle pods/sts-mariadb-0 -- mysql -h svc-mariadb.core-middle.svc.cluster.local -uroot -p$MYSQL_PASSWD -e "select 1;"
输出结果
1
2
3
4
5
+---+
| 1 |
+---+
| 1 |
+---+