经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Linux/Shell » 查看文章
k8s部署mysql数据持久化
来源:cnblogs  作者:pluto_charon  时间:2021/2/18 16:26:25  对本文有异议

在这里我部署mysql的目的是为了后面将上一篇博客docker打包的el-admin镜像部署到k8s上,所以本文主要是部署mysql并实现持久化。

1.将我们的应用都部署到 el-admin 这个命名空间下面,创建eladmin-namespace.yaml 文件

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: el-admin

2.创建存储文件路径

  1. [root@m ~]# mkdir -p /nfsdata/mysql
  2. # 授权
  3. [root@m ~]# chmod -R 777 /nfsdata/mysql
  4. # m节点上修改文件
  5. [root@m ~]# vi /etc/exports
  6. /nfsdata *(rw,sync,no_root_squash)
  7. # m节点上重新挂载
  8. [root@m mysql]# exportfs -r
  9. # m节点上启动
  10. [root@m ~]# systemctl start rpcbind && systemctl enable rpcbind
  11. [root@m ~]# systemctl start nfs && systemctl enable nfs
  12. # 其他节点上启动
  13. [root@w1 ~]# systemctl start nfs
  14. # m节点上查看
  15. [root@m ~]# showmount -e
  16. Export list for m:
  17. /nfsdata *

3.编写el-admin-mysql.yaml

  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: el-admin-mysql-rc
  5. namespace: el-admin
  6. labels:
  7. name: el-admin-mysql-rc
  8. spec:
  9. replicas: 1
  10. selector:
  11. name: el-admin-mysql-rc
  12. template:
  13. metadata:
  14. labels:
  15. name: el-admin-mysql-rc
  16. spec:
  17. containers:
  18. - name: mysql
  19. image: mysql
  20. imagePullPolicy: IfNotPresent
  21. ports:
  22. - containerPort: 3306
  23. env:
  24. - name: MYSQL_ROOT_PASSWORD
  25. value: "root"
  26. volumeMounts:
  27. - name: mysql-persistent-storage
  28. mountPath: /var/lib/mysql #MySQL容器的数据都是存在这个目录的,要对这个目录做数据持久化
  29. volumes:
  30. - name: mysql-persistent-storage
  31. persistentVolumeClaim:
  32. claimName: el-admin-mysql-pvc #指定pvc的名称
  33. ---
  34. apiVersion: v1
  35. kind: Service
  36. metadata:
  37. name: el-admin-mysql-svc
  38. namespace: el-admin
  39. labels:
  40. name: el-admin-mysql-svc
  41. spec:
  42. type: NodePort
  43. ports:
  44. - port: 3306
  45. protocol: TCP
  46. targetPort: 3306
  47. name: http
  48. nodePort: 3306
  49. selector:
  50. name: el-admin-mysql-rc
  51. ---
  52. apiVersion: extensions/v1beta1
  53. kind: Ingress
  54. metadata:
  55. name: el-admin-mysql-ingress
  56. namespace: el-admin
  57. spec:
  58. rules:
  59. - host: eladmin.charon.com
  60. http:
  61. paths:
  62. - path: /
  63. backend:
  64. serviceName: el-admin-mysql-svc
  65. servicePort: 3306
  66. ---
  67. apiVersion: v1
  68. kind: PersistentVolume
  69. metadata:
  70. name: el-admin-mysql-pv
  71. namespace: el-admin
  72. spec:
  73. capacity:
  74. storage: 2Gi
  75. accessModes:
  76. - ReadWriteMany
  77. persistentVolumeReclaimPolicy: Recycle
  78. storageClassName: nfs
  79. nfs:
  80. path: /nfsdata/mysql
  81. server: 192.168.189.153
  82. ---
  83. kind: PersistentVolumeClaim
  84. apiVersion: v1
  85. metadata:
  86. name: el-admin-mysql-pvc
  87. namespace: el-admin
  88. spec:
  89. accessModes:
  90. - ReadWriteMany
  91. storageClassName: nfs
  92. resources:
  93. requests:
  94. storage: 2Gi

4.创建mysql的服务

  1. [root@m el-admin]# kubectl create -f el-admin-mysql.yaml

5.查看pod,因为是在el-admin的命名空间下,所以查询pod的时候需要指定命名空间

  1. [root@m ~]# kubectl get pods -n el-admin -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. el-admin-mysql-rc-9p7wf 1/1 Running 1 151m 192.168.190.124 w1 <none> <none>

从上图可以看到,mysql的pod是在w1节点上,即192.168.189.155这个节点。这个时候我们使用navicat连接mysql,肯定是连接不成功的,如下图所示:

6.进入容器

  1. [root@m el-admin]# kubectl exec -it el-admin-mysql-rc-9p7wf /bin/bash
  2. # 登录mysql
  3. root@el-admin-mysql-rc-9p7wf:/# mysql -u root -p
  4. # 输入密码,密码为上门pod中配置的root

查询mysql的用户,

  1. mysql> select host,user,plugin,authentication_string from mysql.user;

为用端口为'%'用户为root的用户密码设置为root。

  1. mysql> alter user 'root'@'%' identified with mysql_native_password by'root';

设置完成后,重新连接,即可连接成功。

上门的文档里配置了ingress,ingress可以配置提供外部可访问的URL。

  1. # 修改windows的host文件,目录:C:\Windows\System32\drivers\etc
  2. # 添加内容
  3. 192.168.189.155 eladmin.charon.com

使用eladmin.charon.com这个域名也可以连接成功

连接成功后,在navicat里面创建一个eladmin的数据库,在k8s上的mysql挂载目录下查看新建的eladmin的数据库目录。

到这里,k8s部署mysql,并将数据持久化到宿主机上就完成了。

参考文件:

kubernetes部署mysql:https://www.cnblogs.com/zoulixiang/p/9910337.html

原文链接:http://www.cnblogs.com/pluto-charon/p/14411780.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号