k8s自动化运维五-搭建共享文件存储

不同备份数据库脚本区别

image.png

同一个数据库不同的2个备份脚本,这两个备份脚本大小差别比较大,看看是哪里的区别?

将2个脚本分别导入不同的数据库中

查看数据库中每个表占用空间,并按大小降序

SELECT
	TABLE_NAME,
	DATA_LENGTH + INDEX_LENGTH,
	TABLE_ROWS,
	round((DATA_LENGTH ) / 1024 / 1024,2) as DATA
FROM
	information_schema. TABLES
WHERE
	TABLE_SCHEMA = 'cxcloud_reimburse' -- 数据库名
ORDER BY DATA + 0 DESC;
  • 数据库1

image.png

  • 数据库2

image.png

发现sys_log_interface接口请求报文记录表中无效数据比较多,一张表6000多条数据,占用2G多的空间,那么这个则是程序的一个优化点。

将备份的脚本传送到其他服务器上

scp 指定密码

  • 下载安装包

    https://sourceforge.net/projects/sshpass/
    
  • 编译

    sh configure
    
  • 安装

    make&&make install
    

scp

sshpass -p Max#550 scp cxcloud_reimburse_2022-07-31_09-04-15.sql.tar.gz [email protected]:/opt

k8s基于nfs创建pvc

安装nfs

  • 安装rpc跟nfs服务

    yum -y install rpcbind nfs-utils
    
  • 创建指定共享目录并修改相应权限

    mkdir /nfs && chmod 666 /nfs
    
  • 编译nfs共享文件夹访问权限

    vim /etc/exports 
    
    /nfs *(rw,sync,no_root_squash)
    
    第一部分:/nfs 是服务器共享的目录
    
    第二部分:* 允许访问的ip,*表示所有
    
    例如192.168.0.0/24,其中的/24是掩码,此处表示24个1,即11111111.11111111.11111111.00000000, 即掩码是255.255.255.0。结合前面192.168.0.0表示此处配置IP为 192.168.0.*的主机均可以访问该目录,即局域网上的所有主机。
    
    第三部分:(insecure,rw,sync,no_root_squash,no_subtree_check)
    

  • 载入配置

    exportfs -rv
    
  • 启动rpc服务并加入开机自启

    systemctl enable rpcbind --now
    
  • 启动nfs服务并加入开机自启

    systemctl enable nfs --now
    
  • 服务检查

    showmount -e 
    
    Export list for master: /nfs *
    
  • 客户端将服务nfs目录挂载至本机/mnt,然后df -h查看挂载结果

    mount -t nfs 10.1.2.219:/nfs /mnt
    

创建storageclass

image.png

image.png

image.png

  • 创建好storageclass之后,会自动在kube-system命名空间启动nfs-client pod

image.png

并通过pod生成pv

image.png

image.png

  • 进入某一个业务应用的命名空间,创建pvc

    image.png

    image.png

    image.png

    或者

    image.png

可能遇到的问题-问题1

  • 如果nfs共享文件夹权限设置为root_squash

    image.png

    no_root_squash 这个的意思是nfs client pod内root用户具有root的访问权限;root_squash表示nfs client pod内root用户没有root的访问权限,所以配置成root_squash,查看nfs client pod日志

    kubectl  describe pod nfs-client-provisioner-5d6bdff8d9-fhkbs -n kube-system
    

    image.png没有权限创建文件夹,进入pod里面看下

    kubectl  exec -it nfs-client-provisioner-5d6bdff8d9-fhkbs  -n kube-system sh
    

    image.png

    所以需要设置为no_root_squash,root用户才具有root操作权限

    image.png

问题2

nfs在10.1.2.219虚拟机上,本地电脑mac k8s 创建storageclass 挂载nfs报错:连接超时

image.png

这是需要进入k8s内部,确认下是否可以访问10.1.2.219

  • 部署一个deploment

    vim ndsutils.yaml
    
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: dnsutils
    spec:
      containers:
      - name: dnsutils
        image: mydlqclub/dnsutils:1.3
        imagePullPolicy: IfNotPresent
        command: ["sleep","3600"]
    
    
    kubectl create -f ndsutils.yaml -n kube-system
    
  • 进入k8s

    kubectl exec -it dnsutils /bin/sh -n kube-system
    

    image.png

    本地mac的k8s集群访问10.1.2.219是不通的,所以挂在nfs的时候报连接超时是正常的。

  • 修改nfs 共享文件夹权限

    /nfs 10.1.2.0/24(insecure,rw,sync,no_root_squash,fsid=0)
    
    
    在宿主机上执行sudo mount -t nfs  10.1.2.219:/nfs /opt/nfs/data 是可以的
    

    image.png

    为什么我本地mac电脑可以连接内网服务器,因为我本地电脑连接着内网的vpn

    image.png

    vpn连接着蒲公英的一个硬件设备

    image.png

    image.png

    在蒲公英的网络安全管理平台也可以看到

    image.png

    这个硬件上设备连接着内网服务器,所以我本地电脑连接vpn就可以访问到内网服务器。但是如果把nfs共享文件夹的访问权限,设置为允许所有ip访问
    image.png
    我本地电脑访问则显示没有权限
    image.png
    所以要想局域网可以访问需要配置下局域网的ip范围即局域网下的所有主机可以访问

pod删除之后,又重启

  • 先查下deployment

    image.png

  • 再删除deployment

    image.png

pvc强制删除

kubectl patch pvc 219-pvc -p  '{"metadata":{"finalizers":null}}'  -n xibaoxiao-cloud
persistentvolumeclaim/219-pvc patched

kubectl delete pvc 219-pvc -n xibaoxiao-cloud

猜你喜欢

转载自juejin.im/post/7126928834070315016