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