k8s无脑系列-NFS存储(简单版本)
Posted smokelee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s无脑系列-NFS存储(简单版本)相关的知识,希望对你有一定的参考价值。
k8s无脑系列(三)-NFS存储(简单版本)
1.概念
搞清楚pv,pvc
pv = PersistentVolume 持久化存储控制器,面向集群而不是namespace。
pvc = PersistentVolumeClaim 对接pod与pv,关系,官方说明
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就可以看出来。
这篇文章只针对简单的“静态存储”,不包含“动态存储”部分。
pvc与pv对应问题。pvc会搜索pv,找到没有被绑定,资源要求又一致,如果添加了label,pvc又设置了matchLabel属性的时候,会自动绑定。 更具体的,会在NFS存储(复杂版本)中介绍。
2. 部署
2.1 NFS安装
- 服务端安装
$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
- 客户端验证服务可用性
cd $HOME
mkdir nfs
sudo mount -t nfs 192.168.56.4:/data/nfs nfs
3. 实际操作
创建给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
创建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
修改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
至此,带持久化存储的MySQL实例已经运行在集群中。
一定要再验证一下的话进入NFS服务目录发现mysql数据已经出现在目录中
$cd /data/nfs/mysql && ls auto.cnf ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema
4. 排错以及解决方法
mysql-rc创建不成功,报告“changing ownership of ‘/var/lib/mysql/‘: Operation not permitted”
解答:请参考NFS的export部分,挂载给MySQL的目录,一定要加入no_root_squash,fsid=0。不然就会报告上面的错误
如果已经做了调整,请重启nfs服务,删除mysql-rc。重新创建诊断技巧
mysql-rc创建不成功,xxxx代表运行时的编号
$kubectl describe pod mysql-rc-xxxx $kubectl log mysql-rc-xxxx
查看pod所在机器、错误日志
进入pod所在Node,执行df命令查看挂载是否成功
以上是关于k8s无脑系列-NFS存储(简单版本)的主要内容,如果未能解决你的问题,请参考以下文章
k8s无脑系列-安装k8s 1.16.4,以及Pod间网络不通问题