日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes CRD开发模式及源码实现深入剖析-Kubernetes商业环境实战

發(fā)布時(shí)間:2023/12/2 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes CRD开发模式及源码实现深入剖析-Kubernetes商业环境实战 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

專注于大數(shù)據(jù)及容器云核心技術(shù)解密,可提供全棧的大數(shù)據(jù)+云原生平臺(tái)咨詢方案,請(qǐng)持續(xù)關(guān)注本套博客。如有任何學(xué)術(shù)交流,可隨時(shí)聯(lián)系。留言請(qǐng)關(guān)注《數(shù)據(jù)云技術(shù)社區(qū)》公眾號(hào)。

1 CRD資源擴(kuò)展

  • CRD 即CustomResourceDefinition,是 kubernetes 極力推薦的資源擴(kuò)展方式。
  • 基于 CRD 技術(shù),用戶能將自定義資源注冊(cè)到 kubernetes 系統(tǒng),并像使用原生資源(如 pod、statefulset )一樣對(duì)自定義資源進(jìn)行創(chuàng)建、查看、修改、刪除等操作,實(shí)現(xiàn)了類似于插件式的功能增強(qiáng)。

2 CRD開發(fā)步驟

1.根據(jù)go.mod設(shè)定,建立目錄$GOPATH/src/k8s.io module k8s.io/sample-controller 2.設(shè)置代理export GOPROXY=https://goproxy.io 3.加載依賴包,自動(dòng)歸檔到vendor目錄go mod vendor -v 4.設(shè)置update-codegen.sh"${CODEGEN_PKG}"/generate-groups.sh "deepcopy,client,informer,lister" \k8s.io/sample-controller/pkg/client k8s.io/sample-controller/pkg/apis \samplecontroller:v1alpha1 \--output-base "$(dirname "${BASH_SOURCE[0]}")/../../.." \--go-header-file "${SCRIPT_ROOT}"/hack/boilerplate.go.txt5.自定義控制器及main.go6.編譯sample-controller生成可執(zhí)行程序sample-controllergo build -o sample-controller .7.運(yùn)行sample-controller./sample-controller -kubeconfig=$HOME/.kube/congig8.注冊(cè) CRD 資源 crd.yamlapiVersion: apiextensions.k8s.io/v1beta1kind: CustomResourceDefinitionmetadata:name: foos.samplecontroller.k8s.iospec:group: samplecontroller.k8s.ioversion: v1alpha1names:kind: Fooplural: foosscope: Namespacedkubectl create -f artifacts/examples/crd.yaml 9.創(chuàng)建 CRD 資源 example-foo.yamlapiVersion: samplecontroller.k8s.io/v1alpha1kind: Foometadata:name: example-foospec:deploymentName: example-fooreplicas: 1kubectl create -f artifacts/examples/example-foo.yaml10.查看 Foo 的部署情況kubectl get deployments 復(fù)制代碼

3 CRD項(xiàng)目自定義控制器開發(fā)(以sample-controller為例)

3.1 main.go開發(fā)

  • 讀取 kubeconfig 配置
  • 初始化kubeClient,監(jiān)聽普通事件
  • 初始化exampleClient, 監(jiān)聽Foo 事件
  • 初始化kubeInformerFactory和exampleInformerFactory
  • 初始化自定義 Controller
  • 開啟 Controller
func main() {flag.Parse()// set up signals so we handle the first shutdown signal gracefullystopCh := signals.SetupSignalHandler()//讀取 kubeconfig 配置,cfg, err := clientcmd.BuildConfigFromFlags(masterURL, kubeconfig)if err != nil {klog.Fatalf("Error building kubeconfig: %s", err.Error())}//監(jiān)聽普通事件kubeClient, err := kubernetes.NewForConfig(cfg)if err != nil {klog.Fatalf("Error building kubernetes clientset: %s", err.Error())}//一個(gè)監(jiān)聽 Foo 事件exampleClient, err := clientset.NewForConfig(cfg)if err != nil {klog.Fatalf("Error building example clientset: %s", err.Error())}kubeInformerFactory := kubeinformers.NewSharedInformerFactory(kubeClient, time.Second*30)exampleInformerFactory := informers.NewSharedInformerFactory(exampleClient, time.Second*30)//基于 Client(kubeClient, exampleClient)、Informer 初始化自定義 Controller,//監(jiān)聽 Deployment 以及 Foos 資源變化controller := NewController(kubeClient, exampleClient,kubeInformerFactory.Apps().V1().Deployments(),exampleInformerFactory.Samplecontroller().V1alpha1().Foos())// notice that there is no need to run Start methods in a separate goroutine. (i.e. go kubeInformerFactory.Start(stopCh)// Start method is non-blocking and runs all registered informers in a dedicated goroutine.kubeInformerFactory.Start(stopCh)exampleInformerFactory.Start(stopCh)//開啟 Controllerif err = controller.Run(2, stopCh); err != nil {klog.Fatalf("Error running controller: %s", err.Error())} } 復(fù)制代碼

3.2 Controller處理事件邏輯

  • Controller 的關(guān)鍵成員即兩個(gè)事件的 Listener(appslisters.DeploymentLister、listers.FooLister)這兩個(gè)成員將由 main 函數(shù)傳入?yún)?shù)進(jìn)行初始化。
  • 為了緩沖事件處理,這里使用隊(duì)列暫存事件,相關(guān)成員即為 workqueue.RateLimitingInterface record.EventRecorder 用于記錄事件。
// Controller is the controller implementation for Foo resources type Controller struct {kubeclientset kubernetes.Interfacesampleclientset clientset.InterfacedeploymentsLister appslisters.DeploymentListerdeploymentsSynced cache.InformerSyncedfoosLister listers.FooListerfoosSynced cache.InformerSynced// workqueue is a rate limited work queue. This is used to queue work to be// processed instead of performing it as soon as a change happens. This// means we can ensure we only process a fixed amount of resources at a// time, and makes it easy to ensure we are never processing the same item// simultaneously in two different workers.workqueue workqueue.RateLimitingInterface// recorder is an event recorder for recording Event resources to the// Kubernetes API.recorder record.EventRecorder }//Controller.go controller := &Controller{kubeclientset: kubeclientset,sampleclientset: sampleclientset,deploymentsLister: deploymentInformer.Lister(),deploymentsSynced: deploymentInformer.Informer().HasSynced,foosLister: fooInformer.Lister(),foosSynced: fooInformer.Informer().HasSynced,workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "Foos"),recorder: recorder, }//main.go初始化入?yún)?func NewController(kubeclientset kubernetes.Interface,sampleclientset clientset.Interface,deploymentInformer appsinformers.DeploymentInformer,fooInformer informers.FooInformer) *Controller 復(fù)制代碼

3.3 自定義Controller事件處理函數(shù)

  • 設(shè)置對(duì) Foo 資源變化的事件處理函數(shù)(Add、Update 均通過(guò) enqueueFoo 處理)
  • 設(shè)置對(duì) Deployment 資源變化的事件處理函數(shù)(Add、Update、Delete 均通過(guò) handleObject 處理)
  • 引出enqueueFoo 以及 handleObject 的實(shí)現(xiàn)
// Set up an event handler for when Foo resources changefooInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{AddFunc: controller.enqueueFoo,UpdateFunc: func(old, new interface{}) {controller.enqueueFoo(new)},})// Set up an event handler for when Deployment resources change. This// handler will lookup the owner of the given Deployment, and if it is// owned by a Foo resource will enqueue that Foo resource for// processing. This way, we don't need to implement custom logic for// handling Deployment resources. More info on this pattern:deploymentInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{AddFunc: controller.handleObject,UpdateFunc: func(old, new interface{}) {newDepl := new.(*appsv1.Deployment)oldDepl := old.(*appsv1.Deployment)if newDepl.ResourceVersion == oldDepl.ResourceVersion {// Periodic resync will send update events for all known Deployments.// Two different versions of the same Deployment will always have different RVs.return}controller.handleObject(new)},DeleteFunc: controller.handleObject,}) 復(fù)制代碼

3.4 enqueueFoo 以及 handleObject 實(shí)現(xiàn)

  • enqueueFoo 就是解析 Foo 資源為namespace/name 形式的字符串,然后入隊(duì)
  • handleObject 監(jiān)聽了所有實(shí)現(xiàn)了 metav1 的資源,但只過(guò)濾出 owner 是 Foo 的,將其解析為 namespace/name 入隊(duì)。不是 Foo不做處理。
// enqueueFoo takes a Foo resource and converts it into a namespace/name // string which is then put onto the work queue. This method should *not* be // passed resources of any type other than Foo. func (c *Controller) enqueueFoo(obj interface{}) {var key stringvar err errorif key, err = cache.MetaNamespaceKeyFunc(obj); err != nil {utilruntime.HandleError(err)return}c.workqueue.AddRateLimited(key) }// handleObject will take any resource implementing metav1.Object and attempt // to find the Foo resource that 'owns' it. It does this by looking at the // objects metadata.ownerReferences field for an appropriate OwnerReference. // It then enqueues that Foo resource to be processed. If the object does not // have an appropriate OwnerReference, it will simply be skipped. func (c *Controller) handleObject(obj interface{}) {var object metav1.Objectvar ok boolif object, ok = obj.(metav1.Object); !ok {tombstone, ok := obj.(cache.DeletedFinalStateUnknown)if !ok {utilruntime.HandleError(fmt.Errorf("error decoding object, invalid type"))return}object, ok = tombstone.Obj.(metav1.Object)if !ok {utilruntime.HandleError(fmt.Errorf("error decoding object tombstone, invalid type"))return}klog.V(4).Infof("Recovered deleted object '%s' from tombstone", object.GetName())}klog.V(4).Infof("Processing object: %s", object.GetName())if ownerRef := metav1.GetControllerOf(object); ownerRef != nil {// If this object is not owned by a Foo, we should not do anything more// with it.if ownerRef.Kind != "Foo" {return}foo, err := c.foosLister.Foos(object.GetNamespace()).Get(ownerRef.Name)if err != nil {klog.V(4).Infof("ignoring orphaned object '%s' of foo '%s'", object.GetSelfLink(), ownerRef.Name)return}c.enqueueFoo(foo)return} } 復(fù)制代碼

3.4 Controler核心run處理函數(shù)

  • 在main.go中同步,等待 Informer 同步完成,并發(fā)執(zhí)行runWorker,處理隊(duì)列內(nèi)事件。
  • runWorker引出processNextWorkItem,processNextWorkItem引出syncHandler。
// Run will set up the event handlers for types we are interested in, as well // as syncing informer caches and starting workers. It will block until stopCh // is closed, at which point it will shutdown the workqueue and wait for // workers to finish processing their current work items. func (c *Controller) Run(threadiness int, stopCh <-chan struct{}) error {defer utilruntime.HandleCrash()defer c.workqueue.ShutDown()// Start the informer factories to begin populating the informer cachesklog.Info("Starting Foo controller")// Wait for the caches to be synced before starting workersklog.Info("Waiting for informer caches to sync")if ok := cache.WaitForCacheSync(stopCh, c.deploymentsSynced, c.foosSynced); !ok {return fmt.Errorf("failed to wait for caches to sync")}klog.Info("Starting workers")// Launch two workers to process Foo resourcesfor i := 0; i < threadiness; i++ {go wait.Until(c.runWorker, time.Second, stopCh)}klog.Info("Started workers")<-stopChklog.Info("Shutting down workers")return nil }// runWorker is a long-running function that will continually call the // processNextWorkItem function in order to read and process a message on the // workqueue. func (c *Controller) runWorker() {for c.processNextWorkItem() {} }// processNextWorkItem will read a single work item off the workqueue and // attempt to process it, by calling the syncHandler. func (c *Controller) processNextWorkItem() bool {obj, shutdown := c.workqueue.Get()if shutdown {return false}// We wrap this block in a func so we can defer c.workqueue.Done.err := func(obj interface{}) error {// We call Done here so the workqueue knows we have finished// processing this item. We also must remember to call Forget if we// do not want this work item being re-queued. For example, we do// not call Forget if a transient error occurs, instead the item is// put back on the workqueue and attempted again after a back-off// period.defer c.workqueue.Done(obj)var key stringvar ok bool// We expect strings to come off the workqueue. These are of the// form namespace/name. We do this as the delayed nature of the// workqueue means the items in the informer cache may actually be// more up to date that when the item was initially put onto the// workqueue.if key, ok = obj.(string); !ok {// As the item in the workqueue is actually invalid, we call// Forget here else we'd go into a loop of attempting to// process a work item that is invalid.c.workqueue.Forget(obj)utilruntime.HandleError(fmt.Errorf("expected string in workqueue but got %#v", obj))return nil}// Run the syncHandler, passing it the namespace/name string of the// Foo resource to be synced.if err := c.syncHandler(key); err != nil {// Put the item back on the workqueue to handle any transient errors.c.workqueue.AddRateLimited(key)return fmt.Errorf("error syncing '%s': %s, requeuing", key, err.Error())}// Finally, if no error occurs we Forget this item so it does not// get queued again until another change happens.c.workqueue.Forget(obj)klog.Infof("Successfully synced '%s'", key)return nil}(obj)if err != nil {utilruntime.HandleError(err)return true}return true } 復(fù)制代碼

3.5 Controler核心邏輯syncHandler自定義處理函數(shù)

  • syncHandler 的處理邏輯大體如下:
  • 根據(jù) namespace/name 獲取 foo 資源
  • 根據(jù) foo,獲取其 Deployment 名稱,進(jìn)而獲取 deployment 資源(沒(méi)有就為其創(chuàng)建)
  • 根據(jù)?foo 的 Replicas 更新?deployment 的 Replicas(如果不匹配)
  • 更新 foo 資源的狀態(tài)為最新 deployment 的狀態(tài)(其實(shí)就是 AvailableReplicas)
  • 由此,可知 foo 的實(shí)現(xiàn)實(shí)體其實(shí)就是 deployment
// syncHandler compares the actual state with the desired, and attempts to // converge the two. It then updates the Status block of the Foo resource // with the current status of the resource. func (c *Controller) syncHandler(key string) error {// Convert the namespace/name string into a distinct namespace and namenamespace, name, err := cache.SplitMetaNamespaceKey(key)if err != nil {utilruntime.HandleError(fmt.Errorf("invalid resource key: %s", key))return nil}// Get the Foo resource with this namespace/namefoo, err := c.foosLister.Foos(namespace).Get(name)if err != nil {// The Foo resource may no longer exist, in which case we stop// processing.if errors.IsNotFound(err) {utilruntime.HandleError(fmt.Errorf("foo '%s' in work queue no longer exists", key))return nil}return err}deploymentName := foo.Spec.DeploymentNameif deploymentName == "" {// We choose to absorb the error here as the worker would requeue the// resource otherwise. Instead, the next time the resource is updated// the resource will be queued again.utilruntime.HandleError(fmt.Errorf("%s: deployment name must be specified", key))return nil}// Get the deployment with the name specified in Foo.specdeployment, err := c.deploymentsLister.Deployments(foo.Namespace).Get(deploymentName)// If the resource doesn't exist, we'll create itif errors.IsNotFound(err) {deployment, err = c.kubeclientset.AppsV1().Deployments(foo.Namespace).Create(newDeployment(foo))}// If an error occurs during Get/Create, we'll requeue the item so we can// attempt processing again later. This could have been caused by a// temporary network failure, or any other transient reason.if err != nil {return err}// If the Deployment is not controlled by this Foo resource, we should log// a warning to the event recorder and retif !metav1.IsControlledBy(deployment, foo) {msg := fmt.Sprintf(MessageResourceExists, deployment.Name)c.recorder.Event(foo, corev1.EventTypeWarning, ErrResourceExists, msg)return fmt.Errorf(msg)}// If this number of the replicas on the Foo resource is specified, and the// number does not equal the current desired replicas on the Deployment, we// should update the Deployment resource.if foo.Spec.Replicas != nil && *foo.Spec.Replicas != *deployment.Spec.Replicas {klog.V(4).Infof("Foo %s replicas: %d, deployment replicas: %d", name, *foo.Spec.Replicas, *deployment.Spec.Replicas)deployment, err = c.kubeclientset.AppsV1().Deployments(foo.Namespace).Update(newDeployment(foo))}// If an error occurs during Update, we'll requeue the item so we can// attempt processing again later. THis could have been caused by a// temporary network failure, or any other transient reason.if err != nil {return err}// Finally, we update the status block of the Foo resource to reflect the// current state of the worlderr = c.updateFooStatus(foo, deployment)if err != nil {return err}c.recorder.Event(foo, corev1.EventTypeNormal, SuccessSynced, MessageResourceSynced)return nil } 復(fù)制代碼

4 Controler核心邏輯注冊(cè)

  • pkg/samplecontroller/v1alpha1/register.go(處理類型 Schema)
// SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = schema.GroupVersion{Group: samplecontroller.GroupName, Version: "v1alpha1"}// Kind takes an unqualified kind and returns back a Group qualified GroupKind func Kind(kind string) schema.GroupKind {return SchemeGroupVersion.WithKind(kind).GroupKind() }// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) schema.GroupResource {return SchemeGroupVersion.WithResource(resource).GroupResource() }var (SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)AddToScheme = SchemeBuilder.AddToScheme )// Adds the list of known types to Scheme. func addKnownTypes(scheme *runtime.Scheme) error {scheme.AddKnownTypes(SchemeGroupVersion,&Foo{},&FooList{},)metav1.AddToGroupVersion(scheme, SchemeGroupVersion)return nil } 復(fù)制代碼

5 總結(jié)

整個(gè)開發(fā)遇到各種問(wèn)題,比如:包結(jié)構(gòu)和相對(duì)路徑,GO代理,以及K8s CRD 官方提供函數(shù)等,通過(guò)反復(fù)的實(shí)踐,終于掌握整套Kubernetes CRD開發(fā)模式,以此進(jìn)行留記,方便查閱。

專注于大數(shù)據(jù)及容器云核心技術(shù)解密,可提供全棧的大數(shù)據(jù)+云原生平臺(tái)咨詢方案,請(qǐng)持續(xù)關(guān)注本套博客。如有任何學(xué)術(shù)交流,可隨時(shí)聯(lián)系。留言請(qǐng)關(guān)注《數(shù)據(jù)云技術(shù)社區(qū)》公眾號(hào)。

轉(zhuǎn)載于:https://juejin.im/post/5d57f750f265da03b94ff11a

總結(jié)

以上是生活随笔為你收集整理的Kubernetes CRD开发模式及源码实现深入剖析-Kubernetes商业环境实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

色偷偷网站视频 | 韩国一区二区在线观看 | 久久久久夜色 | 日本精品一区二区三区在线播放视频 | 日韩电影在线观看中文字幕 | 国产在线免费av | 日韩手机在线观看 | 欧美另类激情 | 国产v在线播放 | 欧美大片在线看免费观看 | 久久久99精品免费观看 | 国产区免费 | 中文字幕欧美三区 | 国产国产人免费人成免费视频 | 日韩高清二区 | 欧美在线18 | 91在线精品一区二区 | 婷婷五天天在线视频 | 日韩二区三区在线 | 国产一级视频在线免费观看 | 夜夜躁狠狠躁日日躁视频黑人 | 亚洲电影第一页av | 欧美国产精品一区二区 | 日韩天堂网| 香蕉久久国产 | 天天天天爱天天躁 | 91传媒激情理伦片 | 国产在线高清视频 | 最新日韩在线观看 | 国产精品免费一区二区三区 | 国产精品不卡一区 | 玖玖视频在线 | 久久av中文字幕片 | 国产女人免费看a级丨片 | 国产精品久久久久久久久久 | 日本少妇高清做爰视频 | 日韩黄色av网站 | 中文字幕在线看 | 久草视频在线免费播放 | 国产一线二线三线性视频 | 免费在线国产视频 | 色综合久久88色综合天天人守婷 | 日韩精品五月天 | 97超碰在线人人 | 99re在线视频观看 | av福利免费 | 国产在线高清视频 | 一区二区在线电影 | 爱av在线网 | 亚洲天堂网视频 | 成人在线视频网 | av在线一| 久草电影免费在线观看 | 国产一区二区久久久久 | 天天射天天干天天爽 | 天天插日日射 | 国产精品一区在线观看你懂的 | 国产一区二区三区四区在线 | 欧美黑吊大战白妞欧美 | 中文字幕 成人 | 特级aaa毛片 | 奇米影视8888 | 成人午夜电影在线播放 | 久久久久国产精品一区二区 | 午夜影院一级 | 日韩网站一区 | 最近中文字幕免费 | 国产一区欧美二区 | 成人在线观看资源 | 欧美日产在线观看 | 精品福利在线 | 在线天堂中文www视软件 | 天天射天天干天天 | 免费视频 你懂的 | 免费日韩一区二区三区 | 狂野欧美激情性xxxx | 中文成人字幕 | 国产成人性色生活片 | 国产精品激情在线观看 | 亚洲电影久久久 | 国产流白浆高潮在线观看 | 久久免费黄色 | 国产在线精品一区二区不卡了 | 最近高清中文在线字幕在线观看 | 亚洲欧美国产精品久久久久 | 免费看毛片在线 | 99精品久久久久久久久久综合 | 亚洲成人国产精品 | 国产精品久久久久免费 | 欧美在线观看小视频 | av丝袜在线 | 欧美日韩在线观看一区二区 | 欧美性色xo影院 | 免费观看国产视频 | 黄色片网站 | 午夜精品久久久久久久99水蜜桃 | 欧美精品久久久久久久久久丰满 | 日韩欧美国产精品 | 狠狠色噜噜狠狠狠狠 | 国模视频一区二区三区 | 91亚洲激情 | 丁香婷婷基地 | 国产亚洲高清视频 | 亚洲一区精品人人爽人人躁 | 色av婷婷 | 91完整版在线观看 | 久久免费视频在线观看6 | 国产精品久久久久久久久久ktv | 成人中文字幕在线观看 | 精品久久久精品 | 最新日本中文字幕 | 91精品国产综合久久久久久久 | 91chinese在线 | 黄色av免费电影 | 久久综合九色欧美综合狠狠 | 日本中文字幕免费观看 | 亚洲成人黄色网址 | 精品免费观看视频 | 日韩欧美视频在线观看免费 | 国产精品a久久久久 | 在线观看日韩精品视频 | 日韩一级理论片 | 岛国精品一区二区 | 国产精品国内免费一区二区三区 | 91麻豆精品国产91久久久使用方法 | av黄色在线观看 | 久草免费在线 | 国产1级毛片 | 国内精品美女在线观看 | 91精品啪 | 91桃色在线观看视频 | 天天色天天上天天操 | 一区二区在线影院 | 久久精品1区2区 | 国产精品一区二区精品视频免费看 | 精品一区二区在线免费观看 | 亚洲免费色 | 日韩黄色中文字幕 | 欧美国产精品久久久久久免费 | 日韩mv欧美mv国产精品 | 在线视频第一页 | 97看片网 | 久久婷婷精品 | 婷婷射五月 | 久久伊人国产精品 | www.xxxx欧美| 日韩午夜av电影 | 天堂av在线 | 久久久精品国产一区二区电影四季 | 国产手机在线观看 | 亚洲日本va午夜在线电影 | 国产中文在线观看 | 久久草草影视免费网 | 91麻豆免费版| 久久久久 免费视频 | 久久成人在线视频 | 欧美性受极品xxxx喷水 | 免费一级日韩欧美性大片 | 亚洲人人射 | 亚洲人成人99网站 | 成人av电影在线 | 97成人在线免费视频 | 2022中文字幕在线观看 | 国产在线色站 | 在线国产小视频 | 69绿帽绿奴3pvideos | 成人小视频在线免费观看 | 国产精品久久一区二区三区不卡 | 日本久久久亚洲精品 | 亚洲精品在线观 | 九9热这里真品2 | 天天干天天插伊人网 | 国产1区2区3区精品美女 | 久久久不卡影院 | 九九综合在线 | 国产成人福利在线观看 | 黄色免费高清视频 | 在线观看91av | 欧美性生活免费 | 精品在线视频观看 | 精品久久久影院 | www.色午夜.com| 最新成人av | 九九精品视频在线看 | 婷婷久操| 久久男人免费视频 | 国产无遮挡又黄又爽馒头漫画 | 日韩午夜高清 | 果冻av在线 | 久久手机免费观看 | 成人一级影视 | 婷婷久久一区 | 超碰在线人 | 国产伦精品一区二区三区… | 国产麻豆电影在线观看 | 麻豆视屏 | 日韩在线观看高清 | 五月丁香| 国产精品久久久久久久久久久杏吧 | 国精产品999国精产品视频 | 国产理论在线 | 久久久久久国产精品美女 | 国产在线免费观看 | www.av中文字幕.com | 日韩av一区二区在线 | 日本久久免费视频 | 久久99偷拍视频 | 日韩视频免费在线观看 | 欧美激情精品久久久久久 | 玖玖999 | a天堂一码二码专区 | 在线99| 亚洲成人动漫在线观看 | 日b视频在线观看网址 | 日韩中文字幕免费看 | 99久久精品免费 | 国产精品久久久久一区二区三区 | 日韩欧美一区二区在线 | 久久免费看av | 国产亚洲精品久久久久动 | 日本激情视频中文字幕 | 欧美性超爽 | 久久精品3| 黄色片视频免费 | 色婷婷精品 | 在线视频国产区 | 亚洲一区精品人人爽人人躁 | 色成人亚洲网 | 久久不卡视频 | 天天综合网天天综合色 | 亚洲国产电影在线观看 | 日韩精品中文字幕有码 | 天天操天天射天天爽 | 久久福利在线 | 亚洲免费精品一区二区 | 人人澡人人爽欧一区 | 91在线视频网址 | wwwwwww黄 | 欧美日一级片 | 日本精品视频免费 | 91九色在线观看视频 | 国产精品视频专区 | 亚洲天堂视频在线 | 丁香午夜| 国产婷婷久久 | 久久视频精品在线 | 99r精品视频在线观看 | 久久不卡视频 | 久久久久久久久久伊人 | 久久综合干 | 日本午夜免费福利视频 | 91.精品高清在线观看 | 一级黄色片在线免费看 | www.五月婷 | 午夜在线观看一区 | 国产一级二级在线观看 | 欧美做受xxx | 亚洲va天堂va欧美ⅴa在线 | av一区二区在线观看中文字幕 | 99久久婷婷 | 天天干天天上 | 天堂在线免费视频 | 在线高清一区 | 欧美日韩在线视频一区 | 成人免费av电影 | 亚洲精品乱码久久久久久高潮 | 国产又粗又猛又爽又黄的视频先 | 中文字幕丝袜美腿 | 国产精品第二页 | 成人午夜久久 | 日本精品va在线观看 | 激情欧美一区二区免费视频 | 人人操日日干 | 黄色成人av| 国产一区二区在线精品 | 亚洲精选99 | 免费视频久久久 | 亚洲视频在线观看免费 | 91精品在线观看视频 | 99热精品免费观看 | 亚州精品天堂中文字幕 | 久久久久99精品成人片三人毛片 | 中文字幕欧美日韩va免费视频 | 91tv国产成人福利 | 久草在线观看 | 日韩精品综合在线 | 成人av片免费看 | 免费福利在线播放 | 成人在线观看免费视频 | 丁香六月婷婷开心 | 国产成人免费观看久久久 | 一区二区三区在线观看 | 亚洲欧美日韩不卡 | 免费看一级一片 | 欧美va天堂va视频va在线 | 欧美日韩中文国产一区发布 | 国产精品网红直播 | 伊人看片| 99久国产 | 911av视频| 91九色国产视频 | 丁香婷婷亚洲 | 国产精品久久久网站 | 久久综合九九 | www久久 | 久久99精品久久久久久三级 | 日韩综合视频在线观看 | 日韩高清三区 | 天天操天天艹 | 精品国产美女在线 | 欧美日本啪啪无遮挡网站 | 国产亚洲精品成人av久久影院 | 日韩夜夜爽 | av电影在线观看完整版一区二区 | 五月天天天操 | 美女免费网视频 | 激情综合六月 | avcom在线| 成人国产精品久久久春色 | 精品国产视频在线 | a√天堂资源 | 91成人精品一区在线播放69 | 五月婷婷电影网 | 日韩av在线免费看 | 亚洲欧美激情插 | 亚洲草视频 | 丁香花在线视频观看免费 | av在线精品| 国产麻豆精品95视频 | 亚洲午夜久久久久久久久久久 | 日韩精品一区二区免费视频 | 国产最新精品视频 | 99精品一区二区三区 | 免费人人干| 亚洲日本va午夜在线影院 | 亚州av免费| 91自拍视频在线观看 | 中文在线字幕免 | 国产成人精品亚洲a | 成人免费在线看片 | 久久精品国产第一区二区三区 | 亚洲一级特黄 | 99热这里只有精品免费 | 日韩免费观看一区二区 | 精品国产_亚洲人成在线 | 国产在线观看中文字幕 | 在线黄色av电影 | 欧美少妇影院 | 成片免费观看视频999 | 视频二区在线 | 91网页版免费观看 | 999久久久免费精品国产 | 欧美激情视频一二区 | 99这里只有久久精品视频 | 中文字幕在线专区 | av在线专区 | 丁香电影小说免费视频观看 | 亚洲午夜精品久久久久久久久久久久 | 日韩久久久久久久久久 | 少妇高潮流白浆在线观看 | 久久国内精品视频 | 免费成人av在线看 | 国产黄色资源 | 国产69熟 | 97看片网 | 国产69精品久久久久久 | 久久久久久蜜桃一区二区 | www.天天综合 | 一区二区精品在线 | 国产99久久九九精品免费 | 久草香蕉在线视频 | 日韩精品aaa | 91av视屏 | 欧美久草视频 | 中文字幕三区 | 五月天高清欧美mv | 91激情视频在线观看 | 天天色天天色天天色 | 国产精品一区在线播放 | 99资源网 | 91亚洲精品国产 | av超碰在线 | 中文字幕亚洲欧美日韩 | 日韩精品网址 | 免费在线看成人av | 欧美日韩国产在线精品 | 98久久| 美女视频黄免费网站 | 在线色亚洲 | 天天骚夜夜操 | 免费亚洲婷婷 | 99国产成+人+综合+亚洲 欧美 | 国产999精品久久久影片官网 | 免费观看91视频大全 | 欧美日韩一区二区三区在线观看视频 | 久久男人免费视频 | 国产亚洲婷婷免费 | 久久久激情网 | 久久久久久久国产精品 | 亚洲高清网站 | 国产在线精品一区 | 中文字幕在线观看完整版电影 | 97人人爽 | 国产午夜精品福利视频 | 免费视频久久久 | 五月天久久婷 | 午夜av一区| 成人一级免费电影 | 四虎在线免费观看 | 国产精品自产拍在线观看网站 | 日日日日干 | 五月婷婷六月丁香激情 | 亚洲欧美日本一区二区三区 | 亚洲综合精品在线 | 国产成人久久精品77777综合 | 五月激情视频 | 中文字幕在线视频精品 | 色噜噜在线观看视频 | 国产亚洲激情视频在线 | 国产精品成人a免费观看 | 久久视频免费 | 最近在线中文字幕 | 99国产视频在线 | 国产在线视频在线观看 | 91精品视频在线观看免费 | 色国产视频 | 天天插天天色 | 色99之美女主播在线视频 | 色a在线观看 | 天天操天天曰 | 久久久久亚洲精品中文字幕 | 91高清免费在线观看 | 在线视频欧美日韩 | 国产一区二区三区高清播放 | 菠萝菠萝蜜在线播放 | 中文字幕亚洲综合久久五月天色无吗'' | 日韩理论在线播放 | 国产成在线观看免费视频 | 91av欧美 | 99r在线视频 | 99色亚洲 | www.777奇米 | 四虎成人精品 | 成人av片免费看 | 成人手机在线视频 | 国产中文字幕在线免费观看 | av免费看在线 | 久久免费国产视频 | 久久久久黄 | 99久久精品国产亚洲 | 男女啪啪免费网站 | 国产91全国探花系列在线播放 | 亚洲国产av精品毛片鲁大师 | 国产精品99久久久久 | 国产91在线免费视频 | 亚洲精品乱码久久久久久蜜桃91 | 97精品在线视频 | 四虎在线视频免费观看 | 97超碰资源站 | 五月综合激情 | 天天插综合网 | 中文字幕电影高清在线观看 | 国产一级精品绿帽视频 | 操操操com | 久久免费视频观看 | 欧美激情视频在线免费观看 | 国产真实精品久久二三区 | 国产大陆亚洲精品国产 | 亚洲激情综合 | 三级在线视频播放 | 天天人人 | 高清国产午夜精品久久久久久 | 91看片成人 | 色综合激情网 | 免费成人短视频 | 摸阴视频 | 亚洲精品视频二区 | 国产123av| 欧美疯狂性受xxxxx另类 | 久久久免费国产 | 国产精品一级在线 | 日韩美视频 | 四虎国产精品免费 | 欧美日韩久久不卡 | 91免费网站在线观看 | 人人爽人人爽人人爽 | 免费看黄在线看 | 久久精品免费 | 香蕉久草| 日韩在线观看免费 | 亚洲va欧美| 九九九热精品免费视频观看 | 亚洲欧美日韩中文在线 | 日韩在线观看网站 | 国产a网站 | 日韩色区 | 99久久精品电影 | 国产成人免费 | 999久久久 | 久久精品欧美一区 | 又黄又色又爽 | 欧美一区二区三区四区夜夜大片 | 婷婷视频在线观看 | 欧美午夜久久 | 午夜体验区| 亚洲国内精品视频 | 色中色资源站 | 欧美日本国产在线观看 | 国产视频在线免费观看 | 国产精品专区h在线观看 | www.久久色.com | 国产精品黄色影片导航在线观看 | 欧美精品一区二区蜜臀亚洲 | 91黄站| 久久久国产在线视频 | 国产精品女 | 国产精品久久久一区二区三区网站 | 午夜视频导航 | 免费99精品国产自在在线 | 久久午夜电影网 | 国产午夜精品一区二区三区 | 人人天天夜夜 | 91香蕉视频黄 | 国产一区二区三区免费在线观看 | 国产91粉嫩白浆在线观看 | 特级a老妇做爰全过程 | 射久久久 | 欧美激情精品久久久久久免费印度 | 国产精品第三页 | 成人在线一区二区三区 | 日本精品一区二区三区在线播放视频 | 日韩av电影免费在线观看 | 久久99精品久久久久久久久久久久 | 韩国一区二区三区视频 | 国产99久久久国产 | 久久国产成人午夜av影院潦草 | 美国三级黄色大片 | 大胆欧美gogo免费视频一二区 | 中文字幕欧美日韩va免费视频 | 国产精品自产拍在线观看网站 | 91入口在线观看 | 国产高清 不卡 | 日韩av偷拍 | 国产污视频在线观看 | 精品一区二区在线播放 | 国产1区2| 久久久久国产一区二区 | 黄色一级免费 | 有码中文在线 | 日批视频在线播放 | 丁香六月婷婷开心婷婷网 | 97碰在线| 日韩一区正在播放 | 91在线视频 | 干亚洲少妇| 日韩videos高潮hd| 日韩在线观看免费 | 正在播放一区二区 | 丁香激情综合国产 | 中文字幕在线看片 | 日韩av成人在线观看 | 成人a视频在线观看 | 亚洲国产小视频在线观看 | 日韩中文字幕免费 | 天天操天天操天天操天天操天天操 | 亚洲免费视频在线观看 | 国产黑丝一区二区三区 | 日本超碰在线 | 日韩精品久久久久久久电影竹菊 | 中文字幕在线观 | 精品国内自产拍在线观看视频 | 免费在线h| 成人午夜黄色影院 | 国产精品无av码在线观看 | 天天色图 | 国产91成人 | 国产精品门事件 | 国产精品视频全国免费观看 | 欧美精品在线观看一区 | 精品国产一区二区三区av性色 | 狠狠激情中文字幕 | 美腿丝袜一区二区三区 | 免费视频91蜜桃 | 国内精品久久久久影院一蜜桃 | 国产中文字幕视频在线 | 国产一区二区在线影院 | 超碰av在线 | 亚洲精品成人免费 | 91久久国产自产拍夜夜嗨 | 免费毛片一区二区三区久久久 | 99精品在线直播 | 国产香蕉久久精品综合网 | 超碰在线最新网址 | 夜夜骑天天操 | 黄色成人免费电影 | 国产999精品视频 | 日批网站在线观看 | 久久1区 | 免费h漫在线观看 | 免费在线色视频 | 久久伊人国产精品 | 日本中文字幕在线免费观看 | www.精选视频.com | 国产精品乱码久久久久 | 久久久三级视频 | 波多野结衣在线观看一区 | 在线中文字幕视频 | 91精品久久久久久综合五月天 | 中文字幕有码在线 | 999色视频| 中文字幕在线观看第一区 | 久久久久久毛片精品免费不卡 | 天天操天天艹 | 成人动漫精品一区二区 | 狠狠躁夜夜av | 国产98色在线 | 日韩 | 国产小视频免费观看 | 天天爽天天爽 | 亚洲精品美女久久 | 久久久精品国产一区二区电影四季 | 久久www免费视频 | 九九九九九国产 | 久久99网站| 亚洲精品99久久久久久 | 色婷婷狠狠操 | 91.麻豆视频 | 天天爽人人爽 | 日韩在线观看小视频 | 欧美精品一区二区三区一线天视频 | 久久国内精品视频 | 国产福利91精品 | 欧美综合在线视频 | 黄色片视频在线观看 | 国内亚洲精品 | 在线免费黄色av | 久久久精品国产一区二区 | 中文字幕在线一区观看 | 国产精品久久久久久久久久新婚 | 色天天天| 日韩大片在线免费观看 | 日韩av一区二区在线播放 | 免费三级a | 国产高清在线永久 | 欧美精品网站 | 一级电影免费在线观看 | 亚洲三级网 | 国产主播大尺度精品福利免费 | 久久国产热 | 成年人免费在线观看网站 | 黄色av电影免费观看 | 国产亚洲综合性久久久影院 | 免费三级在线 | 亚洲成人资源在线 | 欧美性护士 | 91精品视频免费观看 | 亚洲激情在线视频 | 色综合久久88色综合天天6 | 911精品视频 | 日韩在线观看免费 | 国产日产高清dvd碟片 | 久久久精品国产一区二区 | 久久久久国产精品厨房 | 97精品国产97久久久久久春色 | 四虎在线视频免费观看 | 91久久丝袜国产露脸动漫 | 久草在线费播放视频 | 97超碰在线视 | 亚洲视频免费在线观看 | 国色天香在线观看 | 久久综合成人网 | 日韩欧美综合精品 | 免费h精品视频在线播放 | 久久久国产99久久国产一 | 欧美一二区视频 | japanese黑人亚洲人4k | 亚洲h在线播放在线观看h | 综合激情伊人 | 精品美女在线视频 | 日韩美女免费线视频 | 少妇高潮冒白浆 | 99精品免费久久久久久日本 | 久久这里只精品 | 成人免费在线看片 | 五月婷婷综合激情 | 精品免费| 日韩中文字幕国产 | 一区二区高清在线 | 99热在线这里只有精品 | 国产一区二区在线观看免费 | 一区二区三区免费在线观看视频 | 午夜.dj高清免费观看视频 | 欧美日韩精品免费观看视频 | 国产日韩欧美在线看 | 99久久精品国产观看 | 在线播放 日韩专区 | 一区二区三区四区在线 | 亚洲黄色免费在线 | 综合婷婷丁香 | 久久久国产精品麻豆 | 精品国产一区二区三区久久久久久 | 欧美另类成人 | 免费午夜av | 免费看91的网站 | 日韩欧美xx | 日韩欧美网址 | 国产第一页福利影院 | 91传媒在线看 | 91av观看| 天无日天天操天天干 | 操操综合| 涩涩色亚洲一区 | 免费精品在线视频 | 青青草国产精品 | 四虎永久国产精品 | 在线观看免费福利 | 国产视频欧美视频 | 四虎国产永久在线精品 | 欧美日韩中文视频 | 国产在线精品区 | 国产精品123 | 99国产视频 | a级片久久久 | 亚洲九九九在线观看 | 日韩二区在线播放 | 国产vs久久| 色精品视频| 波多野结衣在线播放视频 | 久久久 激情 | 色综合久久五月天 | 成人va在线观看 | 成人性生交大片免费看中文网站 | 中文字幕欲求不满 | 免费成人在线观看视频 | 夜夜夜夜操 | 91视频电影 | 91成人免费 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 亚洲乱码精品 | 超碰av在线播放 | 亚州精品成人 | 91精品久久香蕉国产线看观看 | 麻豆视频在线播放 | 91桃色免费视频 | 在线精品亚洲一区二区 | 日韩精品专区在线影院重磅 | 依人成人综合网 | 91视频免费网站 | 欧美日韩国产一二三区 | 亚洲专区 国产精品 | 国产视频一二三 | 天天爽夜夜爽人人爽一区二区 | 黄色在线看网站 | 亚州精品在线视频 | 国产色a在线观看 | 91av蜜桃| 天天曰天天 | 2023天天干 | 久久亚洲欧美 | 人人干干人人 | 在线观看亚洲精品视频 | 日韩欧美一区二区三区在线 | 超碰个人在线 | 亚洲自拍av在线 | 日本久久精品视频 | 黄色国产大片 | 日韩av中文在线 | 亚洲开心色| 免费看的毛片 | 久久精品视频国产 | 日韩城人在线 | 久热色超碰 | 伊人久久av | 精品黄色在线观看 | 国产精品久久在线 | 五月激情五月激情 | 最近最新中文字幕视频 | 国产1区2区3区精品美女 | 97香蕉超级碰碰久久免费软件 | 激情网综合 | 精品久久久免费 | 色噜噜噜噜 | 日韩91在线 | 日本黄色免费观看 | 中文字幕电影高清在线观看 | 久久久久久片 | 在线国产中文 | 99色视频在线 | 国产一区二区播放 | 99综合电影在线视频 | 亚洲mv大片欧洲mv大片免费 | 最新中文字幕在线观看视频 | 亚洲国产精品推荐 | 在线免费观看视频一区二区三区 | 视频91 | 免费在线观看av网站 | 中文字幕不卡在线88 | 日韩午夜av电影 | 最近中文字幕高清字幕在线视频 | 五月婷综合| 黄色成人在线观看 | 久久综合久久综合久久综合 | 久久久久亚洲精品国产 | 在线韩国电影免费观影完整版 | 久久久久久久久久免费 | 成人免费看黄 | 中文字幕婷婷 | 一区二区视 | 欧美日韩精品免费观看 | 久久99国产一区二区三区 | av夜夜操 | 成人av影院在线观看 | 亚洲一级片免费观看 | 中文字幕视频三区 | 国产精品不卡在线播放 | 国产一级视屏 | 一级黄色免费网站 | 五月婷婷婷婷婷 | 成人亚洲精品国产www | 高清不卡一区二区在线 | 久久免费高清视频 | 欧美福利久久 | 久久久久久久久久久久久久免费看 | 天天摸天天操天天舔 | 午夜a区 | 六月丁香婷 | 黄色av电影 | 精品婷婷| 国产亚洲激情视频在线 | 中文字幕 国产精品 | 成人国产精品久久久春色 | 一区二区三区高清在线 | av电影中文字幕在线观看 | 国产精品美女久久久久久2018 | 久久99九九99精品 | 五月婷丁香网 | 国产日韩精品在线观看 | 欧美网站黄色 | 天天干,天天干 | 久久99国产视频 | 免费在线观看一区二区三区 | 天堂av免费看 | 午夜精品一区二区三区在线 | 国产原创av在线 | 国产精品久久久精品 | 欧美精品一区二区三区四区在线 | 国产精品久久久久影院 | 99热国产在线中文 | 欧美一区二区三区不卡 | 国产一级二级在线观看 | 欧美人体xx | 久久国产二区 | 国产中文字幕91 | 日操操 | 美女搞黄国产视频网站 | 91在线麻豆 | 手机看片中文字幕 | 亚洲国产中文在线观看 | 在线观看视频精品 | 欧美另类高清 videos | 亚洲精品在线播放视频 | 国产又粗又硬又爽视频 | 久久成人亚洲欧美电影 | 干天天| 成年人免费在线 | 国产精品乱看 | 日韩成人免费在线 | 97超碰资源总站 | 成人av电影在线 | 成人在线一区二区 | 性色av免费看 | av在线播放中文字幕 | 国产青青青 | 97精品国产97久久久久久 | 婷婷5月色 | 2024国产精品视频 | 日本精品在线看 | 精品国产1区2区 | 日韩精品视频在线观看免费 | 中文字幕在线字幕中文 | 国产成人精品一区二区三区网站观看 | 特级西西444www大胆高清无视频 | 亚洲精品视频二区 | 久久精品91久久久久久再现 | 亚洲综合少妇 | 中文字幕在线免费97 | 五月激情电影 | 久久成人在线视频 | 九九有精品 | 激情综合网五月婷婷 | 久久夜色电影 | 日韩欧美视频在线免费观看 | 国产日韩欧美视频在线观看 | 久久视频这里有久久精品视频11 | 4438全国亚洲精品观看视频 | 久久午夜电影院 | 国产网站在线免费观看 | 欧美性色黄| 成人在线观看免费视频 | 日韩网站免费观看 | 黄色三级免费看 | 中文字幕亚洲欧美 | 日日夜夜精品视频天天综合网 | 干干操操| 亚洲综合色丁香婷婷六月图片 | 色综合久久久网 | 夜夜夜精品| 中文字幕在线观看免费高清电影 | x99av成人免费 | 91黄色成人| 欧美精品久久久久久久久久 | 国产69久久久欧美一级 | 91麻豆精品国产91 | 国产一区高清在线 | 欧美日韩a视频 | 免费亚洲视频 | 久久综合久久综合九色 | 亚洲国产av精品毛片鲁大师 | 91精品免费在线观看 | 亚洲国产精品人久久电影 | 久久久wwww| 亚洲一区视频在线播放 | 国产成人精品一区二区 | 免费日韩视| av高清影院 | 国产精品久久久久久久久毛片 | 99精品免费网 | 久久色亚洲 | 日韩免费不卡av | 992tv在线观看网站 | 久久亚洲免费 | 国产福利网站 | 国产一级免费视频 | 91视频一8mav | 91网页版在线观看 | 在线播放 亚洲 | 成年人看片网站 | 欧美精品久久久久久久免费 | 日韩在线在线 | 色干综合 | 日韩av区| 国产亚洲永久域名 | 免费看黄的视频 | 一区 二区电影免费在线观看 | 欧美日韩免费一区二区 | 国产一级在线免费观看 | 亚洲成人av电影在线 | 成人av直播 | 涩涩网站在线播放 | 成人动漫一区二区三区 | 激情欧美一区二区三区 | 黄色91在线 | 久久少妇免费视频 | 91中文字幕永久在线 | 在线观看va | 国产黑丝袜在线 | 黄色av电影 | 久久久国际精品 | 久久综合久久综合久久综合 | 日韩精品1区2区 | 在线观看午夜av | 国产 日韩 欧美 中文 在线播放 | 久久av在线 | 国产精品久久久久久久久大全 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 中文字幕第一页在线播放 | 91黄色免费网站 | 91干干干 | 天天操人人要 | 偷拍久久久 | 精品在线一区二区 | 国产精品午夜av | 中文字幕亚洲欧美 | 九九色在线观看 | 成人资源在线观看 | 色97在线 | 日韩二区三区在线 | 日韩资源在线 | 91久久精品一区二区二区 | 久久久久久久久久亚洲精品 | 在线电影91 | 成人午夜精品久久久久久久3d | 97成人资源站 | 水蜜桃亚洲一二三四在线 | 丁香婷婷色综合亚洲电影 | 欧美日韩一区二区视频在线观看 | 日韩理论电影在线观看 | 亚洲视频h| 免费三级网| 狠狠婷婷 | 国产精品入口麻豆 | 免费av在 | 日韩有色| 美女网站视频免费都是黄 | 亚洲狠狠婷婷 | 中文字幕一区在线观看视频 | 久久国产精品99久久人人澡 | 久久久免费 | 国产超碰在线 |