kubernetes pv与pvc持久化存储(静态)

kubernetes 官方简介:https://kubernetes.io/docs/concepts/storage/persistent-volumes/#volume-cloning

码云:https://gitee.com/cainiao555/kubernrtes-PVstatic

提前须知几点:
1、pv 的回收策略
kubernetes pv与pvc持久化存储(静态)_第1张图片
pv可以设置三种回收策略:保留(Retain),回收(Recycle)和删除(Delete)。

  • 保留策略:允许人工处理保留的数据。
  • 删除策略:将删除pv和外部关联的存储资源,需要插件支持。
  • 回收策略:将执行清除操作,之后可以被新的pvc使用,需要插件支持。
  • 静态PV默认回收策略:Retain
  • 动态PV默认回收策略:Delete

#番外篇更改回收策略:
1、选择你的 PersistentVolumes 中的一个并更改它的回收策略:

2、kubectl patch pv -p ‘{“spec”:“persistentVolumeReclaimPolicy”:“Retain”}}’
这里的 是你选择的 PersistentVolume 的名字。

验证你选择的 PersistentVolume 拥有正确的策略:
kubectl get pv

2、pv支持以下类型:kubernetes pv与pvc持久化存储(静态)_第2张图片
3、PV卷阶段状态:
Available – 资源尚未被claim使用
Bound – 卷已经被绑定到claim了
Released – claim被删除,卷处于释放状态,但未被集群回收。
Failed – 卷自动回收失败

一、搭建NFS服务
搭建NFS服务

二、NFS共享文件
1)、添加nfs服务共享文件:

cat   /etc/exports

kubernetes pv与pvc持久化存储(静态)_第3张图片

2)、创建共享目录:

mkdir -p  /root/kubernetes/pv_pvc/volumes/v{
     1,2,3,4,5}

3)、创建测试显示文件——index.html

echo 1 > /root/kubernetes/pv_pvc/volumes/v1/index.html
echo 2 > /root/kubernetes/pv_pvc/volumes/v2/index.html
echo 3 > /root/kubernetes/pv_pvc/volumes/v3/index.html
echo 4 > /root/kubernetes/pv_pvc/volumes/v4/index.html
echo 5 > /root/kubernetes/pv_pvc/volumes/v5/index.html

4)、重载nfs共享配置文件

exportfs   -arv

5)、查看本机共享文件

exportfs  -arv

在这里插入图片描述

6)、添加内核参数:
#添加如下两条nfs服务——rpcbind避免服务启动失败

vim  /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
sysctl  -p

三、创建数据卷PV
1)、创建pv yaml文件

#分别对于卷的访问模式
apiVersion: v1
kind: PersistentVolume    #设置控制器为PV
metadata:
  name:  pv01             #定义pv名称
  labels:
    name: pv01
spec:
  nfs:     #定义存储类型为nfs
    path: /root/kubernetes/pv_pvc/volumes/v1   #nfs共享路径
    server: 192.168.11.128    #nfs共享服务service
  accessModes:          #访问模式
  - ReadWriteOnce       #该卷可以通过单个节点以读写方式安装
  - ReadOnlyMany        #该卷可以被许多节点只读安装
  - ReadWriteMany       #该卷可以被许多节点读写安装
  capacity:             #容量
    storage: 1Gi        #存储大小
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  pv02
  labels:
    name: pv02
spec:
  nfs:     #定义存储类型为nfs
    path: /root/kubernetes/pv_pvc/volumes/v2   #nfs共享路径
    server: 192.168.11.128    #nfs共享服务service
  accessModes:          #访问模式
  - ReadWriteOnce       #该卷可以通过单个节点以读写方式安装
  capacity:
    storage: 2Gi        #存储大小
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  pv03
  labels:
    name: pv03
spec:
  nfs:    #定义存储类型为nfs
    path: /root/kubernetes/pv_pvc/volumes/v3   #nfs共享路径
    server: 192.168.11.128    #nfs共享服务service
  accessModes:          #访问模式
  - ReadOnlyMany        #该卷可以被许多节点只读安装
  capacity:
    storage: 3Gi   #存储
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  pv04
  labels:
    name: pv04
spec:
  nfs:     #定义存储类型为nfs
    path: /root/kubernetes/pv_pvc/volumes/v4   #nfs共享路径
    server: 192.168.11.128    #nfs共享服务service
  accessModes:          #访问模式
  - ReadWriteMany       #该卷可以被许多节点读写安装
  capacity:
    storage: 4Gi   #存储
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  pv05
  labels:
    name: pv05
spec:
  nfs:     #定义存储类型为nfs
    path: /root/kubernetes/pv_pvc/volumes/v5   #nfs共享路径
    server: 192.168.11.128    #nfs共享服务service
  accessModes:          #访问模式
  - ReadWriteOnce       #该卷可以通过单个节点以读写方式安装
  capacity:
    storage: 5Gi        #存储

kubernetes pv与pvc持久化存储(静态)_第4张图片
2)、生成pv

kubectl   apply    -f   pv.yaml

在这里插入图片描述

3)、查看创建生的pv卷

kubectl get  pv

kubernetes pv与pvc持久化存储(静态)_第5张图片
官方提示如图:
kubernetes pv与pvc持久化存储(静态)_第6张图片

四、创建PVC
1)编写pvc.yaml文件

apiVersion: v1
kind: PersistentVolumeClaim   #定义类型为PVC
metadata:
  name: pvcpod                #定义pvc名字为pvcpod
spec:
  accessModes:                #访问模式
  - ReadWriteOnce             #该卷可以通过单个节点以读写方式安装
  resources:                  #资源
    requests:                 #定义资源请求
      storage: 3Gi            #请求的容量为3Gi

2)、生成pvc

kubectl apply  -f pvc.yaml

3)、查看pvc

kubectl get pvc

kubernetes pv与pvc持久化存储(静态)_第7张图片

五、测试:
1)、查看pv05卷的详细信息:

kubectl describe   pv pv05

kubernetes pv与pvc持久化存储(静态)_第8张图片2)、生成一个容器

vim   pod.yaml
apiVersion: extensions/v1beta1
kind: Deployment                #控制器
metadata:
  name: pvc-nginx               #这个标签为启动pod时候的名字
spec:
  replicas: 1                   #启动副本数
  selector:                     #设置标签
    matchLabels:
      app: pvc-nginx            #这个标签相当于分组,查看(kubectl  get  pods  --show-labels)
  minReadySeconds: 5            #等待设置的时间后才进行升级,(如果没有设置该值,在某些极端情况下可能会造成服务不正常运行)
  revisionHistoryLimit: 2       #要保留以允许回滚的旧复制集数
  strategy:                     #策略
    type: RollingUpdate         #默认为滚动更新(可以不写)
    rollingUpdate:              #滚动更新
      maxSurge: 1               #升级过程中最多可以比原先设置多出的POD数量
      maxUnavailable: 1         #升级过程中最多有多少个POD处于无法提供服务的状态(该不为0)
  template:                     #模板(相当于定义好的一个python中的模块)
    metadata:
      labels:                   #标签
        app: pvc-nginx          #需要与上面定义selector标签一致,相当于划分在同一个组
    spec:
      containers:               #模板(容器模板)
      - name: pvc-nginx         #node节点启动的容器名字(kind控制器名字+标签名),可以去node节点查看容器名
        image: nginx                    #镜像名
        imagePullPolicy: IfNotPresent   #拉取镜像(选择方式——直接使用本地拥有的镜像)
        ports:
          - containerPort: 80           #容器开放的监听端口
        volumeMounts:                   #挂载容器的目录
        - name: nginxpvc                #特别注意:容器挂载名字和本地挂载名字需要一致(下面名字)
          mountPath: /usr/share/nginx/html/   #容器挂载的目录路径
      restartPolicy: Always            #重新启动pod中所有容器的策略
      volumes:                         #挂载目录方式——本地/网络
      - name: nginxpvc                 #特别注意:容器挂载名字和本地挂载名字需要一致(上面名字)
        persistentVolumeClaim:         #使用pvc进行挂载
          claimName: pvcpod            #生成PVC卷的名称

3)、启动pod 容器

kubectl apply  -f  pod.yaml

4)、查看生成的pod

kubectl get pod -o wide |egrep   "^pvc-nginx"

在这里插入图片描述

5)、测试是否可以访问到nfs共享目录/root/kubernetes/pv_pvc/volumes/v5下的index.html文件

curl 10.244.1.193

kubernetes pv与pvc持久化存储(静态)_第9张图片

六、将pod对外提供服务
1)编辑svc的yaml文件

vim  svc.yaml
apiVersion: v1
kind: Service           #控制器为service
metadata:
  name: pvc-nginx       #svc的名称
spec:
  type: NodePort        #通过请求从群集外部与服务联系
  ports:
  - port: 80            #pod内部提供服务端口
    targetPort: 80      #相当于docke中宿主机与容器映射端口
    nodePort: 30808     #对外提供的访问端口
  selector:             #选择器
    app: pvc-nginx      #生成pod的名称,前提得正常运行不然怎么提供服务呢?

kubernetes pv与pvc持久化存储(静态)_第10张图片

2)、生成svc

kubectl apply  -f svc.yaml

3)、查看svc

kubectl get svc   |grep pvc-nginx 

kubernetes pv与pvc持久化存储(静态)_第11张图片
4)、访问测试:
kubernetes pv与pvc持久化存储(静态)_第12张图片

你可能感兴趣的:(kubernetes,kubernetes——pv)