k8s无脑系列(三)-NFS存储(简单版本)

k8s无脑系列(三)-NFS存储(简单版本)

1.概念

  1. 搞清楚pv,pvc

    pv = PersistentVolume 持久化存储控制器,面向集群而不是namespace。
    pvc = PersistentVolumeClaim 对接pod与pv,

  2. 关系,官方说明

    A PVC to PV binding is a one-to-one mapping, using a ClaimRef which is a bi-directional binding between the PersistentVolume and the PersistentVolumeClaim

大体意思如下:pvc与pv的绑定关系是一一对应的。注意!这里的一一对应是每个pvc只有一个pv,但pv可以对应多个pvc。这一点从Access Modes包含ReadWriteMany就可以看出来。

  1. 这篇文章只针对简单的“静态存储”,不包含“动态存储”部分。
  2. pvc与pv对应问题。pvc会搜索pv,找到没有被绑定,资源要求又一致,如果添加了label,pvc又设置了matchLabel属性的时候,会自动绑定。 更具体的,会在NFS存储(复杂版本)中介绍。

2. 部署

2.1 NFS安装

  1. 服务端安装
$yum install nfs-utils -y

$systemctl enable rpcbind nfs

$systemctl start rpcbind nfs

$mkdir /data/nfs

$chown -R nfsnobody.nfsnobody /data/nfs

$vim /etc/export
/data/nfs 192.168.56.0/24(rw,async,all_squash)
/data/nfs/mysql 192.168.56.0/24(rw,async,no_root_squash,fsid=0) # 这里很重要,MYSQL会修改目录权限所以必须放宽ROOT权限

$systemctl restart nfs
  1. 客户端验证服务可用性
cd $HOME
mkdir nfs
sudo mount -t nfs 192.168.56.4:/data/nfs nfs

3. 实际操作

  1. 创建给MySQL用的存储空间mysql-pv.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: mysql-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Recycle
      nfs:
        path: /data/nfs/mysql
        server: 192.168.56.4
    $kubectl create -f mysql-pv.yaml
    
    $kubectl get pv mysql-pv
    NAME       CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS      CLAIM     REASON    AGE
    mysql-pv   5Gi        RWO           Recycle         Available                       3s
  2. 创建mysql-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pvc
      namespace: default
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    $kubectl create -f mysql-pvc.yaml
    NAME            STATUS    VOLUME     CAPACITY   ACCESSMODES   AGE
    pvc/mysql-pvc   Bound     mysql-pv   5Gi        RWO           22s
    
    NAME          CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM               REASON    AGE
    pv/mysql-pv   5Gi        RWO           Recycle         Bound     default/mysql-pvc             2m
    
  3. 修改mysql-rc.yaml(参见无脑系列-最小集群搭建)
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: mysql-rc
    spec:
      replicas: 1
      selector:
        app: mysql-pod
      template:
        metadata:
          labels:
            app: mysql-pod
        spec:
          containers:
          - name: mysql
            image: mysql:5.6
            ports:
            - containerPort: 3306
            env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123"
            volumeMounts:
            - mountPath: "/var/lib/mysql"
              name: mysql-data
          volumes:
          - name: mysql-data
            persistentVolumeClaim:
              claimName: mysql-pvc
    $kubectl create -f mysql-rc.yaml
    $kubectl get rc mysql-rc
    NAME       DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)    SELECTOR
    mysql-rc   1         1         1         16s       mysql          mysql:5.6   app=mysql-pod
  4. 至此,带持久化存储的MySQL实例已经运行在集群中。

    一定要再验证一下的话进入NFS服务目录发现mysql数据已经出现在目录中

    $cd /data/nfs/mysql && ls
    auto.cnf  ibdata1  ib_logfile0  ib_logfile1  mysql  performance_schema

4. 排错以及解决方法

  1. mysql-rc创建不成功,报告“changing ownership of ‘/var/lib/mysql/‘: Operation not permitted”

    解答:请参考NFS的export部分,挂载给MySQL的目录,一定要加入no_root_squash,fsid=0。不然就会报告上面的错误
    如果已经做了调整,请重启nfs服务,删除mysql-rc。重新创建

  2. 诊断技巧

    mysql-rc创建不成功,xxxx代表运行时的编号

    $kubectl describe pod mysql-rc-xxxx
    
    $kubectl log mysql-rc-xxxx
    

    查看pod所在机器、错误日志
    进入pod所在Node,执行df命令查看挂载是否成功

原文地址:https://www.cnblogs.com/smokelee/p/12444956.html

时间: 2024-08-13 05:38:55

k8s无脑系列(三)-NFS存储(简单版本)的相关文章

k8s实践17:kubernetes对接nfs存储实现pvc动态按需创建分配绑定pv

1.开始前的想法.前面测试pv&&pvc的部署和简单配置应用,实现pod应用数据存储到pvc并且和pod解耦的目的.前面操作是全手动操作,手动创建pv,手动创建pvc,如果集群pod少,这样操作可以.假如集群有1000个以上的pod,每个pod都需要使用pvc存储数据,如果只能手动去一个个创建pv,pvc,工作量不可想像.如果可以创建pod的时候,创建pod的用户定义pvc,然后集群能够根据用户的pvc需求创建pv,实现动态的pv&&pvc创建分配.kubernetes支持

sql server 备份与恢复系列三 简单恢复模式下的备份与还原

原文:sql server 备份与恢复系列三 简单恢复模式下的备份与还原 一.概述 前面讲了备份的一些理论知识,这篇开始讲在简单恢复模式下的备份与还原.在简单模式下是不能做日志备份的,发生灾难后,数据库最后一次备份之后做的数据修改将是全部丢失的,所以在生产环境下,数据又很重要,一般不建议使用这种模式. 例如对一个数据库有5次完整数据备份,时间是t5,  之后发生灾难,就会部丢失. 当数据库越来越大,完整备份时间会越来越长,为了减少丢失风险,引入差异备份.例如下图演示:在第一次建立数据库完整备份后

使用nfs在k8s集群中实现持久化存储

准备NFS服务192.168.1.244$ yum -y install nfs-utils rpcbind$ systemctl start nfs-server rpcbind$ systemctl enable nfs-server rpcbind$ mkdir -p /data/k8s$ cd /data/k8s$ echo 11111111 > index.html$ vim /etc/exports/data/k8s *(rw,async,no_root_squash)$ syste

NFS存储服务深度实践

第1章 NFS介绍 1.1 什么是NFS? NFS 是Network File System的缩写,中文意思是网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下).从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录. NFS网络文件系统

[转]C# 互操作性入门系列(三):平台调用中的数据封送处理

传送门 C#互操作系列文章: C#互操作性入门系列(一):C#中互操作性介绍 C#互操作性入门系列(二):使用平台调用调用Win32 函数 C#互操作性入门系列(三):平台调用中的数据封送处理 C#互操作性入门系列(四):在C# 中调用COM组件 本专题概要 数据封送介绍 封送Win32数据类型 封送字符串的处理 封送结构体的处理 封送类的处理 小结 一.数据封送介绍 看到这个专题时,大家的第一个疑问肯定是--什么是数据封送呢?(这系列专题中采用假设朋友的提问方式来解说概念,就是希望大家带着问题

新兵训练营系列课程——海量数据存储基础

新兵训练营系列课程--海量数据存储基础 2015年8月12日 09:24   阅读 16831 微博平台研发作为微博的底层数据及业务支撑部门,已经经历了5年的发展历程.伴随着从数据及业务暴发式增长,我们在海量数据存储方面遭遇了诸多挑战,与此同时也伴随着丰富经验的积累. 本次新兵训练营,受众在于应届毕业生,目的在于让新同学系统化并且有针对性的了解平台的核心技术及核心业务,以使新同学在新兵训练营结束后,能够对平台的底层架构与业务有一定的了解. 本文主要面向新同学介绍平台的核心技术之一--海量数据存储

C# 互操作性入门系列(三):平台调用中的数据封送处理

好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------------------------------------------------------------------- C#互操作系列文章: C#互操作性入门系列(一):C#中互操作性介绍 C#互操作性入门系列(二):使用平台调用调用Win32 函数 C#互操作性入门系列(三):平台调用中的数据封

NFS存储服务及部署

1 NFS简介 1.1 什么是NFS NFS=Network File System=网络文件系统.主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下).从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录.分布式文件系统:Moosefs(mfs).Glu

Android自定义控件系列三:自定义开关按钮(三)--- 自定义属性

尊重原创,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/40855377 接之前的:Android自定义控件系列二:自定义开关按钮(一)和Android自定义控件系列三:自定义开关按钮(二)继续,今天要讲的就是如何在自定义控件中使用自定义属性,实际上这里有两种方法,一种是配合XML属性资源文件的方式,另一种是不需要XML资源文件的方式:下面我们分别来看看: 一.配合XML属性资源文件来使用自定义属性: 那么还是针对我们之前写的自定义