k8s学习笔记-volumes


生产中常用的几种存储
    第一种传统
    SAN:iscsi,fc
    NAS:nfs,cifs
    第二种分布式的
    glusterfs,rbd,cephfs
    第三种云存储
     EBS,Azure Disk,阿里云,腾讯云
K8S 存储类型:
     emptyDir
         Pod 里面各容器共享存储,Pod 在节点创建就会生成,生命周期随着运行的Pod
         kubectl explain pods.spec.volumes.emptyDir
         vim pod-emptyDir.yaml
         apiVersion:  v1
         kind:  Pod
         metadata:
            name:  pod-emptyDir
            namespace:  default
            labels:
               app:  myapp
               tier:  frontend
            annotations:
                doudou/create-by: "cluster admin"
         spec:
            containers:
            -  name: myapp
               image:  ikubernetes/myapp:v1
               imagePullPolicy:  IfNotPresent
               ports:
               -  name: http
                  containerPort:  80
                  volumeMounts:
                  -  name: html
                     mountPath:  /usr/share/nginx/html/
                  -  name:  busybox
                     image:  busybox:latest
                     imagePullPolicy:  IfNotPresent
                     volumeMounts:
                     - name:  html
                       mountPath:  /data/
                    #command 的几种写法:
                    #command:
                    #-  "/bin/sh"
                    #-  "-c"
                    #-  "while true: do echo $(date) >> /data/index.html;sleep 2; done"
                    #command:  ['/bin/sh','-c','while true;do echo $(date) >> /data/index.html; sleep 2; done']
                    command: ['/bin/sh']
                    args: ["-c","while true;do echo $(date) >> /data/index.html; sleep 2; done"]

            volumes:
            -  name: html
               emptyDir:  {}

[root@k8s-master volumes]# kubectl apply -f pod-emptyDir.yaml
pod/pod-emptyDir created
[root@k8s-master volumes]# kubectl get pods -o wide
NAME               READY       STATUS           RESTARTS       AGE         IP                  NODE           NOMINATED NODE        READINESS GATES
pod-emptyDir       2/2           Running                    0                11s    10.244.2.72      k8s-node1                  <none>                          <none>
[root@k8s-master volumes]# curl 10.244.2.72
Sun Apr 28 03:25:24 UTC 2019
Sun Apr 28 03:25:28 UTC 2019
Sun Apr 28 03:25:32 UTC 2019


hostPath
     Pod 挂载节点文件系统到Pod里面,生命周期随Node生命周期
      kubectl explain pods.spec.volumes.hostPath
      https://kubernetes.io/docs/concepts/storage/volumes/#hostpath
      vim pod-hostPath.yaml
      apiVersion:  v1
      kind:  Pod
      metadata:
         name:  pod-hostPath
      spec:
        containers:
        -  name:  myapp
           image:  ikubernetes/myapp:v1
           volumeMounts:
           -  name: html
              mountPath:  /usr/share/nginx/html/
        volumes:
        -  name:  html
           hostPath:
               path:  /data/pod/volume1
               type:  DirectoryOrCreate

在各节点创建目录
mkdir /data/pod/volume1
[root@k8s-master volumes]# kubectl create -f pod-hostpath.yaml
pod/pod-vol created
[root@k8s-master volumes]# kubectl get pods -o wide
NAME         READY       STATUS        RESTARTS       AGE               IP                       NODE            NOMINATED NODE       READINESS  GATES
pod-vol          1/1            Running                0                 10s          10.244.2.70           k8s-node1                 <none>                                <none>
[root@k8s-master volumes]# curl 10.244.2.70
node1
[root@k8s-master volumes]# kubectl delete -f pod-hostpath.yaml
pod "pod-vol" deleted
[root@k8s-master volumes]# kubectl create -f pod-hostpath.yaml
pod/pod-vol created
[root@k8s-master volumes]# kubectl get pods -o wide
NAME      READY                   STATUS                       RESTARTS        AGE         IP                    NODE           NOMINATED NODE                        READINESS GATES
pod-vol       1/1                          Running                             0                   3s     10.244.1.207       k8s-node2                 <none>                                            <none>
[root@k8s-master volumes]# curl 10.244.1.207
node2
NFS
      Pod随NFS 配置的生命周期
      nfs的简单配置
      yum install nfs-utils -y
      mkdir /data/volumes -pv
      vim /etc/exports
       /data/volumes/ 10.0.0.0/8(rw,no_root_squash)
       vim /data/volumes/index.html
       <h1>NFS volumes<h1>
然后在各节点测试一下
绑定hosts
10.211.55.11 k8s-master
mount -t nfs k8s-master:/data/volumes /mnt
如果报错:需要安装包yum install nfs-utils -y
然后umount /mnt
kubectl explain pods.spec.volumes.nfs
vim pod-nfs.yaml
apiVersion:  v1
kind:  Pod
metadata:
   name: pod-nfs
spec:
  containers:
  -  name:  myapp
     image:  ikubernetes/myapp:v1
     volumeMounts:
     -  name:  html
        mountPath:  /usr/share/nginx/html/
  volumes:
  -  name:  html
     nfs:
       path: /data/volumes
       server: k8s-master
[root@k8s-master volumes]#kubectl get pods -o wide
NAME      READY           STATUS           RESTARTS         AGE           IP                     NODE              NOMINATED NODE             READINESS GATES
pod-nfs        1/1                Running                  0                   11s     10.244.2.73           k8s-node1                      <none>                               <none>              
[root@k8s-master volumes]# curl 10.244.2.73
<h1>NFS volumes<h1>


PVC

 

 

 

 


用来挂载持久化磁盘,用户不用关心存储的细节,只需要分配存储资源就行
在定义PVC 之前要创建PV
kubectl explain pv
kubectl explain pv.spec
先在NFS 机器定义好存储
mkdir /data/volumes/v{1,2,3,4,5}
vim /etc/exports
/data/volumes/v1 10.0.0.0/8(rw,no_root_squash)
/data/volumes/v2 10.0.0.0/8(rw,no_root_squash)
/data/volumes/v3 10.0.0.0/8(rw,no_root_squash)
/data/volumes/v4 10.0.0.0/8(rw,no_root_squash)
/data/volumes/v5 10.0.0.0/8(rw,no_root_squash)
service nfs restart
vim pv-demp.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv001
    labels:
       name: pv001

spec:
  nfs:
    path: /data/volumes/v1
    server: k8s-master
    accessModes: ["ReadWriteMany","ReadWriteOnce"]
    capacity:
      storage: 2Gi
---

apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv002
    labels:
       name: pv002

 

spec:
  nfs:
    path: /data/volumes/v2
    server: k8s-master
    accessModes: ["ReadWriteOnce"]
    capacity:
      storage: 5Gi
---

apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv003
    labels:
       name: pv003

spec:
  nfs:
    path: /data/volumes/v3
    server: k8s-master
    accessModes: ["ReadWriteMany","ReadWriteOnce"]
    capacity:
      storage: 20Gi
---

apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv004
    labels:
       name: pv004

spec:
  nfs:
    path: /data/volumes/v4
    server: k8s-master
    accessModes: ["ReadWriteMany","ReadWriteOnce"]
    capacity:
      storage: 10Gi
---

apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv005
    labels:
       name: pv005

spec:
  nfs:
    path: /data/volumes/v5
    server: k8s-master
    accessModes: ["ReadWriteMany","ReadWriteOnce"]
    capacity:
      storage: 10Gi

kubectl apply -f pv-demp.yaml 

[root@k8s-master volumes]# kubectl get pv
NAME           CAPACITY               ACCESS MODES          RECLAIM POLICY               STATUS       CLAIM      STORAGECLASS       REASON           AGE
pv001                2Gi                          RWO,RWX                       Retain                               Available                                                                                     12m
pv002                5Gi                          RWO                                 Retain                              Available                                                                                     12m
pv003               20Gi                         RWO,RWX                       Retain                               Available                                                                                     12m
pv004               10Gi                         RWO,RWX                       Retain                               Available                                                                                     12m
pv005               10Gi                         RWO,RWX                       Retain                               Available                                                                                     12m
注意:现在版本,如果PV 在使用是不能够删除的,删除的时候回卡住
现在创建PVC
kubectl explain pvc.spec
vim pod-pvc.yaml
apiVersion:  v1
kind:  PersistentVolumeClaim
metadata:
   name:  mypvc
spec:
   accessModes:  ["ReadWriteMany"]
   resources:
     requests:
       storage:  6Gi
---
apiVersion:  v1
kind: Pod
metadata:
   name: pod-pvc
spec:
   containers:
   -  name: myapp
      image:  ikubernetes/myapp:v1
      volumeMounts:
       -  name: html
          mountPath:  /usr/share/nginx/html/
    volumes:
    -  name:  html
       persistentVolumeClaim:
          claimName: mypvc

kubectl apply -f pod-pvc.yaml
[root@k8s-master volumes]# kubectl get pvc
NAME         STATUS             VOLUME                CAPACITY     ACCESS MODES          STORAGECLASS           AGE
mypvc           Bound                 pv004                       10Gi              RWO,RWX                                                          4m5s
[root@k8s-master volumes]# kubectl get pv
NAME                  CAPACITY                 ACCESS MODES              RECLAIM POLICY                 STATUS              CLAIM              STORAGECLASS             REASON                 AGE
pv001                       2Gi                             RWO,RWX                             Retain                               Available                                                                                                              58m
pv002                       5Gi                             RWO                                      Retain                               Available                                                                                                              58m
pv003                       20Gi                           RWO,RWX                             Retain                               Available                                                                                                              58m
pv004                       10Gi                           RWO,RWX                             Retain                                Bound             default/mypvc                                                                              58m
pv005                       10Gi                           RWO,RWX                             Retain                               Available                                                                                                               58m
[root@k8s-master volumes]# kubectl get pods -o wide
NAME           READY       STATUS            RESTARTS        AGE         IP                     NODE                    NOMINATED NODE                        READINESS GATES
pod-pvc             1/1          Running                   0                    47m  10.244.1.209       k8s-node2                             <none>                                              <none>
kubectl describe pod pod-pvc
vim /data/volumes/v4/index.html
<h1> pv 4 <h1>
[root@k8s-master v4]# curl 10.244.1.209
<h1> pv 4 <h1>
当然可以测试一下数据库类型的Pod,这样是永久持久的。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM