Kubernetes教程-PVC

第十四章 存储之PV-PVC

 

 

 

 

 

 

#yum install -y nfs-common nfs-utils rpcbind #每台机器都需要执行包括harbor机器
#systemctl start rpcbind
#systemctl start nfs
在harbor机器上创建目录
#mkdir /data/nfs
#chmod 777 /nfs
#chown nfsnobody /nfs
#vim /etc/exports
/data/nfs *(rw,no_root_squash,no_all_squash,sync)

#showmount -e 192.168.0.82

#在master机器上运行
cd /
mkdir /nfstest chmod 777 /nfstest chown nfsnobody /nfstest

  在master机器上,测试挂载目录的读写操作

复制代码
#mkdir /nfstest
#mount -t nfs 192.168.0.82:/data/nfs /nfstest/ #挂载harbor机器的/data/nfs目录为本地目录 /data/nfstest/
cd /nfstest/      #测试一下
echo >> 2.html
随便写
cd .. #离开这个目录
umount /nfstest/ #才能解除挂载 rm -rf /nfstest/ #测试完毕
在haror机器上还有2.html文件
复制代码

 master机器上,挂载,保存文件

 

 harbor机器上,查看文件内容

 master机器

复制代码
#master机器
#cd ~
#mkdir pv
#cd pv
#vim pv.yaml


apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv
spec:
  capacity:
    storage: 5Gi      #卷大小
  accessModes:
    - ReadWriteOnce   #只允许有一个人读写
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs   #随便写
  nfs:
    path: /data/nfs   #harbor机器磁盘目录
    server: 192.168.0.82

kubectl apply -f pv.yaml
kubectl get pv #查看pv
复制代码

 在harbor机器,继续创建几个pv的宿主目录

复制代码
#mkdir /data/nfs{1..3}
#vim /etc/exports

/data/nfs *(rw,no_root_squash,no_all_squash,sync)
/data/nfs1 *(rw,no_root_squash,no_all_squash,sync)
/data/nfs2 *(rw,no_root_squash,no_all_squash,sync)
/data/nfs3 *(rw,no_root_squash,no_all_squash,sync)

复制代码

#chmod 777 /data/nfs{1..3}
#chown nfsnobody /data/nfs{1..3}

#systemctl restart rpcbind
#systemctl restart nfs
#showmount -e 192.168.0.82

 在master机器上,测试挂载目录

#mkdir /nfstest1/
#mount -t nfs 192.168.0.82:/data/nfs1 /nfstest1/ 
#date >> /nfstest1/index.html
#umount /nfstest1/ #harbor机器上有了,就可以结束挂载了
#rm -rf /nfstest1/ #删除目录

在harbor机器上

#cd /data/nfs1
#cat index.html

在master机器上

复制代码
#vim pv1.yaml


apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv1
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadOnlyMany     =>  ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  nfs:
    path: /data/nfs1
    server: 192.168.0.82
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv2
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany     =>  ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow   => nfs
  nfs:
    path: /data/nfs2
    server: 192.168.0.82
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv3
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadOnlyMany      =>  ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  nfs:
    path: /data/nfs3
    server: 192.168.0.82


#kubectl apply -f pv1.yaml
#kubectl get pv
复制代码

 在master机器上

复制代码
#vim pod.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx       #无头服务名
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None   #无头服务
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"  #使用上面的无头服务名
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: hub.atguigu.com/library/nginx:latest
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]   #这个指标是必须符合下面的篮框里面的值
      storageClassName: "nfs"            #这个指标必须是符合下面的篮框里面的值
      resources:
        requests:
          storage: 1Gi                   #必须小于pvc里面定义的大小

          
#kubectl apply -f pod.yaml
#kubectl get pod
#kubectl get pv
#kubectl get pvc
复制代码

 

 

 

#kubectl describe pv nfspv1   #查看某个nfspv1挂载到barbor机器里面的哪个目录

在harbor的机器里面 

#cd /data/nfs1
#vim index.html
aaaaaaa
#cat index.html
#chmod 777 index.html

 在master机器上

#kubectl get pod -o wide
#curl 10.244.2.78   #访问pvc里面的harbor机器的磁盘文件

 同理其他两个pvc也可以创建宿主卷上的文件,并通过pod访问

#kubectl describe pv nfspv2   #找到对应的harbor目录创建index.html文件
#curl 10.244.1.82

#kubectl describe pv nfspv3   #找到对应的harbor目录创建index.html文件
#curl 10.244.1.83

 

 harbor机器,在挂载目录里面创建index.html文件

#kubectl delete pod web-0   #删掉pod web-0
#kubectl get pod -o wide #会自动重启,但是ip地址变了,服务名没有变
#cul 10.244.2.79

#kubectl exec web-0 -it -- /bin/sh   #进入容器
#ping web-1.nginx   #在容器里ping (podname).(headless server name)
#kubectl get pod -o wide -n kube-system
#dig -t A nginx.default.svc.cluster.local. @10.244.0.4

 如何彻底删掉pv

复制代码
#kubectl get statefulset
#kubectl delete statefulset --all

#kubectl get svc
#kubectl delete svc 

#kubectl get pod
#kubectl delete pod --all

#kubectl get pv nfspv1 -o yaml  #查看谁在使用pv
#kubectl edit pv nfspv1   #清除使用者

#kubectl get pv
#kubectl delete pv --all

#kubectl get pvc
#kubectl delete pvc --all
复制代码

删掉框里面的数据

 这就可以删掉下面的绑定信息了

posted @   —八戒—  阅读(504)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示