華為云云原生多云管理利器Karmada從0到1的實操【與云原生的故事】

      網友投稿 1920 2022-05-30

      一、Karmada的概念

      1.Karmada是什么

      Karmada(Kubernetes Armada)是一個Kubernetes管理系統,使您能夠跨多個Kubernetes集群和云運行云原生應用程序,而無需更改您的應用程序。通過使用Kubernetes原生API并提供高級調度功能,Karmada實現了真正開放的多云Kubernetes。

      Karmada旨在為多云和混合云場景中的多集群應用程序管理提供自動化功能,具有集中式多云管理,高可用性,故障恢復和流量調度等關鍵功能。

      官方網站:https://karmada.io/

      代碼地址:https://github.com/karmada-io/karmada

      2.Karmada的誕生背景

      Karmada項目由華為云、工商銀行、小紅書、中國一汽等8家企業聯合發起,沉淀了各企業在多云管理領域的豐富積累,于2021年4月25日在華為開發者大會2021(HDC.Cloud)上正式宣布開源。同年9月,Karmada項目正式捐贈給云原生計算基金會CNCF,成為CNCF首個多云容器編排項目。Karmada項目的加入,也將CNCF的云原生版圖進一步擴展至分布式云領域。

      CNCF總經理Priyanka Sharma對此表示:“華為一直是云原生社區與開發者生態的重要參與者,Karmada對所有企業構建多云業務架構至關重要,希望未來CNCF與華為云繼續密切合作,持續幫助廣大云原生開發者。”

      Karmada自開源以來受到了廣泛的關注和支持,目前在代碼托管平臺上已有超過30家大型企業/機構/高校參與社區開發及貢獻。

      3.Karmada的優勢

      Karmada結合了華為云容器平臺MCP以及Kubernetes Federation核心實踐,并融入了眾多新技術:包括Kubernetes原生API支持、多層級高可用部署、多集群自動故障遷移、多集群應用自動伸縮、多集群服務發現等,并且提供原生Kubernetes平滑演進路徑,讓基于Karmada的多云方案無縫融入云原生技術生態,為企業提供從單集群到多云架構的平滑演進方案。Karmada的優勢主要有以下幾點:

      1、K8s原生API兼容

      既有應用配置及基礎設施無需改造,由單集群架構平滑升級到多集群(多云)架構。

      無縫集成Kubernetes現有工具鏈生態。

      2、開箱即用

      面向多場景的內置策略集,包括兩地三中心、同城雙活、異地容災等。

      支持應用的跨集群上的自動伸縮、故障遷移和負載均衡。

      3、避免供應商鎖定

      與主流云提供商集成。

      自動分配,跨集群遷移。

      不受專有供應商編排的約束。

      4、集中管理

      與位置無關的群集管理。

      支持公有云、本地或邊緣的集群。

      5、富有成效的多集群調度策略

      多集群親和性調度、應用跨集群拆分、資源重新平衡。

      多維度多層次的高可用部署:區域/可用區/集群/供應商等。

      6、開放和中立

      由互聯網、金融、制造、電信、云提供商等共同發起。

      使用CNCF實現開放式治理的目標。

      二、Karmada的架構

      1.Karmada控制平面的組成

      Karmada控制平面由以下組件組成:

      Karmada API Server

      Karmada Controller Manager

      Karmada Scheduler

      Karmada Controller Manager運行各種控制器,控制器監視karmada對象,然后與底層集群的API服務器通信以創建常規的Kubernetes資源。

      2.Karmada的Controller詳解

      Controller(控制器)在Kubernetes中是邏輯能力的主要體現所在,根據資源對象的狀態來完成調和工作,讓資源對象逐步接近期待的狀態,這個就是Kubernetes的申明式特性。

      在Karmada中,同樣需要對Karmada自己的資源對象,實現對應的申明式特性,這就需要實現對應的Controller。在Karmada中目前的版本中有11個Controllers,接下來就從每一個控制器所負責的資源對象,以及原理來分析一下,在Karmada中是怎樣完成多云能力的。

      11種控制器結構圖如下:

      2.1 Cluster Controller

      cluster controller主要就是處理Cluster資源對象的邏輯,負責處理Cluster對應需要的關聯資源。

      2.2 Cluster status controller

      cluster status controller主要就是處理cluster status資源對象的邏輯,用來收集Cluster的狀態,保存到Cluster的status字段中,同步上報到Karmada的控制平面中。

      2.3 namespace sync controller

      namespace sync controller主要就是處理namespace資源對象的邏輯,負責將Karmada控制平面創建的namespace在集群中同步創建出來。

      2.4 Resourse Template controller

      detector模塊中包含了通用controller負責resource template的Kubernetes資源對象的調和處理邏輯,以及匹配PropagationPolicy。主要就是處理PropagationPolicy資源對象的邏輯,來派生出資源對象對應的ResourceBinding對象。

      2.5 Binding controller

      binding controller主要就是處理ResourceBinding資源對象的增刪改邏輯,ResourceBinding的調和能力是派生出work對象,work對象是和特定集群關聯的。一個work只能屬于一個集群,代表一個集群的資源對象的模型封裝。

      2.6 execution controller

      execution controller主要就是處理Work資源對象的增刪改邏輯,用于處理Work,將Work負責的Kubernetes資源對象在對應的集群上創建出來。

      2.7 work status controller

      work status controller主要就是處理Work資源對象的狀態邏輯,負責收集Work的狀態,也就是Work對應的資源對象的狀態,只是這個狀態是保存在Work的status字段里的。

      2.8 serviceexport controller

      serviceexport controller主要就是處理serviceexport資源對象的狀態邏輯,將需要被其它集群發現的服務暴露出來。

      2.9 endpointslice controller

      endpointslice controller主要根據serviceexport資源對象對應到處的Service,Service對應的endpointslice上報到Karmada的控制面。

      2.10 serviceimport controller

      serviceimport controller主要負責根據ServiceExport暴露出來的Service,在自己負責的集群中創建對應的service,注意service的名稱不是完全一樣的,同時在自己負責的集群中也創建對應的EndpointSlice,這個EndpointSlice的數據就是來源于EndpointSlice controller中上報到karmada控制平面的EndpointSlice對象,具體是通過在karmada-webhook中給ServiceImport的PropagationPolicy中增加了EndpointSlice的下發能力。

      2.11 hpa controller

      hpa controller主要負責將Karmada控制面中創建的HPA對象通過創建Work的方式下發到對應的集群中。

      三、karmada安裝

      1.安裝Docker

      Docker的相關文檔網站如下:

      Docker官網:https://hub.docker.com/search?type=edition&offering=community

      Ubuntu安裝Docker文檔:https://docs.docker.com/engine/install/ubuntu/

      1.1 Docker的架構

      Docker的架構設計分為三個組件:一個客戶端,一個REST API和一個服務器(守護進程):

      Client:與REST API交互。主要目的是允許用戶連接守護進程。

      REST API:充當客戶端和服務器之間的接口,實現通信。

      守護進程:負責實際管理容器-啟動,停止等。守護進程監聽來自docker客戶端的API請求。

      1.2 系統環境

      本人使用的是ubuntu22.04 LTS版本,查看系統版本命令如下

      lsb_release -a cat /proc/version

      1.3 使用倉庫安裝

      如果以前有安裝需要先卸載舊版Docker,docker,docker.io,docker-engine。

      卸載舊版本的命令如下:

      sudo apt-get remove docker docker-engine docker.io containerd runc

      更新apt-get

      sudo apt-get update

      安裝包使得apt可以使用https

      sudo apt-get install apt-transport-https ca-certificates software-properties-common curl

      添加清華GPG密鑰

      curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

      或者添加阿里云GPG密鑰

      curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

      添加清華Docker-ce軟件源

      sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

      或者添加阿里云Docker-ce 軟件源

      sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

      如果出現錯誤可以用以下命令刪除重新執行命令

      #注意:添加錯了可以用以下命令刪除 #查詢keyid,下圖 sudo apt-key list #keyid 就是90那一串 sudo apt-key del #加參數-r可以移除 sudo add-apt-repository -r "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

      再次更新系統

      sudo apt-get update

      華為云云原生之多云管理利器Karmada從0到1的實操【與云原生的故事】

      安裝docker-ce軟件

      sudo apt-get install docker-ce docker-ce-cli containerd.io -y

      查看是否啟動

      ps aux|grep docker

      測試運行容器

      sudo docker run hello-world

      1.4 配置國內鏡像源

      { "registry-mirrors":[ "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com" ], "dns":[ "114.114.114.114", "8.8.8.8" ] }

      1.5 添加當前用戶到 docker 用戶組,可以不用 sudo 運行 docker

      將當前用戶添加到docker組

      sudo gpasswd -a ${USER} docker

      重新登錄或者用以下命令切換到docker組

      newgrp - docker

      重啟docker服務

      sudo service docker restart

      不加sudo直接執行docker命令檢查效果

      docker ps

      2.安裝GO

      2.1 下載并安裝GO

      sudo apt-get install golang-go

      2.2 測試GO是否安裝成功

      go version

      2.3 設置go環境為國內源

      go env -w GOPROXY=goproxy.cn #設置go環境為國內源

      3.安裝k8s

      3.1 前置條件

      K8S官網:https://kubernetes.io/docs/setup/

      最新版高可用安裝:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/

      這個swap其實可以類比成windows上的虛擬內存,它可以讓服務器在內存吃滿的情況下可以保持低效運行,而不是直接卡死。但是k8s的較新版本都要求關閉swap。所以咱們直接動手,修改/etc/fstab文件:

      sudo gedit /etc/fstab

      ubuntu 查看防火墻命令,ufw status可查看狀態,ubuntu22.04默認全部關閉,無需設置。

      設置命令如下:

      sudo ufw status #查看防火墻狀態 sudo ufw disable sudo swapoff -a #臨時禁止

      systemctl start chrony systemctl enable chrony chronyc sources #看連接狀態 chronyc tracking #看同步狀態,時間差 chronyc -a makestep #立即同步時間

      非必須,但是為了直觀方便管理,建議設置。

      在宿主機分別設置主機名:k8s-master01,k8s-node01

      hostnamectl set-hostname k8s-master01

      hosts設置

      sudo gedit /etc/hosts #配置host如下 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.16.133 k8s-master01.ilinux.io k8s-master01 k8s-api.ilinux.io 192.168.16.134 k8s-node01.ilinux.io k8s-node01 199.232.96.133 raw.githubusercontent.com

      3.2 安裝組件

      為防止初始化出現一系列的錯誤,請檢查docker和kubectl驅動是否一致,否則kubectl沒法啟動造成報錯。版本不一樣,docker有些為cgroupfs,而kubectl默認驅動為systemd,所以需要更改docker驅動。

      可查看自己docker驅動命令:

      sudo docker info|grep Driver

      如果不是systemd需要執行以下命令:

      #編輯創建文件 sudo gedit /etc/docker/daemon.json #添加內容 { "registry-mirrors":[ "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com" ], "exec-opts":["native.cgroupdriver=systemd"], "dns":[ "114.114.114.114", "8.8.8.8" ] }

      重啟docker

      sudo systemctl restart docker.service

      modprobe br_netfilter cat /etc/profile cat /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 sudo sysctl -p /etc/sysctl.d/k8s.conf #執行同步參數

      sudo apt-get install openssh-server ssh-keygen -t rsa

      此時會在/home/ubuntu/.ssh目錄下生成密鑰對

      ll .ssh

      上傳公鑰到對應服務器

      ssh-copy-id 192.168.16.133 ssh-copy-id 192.168.16.134

      3.3 更新源

      sudo apt-get update

      3.4 下載公開簽名秘鑰、并添加k8s庫

      國外 :下載 Google Cloud 公開簽名秘鑰:

      curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

      國內:可以用阿里源即可:

      curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - sudo tee /etc/apt/sources.list.d/kubernetes.list <

      3.5 更新 apt 包索引

      sudo apt-get update

      3.6 安裝 kubelet、kubeadm 和 kubectl,并鎖定其版本

      sudo apt-get install -y kubectl kubelet kubeadm sudo apt-mark hold kubelet kubeadm kubectl

      kubeadm:用來初始化集群的指令。

      kubelet:在集群中的每個節點上用來啟動Pod和容器等。

      kubectl:用來與集群通信的命令行工具。

      3.7 配置kubectl開機啟動

      systemctl daemon-reload systemctl enable kubelet

      3.8 測試kubectl是否安裝成功

      kubelet --version kubectl version --client kubeadm version

      3.9 初始化主節點master

      拉取相關包

      kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

      初始化主節點master

      kubeadm init \ --apiserver-advertise-address=192.168.16.133 \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.244.0.0/16

      異常情況分析:

      錯誤提示1:

      [kubelet-check] It seems like the kubelet isn't running or healthy. [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect: connection refused.

      原因:kubectl沒法啟動,journalctl -xe查看啟動錯誤信息。

      journalctl -xe #信息顯示docker和kubectel驅動不一致 kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""

      解決方案:k8s建議systemd驅動,所以更改docker驅動即可,編輯/etc/docker/daemon.json(沒有就新建一個),添加如下啟動項參數即可:

      #編輯創建文件 sudo vim /etc/docker/daemon.json #添加內容 { "exec-opts":["native.cgroupdriver=systemd"] }

      重啟docker和kubectl

      #重啟docker sudo systemctl restart docker.service #重載kubectl sudo systemctl daemon-reload #重啟kubectl sudo systemctl restart kubelet.service #查看kubectl服務狀態恢復正常 sudo systemctl status kubelet.service

      錯誤提示2:

      error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists [ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists [ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists [ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

      原因:初始化生產的文件,重新初始化,需要刪除即可

      rm -fr /etc/kubernetes/manifests/*

      錯誤提示3:

      error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR Port-10250]: Port 10250 is in use

      解決方法:重置配置

      sudo kubeadm reset

      3.10 配置kubernetes-admin來運行

      echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile source /etc/profile

      3.11 集群部署網絡插件

      安裝cni插件:

      mkdir -p go/src/github.com/containernetworking/ cd go/src/github.com/containernetworking/ git clone https://github.com/containernetworking/plugins.git git clone https://github.com/containernetworking/cni.git cd plugins ./build_linux.sh cd ../cni/cnitool go build cnitool.go

      部署網絡插件命令如下:

      kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

      4.安裝簡易k8s開發集群管理工具:kind

      Kind是Kubernetes In Docker的縮寫,顧名思義是使用Docker容器作為Node并將Kubernetes部署至其中的一個工具。官方文檔中也把Kind作為一種本地集群搭建的工具進行推薦。

      4.1 安裝kind

      GOPROXY=goproxy.cn go install sigs.k8s.io/kind@v0.12.0

      4.2 環境變量配置

      sudo cp $(go env GOPATH)/bin/kind /usr/local/bin

      kind使用一個容器來模擬一個node,在容器內部使用systemd托管kubelet和containerd(不是docker),然后通過被托管的kubelet啟動其他k8s組件,比如kube-apiserver、etcd、CNI等跑起來。

      由于kind使用containerd而非docker作為容器運行時,要查看kind啟動的k8s節點內部容器運行情況,需要使用containerd的cli客戶端ctr。可以通過下面這條命令查看后續步驟中karmada調用kind啟動的單節點k8s集群內部容器的運行情況:

      docker exec karmada-host-control-plane ctr --namespace k8s.io containers ls

      注意點:ctr的flag --namespace不是k8s里的namespace,也不是linux內核支持的namespace,感興趣的同學可以查看containerd的namespace相關概念

      4.3 測試kind是否安裝成功

      kind --version

      5.安裝karmada控制面

      karmada項目地址:https://gitcode.net/mirrors/karmada-io/karmada?utm_source=csdn_github_accelerator

      5.1 先行條件

      安裝karmada需要先安裝以下工具:

      make

      gcc

      kubectl

      go

      kind

      git

      5.2 安裝karmada

      git clone https://github.com/karmada-io/karmada.git karmada-io/karmada cd karmada-io/karmada

      因為安裝中會無法安裝k8s.gcr.io相關軟件,把替源碼中的k8s.gcr.io換成registry.cn-hangzhou.aliyuncs.com/google_containers就可以部署

      執行安裝命令如下:

      hack/local-up-karmada.sh

      安裝步驟詳解:

      檢查go、kind等工具是否已經存在

      調用kind創建host k8s集群,集群版本默認為1.23.4,與karmada重用的k8s組件(kube-apiserver、kube-controllermanager)版本一致

      build karmada控制面可執行文件及容器鏡像,build結束后本地可以找到如下鏡像:karmada-agent、karmada-webhook、karmada-scheduler、karmada-controller-manager

      部署karmada控制面組件到host集群

      創建CRD,也就是karmada自定義的多云工作負載API資源,包含:propgation policy,override policy,work,resource binding等

      創建webhook

      部署完成后,形成kubeconfig文件$HOME/kube/karmada.config,包含karmada-host和karmada-apiserver兩個context,分別對應支撐karmada控制面運行的host集群,以及karmada控制面本身

      安裝成功后會出現如下信息:

      Local Karmada is running. To start using your karmada, run: export KUBECONFIG="$HOME/.kube/karmada.config" Please use 'kubectl config use-context karmada-host/karmada-apiserver' to switch the host and control plane cluster. To manage your member clusters, run: export KUBECONFIG="$HOME/.kube/members.config" Please use 'kubectl config use-context member1/member2/member3' to switch to the different member cluster.

      5.3 查看karmada控制面組成

      使用karmada管理的多云環境包含兩類集群:

      host集群:即由karmada控制面構成的集群,接受用戶提交的工作負載部署需求,將之同步到member集群,并從member集群同步工作負載后續的運行狀況。

      member集群:由一個或多個k8s集群構成,負責運行用戶提交的工作負載

      kubectl config use-context karmada-host #切換到karmada-host控制面

      kubectl get po --all-namespaces

      集群加入karmada步驟如下:

      執行hack/create-cluster.sh member1 $HOME/.kube/karmada.config創建新的集群member1

      執行kubectl config use-context karmada-apiserver切換到karmada控制面

      執行karmadactl join member1 --cluster-kubeconfig=$HOME/.kube/karmada.config以push的方式把member1加入karmada集群

      三、karmada實戰案例

      相關視頻鏈接:https://live.csdn.net/v/202945?spm=1001.2014.3001.5501

      實操步驟:

      1、執行kubectl config use-context karmada-apiserver切換到karmada控制面。

      2、執行kubectl create -f samples/nginx/deployment.yaml創建deployment資源,如前面所述,由于kamada控制面沒有部署deployment controller,nginx不會在karmada控制面所在集群跑起來,而是僅僅保存在etcd里,這時候如果去member1集群查看pod資源的情況,可以發現nginx也沒有在member1集群中運行起來。

      3、執行kubectl create -f samples/nginx/propagationpolicy.yaml,定義如下的propgation policy:

      apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: nginx-propagation spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: nginx placement: clusterAffinity: clusterNames: - member1

      這個progation policy將之前部署的nginx deployment資源(由resourceSelectors指定)同步到member1集群(由placement指定)中。

      這時不用切換到member1 context,對karmada控制面執行kubectl get deploy可以看到名叫nginx的deployment已經正常運行:

      NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 21m

      上述結果說明karmada有能力從member集群同步工作負載狀態到host集群。作為驗證,我們可以切換到member1集群,執行kubectl get po可以看到deployment對應的nginx pod已經在member1集群內正常運行:

      NAME READY STATUS RESTARTS AGE nginx-6799fc88d8-7tgmb 1/1 Running 0 8m27s

      總結

      Karmada 的架構在很多方面類似于單個Kubernetes集群。它們都有一個控制平面、一個API服務器、一個調度程序和一組控制器。而且Karmada完全兼容K8S原生API操作,便于各種k8s集群的接入,為多云和混合云架構保駕護航。

      【與云原生的故事】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/345260

      云原生 云端實踐

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:JumpServer:多云環境下更好用的堡壘機
      下一篇:ROS2編程基礎課程--概念
      相關文章
      精品亚洲国产成人av| 激情无码亚洲一区二区三区 | 亚洲av激情无码专区在线播放| 九月婷婷亚洲综合在线| 亚洲国产精品成人午夜在线观看| 亚洲乱码卡三乱码新区| 亚洲国产一区在线观看| 亚洲精彩视频在线观看| 色播亚洲视频在线观看| 中文字幕亚洲综合久久2| 无码专区—VA亚洲V天堂| 久久久综合亚洲色一区二区三区 | 亚洲综合日韩久久成人AV| 亚洲精品视频免费观看| 亚洲精品成人久久久| 亚洲一区二区三区国产精品| 久久久久亚洲AV无码专区网站 | 亚洲日韩在线视频| 91亚洲视频在线观看| 亚洲中文字幕无码mv| 亚洲AV无码一区二区三区电影 | 在线观看亚洲视频| 亚洲国产精品自产在线播放| 亚洲精品综合久久| 亚洲中久无码永久在线观看同| 亚洲精品无码mv在线观看网站| 图图资源网亚洲综合网站| 激情内射亚洲一区二区三区| 97se亚洲综合在线| 亚洲成a人片77777群色| 亚洲综合在线一区二区三区| 亚洲欧美日韩中文字幕在线一区| 亚洲AV无码精品国产成人| 亚洲&#228;v永久无码精品天堂久久| 狠狠入ady亚洲精品| 久久精品国产亚洲7777| 亚洲AV无码久久| 亚洲日本国产精华液| 亚洲精品无码中文久久字幕| 伊在人亚洲香蕉精品区麻豆| 奇米影视亚洲春色|