使用阿里云Kubernetes实现MySQL数据持久化存储--单实例

阿里云幸运券

先决条件:

需要通过阿里云容器服务创建Kubernetes创建集群。

需要通过阿里云NAS控制台创建文件系统,并添加挂载点。如果你的Kubernetes集群处于专有网络,那么挂载点推荐也添加到专有网络并与Kubernetes处理同一专网。也可以经典网络,或者其它专网,只要保证Kubernetes集群网络可以访问到你创建的挂载点即可。一个文件系统可以创建多个挂载点。

操作步骤:

在容器服务管理界面点击【存储卷】,然后点击【创建】。

image.png

选择【NAS】类型,输入【数据卷名】,输入需要创建的空间【总量】,选择【ReadWriteOnce】访问模式,输入【挂载点域名】,指定子目录。

image.png

挂载点域名名:此域名从NAS控制台获取。

ReadWriteOnce:只能被单节点以读写方式挂载。

子目录:默认为根目录,经测试需要指定一个名称,否则数据库在初始化的时候会报“chown: changing ownership of ‘/var/lib/mysql/’: Operation not permitted”。

在容器服务管理界面点击【存储卷】,然后点击【存储声明】,再点击【创建】。

注意:需要将存储声明至你应用所需要的【名称空间】,默认为【default】,如果为其它名称空间需要自行创建。

image.png

选择【NAS】,输入【名称】并选择【已有存储卷模式】,最后选择刚创建的存储卷即可。

image.png

通过命令行查看刚创建的PV与PVC。

[yuyan@registry:~]
$ kubectl get pv
NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE
mysql-data   20Gi       RWO            Retain           Bound    test/mysql-data   nas                     44s
[yuyan@registry:~]
$ kubectl get -n test pvc
NAME         STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-data   Bound    mysql-data   20Gi       RWO            nas            36s

创建资源清单配置文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: mysql-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-test
  template:
    metadata:
      namespace: test
      name: mysql-test
      labels:
        app: mysql-test
    spec:
      containers:
      - name: mysql-test
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "!gogen123"
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql/
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-data

通过“pod.spec.volumes”创建一个volume,然后再通过“pod.spec.containers.volumeMounts”挂载我们创建的volume。

腾讯云代金券

测试MySQL是否正常。

$ kubectl exec -ti -n test mysql-test-99bd46dbc-ttqkn -- mysql -uroot -p'!gogen123'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.25 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database k8s;
Query OK, 1 row affected (0.02 sec)

测试数据持久化。

删除刚创建的pod(将控制器一并删除),然后再创建新的pod,这时候我们使用已存在的数据。

如果需要让MySQL使用老的数据,只需要注释掉 MYSQL_ROOT_PASSWORD 变量即可,新的资源清单配置文件如下。

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: mysql-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-test
  template:
    metadata:
      namespace: test
      name: mysql-test
      labels:
        app: mysql-test
    spec:
      containers:
      - name: mysql-test
        image: mysql:5.7
        #env:
        #- name: MYSQL_ROOT_PASSWORD
        #  value: "!gogen123"
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql/
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-data
          ```
登录数据库验证,我们前面创建了一个新的库,名为:k8s。

$ kubectl exec -ti -n test mysql-test-75fbc84b9f-kpjwc – mysql -uroot -p’!gogen123’
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25 MySQL Community Server (GPL)

Copyright © 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| k8s |
| mysql |
| performance_schema |
| sys |
±-------------------+
5 rows in set (0.02 sec)

mysql>


阿里云NAS简要使用说明。

选择【地域】,点击【文件系统】,再点击 【创建文件系统】。

image.png

创建文件系统界面如下。

image.png

地域:默认为刚选择的地域,也可以更改。

存储类型:数据库的话推荐使用SSD,其它的视情况更改。

协议类型:NFS(用于Linux)。

可用区:随意。

存储包:如果有的话可以选择(需要购买),用于抵扣存储空间,如果没有存储包的话按量付费。



在创建好的文件系统后点击 【添加挂载点】

image.png

界面如下。

image.png

挂载占类型:如果放在公网的话,那就选择经典网络,如果放在VPC网络的话就选择专有网络。如果你的Kubernetes在专网,那推荐选择专网。在这个创建完成后还可以创建多个挂载点用于不同的网络。

VPC网络:如果选择专有网络的话才有此选项,会自动加载,只需要选择。

交换机:专有网络交换机,同样需要选择专有网络才有,会自动加载,只需要选择。

权限组:使用默认全部允许即可,如果没有特殊要求。



点击刚创建的文件系统【管理】进入下面的界面

image.png在Kubernetes添加NAS存储卷时就需要此挂载点,是一个域名,将鼠标迁移到上面会显示出使用mount命令挂载的方法。

也可以点击【添加挂载点】继续添加。

[腾讯云代金券](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=9a38a71d22b8c5d0d005525ea5100c7e&from=console)

## 原文链接
[https://blog.51cto.com/270142877/2365489](https://blog.51cto.com/270142877/2365489)

## 服务推荐
* [蜻蜓代理](https://proxy.horocn.com/)
* [代理ip](https://proxy.horocn.com/)
* [微信域名拦截检测](https://wx.horocn.com/products/wx-domain-check.html)
* [微信域名检测api](https://wx.horocn.com/products/wx-domain-check.html)

你可能感兴趣的:(使用阿里云Kubernetes实现MySQL数据持久化存储--单实例)