精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Kubernetes 3種存儲傻傻分不清楚!

存儲 存儲軟件
Kubernetes支持幾十種類型的后端存儲卷,其中有幾種存儲卷總是給人一種分不清楚它們之間有什么區(qū)別的感覺,尤其是local與hostPath這兩種存儲卷類型,看上去都像是node本地存儲方案嘛。當(dāng)然,還另有一種volume類型是emptyDir,也有相近之處。

 Kubernetes支持幾十種類型的后端存儲卷,其中有幾種存儲卷總是給人一種分不清楚它們之間有什么區(qū)別的感覺,尤其是local與hostPath這兩種存儲卷類型,看上去都像是node本地存儲方案嘛。當(dāng)然,還另有一種volume類型是emptyDir,也有相近之處。

在Docker容器時(shí)代,我們就對Volume很熟悉了,一般來說我們是通過創(chuàng)建Volume數(shù)據(jù)卷,然后掛載到指定容器的指定路徑下,以實(shí)現(xiàn)容器數(shù)據(jù)的持久化存儲或者是多容器間的數(shù)據(jù)共享,當(dāng)然這里說的都是單機(jī)版的容器解決方案。

[[252662]]

進(jìn)入到容器集群時(shí)代后,我們看到Kubernetes按時(shí)間順序先后提供了emptyDir、hostPath和local的本地磁盤存儲卷解決方案。

emptyDir、hostPath都是Kubernetes很早就實(shí)現(xiàn)和支持了的技術(shù),local volume方式則是從k8s v1.7才剛剛發(fā)布的alpha版本,目前在k8s v1.10中發(fā)布了local volume的beta版本,部分功能在早期版本中并不支持。

在展開之前,我們先討論一個(gè)問題,就是既然都已經(jīng)實(shí)現(xiàn)容器云平臺了,我們?yōu)槭裁催€要關(guān)注這幾款本地存儲卷的貨呢?

粗略歸納了下,有以下幾個(gè)原因:

  • 特殊使用場景需求,如需要個(gè)臨時(shí)存儲空間,運(yùn)行cAdvisor需要能訪問到node節(jié)點(diǎn)/sys/fs/cgroup的數(shù)據(jù),做本機(jī)單節(jié)點(diǎn)的k8s環(huán)境功能測試等等。
  • 容器集群只是做小規(guī)模部署,滿足開發(fā)測試、集成測試需求。
  • 作為分布式存儲服務(wù)的一種補(bǔ)充手段,比如我在一臺node主機(jī)上插了塊SSD,準(zhǔn)備給某個(gè)容器吃小灶。
  • 目前主流的兩個(gè)容器集群存儲解決方案是ceph和glusterfs,二者都是典型的網(wǎng)絡(luò)分布式存儲,所有的數(shù)據(jù)讀、寫都是對磁盤IO和網(wǎng)絡(luò)IO的考驗(yàn),所以部署存儲集群時(shí)至少要使用萬兆的光纖網(wǎng)卡和光纖交換機(jī)。如果你都沒有這些硬貨的話,強(qiáng)上分布式存儲方案的結(jié)果就是收獲一個(gè)以”慢動作”見長的容器集群啦。
  • 分布式存儲集群服務(wù)的規(guī)劃、部署和長期的監(jiān)控、擴(kuò)容與運(yùn)行維護(hù)是專業(yè)性很強(qiáng)的工作,需要有專職的技術(shù)人員做長期的技術(shù)建設(shè)投入。

我們并不是說分布式存儲服務(wù)不好,很多公司在云平臺建設(shè)的實(shí)踐中,往往是需要結(jié)合使用幾種通用的與專用的存儲解決方案,才能最終滿足大部分的使用需求。

所以,如果這里有一款場景適合你的話,不妨了解一下這幾款本地存儲卷的功能特點(diǎn)、使用技巧與異同。

1、emptyDir

emptyDir類型的Volume在Pod分配到Node上時(shí)被創(chuàng)建,Kubernetes會在Node上自動分配一個(gè)目錄,因此無需指定宿主機(jī)Node上對應(yīng)的目錄文件。 這個(gè)目錄的初始內(nèi)容為空,當(dāng)Pod從Node上移除時(shí),emptyDir中的數(shù)據(jù)會被***刪除。

注:容器的crashing事件并不會導(dǎo)致emptyDir中的數(shù)據(jù)被刪除。

***實(shí)踐

根據(jù)官方給出的***使用實(shí)踐的建議,emptyDir可以在以下幾種場景下使用:

  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4.  name: test-pod 
  5. spec: 
  6.  containers: 
  7.  - image: busybox 
  8.    name: test-emptydir 
  9.    command: [ "sleep""3600" ] 
  10.    volumeMounts: 
  11.    - mountPath: /data 
  12.      name: data-volume 
  13.  volumes: 
  14.  - name: data-volume 
  15.    emptyDir: {} 

查看下創(chuàng)建出來的pod,這里只截取了與volume有關(guān)的部分,其他無關(guān)內(nèi)容直接省略:

  1. # kubectl describe pod test-pod 
  2. Name:         test-pod 
  3. Namespace:    default 
  4. Node:         kube-node2/172.16.10.102 
  5. ...... 
  6.    Environment:    <none> 
  7.    Mounts: 
  8.      /data from data-volume (rw) 
  9. ...... 
  10. Volumes: 
  11.  data-volume: 
  12.    Type:    EmptyDir (a temporary directory that shares a pod's lifetime) 
  13.    Medium: 
  14. ...... 

可以進(jìn)入到容器中查看下實(shí)際的卷掛載結(jié)果:

  1. # kubectl exec -it test-pod -c test-emptydir /bin/sh 

2、hostPath

hostPath類型則是映射node文件系統(tǒng)中的文件或者目錄到pod里。在使用hostPath類型的存儲卷時(shí),也可以設(shè)置type字段,支持的類型有文件、目錄、File、Socket、CharDevice和BlockDevice。

下面是來自官網(wǎng)對hostPath的使用場景和注意事項(xiàng)的介紹。

使用場景:

  • 當(dāng)運(yùn)行的容器需要訪問Docker內(nèi)部結(jié)構(gòu)時(shí),如使用hostPath映射/var/lib/docker到容器;
  • 當(dāng)在容器中運(yùn)行cAdvisor時(shí),可以使用hostPath映射/dev/cgroups到容器中;
  • 注意事項(xiàng):
  • 配置相同的pod(如通過podTemplate創(chuàng)建),可能在不同的Node上表現(xiàn)不同,因?yàn)椴煌?jié)點(diǎn)上映射的文件內(nèi)容不同
  • 當(dāng)Kubernetes增加了資源敏感的調(diào)度程序,hostPath使用的資源不會被計(jì)算在內(nèi)
  • 宿主機(jī)下創(chuàng)建的目錄只有root有寫權(quán)限。你需要讓你的程序運(yùn)行在privileged container上,或者修改宿主機(jī)上的文件權(quán)限。

hostPath volume 實(shí)驗(yàn)

下面我們在測試k8s環(huán)境中創(chuàng)建一個(gè)hostPath volume使用示例。

  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4.  name: test-pod2 
  5. spec: 
  6.  containers: 
  7.  - image: busybox 
  8.    name: test-hostpath 
  9.    command: [ "sleep""3600" ] 
  10.    volumeMounts: 
  11.    - mountPath: /test-data 
  12.      name: test-volume 
  13.  volumes: 
  14.  - name: test-volume 
  15.    hostPath: 
  16.      # directory location on host 
  17.      path: /data 
  18.      # this field is optional 
  19.      type: Directory 

查看下pod創(chuàng)建結(jié)果,觀察volumes部分:

  1. # kubectl describe pod test-pod2 
  2. Name:         test-pod2 
  3. Namespace:    default 
  4. Node:         kube-node2/172.16.10.102 
  5. ...... 
  6.    Mounts: 
  7.      /test-data from test-volume (rw) 
  8. ...... 
  9. Volumes: 
  10.  test-volume: 
  11.    Type:          HostPath (bare host directory volume) 
  12.    Path:          /data 
  13.    HostPathType:  Directory 
  14. ...... 

我們登錄到容器中,進(jìn)入掛載的/test-data目錄中,創(chuàng)建個(gè)測試文件。

  1. # kubectl exec  -it test-pod2 -c test-hostpath /bin/sh 
  2. / # echo 'testtesttest' > /test-data/test.log 
  3. / # exit 

我們在運(yùn)行該pod的node節(jié)點(diǎn)上,可以看到如下的文件和內(nèi)容。

  1. [root@kube-node2 test-data]# cat /test-data/test.log 
  2. testtesttest 

現(xiàn)在,我們把該pod刪除掉,再看看node節(jié)點(diǎn)上的hostPath使用的目錄與數(shù)據(jù)會有什么變化。

  1. [root@kube-node1 ~]# kubectl delete pod test-pod2 
  2. pod "test-pod2" deleted 

到運(yùn)行原pod的node節(jié)點(diǎn)上查看如下。

  1. [root@kube-node2 test-data]# ls -l 
  2. total 4 
  3. -rw-r--r-- 1 root root 13 Nov 14 00:25 test.log 
  4. [root@kube-node2 test-data]# cat /test-data/test.log 
  5. testtesttest 

在使用hostPath volume卷時(shí),即便pod已經(jīng)被刪除了,volume卷中的數(shù)據(jù)還在!

單節(jié)點(diǎn)的k8s本地測試環(huán)境與hostPath volume

有時(shí)我們需要搭建一個(gè)單節(jié)點(diǎn)的k8s測試環(huán)境,就利用到hostPath作為后端的存儲卷,模擬真實(shí)環(huán)境提供PV、StorageClass和PVC的管理功能支持。

  1. apiVersion: storage.k8s.io/v1 
  2. kind: StorageClass 
  3. metadata: 
  4.  namespace: kube-system 
  5.  name: standard 
  6.  annotations: 
  7.    storageclass.beta.kubernetes.io/is-default-class: "true" 
  8.  labels: 
  9.    addonmanager.kubernetes.io/mode: Reconcile 
  10. provisioner: kubernetes.io/host-path 
  11. ​ 

該場景僅能用于單節(jié)點(diǎn)的k8s測試環(huán)境中

3、emptyDir和hostPath在功能上的異同分析

二者都是node節(jié)點(diǎn)的本地存儲卷方式;

  • emptyDir可以選擇把數(shù)據(jù)存到tmpfs類型的本地文件系統(tǒng)中去,hostPath并不支持這一點(diǎn);
  • hostPath除了支持掛載目錄外,還支持File、Socket、CharDevice和BlockDevice,既支持把已有的文件和目錄掛載到容器中,也提供了“如果文件或目錄不存在,就創(chuàng)建一個(gè)”的功能;
  • emptyDir是臨時(shí)存儲空間,完全不提供持久化支持;
  • hostPath的卷數(shù)據(jù)是持久化在node節(jié)點(diǎn)的文件系統(tǒng)中的,即便pod已經(jīng)被刪除了,volume卷中的數(shù)據(jù)還會留存在node節(jié)點(diǎn)上;

4、local volume的概念

這是一個(gè)很新的存儲類型,建議在k8s v1.10+以上的版本中使用。該local volume類型目前還只是beta版。

Local volume 允許用戶通過標(biāo)準(zhǔn)PVC接口以簡單且可移植的方式訪問node節(jié)點(diǎn)的本地存儲。 PV的定義中需要包含描述節(jié)點(diǎn)親和性的信息,k8s系統(tǒng)則使用該信息將容器調(diào)度到正確的node節(jié)點(diǎn)。

配置要求

  • 使用local-volume插件時(shí),要求使用到了存儲設(shè)備名或路徑都相對固定,不會隨著系統(tǒng)重啟或增加、減少磁盤而發(fā)生變化。
  • 靜態(tài)provisioner配置程序僅支持發(fā)現(xiàn)和管理掛載點(diǎn)(對于Filesystem模式存儲卷)或符號鏈接(對于塊設(shè)備模式存儲卷)。 對于基于本地目錄的存儲卷,必須將它們通過bind-mounted的方式綁定到發(fā)現(xiàn)目錄中。

StorageClass與延遲綁定

官方推薦在使用local volumes時(shí),創(chuàng)建一個(gè)StorageClass并把volumeBindingMode字段設(shè)置為“WaitForFirstConsumer”。

雖然local volumes還不支持動態(tài)的provisioning管理功能,但我們?nèi)匀豢梢詣?chuàng)建一個(gè)StorageClass并使用延遲卷綁定的功能,將volume binding延遲至pod scheduling階段執(zhí)行。

這樣可以確保PersistentVolumeClaim綁定策略將Pod可能具有的任何其他node節(jié)點(diǎn)約束也進(jìn)行評估,例如節(jié)點(diǎn)資源要求、節(jié)點(diǎn)選擇器、Pod親和性和Pod反親和性。

  1. kind: StorageClass 
  2. apiVersion: storage.k8s.io/v1 
  3. metadata: 
  4.  namelocal-storage 
  5. provisioner: kubernetes.io/no-provisioner 
  6. volumeBindingMode: WaitForFirstConsumer  

外部static provisioner

配置local volume后,可以使用一個(gè)外部的靜態(tài)配置器來幫助簡化本地存儲的管理。 Provisioner 配置程序?qū)⑼ㄟ^為每個(gè)卷創(chuàng)建和清理PersistentVolumes來管理發(fā)現(xiàn)目錄下的卷。

Local storage provisioner要求管理員在每個(gè)節(jié)點(diǎn)上預(yù)配置好local volumes,并指明該local volume是屬于以下哪種類型:

  • Filesystem volumeMode (default) PVs – 需要掛載到發(fā)現(xiàn)目錄下面。
  • Block volumeMode PVs – 需要在發(fā)現(xiàn)目錄下創(chuàng)建一個(gè)指向節(jié)點(diǎn)上的塊設(shè)備的符號鏈接。

一個(gè)local volume,可以是掛載到node本地的磁盤、磁盤分區(qū)或目錄。

Local volumes雖然可以支持創(chuàng)建靜態(tài)PersistentVolume,但到目前為止仍不支持動態(tài)的PV資源管理。

這意味著,你需要自己手動去處理部分PV管理的工作,但考慮到至少省去了在創(chuàng)建pod時(shí)手動定義和使用PV的工作,這個(gè)功能還是很值得的。

創(chuàng)建基于Local volumes的PV的示例

  1. apiVersion: v1 
  2. kind: PersistentVolume 
  3. metadata: 
  4.  name: example-pv 
  5. spec: 
  6.  capacity: 
  7.    storage: 100Gi 
  8.  volumeMode: Filesystem 
  9.  accessModes: 
  10.  - ReadWriteOnce 
  11.  persistentVolumeReclaimPolicy: Delete 
  12.  storageClassName: local-storage 
  13.  local
  14.    path: /mnt/disks/ssd1 
  15.  nodeAffinity: 
  16.    required: 
  17.      nodeSelectorTerms: 
  18.      - matchExpressions: 
  19.        - key: kubernetes.io/hostname 
  20.          operator: In 
  21.          values
  22.          - example-node 
  23. ​ 
  • nodeAffinity字段是必須配置的,k8s依賴于這個(gè)標(biāo)簽為你定義的Pods在正確的nodes節(jié)點(diǎn)上找到需要使用的local volumes。
  • 使用volumeMode字段時(shí),需要啟用BlockVolume 這一Alpha feature特性。
  • volumeMode字段的默認(rèn)值是Filesystem,但也支持配置為Block,這樣就會把node節(jié)點(diǎn)的local volume作為容器的一個(gè)裸塊設(shè)備掛載使用。

數(shù)據(jù)安全風(fēng)險(xiǎn)

local volume仍受node節(jié)點(diǎn)可用性方面的限制,因此并不適用于所有應(yīng)用程序。 如果node節(jié)點(diǎn)變得不健康,則local volume也將變得不可訪問,使用這個(gè)local volume的Pod也將無法運(yùn)行。 使用local voluems的應(yīng)用程序必須能夠容忍這種降低的可用性以及潛在的數(shù)據(jù)丟失,是否會真得導(dǎo)致這個(gè)后果將取決于node節(jié)點(diǎn)底層磁盤存儲與數(shù)據(jù)保護(hù)的具體實(shí)現(xiàn)了。

5、hostPath與local volume在功能上的異同分析

二者都基于node節(jié)點(diǎn)本地存儲資源實(shí)現(xiàn)了容器內(nèi)數(shù)據(jù)的持久化功能,都為某些特殊場景下提供了更為適用的存儲解決方案;

前者時(shí)間很久了,所以功能穩(wěn)定,而后者因?yàn)槟贻p,所以功能的可靠性與穩(wěn)定性還需要經(jīng)歷時(shí)間和案例的歷練,尤其是對Block設(shè)備的支持還只是alpha版本;

二者都為k8s存儲管理提供了PV、PVC和StorageClass的方法實(shí)現(xiàn);

  • local volume實(shí)現(xiàn)的StorageClass不具備完整功能,目前只支持卷的延遲綁定;
  • hostPath是單節(jié)點(diǎn)的本地存儲卷方案,不提供任何基于node節(jié)點(diǎn)親和性的pod調(diào)度管理支持;
  • local volume適用于小規(guī)模的、多節(jié)點(diǎn)的k8s開發(fā)或測試環(huán)境,尤其是在不具備一套安全、可靠且性能有保證的存儲集群服務(wù)時(shí);

6、local volume的安裝配置方法

local-volume項(xiàng)目及地址

https://github.com/kubernetes-incubator/external-storage/tree/master/local-volume

Step 1:配置k8s集群使用本地磁盤存儲

如果使用block塊設(shè)備,則需要啟用Alpha的功能特性:k8s v1.10+

  1. $ export KUBE_FEATURE_GATES=”BlockVolume=true” 

注:如果是已經(jīng)部署好的k8s v1.10+集群,需要為幾個(gè)主要組件均開啟對該特性的支持后,才能使用block塊設(shè)備功能。如果k8s是低于1.10版本,則還需要啟用其它的幾個(gè)功能特性,因?yàn)樵诘桶姹局羞@些功能特性還都是alpha版本的。

根據(jù)大家搭建k8s的方法的不同,下面提供了四種情況下的配置說明。

  1. Option 1: GCE(Google Compute Engine)集群​​ 

使用kube-up.sh啟動的GCE集群將自動格式化并掛載所請求的Local SSDs,因此您可以使用預(yù)先生成的部署規(guī)范部署配置器并跳至步驟4,除非您要自定義配置器規(guī)范或存儲類。

  1. $ NODE_LOCAL_SSDS_EXT=<n>,<scsi|nvme>,fs cluster/kube-up.sh 
  2. $ kubectl create -f provisioner/deployment/kubernetes/gce/class-local-ssds.yaml 
  3. $ kubectl create -f provisioner/deployment/kubernetes/gce/provisioner_generated_gce_ssd_volumes.yaml 

Option 2: GKE(Google Kubernetes Engine)集群

GKE集群將自動格式化并掛載所請求的Local SSDs。在GKE documentation中有更詳細(xì)的說明。

然后,跳至步驟4。

Option 3: 使用裸機(jī)環(huán)境搭建的集群

1.根據(jù)應(yīng)用程序的使用要求對每個(gè)節(jié)點(diǎn)上的本地?cái)?shù)據(jù)磁盤進(jìn)行分區(qū)和格式化。 2.定義一個(gè)StorageClass,并在一個(gè)發(fā)現(xiàn)目錄下掛載所有要使用的存儲文件系統(tǒng)。 發(fā)現(xiàn)目錄是在configmap中指定,見下文。 3.如上所述,使用KUBEFEATUREGATES配置Kubernetes API Server, controller-manager, scheduler, 和所有節(jié)點(diǎn)上的 kubelets。 4.如果沒有使用默認(rèn)的Kubernetes調(diào)度程序策略,則必須啟用以下特性:

  • Pre-1.9: NoVolumeBindConflict
  • 9+: VolumeBindingChecker

說明:在我們使用測試環(huán)境中,是一套3節(jié)點(diǎn)的k8s測試環(huán)境,為了模擬測試local volume功能,直接結(jié)合使用了下面option4中提供的ram disks測試方法,創(chuàng)建了3個(gè)tmpfs格式的文件系統(tǒng)掛載資源。

Option 4: 使用一個(gè)本機(jī)單節(jié)點(diǎn)的測試集群

創(chuàng)建/mnt/disks目錄,并在該目錄下掛載幾個(gè)子目錄。下面是使用三個(gè)ram disks做一個(gè)真實(shí)存儲卷的模擬測試。

  1. $ mkdir /mnt/fast-disks 
  2. for vol in vol1 vol2 vol3; 
  3. do 
  4.    mkdir -p /mnt/fast-disks/$vol 
  5.    mount -t tmpfs $vol /mnt/fast-disks/$vol 
  6. done 

(2)創(chuàng)建單機(jī)k8s本地測試集群

  1. $ ALLOW_PRIVILEGED=true LOG_LEVEL=5 FEATURE_GATES=$KUBE_FEATURE_GATES hack/local-up-cluster.sh​​ 

Step 2: 創(chuàng)建一個(gè)StorageClass (1.9+)

要延遲卷綁定直到pod調(diào)度并處理單個(gè)pod中的多個(gè)本地PV,必須創(chuàng)建StorageClass并將volumeBindingMode設(shè)置為WaitForFirstConsumer。

  1. Only create this for K8s 1.9+ 
  2. apiVersion: storage.k8s.io/v1 
  3. kind: StorageClass 
  4. metadata: 
  5.  name: fast-disks 
  6. provisioner: kubernetes.io/no-provisioner 
  7. volumeBindingMode: WaitForFirstConsumer 
  8. # Supported policies: Delete, Retain 
  9. reclaimPolicy: Delete 
  10. $ kubectl create -f provisioner/deployment/kubernetes/example/default_example_storageclass.yaml 
  11. ​ 

yaml文件請到local volume項(xiàng)目文件中查找需要使用的yaml文件

Step 3: 創(chuàng)建local persistent volumes

Option 1: local volume static provisioner 方式

配置一個(gè)外部的靜態(tài)配置器。

(1)生成Provisioner的ServiceAccount,Roles,DaemonSet和ConfigMap規(guī)范,并對其進(jìn)行自定義配置。

此步驟使用helm模板生成需要的配置規(guī)格。 有關(guān)設(shè)置說明,請參閱helm README。

使用默認(rèn)值生成Provisioner的配置規(guī)格,請運(yùn)行:

helm template ./helm/provisioner > ./provisioner/deployment/kubernetes/provisioner_generated.yaml

這里是將模板經(jīng)過渲染后得到最終使用的各項(xiàng)資源定義文件。 如果是使用自定義的配置文件的話:

  1. helm template ./helm/provisioner --values custom-values.yaml > ./provisioner/deployment/kubernetes/provisioner_generated.yaml​​ 

(2)部署Provisioner

如果用戶對Provisioner的yaml文件的內(nèi)容感到滿意,就可以使用kubectl創(chuàng)建Provisioner的DaemonSet和ConfigMap了。

  1. # kubectl create -f ./provisioner/deployment/kubernetes/provisioner_generated.yaml 
  2. configmap "local-provisioner-config" created 
  3. daemonset.extensions "local-volume-provisioner" created 
  4. serviceaccount "local-storage-admin" created 
  5. clusterrolebinding.rbac.authorization.k8s.io "local-storage-provisioner-pv-binding" created 
  6. clusterrole.rbac.authorization.k8s.io "local-storage-provisioner-node-clusterrole" created 
  7. clusterrolebinding.rbac.authorization.k8s.io "local-storage-provisioner-node-binding" created 

(3)檢查已自動發(fā)現(xiàn)的local volumes

一旦啟動,外部static provisioner將發(fā)現(xiàn)并自動創(chuàng)建出 local-volume PVs。

我們查看下上面測試中創(chuàng)建出的PVs有哪些:

  1. # kubectl get pv 
  2. NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE 
  3. local-pv-436f0527   495Mi      RWO            Delete           Available             fast-disks               2m 
  4. local-pv-77a4ffb0   495Mi      RWO            Delete           Available             fast-disks               2m 
  5. local-pv-97f7ec5c   495Mi      RWO            Delete           Available             fast-disks               2m 
  6. local-pv-9f0ddba3   495Mi      RWO            Delete           Available             fast-disks               2m 
  7. local-pv-a0dfdc91   495Mi      RWO            Delete           Available             fast-disks               2m 
  8. local-pv-a52333e3   495Mi      RWO            Delete           Available             fast-disks               2m 
  9. local-pv-bed86926   495Mi      RWO            Delete           Available             fast-disks               2m 
  10. local-pv-d037a0d1   495Mi      RWO            Delete           Available             fast-disks               2m 
  11. local-pv-d26c3252   495Mi      RWO            Delete           Available             fast-disks               2m 
  12. ​ 

因?yàn)槭怯?個(gè)node節(jié)點(diǎn),每個(gè)上面的/mnt/fast-disks自動發(fā)現(xiàn)目錄下掛載了3個(gè)文件系統(tǒng),所以這里查詢的結(jié)果是生成了9個(gè)PVs

查看某一個(gè)PV的詳細(xì)描述信息:

  1. # kubectl describe pv local-pv-436f0527 
  2. Name:              local-pv-436f0527 
  3. Labels:            <none> 
  4. Annotations:       pv.kubernetes.io/provisioned-by=local-volume-provisioner-kube-node2-c3733876-b56f-11e8-990b-080027395360 
  5. Finalizers:        [kubernetes.io/pv-protection] 
  6. StorageClass:      fast-disks 
  7. Status:            Available 
  8. Claim:             
  9. Reclaim Policy:    Delete 
  10. Access Modes:      RWO 
  11. Capacity:          495Mi 
  12. Node Affinity:     
  13.  Required Terms:   
  14.    Term 0:        kubernetes.io/hostname in [kube-node2] 
  15. Message:           
  16. Source: 
  17.    Type:  LocalVolume (a persistent volume backed by local storage on a node) 
  18.    Path:  /mnt/fast-disks/vol2 
  19. Events:    <none> 
  20. ​ 

此時(shí)就可以直接通過引用名為fast-disks的storageClassName名稱來聲明使用上述PV并將其綁定到PVC。

Option 2: 手動創(chuàng)建 local persistent volume

參照前文介紹local volume概念的章節(jié)中已經(jīng)講解過的PersistentVolume使用示例。

Step 4: 創(chuàng)建 local persistent volume claim

  1. kind: PersistentVolumeClaim 
  2. apiVersion: v1 
  3. metadata: 
  4.  name: example-local-claim 
  5. spec: 
  6.  accessModes: 
  7.  - ReadWriteOnce 
  8.  resources: 
  9.    requests: 
  10.      storage: 50Mi 
  11.  storageClassName: fast-disks 
  12. ​ 

請?jiān)谑褂脮r(shí)替換為您實(shí)際的存儲容量需求和storageClassName值。

  1. # kubectl create -f local-pvc.yaml 
  2. persistentvolumeclaim "example-local-claim" created 
  3. # kubectl get pvc 
  4. NAME                  STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE 
  5. example-local-claim   Pending     
  6. # kubectl describe pvc example-local-claim 
  7. Name:          example-local-claim 
  8. Namespace:     default 
  9. StorageClass:  fast-disks 
  10. Status:        Pending 
  11. Volume:         
  12. Labels:        <none> 
  13. Annotations:   <none> 
  14. Finalizers:    [kubernetes.io/pvc-protection] 
  15. Capacity:       
  16. Access Modes:   
  17. Events: 
  18.  Type    Reason                Age               From                         Message 
  19.  ----    ------                ----              ----                         ------- 
  20. ​ 

Normal WaitForFirstConsumer 6s (x6 over 59s) persistentvolume-controller waiting for first consumer to be created before binding

我們可以看到存儲卷延遲綁定的效果,在綁定到容器前,該P(yáng)VC的狀態(tài)會是pending

Step 5:創(chuàng)建一個(gè)測試Pod并引用上面創(chuàng)建的PVC

  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4.  namelocal-pvc-pod 
  5. spec: 
  6.  containers: 
  7.  - image: busybox 
  8.    name: test-local-pvc 
  9.    command: [ "sleep""3600" ] 
  10.    volumeMounts: 
  11.    - mountPath: /data 
  12.      name: data-volume 
  13.  volumes: 
  14.  - name: data-volume 
  15.    persistentVolumeClaim: 
  16.      claimName: example-local-claim 
  17. ​ 

創(chuàng)建并查看:

  1. # kubectl create -f example-local-pvc-pod.yaml 
  2. pod "local-pvc-pod" created 
  3. # kubectl get pods -o wide 
  4. NAME                             READY     STATUS    RESTARTS   AGE       IP            NODE 
  5. client1                          1/1       Running   67         64d       172.30.80.2   kube-node3 
  6. local-pvc-pod                    1/1       Running   0          2m        172.30.48.6   kube-node1 
  7. ​ 

查看pod中容器掛載PVC的配置詳情,這里只截取了部分信息:

  1. # kubectl describe pod local-pvc-pod 
  2. Name:         local-pvc-pod 
  3. Namespace:    default 
  4. Node:         kube-node1/172.16.10.101 
  5. Start Time:   Thu, 15 Nov 2018 16:39:30 +0800 
  6. Labels:       <none> 
  7. Annotations:  <none> 
  8. Status:       Running 
  9. IP:           172.30.48.6 
  10. Containers: 
  11.  test-local-pvc: 
  12. ...... 
  13.    Mounts: 
  14.      /data from data-volume (rw) 
  15.      /var/run/secrets/kubernetes.io/serviceaccount from default-token-qkhcf (ro) 
  16. Conditions: 
  17.  Type           Status 
  18.  Initialized    True 
  19.  Ready          True 
  20.  PodScheduled   True 
  21. Volumes: 
  22.  data-volume: 
  23.    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) 
  24.    ClaimName:  example-local-claim 
  25.    ReadOnly:   false 
  26. ...... 
  27. [root@kube-node1 ~]# kubectl exec -it local-pvc-pod -c test-local-pvc /bin/sh 
  28. / # ls 
  29. bin   data  dev   etc   home  proc  root  sys   tmp   usr   var 
  30. / # df -h 
  31. Filesystem                Size      Used Available Use% Mounted on 
  32. overlay                  41.0G      8.1G     32.8G  20% / 
  33. tmpfs                    64.0M         0     64.0M   0% /dev 
  34. tmpfs                   495.8M         0    495.8M   0% /sys/fs/cgroup 
  35. vol3                    495.8M         0    495.8M   0% /data 
  36. ​ 

再回過頭來看下PVC的狀態(tài),已經(jīng)變成了Bound:

  1. # kubectl get pvc 
  2. NAME                        STATUS    VOLUME              CAPACITY   ACCESS MODES   STORAGECLASS   AGE 
  3. example-local-claim         Bound     local-pv-a0dfdc91   495Mi      RWO            fast-disks     1h 
  4. ​ 

7、一個(gè)關(guān)于local volume功能局限性問題的討論

在上面的實(shí)驗(yàn)過程中不知道大家有沒有發(fā)現(xiàn)一處問題,就是我們在定義PVC時(shí)是指定的申請50Mi的空間,而實(shí)際掛載到測試容器上的存儲空間是495.8M,剛好是我們在某個(gè)node節(jié)點(diǎn)上掛載的一個(gè)文件系統(tǒng)的全部空間。

為什么會這樣呢?這就是我們所使用的這個(gè)local persistent volume外部靜態(tài)配置器的功能局限性所在了。它不支持動態(tài)的PV空間申請管理。

也就是說,雖然通過這個(gè)靜態(tài)PV配置器,我們省去了手寫PV YAML文件的痛苦,但仍然需要手工處理這項(xiàng)工作:

  • 手工維護(hù)在ConfigMap中指定的自動發(fā)現(xiàn)目錄下掛載的文件系統(tǒng)資源,或者是block設(shè)備的符號鏈接;
  • 我們需要對能夠使用的本地存儲資源提前做一個(gè)全局的規(guī)劃,然后劃分為各種尺寸的卷后掛載到自動發(fā)現(xiàn)目錄下,當(dāng)然了只要是還有空閑存儲資源,現(xiàn)有現(xiàn)掛載也是可以的。

那如果以前給某容器分配的一個(gè)存儲空間不夠用了怎么辦?

給大家的一個(gè)建議是使用Linux下的LVM(邏輯分區(qū)管理)來管理每個(gè)node節(jié)點(diǎn)上的本地磁盤存儲空間。

  • 創(chuàng)建一個(gè)大的VG分組,把一個(gè)node節(jié)點(diǎn)上可以使用的存儲空間都放進(jìn)去;
  • 按未來一段時(shí)間內(nèi)的容器存儲空間使用預(yù)期,提前批量創(chuàng)建出一部分邏輯卷LVs,都掛載到自動發(fā)現(xiàn)目錄下去;
  • 不要把VG中的存儲資源全部用盡,預(yù)留少部分用于未來給個(gè)別容器擴(kuò)容存儲空間的資源;
  • 使用lvextend為特定容器使用的存儲卷進(jìn)行擴(kuò)容;

8、如果容器需要使用block塊設(shè)備怎么配置

有幾點(diǎn)會與上面的配置方法上不同。

首先,是要在k8s主要的組件上均開啟用于支持block塊設(shè)備的特性。

  1. KUBE_FEATURE_GATES="BlockVolume=true"​​ 

其次是,定義一個(gè)”Block”類型的volumeMode PVC,為容器申請一個(gè)”Block”類型的PV。

  1. kind: PersistentVolumeClaim 
  2. apiVersion: v1 
  3. metadata: 
  4.  name: example-block-local-claim 
  5. spec: 
  6.  accessModes: 
  7.  - ReadWriteOnce 
  8.  resources: 
  9.    requests: 
  10.      storage: 50Mi 
  11.  volumeMode: Block 
  12.  storageClassName: fast-disks 
  13. ​ 

9、Local volumes的***實(shí)踐

  • 為了更好的IO隔離效果,建議將一整塊磁盤作為一個(gè)存儲卷使用;
  • 為了得到存儲空間的隔離,建議為每個(gè)存儲卷使用一個(gè)獨(dú)立的磁盤分區(qū);
  • 在仍然存在指定了某個(gè)node節(jié)點(diǎn)的親和性關(guān)系的舊PV時(shí),要避免重新創(chuàng)建具有相同節(jié)點(diǎn)名稱的node節(jié)點(diǎn)。 否則,系統(tǒng)可能會認(rèn)為新節(jié)點(diǎn)包含舊的PV。
  • 對于具有文件系統(tǒng)的存儲卷,建議在fstab條目和該卷的mount安裝點(diǎn)的目錄名中使用它們的UUID(例如ls -l /dev/disk/by-uuid的輸出)。 這種做法可確保不會安裝錯(cuò)誤的本地卷,即使其設(shè)備路徑發(fā)生了更改(例如,如果/dev/sda1在添加新磁盤時(shí)變?yōu)?dev/sdb1)。 此外,這種做法將確保如果創(chuàng)建了具有相同名稱的另一個(gè)節(jié)點(diǎn)時(shí),該節(jié)點(diǎn)上的任何卷仍然都會是唯一的,而不會被誤認(rèn)為是具有相同名稱的另一個(gè)節(jié)點(diǎn)上的卷。
  • 對于沒有文件系統(tǒng)的原始塊存儲卷,請使用其唯一ID作為符號鏈接的名稱。 根據(jù)您的環(huán)境,/dev/disk/by-id/中的卷ID可能包含唯一的硬件序列號。 否則,應(yīng)自行生成一個(gè)唯一ID。 符號鏈接名稱的唯一性將確保如果創(chuàng)建了另一個(gè)具有相同名稱的節(jié)點(diǎn),則該節(jié)點(diǎn)上的任何卷都仍然是唯一的,而不會被誤認(rèn)為是具有相同名稱的另一個(gè)節(jié)點(diǎn)上的卷。

10、停用local volume的方法

當(dāng)您想要停用本地卷時(shí),這是一個(gè)可能的工作流程。

  • 關(guān)閉使用這些卷的Pods;
  • 從node節(jié)點(diǎn)上移除local volumes(比如unmounting, 拔出磁盤等等);
  • 手動刪除相應(yīng)的PVCs對象;
  • Provisioner將嘗試清理卷,但會由于卷不再存在而失敗;
  • 手動刪除相應(yīng)的PVs對象。 注:以上工作也是拜我們所使用的外部靜態(tài)配置器所賜。

參考資料:

https://blog.csdn.net/watermelonbig/article/details/84108424

https://github.com/kubernetes-incubator/external-storage/tree/master/local-volume https://kubernetes.io/docs/concepts/storage/volumes/

責(zé)任編輯:武曉燕 來源: K8S中文社區(qū)
相關(guān)推薦

2021-03-10 08:56:37

Zookeeper

2021-02-08 23:47:51

文件存儲塊存儲對象存儲

2021-07-27 07:31:16

JavaArrayList數(shù)組

2022-05-15 21:52:04

typeTypeScriptinterface

2024-02-29 09:08:56

Encoding算法加密

2020-10-30 08:20:04

SD卡TF卡存儲

2018-05-22 16:24:20

HashMapJavaJDK

2020-03-03 17:35:09

Full GCMinor

2025-08-18 03:25:00

2023-02-27 15:46:19

數(shù)據(jù)元元數(shù)據(jù)

2023-09-03 21:18:07

Python編程語言

2025-05-12 08:40:00

前端監(jiān)控DOM

2025-08-14 08:21:17

PODAODTO

2016-11-04 12:51:46

Unix網(wǎng)絡(luò)IO 模型

2021-11-09 06:01:35

前端JITAOT

2022-02-25 09:14:33

類變量共享實(shí)例變量

2024-11-04 00:00:03

viewportDOMSPA

2025-08-26 04:00:00

2020-11-11 07:32:18

MySQL InnoDB 存儲

2023-04-11 15:57:49

JavaScriptCSSHTML
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲午夜久久久久中文字幕久| 国产精品腿扒开做爽爽爽挤奶网站| 欧洲一区在线观看| 一区二区三区国| 在线观看黄色网| 综合色一区二区| 日韩精品福利在线| www.天天射.com| 在线观看男女av免费网址| 丁香婷婷深情五月亚洲| 日本视频久久久| 国产精品免费人成网站酒店| 欧美成人一区在线观看| 欧美日韩美少妇| 黄页网站在线观看视频| 成人精品一区二区三区校园激情| 国产美女视频91| 日韩免费观看av| 激情小说中文字幕| 成人激情开心网| 精品国产乱码久久久久久闺蜜| 一本久道中文无码字幕av| 色a资源在线| 国产精品拍天天在线| 激情欧美一区二区三区中文字幕| 一级爱爱免费视频| 玖玖国产精品视频| 日韩风俗一区 二区| 日韩精品欧美国产精品忘忧草 | 久久久精品高清| 欧美人与禽性xxxxx杂性| 欧美激情资源网| 国产精品一区二区在线观看| 夜夜骚av一区二区三区| 狂野欧美性猛交xxxx巴西| 欧美大荫蒂xxx| frxxee中国xxx麻豆hd| 免费视频一区三区| 亚洲高清免费观看高清完整版| 中文字幕一区二区在线观看视频 | 欧美一区二区三区成人精品| 日本一区影院| 欧美一三区三区四区免费在线看| 久久婷婷国产91天堂综合精品| 天堂网在线最新版www中文网| 亚洲一区视频在线| 午夜探花在线观看| 亚洲免费视频一区二区三区| 久久久久久久久免费| 精品久久久久久一区二区里番| www久久久久久| 国产一区二区日韩精品| 成人黄色短视频在线观看| 无码人妻精品一区二区三区蜜桃91 | 成人免费视频网站入口::| 成人精品电影| 色噜噜国产精品视频一区二区 | www.国产免费| 国产成人av福利| 成人毛片网站| 蜜臀久久99精品久久久| 成人黄色av电影| 精品国产乱码久久久久久久软件| 内射后入在线观看一区| 成人18精品视频| 九九99玖玖| 日本啊v在线| 国产亚洲一区二区三区| 色综合久久久久久久久五月| 91se在线| 亚洲色图清纯唯美| 亚洲看片网站| 91麻豆一二三四在线| 亚洲精品videosex极品| a天堂资源在线观看| 波多野结衣乳巨码无在线观看| 亚洲一区二区在线免费看| 国产av人人夜夜澡人人爽麻豆| 日本不卡免费高清视频在线| 日韩欧美一区视频| 亚洲欧美自偷自拍另类| 国产一区二区三区精品在线观看| 日韩欧美亚洲国产另类| 成熟妇人a片免费看网站| 五月综合久久| 在线看日本不卡| 日韩亚洲欧美成人一区| 亚洲热在线视频| 99ri日韩精品视频| 亚洲娇小xxxx欧美娇小| 久久久视频6r| 中文无码久久精品| 日韩高清不卡一区二区| 97国产在线观看| 7799精品视频天天看| 卡一卡二国产精品| 99三级在线| 蜜桃成人在线视频| 亚洲婷婷综合色高清在线| 久久综合久久久久| 中文字幕系列一区| 欧美一级片在线观看| 久久久久久久久免费看无码| 亚洲精品小说| 欧美资源在线观看| 国产喷水吹潮视频www| 91在线porny国产在线看| 亚洲国产日韩综合一区| 538在线视频| 欧美日韩一区久久| 免费的av网站| 艳女tv在线观看国产一区| 91成人免费观看网站| 一级α片免费看刺激高潮视频| 99久久综合狠狠综合久久| 黄频视频在线观看| 欧美大片免费高清观看| 精品精品国产高清a毛片牛牛 | 天天做天天爱夜夜爽| 久久福利资源站| 麻豆传媒一区二区| 黑人玩欧美人三根一起进| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产xxx在线观看| 欧美电影三区| 国产精品成人va在线观看| 色wwwwww| 一区二区三区在线影院| 91制片厂毛片| 国语产色综合| 欧美一区二区三区精品电影| 亚洲爆乳无码一区二区三区| 国产精品高潮呻吟| av丝袜天堂网| 九九亚洲视频| 欧美一区二三区| 天堂中文资源在线观看| 一区二区三区日韩精品| www,av在线| 国产精品毛片一区二区在线看| 国产精品美腿一区在线看| 日韩在线免费看| 午夜国产精品一区| 又黄又爽的网站| 国产精品jizz在线观看美国| 亚洲自拍偷拍在线| 国产乱色在线观看| 这里是久久伊人| 亚洲精品卡一卡二| 国内久久精品视频| 久久免费视频2| 国产一区二区高清在线| 久久亚洲国产精品| 国产精品呻吟久久| 自拍偷自拍亚洲精品播放| 精品综合久久久久| 91久久久精品国产| 91日韩在线视频| caopo在线| 91精品国产欧美一区二区成人 | 欧美顶级大胆免费视频| 国产精品视频26uuu| 97视频在线观看网站| 欧美日韩五月天| 性生交大片免费全黄| 国产乱码精品一区二区三 | 精品一区二区6| 免费观看久久久4p| 中文字幕黄色大片| 亚洲一区二区免费在线观看| 欧美精品国产精品日韩精品| 神马午夜在线观看| 日本高清视频一区二区| 国产一区二区三区视频播放| 紧缚捆绑精品一区二区| 99久久免费观看| 牲欧美videos精品| 国产精品小说在线| 欧洲成人综合网| 国产视频精品自拍| 中文字幕第31页| 亚洲精品视频在线观看免费| 在线观看成人动漫| 天堂va蜜桃一区二区三区| 中文字幕剧情在线观看一区| 日韩在线亚洲| 欧美最顶级的aⅴ艳星| 日韩理伦片在线| 亚洲成人精品久久| 国产精品成人久久久| 亚洲精品免费在线| 中文字幕5566| 国产一区二区在线免费观看| 免费看国产一级片| 久久国产综合| 国产日韩精品推荐| 久久女人天堂| 97人澡人人添人人爽欧美| 看片的网站亚洲| 经典三级在线视频| 林ゆな中文字幕一区二区| 国产精品高潮呻吟久久av无限| 超碰人人在线| 亚洲尤物在线| 欧美一区二区视频17c| 91精品国产自产观看在线 | 婷婷综合在线视频| 成人免费高清在线| 91欧美视频在线| 99亚洲精品| 精品国产无码在线| 国产精品欧美三级在线观看| 99re在线观看视频| 激情久久一区二区| 欧美一级bbbbb性bbbb喷潮片| 黄色网页在线免费看| 亚洲欧美在线免费| 国产 日韩 欧美 精品| 欧美日本一区二区三区四区| 日本天堂网在线| 一区二区免费视频| 亚洲熟女少妇一区二区| 久久婷婷成人综合色| 免费黄色av网址| 精品亚洲成a人| 手机在线看福利| 久久精品导航| 日韩精品xxxx| 伊人久久亚洲影院| 国产在线无码精品| 国产精品久久久久久麻豆一区软件 | 最新黄色网址在线观看| 欧美日韩国产影院| 久久久久亚洲av片无码下载蜜桃| 中文字幕一区二区三区在线不卡| 中文字幕免费视频| 26uuu久久天堂性欧美| yy1111111| 成人白浆超碰人人人人| 欧美午夜精品一区二区| 国产美女在线观看一区| 91网址在线观看精品| 精品一区二区三区在线播放视频| 国产又黄又猛又粗又爽的视频| 性欧美精品高清| 成人毛片视频网站| 国产精品久久久一区二区| 和岳每晚弄的高潮嗷嗷叫视频| 国产精品chinese| 被灌满精子的波多野结衣| 国产精品啊v在线| 一本久道高清无码视频| 亚洲国内欧美| 成人一对一视频| 老司机一区二区三区| 国产精品免费观看久久| 香蕉av777xxx色综合一区| 久久精品免费一区二区| 久久国产66| 亚洲欧美自拍另类日韩| 黄色精品一二区| 少妇高潮一69aⅹ| 成人avav影音| www.中文字幕av| 亚洲国产精品精华液ab| frxxee中国xxx麻豆hd| 一区二区理论电影在线观看| 日韩aaaaaa| 一道本成人在线| 在线观看日韩一区二区| 91精品视频网| 黄色小视频免费在线观看| 亚洲国产精品悠悠久久琪琪 | 久久久亚洲国产美女国产盗摄| 国产中年熟女高潮大集合| 中文字幕va一区二区三区| 日韩激情综合网| 一区二区三区在线免费播放| 丰满少妇乱子伦精品看片| 欧美在线一二三| 国产黄色av网站| 精品在线欧美视频| 欧美jizz18性欧美| 欧美日本精品在线| 亚洲妇女成熟| 91久久久久久久一区二区| 91大神精品| 日本一区视频在线观看免费| 亚洲不卡av不卡一区二区| 国产精品裸体瑜伽视频| 日本不卡一区二区三区| 真实乱偷全部视频| 久久亚洲精精品中文字幕早川悠里| 国产福利在线导航| 亚洲国产日韩一区二区| 国产女优在线播放| 日韩久久免费av| yw193.com尤物在线| 欧美国产亚洲视频| 性欧美1819sex性高清| 91九色蝌蚪嫩草| 精品无人区麻豆乱码久久久| 精品一区二区三区无码视频| 日本不卡一区二区三区| 日本一区二区在线免费观看| 国产精品理伦片| 日韩欧美成人一区二区三区| 欧美一级在线视频| 国产免费视频在线| 久久久久久久久久婷婷| 日韩亚洲国产免费| 免费国产一区二区| 欧美特黄一区| 五月天视频在线观看| 久久久久久免费网| 久久9999久久免费精品国产| 欧美日韩国产成人在线免费| 色资源在线观看| 欧美激情亚洲自拍| 电影一区二区三区久久免费观看| 欧美三级电影在线播放| 亚洲无线一线二线三线区别av| 一路向西2在线观看| 久久久综合精品| 国产一级免费av| 欧美一区二区三区在| 北岛玲一区二区三区| 欧美亚洲国产日韩2020| 成人在线超碰| 一卡二卡3卡四卡高清精品视频| 免费亚洲一区| xxxx黄色片| 亚洲高清免费观看高清完整版在线观看| 91国内精品视频| 中文字幕亚洲欧美| 欧美电影网站| 开心色怡人综合网站| 在线看片成人| zjzjzjzjzj亚洲女人| 亚洲综合免费观看高清完整版在线| 91久久精品无码一区二区| 尤物九九久久国产精品的特点| 欧美gay囗交囗交| 你懂的网址一区二区三区| 亚洲美女黄色| 男人网站在线观看| 夜夜精品视频一区二区| 亚洲国产精品无码久久| 色综合久久久888| 亚洲日本va午夜在线电影| 青青草视频国产| 国产高清不卡二三区| 免费在线观看黄色av| 日韩一二三区视频| 伊人手机在线| 国产精品区一区| 亚洲激情不卡| 给我看免费高清在线观看| 狠狠色香婷婷久久亚洲精品| 人人九九精品| 国产精品aaaa| 色喇叭免费久久综合网| www.com久久久| 一区二区三区日本| 黄色美女一级片| 日本成人精品在线| 欧美亚洲高清| 激情在线观看视频| 夜夜夜精品看看| 亚洲欧美日韩动漫| 国产精国产精品| 99热在线成人| 一二三区视频在线观看| 精品高清一区二区三区| 欧美大片aaa| 91精品国产综合久久久久久蜜臀| 国产精品不卡| 中国黄色片视频| 色拍拍在线精品视频8848| 国产在线一二三区| 91在线视频九色| 999亚洲国产精| 精品人体无码一区二区三区| 日韩一区二区视频| 麻豆mv在线看| 亚洲图色在线| 成人av动漫在线| 亚洲无码久久久久| 欧美激情日韩图片| 久久最新网址| 肉丝美足丝袜一区二区三区四| 精品久久久一区| 亚洲图片88| 精品久久久三级| 激情国产一区二区| 99热国产在线观看| 日韩亚洲欧美中文在线| 麻豆成人入口| 伊人色在线观看| 高潮白浆女日韩av免费看|