k8s持续化存储mysql数据

实验环境

master:192.168.100.10

node :192.168.100.20

然后安装好k8s以及docker

本人已经做好了Harbor私有仓库,所以以下镜像前均带IP地址。

1、因为是用NFS来作为持续数据化,所以首先搭建NFS。

master:
yum install -y nfs*
mkdir -p /nfsdata/mysql #这个目录用来当我们NFS的共享目录来使用
vim /etc/exports
/nfsdata *(rw,sync,no_root_squash)
exportfs -r
systemctl restart nfs && systemctl enable nfs
show

node:
[root@node ~]# showmount -e 192.168.100.10
Export list for 192.168.100.10:
/nfsdata *
#至此,前提的NFS服务搭建完成

2、编写PV资源文件

vim mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
    name: mysql-pv
spec:
  accessModes:  #给PV设置模式
   - ReadWriteOnce #RWO模式是只能以读写的方式挂载到单个节点
  capacity:  #容量,相当于存储
      storage: 1Gi #给1G
  persistentVolumeReclaimPolicy: Retain   #持久卷声明策略,Retain策略不清理保留数据。即删除pvc或者pv后,在插件上的数据(nfs服务端)不会被删除。这种方式是最常用的,可以避免误删pvc或者pv而造成数据的丢失
  storageClassName: nfs #存储类,选择nfs
  nfs:
    path: /nfsdata/mysql
    server: 192.168.100.10  #挂到/nfsdata/mysql这个目录上

#配置详解:
Retain: 这个策略说白了就是不清理, 保留 Volume(需要手动清理)   
ReadWriteOnce(RWO): 是最基本的方式,可读可写,但只支持被单个 Pod 挂载。
ReadOnlyMany(ROX): 可以以只读的方式被多个 Pod 挂载。
ReadWriteMany(RWX): 这种存储可以以读写的方式被多个 Pod 共享  
  

3、编写PVC资源文件

vim mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
     name: mysql-pvc
spec:
  accessModes:
   - ReadWriteOnce
  resources:
     requests:
         storage: 1Gi #此处选择的存储必须和PV里面选择的存储一样,不然可能会导致不能bound,欢迎讨论这个配置。
  storageClassName: nfs #此处是指向pv,并进行关联。
         

4、编写Deployment以及SVC资源文件,集成到一块。

vim mysql-deployment_svc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
    name: mysql-dep
spec:
   selector: 
     matchLabels:
          app: mysql #做一个选择标签,
   template:
      metadata:
          labels:
              app: mysql #此处标签与上面一样,目的是要让spec.selector.matchLabels值和spec.template.metadata.lables值完全匹配  
      template:
          spec:
             containers:
                  - name: mysql
                    image: 192.168.100.10/library/mysql:5.6
                    ports:
                      - containerPort: 3306
                    env:
                      - name: MYSQL_ROOT_PASSWORD
                        value: 000000   #设置数据库密码为000000
                    volumeMounts: #数据要存放的卷目录
                       - name: mysql-data-storage
                         mountPath: /var/lib/mysql #让容器挂载到这个目录,实现数据文件都存放在此目录当中,让这个目录数据持久化。
             volumes:  #在pod上选择共享存储卷
                 - name: mysql-data-storage
                   persistentVolumeClaim:
                             claimName: mysql-pvc #指定pvc的名称
#############################################################################
################## 以下开始创建 svc ##########################################
apiVersion: v1
kind: Service
metadata:
   name: mysql
spec:
   type: NodePort #暴露端口
   ports:
      - port: 3306  #我自己开房的端口
        targetPort: 3306 #开放的后端端口
        nodePort: 32543 #暴露出去的端口,相当于一个端口映射,访问这个端口的时候,转到3306
   selector:
        app: mysql                         

5、测试是否数据持久化

kubectl apply -f mysql-pv.yaml
kubectl apply -f mysql-pvc.yaml
kubectl apply -f mysql-deployment_svc.yaml #首先启动起来
kubectl exec -it mysql-<podID> -- mysql -uroot -p000000
mysql> create database hello;
mysql> use hello;
mysql> create table test(id int(4));
mysql>insert test values(1314);
mysql>select * from test;
+------+
| id   |
+------+
| 1314 |
+------+
1 row in set (0.00 sec)

然后去查看下mysql 在哪个节点上:

kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP            NODE   NOMINATED NODE   READINESS GATES
mysql-58dfd956ff-d472f   1/1     Running   0          9m38s   10.244.1.15   node   <none>           <none>
发现在node上,这个时候去node
[root@node ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d706dbae5d50        44241dbd4d38        "docker-entrypoint.s…"   9 minutes ago       Up 9 minutes                            k8s_mysql_mysql-58dfd956ff-d472f_default_50ac5310-6cc5-49c1-8dc0-7f4d9e23d60c_0
[root@node ~]# docker rm -f d706
d706

然后这个时候再去看看数据还在不在。

kubectl exec -it mysql-<podID> -- mysql -uroot -p000000

mysql> select * from gch.myid
    -> ;
+------+
| id   |
+------+
| 1314 |
+------+
1 row in set (0.00 sec)

还在,试验成功!

-----来自河南经贸19级计算机工程学院的一名普通学生,通过博客来分享自己日常收获到的新知识,会持续坚持,感谢大家的阅读,希望可以帮到你!
PS:理解不到位之处多谢包涵!
转载的希望可以放上本文章的链接,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值