先决条件:
需要通过阿里云容器服务创建Kubernetes创建集群。
需要通过阿里云NAS控制台创建文件系统,并添加挂载点。如果你的Kubernetes集群处于专有网络,那么挂载点推荐也添加到专有网络并与Kubernetes处理同一专网。也可以经典网络,或者其它专网,只要保证Kubernetes集群网络可以访问到你创建的挂载点即可。一个文件系统可以创建多个挂载点。
操作步骤:
在容器服务管理界面点击【存储卷】,然后点击【创建】。
选择【NAS】类型,输入【数据卷名】,输入需要创建的空间【总量】,选择【ReadWriteOnce】访问模式,输入【挂载点域名】,指定子目录。
挂载点域名名:此域名从NAS控制台获取。
ReadWriteOnce:只能被单节点以读写方式挂载。
子目录:默认为根目录,经测试需要指定一个名称,否则数据库在初始化的时候会报“chown: changing ownership of '/var/lib/mysql/': Operation not permitted”。
在容器服务管理界面点击【存储卷】,然后点击【存储声明】,再点击【创建】。
注意:需要将存储声明至你应用所需要的【名称空间】,默认为【default】,如果为其它名称空间需要自行创建。
选择【NAS】,输入【名称】并选择【已有存储卷模式】,最后选择刚创建的存储卷即可。
通过命令行查看刚创建的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 (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 | | k8s | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.02 sec) mysql>
阿里云NAS简要使用说明。
选择【地域】,点击【文件系统】,再点击 【创建文件系统】。
创建文件系统界面如下。
地域:默认为刚选择的地域,也可以更改。
存储类型:数据库的话推荐使用SSD,其它的视情况更改。
协议类型:NFS(用于Linux)。
可用区:随意。
存储包:如果有的话可以选择(需要购买),用于抵扣存储空间,如果没有存储包的话按量付费。
在创建好的文件系统后点击 【添加挂载点】
界面如下。
挂载占类型:如果放在公网的话,那就选择经典网络,如果放在VPC网络的话就选择专有网络。如果你的Kubernetes在专网,那推荐选择专网。在这个创建完成后还可以创建多个挂载点用于不同的网络。
VPC网络:如果选择专有网络的话才有此选项,会自动加载,只需要选择。
交换机:专有网络交换机,同样需要选择专有网络才有,会自动加载,只需要选择。
权限组:使用默认全部允许即可,如果没有特殊要求。
点击刚创建的文件系统【管理】进入下面的界面
在Kubernetes添加NAS存储卷时就需要此挂载点,是一个域名,将鼠标迁移到上面会显示出使用mount命令挂载的方法。
也可以点击【添加挂载点】继续添加。
转载于:https://blog.51cto.com/270142877/2365489