使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
NFS 存在一个弊端,需要知道NFS服务器的地址,配在 yaml 中
PV:持久化存储,对存储资源进行抽象,对外提供可以调用的地方
PVC:用于调用,不需要关心内部实现细节
PV(PersistentVolume):是集群中由管理员配置的一段网络存储。 它是集群中的资源, 就像节点是集群资源一样。 PV 是容量插件, 如 Volumes, 但其生命周期独立于使用 PV 的任何单个 pod。 此 API 对象捕获存储实现的详细信息, 包括 NFS, iSCSI 或特定于云提供程序的存储系统。
PVC(PersistentVolumeClaim):是由用户进行存储的请求。 它类似于 pod。 Pod 消耗节点资源, PVC 消耗 PV 资源。 Pod 可以请求特定级别的资源( CPU 和内存) 。 声明可以请求特定的大小和访问模式( 例如, 可以一次读/写或多次只读) 。
虽然 PersistentVolumeClaims 允许用户使用抽象存储资源, 但是 PersistentVolumes 对于不同的问题, 用户通常需要具有不同属性( 例如性能) 。 群集管理员需要能够提供各种PersistentVolumes 不同的方式, 而不仅仅是大小和访问模式, 而不会让用户了解这些卷的实现方式。 对于这些需求, 有 StorageClass 资源。
StorageClass 为管理员提供了一种描述他们提供的存储的“ 类” 的方法。 不同的类可能映射到服务质量级别, 或备份策略, 或者由群集管理员确定的任意策略。 Kubernetes 本身对于什么类别代表是不言而喻的。 这个概念有时在其他存储系统中称为“ 配置文件” 。
PVC 和 PV 是一一对应的
PV 是群集中的资源。 PVC 是对这些资源的请求, 并且还充当对资源的检查。 PV 和 PVC 之间
的相互作用遵循以下生命周期:
Provisioning ——-> Binding ——– >Using——>Releasing——>Recycling
应用部署 、定义PVC(绑定PV)、定义PV(数据存储服务器IP,路径)
创建YAML文件
pvc.yaml- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: nginx-pvc
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: nginx
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx
- volumeMounts:
- - name: wwwroot
- mountPath: /usr/share/nginx/html
- ports:
- - containerPort: 80
- volumes:
- - name: wwwroot
- persistentVolumeClaim:
- claimName: my-pvc
- ---
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: my-pvc
- spec:
- accessModes:
- - ReadWriteMany
- resources:
- requests:
- storage: 5Gi
复制代码 pv.yaml- apiVersion: v1
- kind: PersistentVolume
- metadata:
- name: my-pv
- spec:
- capacity:
- storage: 5Gi
- accessModes:
- - ReadWriteMany
- nfs:
- path: /nfs/pv
- server: 172.16.3.181
复制代码- # 创建目录
- [root@k8smaster ~]# mkdir -p /nfs/pv
- # 创建 pvc.yaml ,内容见上
- [root@k8smaster ~]# vi pvc.yaml
- # 创建 pv.yaml ,内容见上
- [root@k8smaster ~]# vi pv.yaml
- [root@k8smaster ~]# kubectl apply -f pvc.yaml
- deployment.apps/nginx-pvs created
- persistentvolumeclaim/my-pvc created
- [root@k8smaster ~]# kubectl get pods
- NAME READY STATUS RESTARTS AGE
- javademo1-d7856c75c-czv2g 1/1 Running 0 22h
- javademo1-d7856c75c-n28rs 1/1 Running 0 22h
- javademo1-d7856c75c-xzqjc 1/1 Running 0 22h
- nginx-f89759699-5hkdw 1/1 Running 0 26d
- nginx-nfs-788564fbc8-z9srr 1/1 Running 0 129m
- nginx-pvc-58b7bf955f-5clzg 0/1 Pending 0 7s
- nginx-pvc-58b7bf955f-lhvx4 0/1 Pending 0 7s
- nginx-pvc-58b7bf955f-z2cg6 0/1 Pending 0 7s
- [root@k8smaster ~]# kubectl apply -f pv.yaml
- persistentvolume/my-pv created
- [root@k8smaster ~]# kubectl get pv,pvc
- NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
- persistentvolume/my-pv 5Gi RWX Retain Bound default/my-pvc 39s
- NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
- persistentvolumeclaim/my-pvc Bound my-pv 5Gi RWX 2m13s
- [root@k8smaster pv]# pwd
- /nfs/pv
- [root@k8smaster pv]# vi index.html
- hello pvc
- [root@k8smaster ~]# kubectl get pods
- NAME READY STATUS RESTARTS AGE
- javademo1-d7856c75c-czv2g 1/1 Running 0 22h
- javademo1-d7856c75c-n28rs 1/1 Running 0 22h
- javademo1-d7856c75c-xzqjc 1/1 Running 0 22h
- nginx-f89759699-5hkdw 1/1 Running 0 26d
- nginx-nfs-788564fbc8-z9srr 1/1 Running 0 133m
- nginx-pvc-58b7bf955f-5clzg 1/1 Running 0 3m17s
- nginx-pvc-58b7bf955f-lhvx4 1/1 Running 0 3m17s
- nginx-pvc-58b7bf955f-z2cg6 1/1 Running 0 3m17s
- [root@k8smaster ~]# kubectl exec -it nginx-pvc-58b7bf955f-5clzg bash
- kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
- root@nginx-pvc-58b7bf955f-5clzg:/# ls /usr/share/nginx/html/
- index.html
- root@nginx-pvc-58b7bf955f-5clzg:/# cat /usr/share/nginx/html/index.html
- hello pvc
- root@nginx-pvc-58b7bf955f-5clzg:/#
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |