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

快速上手 Rook,入門云原生存儲編排

存儲 存儲軟件 云原生
Rook 是一個開源 cloud-native storage orchestrator(云原生存儲編排器),為各種存儲解決方案提供平臺、框架和支持,以與云原生環境進行原生集成。

[[415352]]

本文轉載自微信公眾號「黑客下午茶」,作者為少。轉載本文請聯系黑客下午茶公眾號。

Rook 是一個開源 cloud-native storage orchestrator(云原生存儲編排器),為各種存儲解決方案提供平臺、框架和支持,以與云原生環境進行原生集成。

Rook 將存儲軟件轉變為自我管理(self-managing)、自我擴展(self-scaling)和自我修復(self-healing)的存儲服務。它通過自動化部署(automating deployment)、引導(bootstrapping)、配置(configuration)、供應(provisioning)、 擴展(scaling)、升級(upgrading)、遷移(migration)、災難恢復(disaster recovery)、監控(monitoring)和資源管理(resource management)來實現這一點。 Rook 使用底層云原生容器管理、調度和編排平臺提供的設施來執行其職責。

Rook 利用擴展點深度集成到云原生環境中,并為調度、生命周期管理、資源管理、安全、監控和用戶體驗提供無縫體驗。

Cassandra 快速入門

Cassandra 是一個高可用、容錯、對等的 NoSQL 數據庫,具有閃電般的性能和可調的一致性。它提供了無單點故障的大規模可擴展性。

Scylla 是在 C++ 中對 Cassandra 的接近硬件重寫。它采用無共享架構,可實現真正的線性擴展和主要硬件優化,從而實現超低延遲和極高吞吐量。它是 Cassandra 的直接替代品,并使用相同的接口,因此 Rook 也支持它。

前提條件

運行 Rook Cassandra operator 需要 Kubernetes 集群。為了確保你有一個為 Rook 準備好的 Kubernetes 集群(Cassandra 不需要 flexvolume 插件)

部署 Cassandra Operator

首先使用以下命令部署 Rook Cassandra Operator:

  1. $ git clone --single-branch --branch v1.6.8 https://github.com/rook/rook.git 
  2. cd rook/cluster/examples/kubernetes/cassandra 
  3. kubectl apply -f operator.yaml 

這將在命名空間 rook-cassandra-system 中安裝 operator。您可以檢查 operator 是否已啟動并運行:

  1. kubectl -n rook-cassandra-system get pod 

創建和初始化 Cassandra/Scylla 集群

現在 operator 正在運行,我們可以通過創建 clusters.cassandra.rook.io 資源的實例來創建 Cassandra/Scylla 集群的實例。該資源的某些值是可配置的,因此請隨意瀏覽 cluster.yaml 并根據自己的喜好調整設置。

當你準備創建一個 Cassandra 集群時,只需運行:

  1. kubectl create -f cluster.yaml 

我們可以使用以下命令驗證是否已創建代表我們新 Cassandra 集群的 Kubernetes 對象。這很重要,因為它表明 Rook 已成功擴展 Kubernetes,使 Cassandra 集群成為 Kubernetes 云原生環境中的一等公民。

  1. kubectl -n rook-cassandra get clusters.cassandra.rook.io 

要檢查是否所有所需的成員都在運行,您應該從以下命令中看到與 cluster.yaml 中指定的成員數量相同的條目數:

  1. kubectl -n rook-cassandra get pod -l app=rook-cassandra 

您還可以從其狀態跟蹤 Cassandra 集群的狀態。要檢查集群的當前狀態,請運行:

  1. kubectl -n rook-cassandra describe clusters.cassandra.rook.io rook-cassandra 

訪問數據庫

  • 從 kubectl:

要在新集群中獲取 cqlsh shell:

  1. kubectl exec -n rook-cassandra -it rook-cassandra-east-1-east-1a-0 -- cqlsh 
  2. > DESCRIBE KEYSPACES; 
  • 從 Pod 內部:

當你創建一個新的集群時,Rook 會自動為客戶端創建一個服務來訪問集群。服務的名稱遵循約定-client。您可以通過運行以下命令在集群中查看此服務:

  1. kubectl -n rook-cassandra describe service rook-cassandra-client 

在 Kubernetes 集群中運行的 Pod 可以使用此服務連接到 Cassandra。這是使用 Python Driver 的示例:

  1. from cassandra.cluster import Cluster 
  2.  
  3. cluster = Cluster(['rook-cassandra-client.rook-cassandra.svc.cluster.local']) 
  4. session = cluster.connect() 

Scale Up

operator 支持擴展機架(rack)以及添加新機架(rack)。要進行更改,您可以使用:

  1. kubectl edit clusters.cassandra.rook.io rook-cassandra 
  • 要擴展一個 rack,請將 rack 的 Spec.Members 字段更改為所需值。
  • 要添加新 rack,請在 racks 列表中添加一個新 rack。請記住為新 rack 選擇不同的 rack 名稱。
  • 編輯并保存 yaml 后,請檢查集群的狀態和事件以獲取有關正發生情況的信息:
  1. kubectl -n rook-cassandra describe clusters.cassandra.rook.io rook-cassandra 

Scale Down

operator 支持按比例縮小 rack。要進行更改,您可以使用:

  1. kubectl edit clusters.cassandra.rook.io rook-cassandra 
  • 要縮小一個 rack,請將 rack 的 Spec.Members 字段更改為所需值。
  • 編輯并保存 yaml 后,請檢查集群的狀態和事件以獲取有關正發生情況的信息:
  1. kubectl -n rook-cassandra describe clusters.cassandra.rook.io rook-cassandra 

Clean Up

要清理與此演練相關的所有資源,您可以運行以下命令。

注意:這將破壞您的數據庫并刪除其所有相關數據。

  1. kubectl delete -f cluster.yaml 
  2.  
  3. kubectl delete -f operator.yaml 

故障排除

如果集群沒有出現,第一步是檢查 operator 的日志:

  1. kubectl -n rook-cassandra-system logs -l app=rook-cassandra-operator 

如果 operator 日志中一切正常,您還可以查看 Cassandra 實例之一的日志:

  1. kubectl -n rook-cassandra logs rook-cassandra-0 

Cassandra 監控

要為 cassandra rack 啟用 jmx_exporter,您應該在 CassandraCluster CRD 中為 rack 指定 jmxExporterConfigMapName 選項。

例如:

  1. apiVersion: cassandra.rook.io/v1alpha1 
  2. kind: Cluster 
  3. metadata: 
  4.   name: my-cassandra 
  5.   namespace: rook-cassandra 
  6. spec: 
  7.   ... 
  8.   datacenter: 
  9.     name: my-datacenter 
  10.     racks: 
  11.     - name: my-rack 
  12.       members: 3 
  13.       jmxExporterConfigMapName: jmx-exporter-settings 
  14.       storage: 
  15.         volumeClaimTemplates: 
  16.         - metadata: 
  17.             name: rook-cassandra-data 
  18.           spec: 
  19.             storageClassName: my-storage-class 
  20.             resources: 
  21.               requests: 
  22.                 storage: 200Gi 

獲取所有指標的簡單 config map 示例:

  1. apiVersion: v1 
  2. kind: ConfigMap 
  3. metadata: 
  4.   name: jmx-exporter-settings 
  5.   namespace: rook-cassandra 
  6. data: 
  7.   jmx_exporter_config.yaml: | 
  8.     lowercaseOutputLabelNames: true 
  9.     lowercaseOutputName: true 
  10.     whitelistObjectNames: ["org.apache.cassandra.metrics:*"

ConfigMap 的數據字段必須包含帶有 jmx exporter 設置的 jmx_exporter_config.yaml key。

當 config map 更新時,Pod 沒有自動重新加載機制。 configmap 更改后,您應該手動重新啟動所有 rack pods:

  1. NAMESPACE=<namespace> 
  2. CLUSTER=<cluster_name> 
  3. RACKS=$(kubectl get sts -n ${NAMESPACE} -l "cassandra.rook.io/cluster=${CLUSTER}"
  4. echo ${RACKS} | xargs -n1 kubectl rollout restart -n ${NAMESPACE} 

Ceph Storage 快速入門

本指南將引導您完成 Ceph 集群的基本設置,并使您能夠使用集群中運行的其他 pod 中的塊、對象和文件存儲。

最低版本

Rook 支持 Kubernetes v1.11 或更高版本。

Important 如果您使用的是 K8s 1.15 或更早版本,則需要創建不同版本的 Rook CRD。創建在示例清單的 pre-k8s-1.16 子文件夾中找到的 crds.yaml。

前提條件

為確保您擁有可用于 Rook 的 Kubernetes 集群。

為了配置 Ceph 存儲集群,至少需要以下本地存儲選項之一:

  • 原始設備(無分區或格式化文件系統)
    • 這需要在主機上安裝 lvm2。為了避免這種依賴性,您可以在磁盤上創建一個完整的磁盤分區(見下文)
  • 原始分區(無格式化文件系統)
  • block 模式下存儲類中可用的持久卷

您可以使用以下命令確認您的分區或設備是否已格式化文件系統。

  1. lsblk -f 
  1. NAME                  FSTYPE      LABEL UUID                                   MOUNTPOINT 
  2. vda 
  3. └─vda1                LVM2_member       >eSO50t-GkUV-YKTH-WsGq-hNJY-eKNf-3i07IB 
  4.  ├─ubuntu--vg-root   ext4              c2366f76-6e21-4f10-a8f3-6776212e2fe4   / 
  5.  └─ubuntu--vg-swap_1 swap              9492a3dc-ad75-47cd-9596-678e8cf17ff9   [SWAP] 
  6. vdb 

如果 FSTYPE 字段不為空,則在相應設備的頂部有一個文件系統。在這種情況下,您可以將 vdb 用于 Ceph,而不能使用 vda 及其分區。

TL;DR

如果幸運的話,可以使用以下 kubectl 命令和示例 yaml 文件創建一個簡單的 Rook 集群。

  1. $ git clone --single-branch --branch v1.6.8 https://github.com/rook/rook.git 
  2. cd rook/cluster/examples/kubernetes/ceph 
  3. kubectl create -f crds.yaml -f common.yaml -f operator.yaml 
  4. kubectl create -f cluster.yaml 

集群環境

Rook 文檔側重于在生產環境中啟動 Rook。還提供了一些示例來放寬測試環境的一些設置。在本指南后面創建集群時,請考慮以下示例集群清單:

  • cluster.yaml: 在裸機上運行的生產集群的集群設置。至少需要三個工作節點。
  • cluster-on-pvc.yaml: 在動態云環境中運行的生產集群的集群設置。
  • cluster-test.yaml: 測試環境的集群設置,例如 minikube。

部署 Rook Operator

第一步是部署 Rook operator。檢查您是否正在使用與您的 Rook 版本相對應的示例 yaml 文件。

  1. cd cluster/examples/kubernetes/ceph 
  2. kubectl create -f crds.yaml -f common.yaml -f operator.yaml 
  3.  
  4. # verify the rook-ceph-operator is in the `Running` state before proceeding 
  5. kubectl -n rook-ceph get pod 

在生產中啟動 Operator 之前,您可能需要考慮一些設置:

  1. 如果您使用 kubernetes v1.15 或更早版本,則需要在此處創建 CRD,在 /cluster/examples/kubernetes/ceph/pre-k8s-1.16/crd.yaml。 CustomResourceDefinition 的 apiextension v1beta1 版本在 Kubernetes v1.16 中已棄用。
  2. 考慮是否要啟用默認禁用的某些 Rook 功能。有關這些和其他高級設置,請參閱 operator.yaml。
  • 設備發現:如果啟用了 ROOK_ENABLE_DISCOVERY_DAEMON 設置,Rook 將監視要配置的新設備,常用于裸機集群。
  • Flex driver:Flex driver 已被棄用,取而代之的是 CSI driver,但仍可通過 ROOK_ENABLE_FLEX_DRIVER 設置啟用。
  • Node affinity and tolerations(節點關聯和容忍度):默認情況下,CSI driver 將在集群中的任何節點上運行。要配置 CSI driver affinity,可以使用多種設置。

創建 Rook Ceph 集群

現在 Rook operator 正在運行,我們可以創建 Ceph 集群。為了使集群在重新啟動后繼續存在,請確保設置對主機有效的 dataDirHostPath 屬性。

創建集群:

  1. kubectl create -f cluster.yaml 

使用 kubectl 列出 rook-ceph 命名空間中的 pod。一旦它們全部運行,您應該能夠看到以下 pod。 osd pod 的數量將取決于集群中的節點數量和配置的設備數量。如果沒有修改上面的 cluster.yaml,預計每個節點會創建一個 OSD。CSI、rook-ceph-agent(flex driver)和 rook-discover pod 也是可選的,具體取決于您的設置。

  1. kubectl -n rook-ceph get pod 
  1. NAME                                                 READY   STATUS      RESTARTS   AGE 
  2. csi-cephfsplugin-provisioner-d77bb49c6-n5tgs         5/5     Running     0          140s 
  3. csi-cephfsplugin-provisioner-d77bb49c6-v9rvn         5/5     Running     0          140s 
  4. csi-cephfsplugin-rthrp                               3/3     Running     0          140s 
  5. csi-rbdplugin-hbsm7                                  3/3     Running     0          140s 
  6. csi-rbdplugin-provisioner-5b5cd64fd-nvk6c            6/6     Running     0          140s 
  7. csi-rbdplugin-provisioner-5b5cd64fd-q7bxl            6/6     Running     0          140s 
  8. rook-ceph-crashcollector-minikube-5b57b7c5d4-hfldl   1/1     Running     0          105s 
  9. rook-ceph-mgr-a-64cd7cdf54-j8b5p                     1/1     Running     0          77s 
  10. rook-ceph-mon-a-694bb7987d-fp9w7                     1/1     Running     0          105s 
  11. rook-ceph-mon-b-856fdd5cb9-5h2qk                     1/1     Running     0          94s 
  12. rook-ceph-mon-c-57545897fc-j576h                     1/1     Running     0          85s 
  13. rook-ceph-operator-85f5b946bd-s8grz                  1/1     Running     0          92m 
  14. rook-ceph-osd-0-6bb747b6c5-lnvb6                     1/1     Running     0          23s 
  15. rook-ceph-osd-1-7f67f9646d-44p7v                     1/1     Running     0          24s 
  16. rook-ceph-osd-2-6cd4b776ff-v4d68                     1/1     Running     0          25s 
  17. rook-ceph-osd-prepare-node1-vx2rz                    0/2     Completed   0          60s 
  18. rook-ceph-osd-prepare-node2-ab3fd                    0/2     Completed   0          60s 
  19. rook-ceph-osd-prepare-node3-w4xyz                    0/2     Completed   0          60s 

要驗證集群是否處于健康狀態,請連接到 Rook toolbox 并運行 ceph status 命令。

  • 所有 mons 都應達到法定人數
  • mgr 應該是活躍的
  • 至少有一個 OSD 處于活動狀態
  • 如果運行狀況不是 HEALTH_OK,則應調查警告或錯誤
  1. ceph status 
  1. cluster: 
  2.   id:     a0452c76-30d9-4c1a-a948-5d8405f19a7c 
  3.   health: HEALTH_OK 
  4.  
  5. services: 
  6.   mon: 3 daemons, quorum a,b,c (age 3m) 
  7.   mgr: a(active, since 2m) 
  8.   osd: 3 osds: 3 up (since 1m), 3 in (since 1m) 
  9. .. 

Storage

有關 Rook 公開的三種存儲類型的演練,請參閱以下指南:

  • Block:創建要由 Pod 使用的塊(block)存儲
  • Object:創建可在 Kubernetes 集群內部或外部訪問的對象存儲
  • Shared Filesystem:創建要在多個 pod 之間共享的文件系統

Ceph 儀表板

Ceph 有一個儀表板,您可以在其中查看集群的狀態。

工具

我們創建了一個 toolbox 容器,其中包含用于調試和排除 Rook 集群故障的全套 Ceph 客戶端。

監控

每個 Rook 集群都有一些內置的指標收集器(collectors)/導出器(exporters),用于使用 Prometheus 進行監控。

銷毀

完成測試集群后,請參閱這些說明以清理集群。

網絡文件系統 (NFS)

NFS 允許遠程主機通過網絡掛載文件系統并與這些文件系統交互,就像它們是在本地掛載一樣。這使系統管理員能夠將資源整合到網絡上的中央服務器上。

  1. 前提條件
  2. 運行 Rook NFS operator 需要 Kubernetes 集群。

要暴露的卷,需要通過 PVC 附加到 NFS server pod。

可以被附加(attached)和導出(exported)任何類型的 PVC,例如 Host Path、AWS Elastic Block Store、GCP Persistent Disk、CephFS、Ceph RBD 等。這些卷的限制(limitations)在它們由 NFS 共享時也適用。您可以在 Kubernetes docs 中進一步了解這些卷的詳細信息和限制。3. NFS client packages 必須安裝在 Kubernetes 可能運行掛載 NFS 的 pod 的所有節點上。在 CentOS 節點上安裝 nfs-utils 或在 Ubuntu 節點上安裝 nfs-common。

部署 NFS Operator

首先使用以下命令部署 Rook NFS operator:

  1. $ git clone --single-branch --branch v1.6.8 https://github.com/rook/rook.git 
  2. cd rook/cluster/examples/kubernetes/nfs 
  3. kubectl create -f common.yaml 
  4. kubectl create -f operator.yaml 

您可以檢查 operator 是否已啟動并運行:

  1. kubectl -n rook-nfs-system get pod 

NAME READY STATUS RESTARTS AGE

  1. NAME                                    READY   STATUS    RESTARTS   AGE 
  2. rook-nfs-operator-879f5bf8b-gnwht       1/1     Running   0          29m 

部署 NFS Admission Webhook (可選)

Admission webhooks 是 HTTP 回調,用于接收對 API 服務器的準入請求。兩種類型的 admission webhooks 是驗證 admission webhook 和 mutating admission webhook。 NFS Operator 支持驗證 admission webhook,它在存儲到 etcd(持久化)之前驗證發送到 API server 的 NFSServer 對象。

要在 NFS 上啟用 admission webhook,例如驗證 admission webhook,您需要執行以下操作:

首先,確保安裝了 cert-manager。如果尚未安裝,您可以按照 cert-manager 安裝文檔中的說明進行安裝。或者,您可以簡單地運行以下單個命令:

  1. kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.1/cert-manager.yaml 

這將輕松安裝最新版本 (v0.15.1) 的 cert-manager。完成后,確保 cert-manager 組件部署正確并處于 Running 狀態:

  1. kubectl get -n cert-manager pod 
  1. NAME                                      READY   STATUS    RESTARTS   AGE 
  2. cert-manager-7747db9d88-jmw2f             1/1     Running   0          2m1s 
  3. cert-manager-cainjector-87c85c6ff-dhtl8   1/1     Running   0          2m1s 
  4. cert-manager-webhook-64dc9fff44-5g565     1/1     Running   0          2m1s 

一旦 cert-manager 運行,您現在可以部署 NFS webhook:

  1. kubectl create -f webhook.yaml 

驗證 webhook 已啟動并正在運行:

  1. kubectl -n rook-nfs-system get pod 
  1. NAME                                    READY   STATUS    RESTARTS   AGE 
  2. rook-nfs-operator-78d86bf969-k7lqp      1/1     Running   0          102s 
  3. rook-nfs-webhook-74749cbd46-6jw2w       1/1     Running   0          102s 

創建 Openshift 安全上下文約束(可選)

在 OpenShift 集群上,我們需要創建一些額外的安全上下文約束。如果您未在 OpenShift 中運行,則可以跳過此部分并轉到下一部分。

要為 nfs-server pod 創建安全上下文約束,我們可以使用以下 yaml,它也可以在 /cluster/examples/kubernetes/nfs 下的 scc.yaml 中找到。

注意:舊版本的 OpenShift 可能需要 apiVersion: v1

  1. kind: SecurityContextConstraints 
  2. apiVersion: security.openshift.io/v1 
  3. metadata: 
  4.   name: rook-nfs 
  5. allowHostDirVolumePlugin: true 
  6. allowHostIPC: false 
  7. allowHostNetwork: false 
  8. allowHostPID: false 
  9. allowHostPorts: false 
  10. allowPrivilegedContainer: false 
  11. allowedCapabilities: 
  12. - SYS_ADMIN 
  13. - DAC_READ_SEARCH 
  14. defaultAddCapabilities: null 
  15. fsGroup: 
  16.   type: MustRunAs 
  17. priority: null 
  18. readOnlyRootFilesystem: false 
  19. requiredDropCapabilities: 
  20. - KILL 
  21. - MKNOD 
  22. - SYS_CHROOT 
  23. runAsUser: 
  24.   type: RunAsAny 
  25. seLinuxContext: 
  26.   type: MustRunAs 
  27. supplementalGroups: 
  28.   type: RunAsAny 
  29. volumes: 
  30. - configMap 
  31. - downwardAPI 
  32. - emptyDir 
  33. - persistentVolumeClaim 
  34. - secret 
  35. users: 
  36.   - system:serviceaccount:rook-nfs:rook-nfs-server 

您可以使用以下命令創建 scc:

  1. oc create -f scc.yaml 

創建 Pod 安全策略(推薦)

我們建議您也創建 Pod 安全策略

  1. apiVersion: policy/v1beta1 
  2. kind: PodSecurityPolicy 
  3. metadata: 
  4.   name: rook-nfs-policy 
  5. spec: 
  6.   privileged: true 
  7.   fsGroup: 
  8.     rule: RunAsAny 
  9.   allowedCapabilities: 
  10.   - DAC_READ_SEARCH 
  11.   - SYS_RESOURCE 
  12.   runAsUser: 
  13.     rule: RunAsAny 
  14.   seLinux: 
  15.     rule: RunAsAny 
  16.   supplementalGroups: 
  17.     rule: RunAsAny 
  18.   volumes: 
  19.   - configMap 
  20.   - downwardAPI 
  21.   - emptyDir 
  22.   - persistentVolumeClaim 
  23.   - secret 
  24.   - hostPath 

使用名稱 psp.yaml 保存此文件并使用以下命令創建:

  1. kubectl create -f psp.yaml 

創建和初始化 NFS 服務器

現在 operator 正在運行,我們可以通過創建 nfsservers.nfs.rook.io 資源的實例來創建 NFS 服務器的實例。NFS server resource 的各種字段和選項可用于配置要導出的服務器及其卷。

在我們創建 NFS Server 之前,我們需要創建 ServiceAccount 和 RBAC 規則

  1. --- 
  2. apiVersion: v1 
  3. kind: Namespace 
  4. metadata: 
  5.   name:  rook-nfs 
  6. --- 
  7. apiVersion: v1 
  8. kind: ServiceAccount 
  9. metadata: 
  10.   name: rook-nfs-server 
  11.   namespace: rook-nfs 
  12. --- 
  13. kind: ClusterRole 
  14. apiVersion: rbac.authorization.k8s.io/v1 
  15. metadata: 
  16.   name: rook-nfs-provisioner-runner 
  17. rules: 
  18.   - apiGroups: [""
  19.     resources: ["persistentvolumes"
  20.     verbs: ["get""list""watch""create""delete"
  21.   - apiGroups: [""
  22.     resources: ["persistentvolumeclaims"
  23.     verbs: ["get""list""watch""update"
  24.   - apiGroups: ["storage.k8s.io"
  25.     resources: ["storageclasses"
  26.     verbs: ["get""list""watch"
  27.   - apiGroups: [""
  28.     resources: ["events"
  29.     verbs: ["create""update""patch"
  30.   - apiGroups: [""
  31.     resources: ["services""endpoints"
  32.     verbs: ["get"
  33.   - apiGroups: ["policy"
  34.     resources: ["podsecuritypolicies"
  35.     resourceNames: ["rook-nfs-policy"
  36.     verbs: ["use"
  37.   - apiGroups: [""
  38.     resources: ["endpoints"
  39.     verbs: ["get""list""watch""create""update""patch"
  40.   - apiGroups: 
  41.     - nfs.rook.io 
  42.     resources: 
  43.     - "*" 
  44.     verbs: 
  45.     - "*" 
  46. --- 
  47. kind: ClusterRoleBinding 
  48. apiVersion: rbac.authorization.k8s.io/v1 
  49. metadata: 
  50.   name: rook-nfs-provisioner-runner 
  51. subjects: 
  52.   - kind: ServiceAccount 
  53.     name: rook-nfs-server 
  54.      # replace with namespace where provisioner is deployed 
  55.     namespace: rook-nfs 
  56. roleRef: 
  57.   kind: ClusterRole 
  58.   name: rook-nfs-provisioner-runner 
  59.   apiGroup: rbac.authorization.k8s.io 

使用名稱 rbac.yaml 保存此文件并使用以下命令創建:

  1. kubectl create -f rbac.yaml 

本指南有 3 個主要示例,用于演示使用 NFS 服務器導出卷(exporting volumes):

  • 默認 StorageClass 示例
  • XFS StorageClass 示例
  • Rook Ceph volume 示例

默認 StorageClass 示例

第一個示例將逐步創建一個 NFS server 實例,該實例導出由您碰巧運行的環境的默認 StorageClass 支持的存儲。在某些環境中,這可能是主機路徑(host path),在其他環境中,它可能是云提供商虛擬磁盤(cloud provider virtual disk)。無論哪種方式,此示例都需要存在默認的 StorageClass。

首先將以下 NFS CRD 實例定義保存到名為 nfs.yaml 的文件中:

  1. --- 
  2. # A default storageclass must be present 
  3. apiVersion: v1 
  4. kind: PersistentVolumeClaim 
  5. metadata: 
  6.   name: nfs-default-claim 
  7.   namespace: rook-nfs 
  8. spec: 
  9.   accessModes: 
  10.   - ReadWriteMany 
  11.   resources: 
  12.     requests: 
  13.       storage: 1Gi 
  14. --- 
  15. apiVersion: nfs.rook.io/v1alpha1 
  16. kind: NFSServer 
  17. metadata: 
  18.   name: rook-nfs 
  19.   namespace: rook-nfs 
  20. spec: 
  21.   replicas: 1 
  22.   exports: 
  23.   - name: share1 
  24.     server: 
  25.       accessMode: ReadWrite 
  26.       squash: "none" 
  27.     # A Persistent Volume Claim must be created before creating NFS CRD instance. 
  28.     persistentVolumeClaim: 
  29.       claimName: nfs-default-claim 
  30.   # A key/value list of annotations 
  31.   annotations: 
  32.     rook: nfs 

保存了 nfs.yaml 文件后,現在創建 NFS server,如下所示:

  1. kubectl create -f nfs.yaml 

XFS StorageClass 示例

Rook NFS 通過 xfs_quota 支持磁盤配額。因此,如果您需要為卷指定磁盤配額,則可以按照此示例進行操作。

在這個例子中,我們將使用一個帶有 prjquota 選項的作為 xfs 掛載的底層卷。在創建底層卷(underlying volume)之前,您需要使用 xfs 文件系統和 prjquota mountOptions 創建 StorageClass。Kubernetes 的許多分布式存儲提供商都支持 xfs 文件系統。通常通過在 storageClass 參數中定義 fsType: xfs 或 fs: xfs。但實際上如何指定 storage-class 文件系統類型取決于它自己的存儲提供者。您可以查看 https://kubernetes.io/docs/concepts/storage/storage-classes/ 了解更多詳情。

這是 GCE PD 和 AWS EBS 的示例 StorageClass

  • GCE PD
  1. apiVersion: storage.k8s.io/v1 
  2. kind: StorageClass 
  3. metadata: 
  4.   name: standard-xfs 
  5. parameters: 
  6.   type: pd-standard 
  7.   fsType: xfs 
  8. mountOptions: 
  9.   - prjquota 
  10. provisioner: kubernetes.io/gce-pd 
  11. reclaimPolicy: Delete 
  12. volumeBindingMode: Immediate 
  13. allowVolumeExpansion: true 
  • AWS EBS
  1. apiVersion: storage.k8s.io/v1 
  2. kind: StorageClass 
  3. metadata: 
  4.   name: standard-xfs 
  5. provisioner: kubernetes.io/aws-ebs 
  6. parameters: 
  7.   type: io1 
  8.   iopsPerGB: "10" 
  9.   fsType: xfs 
  10. mountOptions: 
  11.   - prjquota 
  12. reclaimPolicy: Delete 
  13. volumeBindingMode: Immediate 

一旦您已經擁有帶有 xfs 文件系統和 prjquota mountOptions 的 StorageClass,您就可以使用以下示例創建 NFS server 實例。

  1. --- 
  2. # A storage class with name standard-xfs must be present. 
  3. # The storage class must be has xfs filesystem type  and prjquota mountOptions. 
  4. apiVersion: v1 
  5. kind: PersistentVolumeClaim 
  6. metadata: 
  7.   name: nfs-xfs-claim 
  8.   namespace: rook-nfs 
  9. spec: 
  10.   storageClassName: "standard-xfs" 
  11.   accessModes: 
  12.   - ReadWriteOnce 
  13.   resources: 
  14.     requests: 
  15.       storage: 1Gi 
  16. --- 
  17. apiVersion: nfs.rook.io/v1alpha1 
  18. kind: NFSServer 
  19. metadata: 
  20.   name: rook-nfs 
  21.   namespace: rook-nfs 
  22. spec: 
  23.   replicas: 1 
  24.   exports: 
  25.   - name: share1 
  26.     server: 
  27.       accessMode: ReadWrite 
  28.       squash: "none" 
  29.     # A Persistent Volume Claim must be created before creating NFS CRD instance. 
  30.     persistentVolumeClaim: 
  31.       claimName: nfs-xfs-claim 
  32.   # A key/value list of annotations 
  33.   annotations: 
  34.     rook: nfs 

將此 PVC 和 NFS Server 實例保存為 nfs-xfs.yaml 并使用以下命令創建。

  1. kubectl create -f nfs-xfs.yaml 

Rook Ceph volume 示例

在這個替代示例中,我們將使用不同的基礎卷(underlying volume)作為 NFS server 的 export。這些步驟將引導我們導出 Ceph RBD block volume,以便客戶端可以通過網絡訪問它。

在 Rook Ceph 集群啟動并運行后,我們可以繼續創建 NFS server。

將此 PVC 和 NFS 服務器實例保存為 nfs-ceph.yaml:

  1. --- 
  2. # A rook ceph cluster must be running 
  3. Create a rook ceph cluster using examples in rook/cluster/examples/kubernetes/ceph 
  4. # Refer to https://rook.io/docs/rook/master/ceph-quickstart.html for a quick rook cluster setup 
  5. apiVersion: v1 
  6. kind: PersistentVolumeClaim 
  7. metadata: 
  8.   name: nfs-ceph-claim 
  9.   namespace: rook-nfs 
  10. spec: 
  11.   storageClassName: rook-ceph-block 
  12.   accessModes: 
  13.   - ReadWriteMany 
  14.   resources: 
  15.     requests: 
  16.       storage: 2Gi 
  17. --- 
  18. apiVersion: nfs.rook.io/v1alpha1 
  19. kind: NFSServer 
  20. metadata: 
  21.   name: rook-nfs 
  22.   namespace: rook-nfs 
  23. spec: 
  24.   replicas: 1 
  25.   exports: 
  26.   - name: share1 
  27.     server: 
  28.       accessMode: ReadWrite 
  29.       squash: "none" 
  30.     # A Persistent Volume Claim must be created before creating NFS CRD instance. 
  31.     # Create a Ceph cluster for using this example 
  32.     # Create a ceph PVC after creating the rook ceph cluster using ceph-pvc.yaml 
  33.     persistentVolumeClaim: 
  34.       claimName: nfs-ceph-claim 
  35.   # A key/value list of annotations 
  36.   annotations: 
  37.     rook: nfs 

創建您保存在 nfs-ceph.yaml 中的 NFS server 實例:

  1. kubectl create -f nfs-ceph.yaml 

驗證 NFS Server

我們可以使用以下命令驗證是否已創建代表我們的新 NFS server 及其導出的 Kubernetes 對象。

  1. kubectl -n rook-nfs get nfsservers.nfs.rook.io 
  1. NAME       AGE   STATE 
  2. rook-nfs   32s   Running 

驗證 NFS server pod 是否已啟動并正在運行:

  1. kubectl -n rook-nfs get pod -l app=rook-nfs 
  1. NAME         READY     STATUS    RESTARTS   AGE 
  2. rook-nfs-0   1/1       Running   0          2m 

如果 NFS server pod 處于 Running 狀態,那么我們已經成功創建了一個暴露的 NFS 共享,客戶端可以開始通過網絡訪問。

訪問 Export

從 Rook 版本 v1.0 開始,Rook 支持 NFS 的動態配置(dynamic provisioning)。此示例將展示如何將動態配置功能用于 nfs。

部署 NFS Operator 和 NFSServer 實例后。必須創建類似于以下示例的 storageclass 來動態配置卷。

  1. apiVersion: storage.k8s.io/v1 
  2. kind: StorageClass 
  3. metadata: 
  4.   labels: 
  5.     app: rook-nfs 
  6.   name: rook-nfs-share1 
  7. parameters: 
  8.   exportName: share1 
  9.   nfsServerName: rook-nfs 
  10.   nfsServerNamespace: rook-nfs 
  11. provisioner: nfs.rook.io/rook-nfs-provisioner 
  12. reclaimPolicy: Delete 
  13. volumeBindingMode: Immediate 

您可以將其另存為文件,例如:名為 sc.yaml 然后使用以下命令創建 storageclass。

  1. kubectl create -f sc.yaml 

注意:StorageClass 需要傳遞以下 3 個參數。

  • exportName: 它告訴供應商(provisioner)使用哪個導出來供應卷。
  • nfsServerName: 它是 NFSServer 實例的名稱。
  • nfsServerNamespace: NFSServer 實例運行所在的命名空間。

創建上述 storageclass 后,您可以創建引用 storageclass 的 PV claim,如下面給出的示例所示。

  1. apiVersion: v1 
  2. kind: PersistentVolumeClaim 
  3. metadata: 
  4.   name: rook-nfs-pv-claim 
  5. spec: 
  6.   storageClassName: "rook-nfs-share1" 
  7.   accessModes: 
  8.     - ReadWriteMany 
  9.   resources: 
  10.     requests: 
  11.       storage: 1Mi 

您也可以將其保存為文件,例如:名為 pvc.yaml 然后使用以下命令創建 PV claim。

  1. kubectl create -f pvc.yaml 

消費 Export

現在我們可以通過創建一個示例 web server app 來使用剛剛創建的 PV, 該應用程序使用上述 PersistentVolumeClaim 聲明導出的卷。有 2 個 pod 構成此示例:

將讀取和顯示 NFS 共享內容的 Web server pod

將隨機數據寫入 NFS 共享的 writer pod,以便網站不斷更新

從 cluster/examples/kubernetes/nfs 文件夾啟動 busybox pod(writer)和 web server:

  1. kubectl create -f busybox-rc.yaml 
  2. kubectl create -f web-rc.yaml 

讓我們確認預期的 busybox writer pod 和 Web server pod 都已啟動并處于 Running 狀態:

  1. kubectl get pod -l app=nfs-demo 

為了能夠通過網絡訪問 Web server,讓我們為它創建一個 service:

  1. kubectl create -f web-service.yaml 

然后我們可以使用我們之前啟動的 busybox writer pod 來檢查 nginx 是否正確地提供數據。在下面的 1-liner 命令中,我們使用 kubectl exec 在 busybox writer pod 中運行一個命令, 該命令使用 wget 檢索 web server pod 托管的 web page。隨著 busybox writer pod 繼續寫入新的時間戳,我們應該會看到返回的輸出也每大約 10 秒更新一次。

  1. $ echo; kubectl exec $(kubectl get pod -l app=nfs-demo,role=busybox -o jsonpath='{.items[0].metadata.name}'-- wget -qO- http://$(kubectl get services nfs-web -o jsonpath='{.spec.clusterIP}'); echo 
  1. Thu Oct 22 19:28:55 UTC 2015 
  2. nfs-busybox-w3s4t 

清理銷毀

要清理與此演練相關的所有資源,您可以運行以下命令。

  1. kubectl delete -f web-service.yaml 
  2. kubectl delete -f web-rc.yaml 
  3. kubectl delete -f busybox-rc.yaml 
  4. kubectl delete -f pvc.yaml 
  5. kubectl delete -f pv.yaml 
  6. kubectl delete -f nfs.yaml 
  7. kubectl delete -f nfs-xfs.yaml 
  8. kubectl delete -f nfs-ceph.yaml 
  9. kubectl delete -f rbac.yaml 
  10. kubectl delete -f psp.yaml 
  11. kubectl delete -f scc.yaml # if deployed 
  12. kubectl delete -f operator.yaml 
  13. kubectl delete -f webhook.yaml # if deployed 
  14. kubectl delete -f common.yaml 

故障排除

如果 NFS server pod 沒有出現,第一步是檢查 NFS operator 的日志:

  1. kubectl -n rook-nfs-system logs -l app=rook-nfs-operator 

 

責任編輯:武曉燕 來源: 黑客下午茶
相關推薦

2022-11-29 19:43:05

云原生工具

2022-06-09 11:52:40

KubernetesOpenEBSLinux

2024-05-06 07:39:30

CubeFS云原生存儲平臺

2022-02-23 20:38:32

云原生集群Postgres

2022-01-11 13:36:58

鵬云云原生存儲

2009-09-25 10:24:40

Androind入門教OPhone

2022-09-20 07:36:43

云原生存儲方案

2014-06-04 10:42:34

Swift蘋果iOS

2019-05-17 15:25:59

云原生服務架構存儲

2020-11-25 19:05:50

云計算SaaS公有云

2018-04-24 09:17:15

容器原生存儲

2021-10-19 10:52:06

Serverless阿里云

2011-07-26 13:58:17

LINQ

2021-07-06 07:46:16

KubernetesRook存儲

2024-03-15 08:18:05

Shelve模塊Python工具

2016-09-20 09:18:29

存儲

2022-08-19 07:13:45

SQL方法編程

2013-11-19 12:53:33

OA信息化

2021-12-10 08:13:02

MatplotlibpythonAPI

2022-08-21 07:17:16

LinkerdKubernetes服務網格
點贊
收藏

51CTO技術棧公眾號

9.1片黄在线观看| 国模吧一区二区三区| 欧美亚洲国产成人| 久久精品a一级国产免视看成人 | 日韩制服一区| 最新不卡av在线| 国产欧美日韩伦理| 日韩不卡高清视频| 欧美高清不卡| 亚洲欧美日韩爽爽影院| 中文字幕日韩综合| 97超碰在线免费| 国产精品萝li| 精品国产日本| 国产露脸国语对白在线| 国产午夜精品一区二区三区欧美| 中文国产成人精品久久一| 黄色录像特级片| 无码国产精品高潮久久99| 美国十次了思思久久精品导航 | 日韩视频免费观看高清完整版 | xxxx日本黄色| 91在线一区| 欧美日韩一区二区欧美激情| 熟女少妇在线视频播放| www.久久久久.com| 国产蜜臀97一区二区三区| 成人欧美一区二区三区视频| 91n在线视频| 欧美调教网站| 日韩欧美一级在线播放| 国产理论在线播放| 在线观看网站免费入口在线观看国内| 亚洲人成网站色在线观看| 日韩精品伦理第一区| 三级在线观看网站| 国产成人在线免费| 91在线色戒在线| 欧美精品一级片| 色综合咪咪久久网| 亚洲天堂av图片| 亚洲蜜桃精久久久久久久久久久久| 亚瑟国产精品| 欧美视频在线观看一区二区| 波多野结衣家庭教师视频| 免费看电影在线| 亚洲精品高清视频在线观看| 天天操天天干天天玩| 色网站免费在线观看| 国产欧美精品在线观看| 欧美日韩亚洲免费| 飘雪影视在线观看免费观看 | 日本黄色网址大全| 国产精品网站在线看| 欧美日韩国产综合草草| 可以在线看黄的网站| 婷婷视频在线| 国产精品久久国产精麻豆99网站| 亚洲成人18| 69xxxx欧美| 国产精品久久久久久久久果冻传媒| 日韩欧美在线观看强乱免费| 欧美美乳在线| 久久欧美一区二区| 免费毛片一区二区三区久久久| 五月激情丁香婷婷| 26uuu精品一区二区在线观看| 国产一区二区高清视频| 亚洲色图欧美视频| 91蜜桃免费观看视频| 麻豆成人小视频| 丁香婷婷在线| 亚洲视频你懂的| 久久99久久99精品| 亚洲日本天堂| 欧美日韩在线观看一区二区 | 丝袜美腿亚洲一区二区| 影音先锋男人资源在线观看| 一区二区免费不卡在线| 欧美—级高清免费播放| 久草手机在线观看| 日本欧美在线观看| 亚洲一区二区三区视频| 四虎永久在线观看| 欧美激情一区二区三区蜜桃视频| 中文字幕免费高| 国产精品探花在线| 色婷婷亚洲精品| 不用播放器的免费av| 97久久超碰| 国产一区二区三区在线看| 欧美视频一区二区在线| 欧美视频福利| 国产成人在线精品| 日韩人妻无码一区二区三区99| 亚洲激情在线| 国产精品18久久久久久麻辣| 在线播放一级片| 成人免费黄色在线| 欧美日韩综合久久| 日本动漫同人动漫在线观看| 性感美女极品91精品| 亚洲一区二区三区四区五区xx| 欧美天堂在线| 亚洲国产日产av| 日本福利视频在线| 欧美97人人模人人爽人人喊视频| 欧美一级一区二区| 国产91丝袜美女在线播放| 亚洲一区在线| 91高潮在线观看| 中文字幕在线网址| 久久一区精品| 欧美激情高清视频| 一级黄色大片视频| 国产资源在线一区| 久久综合九九| 国产一区久久精品| 亚洲国产乱码最新视频| 中文字幕22页| 偷拍视屏一区| 日韩欧美中文字幕公布| 欧美熟妇一区二区| 一区二区不卡| 国产精品视频一| 色婷婷av一区二区三| 亚洲欧美日韩国产综合| 情侣黄网站免费看| 一区二区视频| 日韩综合中文字幕| 日本高清www免费视频| 经典一区二区三区| 欧美日韩成人一区二区三区| 黄色网页在线免费看| 欧洲国内综合视频| av无码一区二区三区| 中文字幕乱码亚洲无线精品一区 | 日韩av中文字幕一区二区三区| 91精品久久久久久综合乱菊| 电影在线高清| 日本精品视频一区二区三区| 在线观看免费视频黄| 性欧美欧美巨大69| 国产精品直播网红| 日本一卡二卡四卡精品| 福利一区视频在线观看| 成年人小视频在线观看| 亚洲乱码电影| 91精品视频播放| 免费毛片在线| 香港成人在线视频| 亚洲天堂小视频| 精品一区二区三区视频在线播放 | 亚洲av成人片色在线观看高潮| 国产精品久久久久9999赢消| 国产欧美日韩丝袜精品一区| av资源网站在线观看| 色哟哟日韩精品| 在线 丝袜 欧美 日韩 制服| 影音先锋在线一区| 国产精品久久精品视| 性欧美videos高清hd4k| 91麻豆精品国产91久久久久| 亚洲 欧美 国产 另类| 久久精品国产亚洲a| 亚洲国内在线| 精品国产18久久久久久二百| 久久人体大胆视频| 国产精品丝袜黑色高跟鞋| 亚洲欧洲在线观看av| 91精产国品一二三产区别沈先生| 精品大片一区二区| 国产免费一区视频观看免费| 欧美日韩在线资源| 在线成人免费观看| 欧美被狂躁喷白浆精品| 成人一区二区三区视频在线观看| 国产一二三区在线播放| 无码少妇一区二区三区| 日韩av高清不卡| www.91在线| 91精品国产91久久久久久一区二区| 美国黄色小视频| 国产综合成人久久大片91| 欧美视频在线第一页| 久久午夜影院| 少妇av一区二区三区| 国产又粗又长视频| 亚洲午夜电影在线| 影音先锋黄色资源| 欧美成人milf| 91中文在线视频| 美洲精品一卡2卡三卡4卡四卡| 欧美精品一区二| 毛片毛片女人毛片毛片| 中文字幕第一区二区| 欧美 日韩 国产一区| 精品国产一区二区三区| 成人福利在线观看| 国产在线xxx| 亚洲欧美中文日韩v在线观看| 伊人免费在线观看| 亚洲黄一区二区三区| free性中国hd国语露脸| 麻豆传媒一区二区三区| 嫩草影院中文字幕| 亚洲人成网77777色在线播放| 亚洲999一在线观看www| 牛牛精品一区二区| 久久99精品久久久久久青青91| 在线观看xxx| 日韩欧美成人激情| 亚洲欧美日韩激情| 亚洲国产一区二区三区| 朝桐光av一区二区三区| 国产一区二区三区在线看麻豆| 一二三四视频社区在线| 第一会所亚洲原创| 国产免费一区二区| 欧美一级做一级爱a做片性| 欧美丰满少妇xxxxx做受| 日p在线观看| 国产丝袜精品第一页| 国产aⅴ爽av久久久久成人| 一本色道a无线码一区v| 久久久久久久久久网站| 久久精品视频在线看| 特种兵之深入敌后| 蜜臀久久99精品久久久久宅男| 每日在线观看av| 玖玖精品一区| 国产精品a久久久久久| 黄页视频在线播放| 神马久久久久久| 日本中文字幕一区二区有码在线| 欧美一区二区女人| 一区二区三区精| 欧美亚洲高清一区| 一级黄色免费网站| 亚洲一二三四在线观看| 自拍偷拍中文字幕| 久久这里只精品最新地址| 日韩精品――色哟哟| 精品亚洲成a人在线观看| 免费观看日韩毛片| 国产精品theporn| 人妻互换免费中文字幕| 综合国产在线| 中文字幕中文字幕99| 成人羞羞动漫| 精品乱码一区| 伊人久久大香线蕉| 精品国产乱码久久久久软件 | 色噜噜狠狠狠综合曰曰曰| 免费在线黄色影片| 亚洲开心激情网| 天堂在线免费av| 一本久久综合亚洲鲁鲁五月天| 青娱乐av在线| 亚洲精品视频在线| 精品少妇一二三区| 亚洲国产精品久久一线不卡| 日韩欧美不卡视频| 亚洲图片欧美一区| 波多野结衣视频网站| 懂色av中文一区二区三区天美| 日本在线视频免费| 精品国产福利视频| 少妇又紧又色又爽又刺激视频| 欧洲av在线精品| 亚洲网站免费观看| 欧美猛男男办公室激情| 国产浮力第一页| 亚洲国产精品久久精品怡红院 | 国产经典久久久| 日本黄色免费在线| 97碰在线观看| ****av在线网毛片| 国产国产精品人在线视| 欧美日韩亚洲国产| 日本伊人精品一区二区三区介绍| 国产不卡网站| xxx一区二区| 国产中文在线视频| 久久久精品国产网站| 久久久123| 日本久久久久久久久久久| 精品无人乱码一区二区三区 | 麻豆成人免费电影| 99国产精品久久久久久| 成a人片亚洲日本久久| 国产特级黄色录像| 国产精品视频你懂的| xxxx日本少妇| 亚洲一级二级三级在线免费观看| 午夜婷婷在线观看| 欧美视频一二三区| 性做久久久久久久久久| 亚洲精品中文字幕有码专区| 免费在线毛片| 欧美激情网友自拍| 久九九久频精品短视频| 国产热re99久久6国产精品| 影音先锋欧美激情| 亚洲日本japanese丝袜| 欧美精品啪啪| 日日碰狠狠丁香久燥| 国产精品一区二区x88av| 欧美中文字幕精品| 久久久久久久久久久影院| 在线成人小视频| 亚洲AV第二区国产精品| 大胆欧美人体视频| 免费成人在线电影| 99国产在线| 精品免费av一区二区三区| 成人精品久久一区二区三区| 女同久久另类99精品国产 | 极品束缚调教一区二区网站| 日本不卡二区| 激情久久婷婷| 色91精品久久久久久久久| 91在线视频免费观看| 美国美女黄色片| 欧美性猛交xxxx免费看| 成人毛片视频免费看| 中文字幕在线看视频国产欧美| av电影免费在线看| 亚洲综合中文字幕在线观看| 国产精品一区二区三区av麻| 免费国产一区二区| 亚洲综合自拍| 国产高清视频网站| 97久久精品人人爽人人爽蜜臀| 免费黄色激情视频| 在线观看亚洲精品视频| 日韩在线无毛| 欧美激情小视频| 天天综合网站| 欧洲在线视频一区| 亚洲第一毛片| gogo亚洲国模私拍人体| 中文一区二区完整视频在线观看| 精品人妻一区二区三区潮喷在线| 亚洲国产欧美在线成人app| 国产精品一卡二卡三卡| 日韩av免费网站| 九九热线有精品视频99| 久久婷婷五月综合色国产香蕉| 成人晚上爱看视频| 999精品在线视频| 欧美一区二区三区男人的天堂| 9色在线视频网站| 国产精品久久视频| 亚洲都市激情| 日本成人中文字幕在线| 久久久综合网站| 男人日女人网站| 亚洲国产精品人久久电影| 成人观看网址| 精品国产一区二区三区四区精华| 亚洲网址在线| 欧美性受xxxxxx黑人xyx性爽| 亚洲男女一区二区三区| 一级aaaa毛片| 久久精彩免费视频| 成人1区2区| 国产女主播av| 成人免费视频一区| 日韩精品一区二区亚洲av| 亚洲欧洲日产国产网站| 欧洲亚洲精品| 四虎免费在线观看视频| 国产一区二区三区日韩| 久草综合在线视频| 精品成人私密视频| 国模私拍一区二区国模曼安| 色一情一乱一伦一区二区三欧美| 青青草国产成人99久久| 三上悠亚在线观看视频| 91精品欧美综合在线观看最新| 99自拍视频在线观看| 97超碰在线播放| av成人黄色| 欧美大尺度做爰床戏| 国产精品婷婷午夜在线观看| 午夜精品小视频| 国产69精品久久久久9999| 国产成人ay| 三级网站免费看| 红桃av永久久久| 国产对白叫床清晰在线播放| 国产精品免费一区二区三区都可以 | 久久久视频免费观看| 久久综合亚洲| 午夜免费看毛片| 天天亚洲美女在线视频| 在线观看完整版免费| 99re视频在线| 激情丁香综合|