先决条件:
需要通过阿里云容器服务创建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)