使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- Ingress-Ngnix
使用 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:/#