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

從Helm到 Operator:Kubernetes應用管理的進化

云計算 云原生
helm 的本質上和 kubectl apply yaml 一樣的,只是我們在定義 value.yaml 時幫我們處理了許多不需要用戶低頻修改的參數。

Helm 的作用

在開始前需要先對 kubernetes  Operator 有個簡單的認識。

以為我們在編寫部署一些簡單 Deployment 的時候只需要自己編寫一個 yaml 文件然后 kubectl apply 即可。

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  labels:  
    app: k8s-combat  
  name: k8s-combat  
spec:  
  replicas: 1  
  selector:  
    matchLabels:  
      app: k8s-combat  
  template:  
    metadata:  
      labels:  
        app: k8s-combat  
    spec:  
      containers:  
        - name: k8s-combat  
          image: crossoverjie/k8s-combat:v1  
          imagePullPolicy: Always  
          resources:  
            limits:  
              cpu: "1"  
              memory: 300Mi  
            requests:  
              cpu: "0.1"  
              memory: 30Mi
kubectl apply -f deployment.yaml

這對于一些并不復雜的項目來說完全夠用了,但組件一多就比較麻煩了。

這里以 Apache Pulsar 為例:它的核心組件有:

  • Broker
  • Proxy
  • Zookeeper
  • Bookkeeper
  • Prometheus(可選)
  • Grafana(可選) 等組件,每個組件的啟動還有這依賴關系。

必須需要等 Zookeeper 和 Bookkeeper 啟動之后才能將流量放進來。

此時如何還繼續使用 yaml 文件一個個部署就會非常繁瑣,好在社區有提供 Helm 一鍵安裝程序,使用它我們只需要在一個同意的 yaml 里簡單的配置一些組件,配置就可以由 helm 來部署整個復雜的 Pulsar 系統。

components:  
  # zookeeper  
  zookeeper: true  
  # bookkeeper  
  bookkeeper: true  
  # bookkeeper - autorecovery  
  autorecovery: true  
  # broker  
  broker: true  
  # functions  
  functions: false  
  # proxy  
  proxy: true  
  # toolset  
  toolset: true  
  # pulsar manager  
  pulsar_manager: false  
monitoring:  
  # monitoring - prometheus  
  prometheus: true  
  # monitoring - grafana  
  grafana: true  
  # monitoring - node_exporter  
  node_exporter: true  
  # alerting - alert-manager  
  alert_manager: false

比如在 helm 的 yaml 中我們可以選擇使用哪些 components,以及是否啟用監控組件。

最后直接使用這個文件進行安裝:

helm install pulsar apache/pulsar \
 --values charts/pulsar/values.yaml \
 --set namespace=pulsar \
    --set initialize=true

它就會自動生成各個組件的 yaml 文件,然后統一執行。

所以 helm 的本質上和 kubectl apply yaml 一樣的,只是我們在定義 value.yaml 時幫我們處理了許多不需要用戶低頻修改的參數。

我們可以使用 helm 將要執行的 yaml 輸出后人工審核

helm install pulsar apache/pulsar --dry-run --debug > debug.yaml

Operator 是什么

Helm 的痛點

Helm 雖然可以幫我們部署或者升級一個大型應用,但他卻沒法幫我們運維這個應用。

舉個例子:比如我希望當 Pulsar Broker 的流量或者內存達到某個閾值后就指定擴容 Broker,閑時再自動回收。

或者某個 Bookkeeper 的磁盤使用率達到閾值后可以自動擴容磁盤,這些僅僅使用 Helm 時都是無法實現的。

以上這些需求我們目前也是通過監控系統發出報警,然后再由人工處理。

其中最大的痛點就是進行升級:

  • 升級ZK
  • 關閉auto recovery
  • 升級Bookkeeper
  • 升級Broker
  • 升級Proxy
  • 開啟auto recovery

因為每次升級是有先后順序的,需要依次觀察每個組件運行是否正常才能往后操作。

如果有 Operator 理性情況下下我們只需要更新一下鏡像版本,它就可以自動執行以上的所有步驟最后將集群升級完畢。

所以相對于 Helm 來說 Operator 是可以站在一個更高的視角俯視整個應用系統,它能發現系統哪個地方需要它從而直接修復。

CRD(Custom Resource Definitions)

而提到 Operator 那就不得不提到 CRD(Custom Resource Definitions)翻譯過來就是自定義資源。

這是 kubernetes 提供的一個 API 擴展機制,類似于內置的 Deployment/StatefulSet/Services 資源,CRD 是一種自定義的資源。

這里以我們常用的 prometheus-operator 和 VictoriaMetrics-operator 為例:

Prometheus:

  • **Prometheus**:用于定義 Prometheus 的 Deployment
  • **Alertmanager**:用于定義 Alertmanager
  • **ScrapeConfig**:用于定會抓取規則
apiVersion: monitoring.coreos.com/v1alpha1
kind: ScrapeConfig
metadata:
  name: static-config
  namespace: my-namespace
  labels:
    prometheus: system-monitoring-prometheus
spec:
  staticConfigs:
    - labels:
        job: prometheus
      targets:
        - prometheus.demo.do.prometheus.io:9090

使用時的一個很大區別就是資源的 kind: ScrapeConfig 為自定義的類型。

VictoriaMetrics 的 CRD:

  • VMPodScrape:Pod 的抓取規則
  • VMCluster:配置 VM 集群
  • VMAlert:配置 VM 的告警規則
  • 等等
# vmcluster.yaml
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMCluster
metadata:
  name: demo
spec:
  retentionPeriod: "1"
  replicationFactor: 2
  vmstorage:
    replicaCount: 2
    storageDataPath: "/vm-data"
    storage:
      volumeClaimTemplate:
        spec:
          resources:
            requests:
              storage: "10Gi"
    resources:
      limits:
        cpu: "1"
        memory: "1Gi"
  vmselect:
    replicaCount: 2
    cacheMountPath: "/select-cache"
    storage:
      volumeClaimTemplate:
        spec:
          resources:
            requests:
              storage: "1Gi"
    resources:
      limits:
        cpu: "1"
        memory: "1Gi"
      requests:
        cpu: "0.5"
        memory: "500Mi"
  vminsert:
    replicaCount: 2

以上是用于創建一個 VM 集群的 CRD 資源,應用之后就會自動創建一個集群。

Operator 原理

Operator 通常是運行在 kubernetes API server 的 webhook 之上,簡單來說就是在一些內置資源的關鍵節點 API-server 會調用我們注冊的一個 webhook,在這個 webhook 中我們根據我們的 CRD 做一些自定義的操作。

理論上我們可以使用任何語言都可以寫 Operator,只需要能處理 api-server 的回調即可。

只是 Go 語言有很多成熟的工具,比如常用的 kubebuilder 和 operator-sdk.

他們內置了許多命令行工具,可以幫我們節省需要工作量。

這里以 operator-sdk 為例:

$ operator-sdk create webhook --group cache --version v1alpha1 --kind Memcached --defaulting --programmatic-validation

會直接幫我們創建好一個標準的 operator 項目:

├── Dockerfile
├── Makefile
├── PROJECT
├── api
│   └── v1alpha1
│       ├── memcached_webhook.go
│       ├── webhook_suite_test.go
├── config
│   ├── certmanager
│   │   ├── certificate.yaml
│   │   ├── kustomization.yaml
│   │   └── kustomizeconfig.yaml
│   ├── default
│   │   ├── manager_webhook_patch.yaml
│   │   └── webhookcainjection_patch.yaml
│   └── webhook
│       ├── kustomization.yaml
│       ├── kustomizeconfig.yaml
│       └── service.yaml
├── go.mod
├── go.sum
└── main.go

其中 Makefile 中包含了開發過程中常用的工具鏈(包括根據聲明的結構體自動生成 CRD 資源、部署k8s 環境測試等等)、Dockerfile 等等。

這樣我們就只需要專注于開發業務邏輯即可。

因為我前段時間給 https://github.com/open-telemetry/opentelemetry-operator 貢獻過兩個 feature,所以就以這個 Operator 為例:

它有一個 CRD: kind: Instrumentation,在這個 CRD 中可以將 OpenTelemetry 的 agent 注入到應用中。

apiVersion: opentelemetry.io/v1alpha1  
kind: Instrumentation  
metadata:  
  name: instrumentation-test-order
  namespace: test  
spec:  
  env:  
    - name: OTEL_SERVICE_NAME  
      value: order
  selector:  
    matchLabels:  
      app: order  
  java:  
    image: autoinstrumentation-java:2.4.0-release  
    extensions:  
      - image: autoinstrumentation-java:2.4.0-release  
        dir: /extensions  
  
    env:  
      - name: OTEL_RESOURCE_ATTRIBUTES  
        value: service.name=order  
      - name: OTEL_INSTRUMENTATION_MESSAGING_EXPERIMENTAL_RECEIVE_TELEMETRY_ENABLED  
        value: "true"  
      - name: OTEL_TRACES_EXPORTER  
        value: otlp  
      - name: OTEL_METRICS_EXPORTER  
        value: otlp  
      - name: OTEL_LOGS_EXPORTER  
        value: none  
      - name: OTEL_EXPORTER_OTLP_ENDPOINT  
        value: http://open-telemetry-opentelemetry-collector.otel.svc.cluster.local:4317  
      - name: OTEL_EXPORTER_OTLP_COMPRESSION  
        value: gzip  
      - name: OTEL_EXPERIMENTAL_EXPORTER_OTLP_RETRY_ENABLED  
        value: "true"

它的運行規則是當我們的 Pod 在啟動過程中會判斷 Pod 的注解中是否開啟了注入 OpenTelemetry 的配置。

如果開啟則會將我們在 CRD 中自定義的鏡像里的 javaagent 復制到業務容器中,同時會將下面的那些環境變量也一起加入的業務容器中。

要達到這樣的效果就需要我們注冊一個回調 endpoint。

mgr.GetWebhookServer().Register("/mutate-v1-pod", &webhook.Admission{  
    Handler: podmutation.NewWebhookHandler(cfg, ctrl.Log.WithName("pod-webhook"), decoder, mgr.GetClient(),  
       []podmutation.PodMutator{  
          sidecar.NewMutator(logger, cfg, mgr.GetClient()),  
          instrumentation.NewMutator(logger, mgr.GetClient(), mgr.GetEventRecorderFor("opentelemetry-operator"), cfg),  
       }),})

當 Pod 創建或有新的變更請求時就會回調我們的接口。

func (pm *instPodMutator) Mutate(ctx context.Context, ns corev1.Namespace, pod corev1.Pod) (corev1.Pod, error) {  
    logger := pm.Logger.WithValues("namespace", pod.Namespace, "name", pod.Name)
    }

在這個接口中我們就可以拿到 Pod 的信息,然后再獲取 CRD Instrumentation 做我們的業務邏輯。

var otelInsts v1alpha1.InstrumentationList  
if err := pm.Client.List(ctx, &otelInsts, client.InNamespace(ns.Name)); err != nil {  
    return nil, err  
}


// 從 CRD 中將數據復制到業務容器中。
pod.Spec.InitContainers = append(pod.Spec.InitContainers, corev1.Container{
 Name:      javaInitContainerName,
 Image:     javaSpec.Image,
 Command:   []string{"cp", "/javaagent.jar", javaInstrMountPath + "/javaagent.jar"},
 Resources: javaSpec.Resources,
 VolumeMounts: []corev1.VolumeMount{{
  Name:      javaVolumeName,
  MountPath: javaInstrMountPath,
 }},
})

for i, extension := range javaSpec.Extensions {
 pod.Spec.InitContainers = append(pod.Spec.InitContainers, corev1.Container{
  Name:      initContainerName + fmt.Sprintf("-extension-%d", i),
  Image:     extension.Image,
  Command:   []string{"cp", "-r", extension.Dir + "/.", javaInstrMountPath + "/extensions"},
  Resources: javaSpec.Resources,
  VolumeMounts: []corev1.VolumeMount{{
   Name:      javaVolumeName,
   MountPath: javaInstrMountPath,
  }},
 })
}

不過需要注意的是想要在測試環境中測試 operator 是需要安裝一個 cert-manage,這樣 webhook 才能正常的回調。

要使得 CRD 生效,我們還得先將 CRD 安裝進 kubernetes 集群中,不過這些 operator-sdk 這類根據已經考慮周到了。

我們只需要定義好 CRD 的結構體:

然后使用 Makefile 中的工具 make bundle 就會自動將結構體轉換為 CRD。

參考鏈接:

  • https://github.com/VictoriaMetrics/operator。
  • https://github.com/prometheus-operator/prometheus-operator。
責任編輯:姜華 來源: crossoverJie
相關推薦

2024-03-05 10:34:33

KubernetesPod云原生

2013-04-17 11:18:11

編程語言

2023-05-06 08:00:00

KubernetesK8s數據服務自動化

2022-11-01 12:16:47

Nginx微服務編譯

2023-12-27 06:48:49

KubernetesDevOpsHTTP

2022-08-04 08:00:54

安全管理服務器

2024-01-29 01:15:11

HelmKubernetesKustomize

2024-01-01 21:57:41

kubernetesCRDOperator

2024-05-06 08:08:31

2025-04-29 10:00:00

Kubernete云原生Helm

2022-03-29 09:35:15

FirefoxUI瀏覽器

2023-11-10 15:05:08

Kubernetes云計算

2009-06-01 10:11:55

路由器DIR-685D-Link

2025-08-01 09:41:52

2020-12-03 14:03:29

中臺數智化架構

2025-09-12 16:13:12

2018-12-21 11:01:05

存儲大數據RAID

2019-09-02 13:57:07

Helm Chart工具Kubernetes

2023-10-09 08:14:10

Helm管理應用

2025-08-13 09:13:00

點贊
收藏

51CTO技術棧公眾號

国产精品国产三级国产专区51| 国产伦精品免费视频| 国产精品福利导航| 日韩网站中文字幕| 国产精品久久久久久久午夜片| 亚洲中国色老太| 国产成人自拍视频在线| 欧美视频免费| 亚洲电影在线观看| 国产九九在线视频| 99热99re6国产在线播放| 国产午夜精品美女毛片视频| 91久久精品视频| www.久久久久久久| 欧美日韩精选| 在线视频精品一| 欧美xxxx日本和非洲| 国产精品亚洲d| 亚洲国产日产av| 亚洲一卡二卡区| 五月天福利视频| 国精品**一区二区三区在线蜜桃| 久久久亚洲天堂| www.97视频| 怕怕欧美视频免费大全| 精品sm捆绑视频| 亚洲av无日韩毛片久久| 国产精品一区二区av影院萌芽| 亚洲精品乱码久久久久久| 日韩黄色影视| 天堂а在线中文在线无限看推荐| 国产精品综合网| 国产精品自在线| 无码人妻一区二区三区线| 激情综合网址| 理论片在线不卡免费观看| 99精品全国免费观看| 米奇精品关键词| 日韩精品一区二区在线| 最新av免费在线观看| 亚洲天堂1区| 一本久久a久久免费精品不卡| www.国产在线视频| caopo在线| 亚洲欧洲性图库| 亚洲欧美日本国产有色| 成人影院免费观看| 欧美激情在线免费观看| 任我爽在线视频精品一| 精品成人一区二区三区免费视频| av亚洲精华国产精华| 国产高清一区视频| 国产探花精品一区二区| 狠狠色综合日日| 91精品久久久久久| 国产精品伦一区二区三区| 九九在线精品视频| 国产日本欧美一区| 一区二区 亚洲| 狠狠色伊人亚洲综合成人| 国产精品综合网站| 97人妻精品一区二区三区软件| 免费xxxx性欧美18vr| 国产热re99久久6国产精品| 亚洲天堂2021av| 黄色资源网久久资源365| 91久久在线视频| www.国产.com| 成人黄色小视频在线观看| 国产一区二区不卡视频| 日韩精品视频在线观看一区二区三区| 91色porny| 日本不卡二区| 人人干在线视频| 亚洲欧美国产77777| 国产精品va在线观看无码| 91黄页在线观看| 黑丝美女久久久| 深夜黄色小视频| 欧美特黄不卡| 日韩成人在线观看| 免费视频91蜜桃| 欧美一区亚洲| 国产在线精品免费| 人体精品一二三区| 五月激情丁香网| 久久福利资源站| 超碰在线观看97| 亚洲三区在线播放| 欧美韩国日本一区| 国风产精品一区二区| 99热99re6国产在线播放| 色噜噜偷拍精品综合在线| 色综合色综合色综合色综合| 精品久久久久久久久久岛国gif| 精品久久一区二区三区| 中文字幕 自拍| 亚洲精品国产偷自在线观看| 高清一区二区三区四区五区| 91黑人精品一区二区三区| 激情六月婷婷久久| 久久精品国产综合精品| 网友自拍视频在线| 亚洲aⅴ怡春院| 黄色aaa级片| 亚洲视频国产| 国产午夜精品美女视频明星a级| 免费三级在线观看| 久久久亚洲人| 福利视频一区二区三区| wwwww在线观看免费视频| 亚洲亚洲精品在线观看| mm131亚洲精品| 精品自拍偷拍| 久久九九热免费视频| 亚洲av中文无码乱人伦在线视色| 国产一区在线精品| 深夜福利成人| 一级毛片久久久| 日韩视频123| 黄免费在线观看| 一区免费视频| 7777奇米亚洲综合久久 | 一区二区91| 91日韩在线播放| 岛国在线视频免费看| 亚洲国产成人tv| 九九久久久久久| 日韩久久久久| 日韩av电影国产| 人妻少妇精品无码专区| 亚洲精品免费视频| 超碰超碰在线观看| 欧美日韩第一| 日本国产一区二区| 久久国产成人精品国产成人亚洲| av在线免费网址| 亚洲免费在线播放| 午夜国产福利在线观看| 国产一区久久精品| www.性欧美| 视频在线观看99| 日本高清一二三区| 亚洲精华一区二区三区| 51精品国自产在线| 亚洲精品视频在线看| 久久久久国产精品麻豆| 伊人再见免费在线观看高清版| 三上悠亚一区二区| 一区二区在线看| 毛片毛片毛片毛| 国产精品久久久久久久| 国产精品视频午夜| 91caoporn在线| 欧美色倩网站大全免费| 2019男人天堂| 青青草成人在线观看| 国产98在线|日韩| 青青影院在线观看| 91精品国产综合久久小美女| 久久视频一区二区三区| 久久国产精品第一页| 无码免费一区二区三区免费播放 | 欧美mv日韩| 国产精品偷伦免费视频观看的 | 久久色精品视频| 国产内射老熟女aaaa∵| 一区二区三区丝袜| 亚洲一区二区在线免费| 亚洲少妇一区| 欧洲亚洲一区| 亚洲成人a级片| 欧美另类在线观看| 日韩中文字幕观看| 91国偷自产一区二区开放时间| 国产又黄又粗视频| 激情综合色综合久久| 少妇大叫太大太粗太爽了a片小说| 99精品中文字幕在线不卡| 国内精品久久久久久久| 欧美套图亚洲一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 女性裸体视频网站| 丰满白嫩尤物一区二区| 免费无码av片在线观看| 日韩在线欧美| 国产精华一区| 亚洲成人一区在线观看| 久久人人爽人人爽爽久久| 污污视频在线免费看| 欧美综合一区二区| 538精品在线观看| 97国产一区二区| 日本中文字幕二区| 亚洲精品人人| 一区二区三区我不卡| 红杏视频成人| 91精品久久久久久久久久| 17videosex性欧美| 色琪琪综合男人的天堂aⅴ视频| 丰满人妻一区二区| 欧美在线色视频| 黄网站免费在线| 国产精品三级视频| 国产精品第七页| 国产原创一区二区三区| 久久综合久久色| 欧美激情四色| 亚洲 国产 欧美一区| 久久精品福利| 亚洲va欧美va国产综合剧情| 欧美自拍电影| 97在线观看免费| 韩国av网站在线| 国产一区二区三区毛片| 欧美一级一区二区三区| 51久久夜色精品国产麻豆| 久久国产视频一区| 亚洲高清三级视频| www.av免费| 国产欧美日韩麻豆91| 影音先锋人妻啪啪av资源网站| 老汉av免费一区二区三区| 日本三级免费网站| 一区在线观看| 草草草视频在线观看| 欧美国产一级| 亚洲精品一品区二品区三品区| 亚欧日韩另类中文欧美| 国产乱码一区| 97久久超碰| 97超碰人人看人人| 电影中文字幕一区二区| 国产精品香蕉在线观看| 欧美电影免费观看高清完整| 欧日韩不卡在线视频| 擼擼色在线看观看免费| 久久久久久久999| 4438x成人网全国最大| www.亚洲成人| 麻豆免费在线观看| 久久精品国产91精品亚洲| 北岛玲日韩精品一区二区三区| 国产婷婷成人久久av免费高清 | 国内欧美视频一区二区| 牛夜精品久久久久久久| 日韩高清不卡一区二区三区| 欧美成人黑人猛交| 日韩和的一区二区| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 久久精品盗摄| 一本色道无码道dvd在线观看| 久久精品91| 日韩福利视频在线| 美女在线观看视频一区二区| 日本激情视频在线播放| 看片的网站亚洲| 天天操天天干天天做| 激情深爱一区二区| 91精品国产高清91久久久久久| 国产盗摄女厕一区二区三区 | 99精品黄色片免费大全| 女同毛片一区二区三区| 久久亚洲一区二区三区明星换脸| 成人精品在线观看视频| 国产丝袜欧美中文另类| 成人精品一二三区| 亚洲视频中文字幕| 精品视频久久久久| 欧美日韩激情网| 国语对白做受69按摩| 欧美精品电影在线播放| 国产www视频| 亚洲精品国产精品自产a区红杏吧| 无码国产精品一区二区色情男同| 亚洲区在线播放| 日本在线观看| 欧美激情一级欧美精品| 免费日韩电影| 成人黄色av播放免费| www.神马久久| 欧洲视频一区二区三区| 欧美1级日本1级| 国产亚洲欧美在线视频| 久久国产三级精品| 97精品人妻一区二区三区蜜桃| 久久久国产一区二区三区四区小说| 91免费在线看片| 一区二区三区免费在线观看| 国产九色在线播放九色| 欧美另类变人与禽xxxxx| 刘亦菲毛片一区二区三区| 亚洲人成五月天| 超碰在线caoporn| 91地址最新发布| 91成人短视频在线观看| 久久99国产精品| 亚洲91视频| 99精品视频在线看| 国产剧情一区二区| 中文字幕高清视频| 亚洲综合久久久| 最新黄色网址在线观看| 精品国产伦一区二区三区观看体验| 蝌蚪视频在线播放| 欧美激情在线一区| 亚洲精品tv| 蜜桃在线一区二区三区精品| 欧美日韩国产成人精品| 成年人在线观看视频免费| 成人99免费视频| 久草视频手机在线| 欧美系列日韩一区| av女名字大全列表| 欧美成人精品激情在线观看| 色成人免费网站| 国产综合欧美在线看| 欧美福利电影在线观看| 三级a三级三级三级a十八发禁止| 99精品在线观看视频| 精品国产欧美日韩不卡在线观看 | 欧美成人一二三| 日韩高清在线| 欧美一区二区三区四区在线观看地址| 欧美特黄一级| 超碰人人草人人| 国产精品乱码人人做人人爱| chinese国产精品| 亚洲国产精品va在线看黑人 | 一区二区三区欧美在线观看| 在线免费观看av片| 亚洲日本欧美中文幕| 欧美xxxhd| 精品亚洲一区二区三区四区五区高| 欧美影视一区| 男男受被啪到高潮自述| 亚洲色图清纯唯美| 亚洲精品国产欧美在线观看| 亚洲欧洲激情在线| 免费日韩电影| 欧美在线播放一区二区| 亚洲中午字幕| 菠萝菠萝蜜网站| 欧美日韩激情小视频| 天堂av网在线| 庆余年2免费日韩剧观看大牛| 欧美freesex8一10精品| 91好吊色国产欧美日韩在线| av电影在线观看一区| 日韩女同强女同hd| 亚洲激情 国产| 天堂√中文最新版在线| 欧美日韩免费高清| 日韩高清不卡在线| 黄色裸体一级片| 91精品国产入口| 在线观看a级片| www.成人三级视频| 亚洲欧洲日本mm| 人妻精品久久久久中文字幕| 一本到不卡精品视频在线观看| 九色网友自拍视频手机在线| 国产精品黄页免费高清在线观看| 青青草综合网| 91福利免费观看| 亚洲另类在线视频| 人妻视频一区二区三区| 国产91精品黑色丝袜高跟鞋| 国产在线观看91一区二区三区| 中文字幕在线观看第三页| 国产精品久久久久天堂| 国产后入清纯学生妹| 久久全国免费视频| 欧美美女在线| 亚洲第一天堂久久| 亚洲一区二区综合| 可以在线观看的黄色| 91久久久亚洲精品| 亚洲免费精品| 亚洲一级黄色录像| 精品国产乱子伦一区| 免费电影日韩网站| 中文字幕中文字幕在线中一区高清| 国产精品一区二区男女羞羞无遮挡 | 欧美国产日产图区| 国产绿帽刺激高潮对白| 国内伊人久久久久久网站视频| 免费成人av| 色偷偷中文字幕| 欧美午夜影院在线视频| 在线免费黄色| 国产一区二区精品在线| 秋霞成人午夜伦在线观看| 69av.com| 中文字幕v亚洲ⅴv天堂| 女人抽搐喷水高潮国产精品| 久久黄色片网站| 精品福利樱桃av导航| 国产精品va在线观看视色| 久久综合中文色婷婷|