加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 百科网 (https://www.baikewang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

7、手动删除节点上的容器,验证数据库内的数据是否还存在

发布时间:2023-02-08 12:47:44 所属栏目:MySql教程 来源:
导读:  这个是一个只写配置及验证的博文。。。。。。

  博文大纲:1、搭建nfs存储2、创建PV3、创建PVC4、确认pv及pvc的状态5、创建pod+svc(service)6、进入MySQL数据库,添加测试数据7、手动删除节点上的容器,
  这个是一个只写配置及验证的博文。。。。。。
 
  博文大纲:1、搭建nfs存储2、创建PV3、创建PVC4、确认pv及pvc的状态5、创建pod+svc(service)6、进入MySQL数据库,添加测试数据7、手动删除节点上的容器,验证数据库内的数据是否还存在8、模拟MySQL容器所在的节点宕机,验证数据是否会丢失9、client端访问MySQL数据库
 
  k8s集群环境如下:
 
  k8s集群的搭建可以参考博文:K8s(Kubernetes)简介及安装部署。
 
  1、搭建nfs存储
 
  为了方便操作,我直接在master上搭建nfs存储。
 
  [root@master ~]# yum -y install nfs-utils
  [root@master ~]# systemctl enable rpcbind
  [root@master lv]# mkdir -p /nfsdata/mysql
  [root@master ~]# vim /etc/exports
  /nfsdata *(rw,sync,no_root_squash)
  [root@master ~]# systemctl start nfs-server
  [root@master ~]# systemctl enable nfs-server
  [root@master ~]# showmount -e
  Export list for master:
  /nfsdata *
  2、创建PV
 
  [root@master lv]# vim mysql-pv.yaml      #编写pv的yaml文件
  kind: PersistentVolume
  apiVersion: v1
  metadata:
    name: mysql-pv
  spec:
    accessModes:
      - ReadWriteOnce        #访问模式定义为只能以读写的方式挂载到单个节点
    capacity:
      storage: 1Gi
    persistentVolumeReclaimPolicy: Retain
    storageClassName: nfs
    nfs:
      path: /nfsdata/mysql
      server: 192.168.20.6
  [root@master lv]# kubectl apply -f mysql-pv.yaml  #执行yaml文件
  3、创建PVC
 
  [root@master lv]# vim mysql-pvc.yaml       #编写pvc的yaml文件
  kind: PersistentVolumeClaim
  apiVersion: v1
  metadata:
    name: mysql-pvc
  spec:
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 1Gi
    storageClassName: nfs      #这里指定关联的PV名称
  [root@master lv]# kubectl apply -f mysql-pvc.yaml       #执行yaml文件
  4、确认pv及pvc的状态
 
  至此,PV和PVC的状态类应该都是Bound。
 
  [root@master lv]# kubectl get pv     
  NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS   REASON   AGE
  mysql-pv   1Gi        RWO            Retain           Bound    default/mysql-pvc   nfs                     5m8s
  [root@master lv]# kubectl get pvc
  NAME        STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
  mysql-pvc   Bound    mysql-pv   1Gi        RWO            nfs            60s
  5、创建pod+svc(service)
 
  这个pod是提供的MySQL服务mysql持久化,并将其映射到宿主机,可以做和client端通信。
 
  这里我将pod和svc的yaml文件写在同一个文件中。
 
  [root@master lv]# vim mysql-pod.yaml     #编写pod的yaml文件
  apiVersion: extensions/v1beta1
  kind: Deployment
  metadata:
    name: mysql
  spec:
    selector:
      matchLabels:
        app: mysql
    template:
      metadata:
        labels:
          app: mysql
      spec:
        containers:
        - name: mysql
          image: mysql:5.7
          env:                        #以下是设置MySQL数据库的密码
          - name: MYSQL_ROOT_PASSWORD
            value: 123.com
          ports:
          - containerPort: 3306
          volumeMounts:
          - name: mysql-persistent-storage
            mountPath: /var/lib/mysql          #MySQL容器的数据都是存在这个目录的,要对这个目录做数据持久化
        volumes:
        - name: mysql-persistent-storage
          persistentVolumeClaim:
            claimName: mysql-pvc       #指定pvc的名称
  ---          #以下是创建svc的yaml文件
  apiVersion: v1
  kind: Service
  metadata:
    name: mysql
  spec:
    type: NodePort
    ports:
    - port: 3306
      targetPort: 3306
      nodePort: 31111
    selector:
      app: mysql
    selector:
      app: mysql
  [root@master lv]# kubectl apply -f mysql-pod.yaml     #执行yaml文件
  [root@master lv]# kubectl get pod        #确定pod运行正常
  NAME                     READY   STATUS    RESTARTS   AGE
  mysql-6d898f8bcb-lhqxb   1/1     Running   0          51s
  6、进入MySQL数据库,添加测试数据
 
  [root@master lv]# kubectl exec -it mysql-6d898f8bcb-lhqxb -- mysql -uroot -p123.com
  mysql> create database test;
  mysql> use test;
  mysql> create table my_id(id int(4));
  mysql> insert my_id values(9527);
  mysql> select * from my_id;            #确认有数据存在
  7、手动删除节点上的容器,验证数据库内的数据是否还存在
 
  [root@master lv]# kubectl get pod -o wide          #查看pod运行在哪个节点
  NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   
  mysql-6d898f8bcb-cz8gr   1/1     Running   0          10m   10.244.1.3   node01   
  #我这是运行在node01节点,现在去node01节点手动将其容器删除
  [root@node01 ~]# docker ps       #查看MySQL容器的ID
  [root@node01 ~]# docker rm -f 1a524e001732    #将MySQL的容器删除
  #由于Deployment的保护策略,当删除容器后,它会根据pod的yaml文件生成一个新的容器,但新容器的ID号就变了
  #回到master节点,登录到数据库,查看数据是否还存在
  [root@master lv]# kubectl exec -it mysql-6d898f8bcb-cz8gr -- mysql -uroot -p123.com
  mysql> select * from test.my_id;           #数据还在,OK
  +------+
  | id   |
  +------+
  | 1996 |
  +------+
  1 row in set (0.01 sec)
  至此,即可证明,当使用PV来做数据持久化的话,容器的新陈代谢并不会造成丢失数据的。
 
  8、模拟MySQL容器所在的节点宕机,验证数据是否会丢失
 
  [root@master lv]# kubectl get pod -o wide   #查看容器所在节点,我这里还是在node01
  #然后我这里将node01关机,然后动态查看pod的状态
  [root@master lv]# kubectl get pod -o wide -w    #动态查看pod的状态
  #大概node01关机五分钟左右,可以看到pod就被转移到node02上运行了。
  NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
  mysql-6d898f8bcb-cz8gr   1/1     Running   0          20m   10.244.1.3   node01              
  mysql-6d898f8bcb-cz8gr   1/1     Running   0          20m   10.244.1.3   node01              
  mysql-6d898f8bcb-cz8gr   1/1     Terminating   0          25m   10.244.1.3   node01              
  mysql-6d898f8bcb-gp4t5   0/1     Pending       0          0s                         
  mysql-6d898f8bcb-gp4t5   0/1     Pending       0          0s           node02              
  mysql-6d898f8bcb-gp4t5   0/1     ContainerCreating   0          0s           node02              
  mysql-6d898f8bcb-gp4t5   1/1     Running             0          1s    10.244.2.4   node02              
  9、client端访问MySQL数据库
 
  因为我们在创建pod的yaml文件中,将其svc的端口映射类型是nodeport,所以,我们是可以通过访问群集内的任意主机的31111端口(yaml文件中自定义的端口)来登录到数据库的。如下:
 
  [root@master lv]# mysql -uroot -p123.com -h 192.168.20.8 -P 31111
  MySQL [(none)]> select * from test.my_id;    #查看数据
  +------+
  | id   |
  +------+
  | 1996 |
  +------+
  1 row in set (0.01 sec)
 
 

(编辑:百客网 - 百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!