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

Kubernetes集群搭建超詳細總結(CentOS版)

系統 Linux
學習Kubernetes的關鍵一步就是要學會搭建一套k8s集群。在今天的文章中作者將最近新總結的搭建技巧,無償分享給大家!廢話不多說,直接上干貨!

[[402865]]

本文轉載自微信公眾號「無敵碼農」,作者無敵碼農。轉載本文請聯系無敵碼農公眾號。

學習Kubernetes的關鍵一步就是要學會搭建一套k8s集群。在今天的文章中作者將最近新總結的搭建技巧,無償分享給大家!廢話不多說,直接上干貨!

01、系統環境準備

要安裝部署Kubernetes集群,首先需要準備機器,最直接的辦法可以到公有云(如阿里云等)申請幾臺虛擬機。而如果條件允許,拿幾臺本地物理服務器來組建集群自然是最好不過了。但是這些機器需要滿足以下幾個條件:

要求64位Linux操作系統,且內核版本要求3.10及以上,能滿足安裝Docker項目所需的要求;

機器之間要保持網絡互通,這是未來容器之間網絡互通的前提條件;

要有外網訪問權限,因為部署的過程中需要拉取相應的鏡像,要求能夠訪問到gcr.io、quay.io這兩個docker registry,因為有小部分鏡像需要從這里拉取;

單機可用資源建議2核CPU、8G內存或以上,如果小一點也可以但是能調度的Pod數量就比較有限了;

磁盤空間要求在30GB以上,主要用于存儲Docker鏡像及相關日志文件;

在本次實驗中我們準備了兩臺虛擬機,其具體配置如下:

2核CPU、2GB內存,30GB的磁盤空間;

Unbantu 20.04 LTS的Sever版本,其Linux內核為5.4.0;

內網互通,外網訪問權限不受控制;

02、Kubernetes集群部署工具Kubeadm介紹

作為典型的分布式系統,Kubernetes的部署一直是困擾初學者進入Kubernetes世界的一大障礙。在發布早期Kubernetes的部署主要依賴于社區維護的各種腳本,但這其中會涉及二進制編譯、配置文件以及kube-apiserver授權配置文件等諸多運維工作。目前各大云服務廠商常用的Kubernetes部署方式是使用SaltStack、Ansible等運維工具自動化地執行這些繁瑣的步驟,但即使這樣,這個部署的過程對于初學者來說依然是非常繁瑣的。

正是基于這樣的痛點,在志愿者的推動下Kubernetes社區終于發起了kubeadm這一獨立的一鍵部署工具,使用kubeadm我們可以通過幾條簡單的指令來快速地部署一個kubernetes集群。在接下來的內容中,就將具體演示如何使用kubeadm來部署一個簡單結構的Kubernetes集群。

03、安裝kubeadm及Docker環境

正是基于這樣的痛點,在志愿者的推動下Kubernetes社區終于發起了kubeadm這一獨立的一鍵部署工具,使用kubeadm我們可以通過幾條簡單的指令來快速地部署一個kubernetes集群。在接下來的內容中,就將具體演示如何使用kubeadm來部署一個簡單結構的Kubernetes集群。

前面簡單介紹了Kubernetes官方發布一鍵部署工具kubeadm,只需要添加kubeadm的源,然后直接用yum安裝即可,具體操作如下:

1)、編輯操作系統安裝源配置文件,添加kubernetes鏡像源,命令如下:

  1. #添加Docker阿里鏡像源 
  2.  
  3. [root@centos-linux ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 
  4.  
  5. #安裝Docker 
  6.  
  7. [root@centos-linux ~]# yum -y install docker-ce-18.09.9-3.el7 
  8.  
  9. #啟動Docker并設置開機啟動 
  10.  
  11. [root@centos-linux ~]# systemctl enable docker 
  12.  
  13. 添加Kubernetes yum鏡像源,由于網絡原因,也可以換成國內Ubantu鏡像源,如阿里云鏡像源地址: 
  14.  
  15. 添加阿里云Kubernetes yum鏡像源 
  16.  
  17. # cat > /etc/yum.repos.d/kubernetes.repo << EOF 
  18.  
  19. [kubernetes] 
  20.  
  21. name=Kubernetes 
  22.  
  23. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
  24.  
  25. enabled=1 
  26.  
  27. gpgcheck=0 
  28.  
  29. repo_gpgcheck=0 
  30.  
  31. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
  32.  
  33. EOF 

2)、完成上述步驟后就可以通過yum命令安裝kubeadm了,如下:

  1. [root@centos-linux ~]# yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0 
  2.  
  3. 當前版本是最新版本1.21,這里安裝1.20。 
  4.  
  5. #查看安裝的kubelet版本信息 
  6.  
  7. [root@centos-linux ~]# kubectl version 
  8.  
  9. Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:59:43Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"
  10.  
  11. The connection to the server localhost:8080 was refused - did you specify the right host or port? 
  12.  
  13. 在上述安裝kubeadm的過程中,kubeadm和kubelet、kubectl、kubernetes-cni這幾個kubernetes核心組件的二進制文件也都會被自動安裝好。 

3)、Docker服務啟動及限制修改

在具體運行kubernetes部署之前需要對Docker的配置信息進行一些調整。首先,編輯系統/etc/default/grub文件,在配置項GRUB_CMDLINE_LINUX中添加如下參數:

  1. GRUB_CMDLINE_LINUX=" cgroup_enable=memory swapaccount=1" 

完成編輯后保存執行如下命令,并重啟服務器,命令如下:

  1. root@kubernetesnode01:/opt/kubernetes-config# reboot 

上述修改主要解決的是可能出現的“docker警告WARNING: No swap limit support”問題。其次,編輯創建/etc/docker/daemon.json文件,添加如下內容:

  1. # cat > /etc/docker/daemon.json <<EOF 
  2.  
  3.  
  4.  "registry-mirrors": ["https://6ze43vnb.mirror.aliyuncs.com"], 
  5.  
  6.  "exec-opts": ["native.cgroupdriver=systemd"], 
  7.  
  8.  "log-driver""json-file"
  9.  
  10.  "log-opts": { 
  11.  
  12.    "max-size""100m" 
  13.  
  14.  }, 
  15.  
  16.  "storage-driver""overlay2" 
  17.  
  18.  
  19. EOF 
  20.  
  21. 完成保存后執行重啟Docker命令,如下: 
  22.  
  23. # systemctl restart docker 
  24.  
  25. 此時可以查看Docker的Cgroup信息,如下: 
  26.  
  27. # docker info | grep Cgroup 
  28.  
  29. Cgroup Driver: systemd 

上述修改主要解決的是“Docker cgroup driver. The recommended driver is "systemd"”的問題。需要強調的是以上修改只是作者在具體安裝操作是遇到的具體問題的解決整理,如在實踐過程中遇到其他問題還需要自行查閱相關資料!

最后,需要注意由于kubernetes禁用虛擬內存,所以要先關閉掉swap否則就會在kubeadm初始化kubernetes的時候報錯,具體如下:

  1. # swapoff -a 

該命令只是臨時禁用swap,如要保證系統重啟后仍然生效則需要“vim /etc/fstab”文件,并注釋掉swap那一行。

04、部署Kubernetes的Master節點

在Kubernetes中Master節點是集群的控制節點,它是由三個緊密協作的獨立組件組合而成,分別是負責API服務的kube-apiserver、負責調度的kube-scheduler以及負責容器編排的kube-controller-manager,其中整個集群的持久化數據由kube-apiserver處理后保存在Etcd中。

要部署Master節點可以直接通過kubeadm進行一鍵部署,但這里我們希望能夠部署一個相對完整的Kubernetes集群,可以通過配置文件來開啟一些實驗性的功能。具體在系統中新建/opt/kubernetes-config/目錄,并創建一個給kubeadm用的YAML文件(kubeadm.yaml),具體內容如下:

  1. apiVersion: kubeadm.k8s.io/v1beta2 
  2.  
  3. kind: ClusterConfiguration 
  4.  
  5. controllerManager: 
  6.  
  7. extraArgs: 
  8.  
  9.     horizontal-pod-autoscaler-use-rest-clients: "true" 
  10.  
  11.     horizontal-pod-autoscaler-sync-period: "10s" 
  12.  
  13.     node-monitor-grace-period: "10s" 
  14.  
  15. apiServer: 
  16.  
  17.  extraArgs: 
  18.  
  19.     runtime-config: "api/all=true" 
  20.  
  21. kubernetesVersion: "v1.20.0" 

在上述yaml配置文件中“horizontal-pod-autoscaler-use-rest-clients: "true"”這個配置,表示將來部署的kuber-controller-manager能夠使用自定義資源(Custom Metrics)進行自動水平擴展,感興趣的讀者可以自行查閱相關資料!而“v1.20.0”就是要kubeadm幫我們部署的Kubernetes版本號。

需要注意的是,如果執行過程中由于國內網絡限制問題導致無法下載相應的Docker鏡像,可以根據報錯信息在國內網站(如阿里云)上找到相關鏡像,然后再將這些鏡像重新tag之后再進行安裝。具體如下:

  1. #從阿里云Docker倉庫拉取Kubernetes組件鏡像 
  2.  
  3. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.20.0 
  4.  
  5. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.20.0 
  6.  
  7. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.20.0 
  8.  
  9. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.20.0 
  10.  
  11. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 
  12.  
  13. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 
  14.  
  15. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0 

下載完成后再將這些Docker鏡像重新tag下,具體命令如下:

  1. #重新tag鏡像 
  2.  
  3. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.20.0 k8s.gcr.io/kube-scheduler:v1.20.0 
  4.  
  5. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.20.0 k8s.gcr.io/kube-controller-manager:v1.20.0 
  6.  
  7. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.20.0 k8s.gcr.io/kube-apiserver:v1.20.0 
  8.  
  9. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.20.0 k8s.gcr.io/kube-proxy:v1.20.0 
  10.  
  11. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2 
  12.  
  13. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0 
  14.  
  15. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0 
  16.  
  17. 此時通過Docker命令就可以查看到這些Docker鏡像信息了,命令如下: 
  18.  
  19. root@kubernetesnode01:/opt/kubernetes-config# docker images 
  20.  
  21. REPOSITORY                                                                          TAG                 IMAGE ID            CREATED             SIZE 
  22.  
  23. k8s.gcr.io/kube-proxy                                                               v1.18.1             4e68534e24f6        2 months ago        117MB 
  24.  
  25. registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64                v1.18.1             4e68534e24f6        2 months ago        117MB 
  26.  
  27. k8s.gcr.io/kube-controller-manager                                                  v1.18.1             d1ccdd18e6ed        2 months ago        162MB 
  28.  
  29. registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64   v1.18.1             d1ccdd18e6ed        2 months ago        162MB 
  30.  
  31. k8s.gcr.io/kube-apiserver                                                           v1.18.1             a595af0107f9        2 months ago        173MB 
  32.  
  33. registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64            v1.18.1             a595af0107f9        2 months ago        173MB 
  34.  
  35. k8s.gcr.io/kube-scheduler                                                           v1.18.1             6c9320041a7b        2 months ago        95.3MB 
  36.  
  37. registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64            v1.18.1             6c9320041a7b        2 months ago        95.3MB 
  38.  
  39. k8s.gcr.io/pause                                                                    3.2                 80d28bedfe5d        4 months ago        683kB 
  40.  
  41. registry.cn-hangzhou.aliyuncs.com/google_containers/pause                           3.2                 80d28bedfe5d        4 months ago        683kB 
  42.  
  43. k8s.gcr.io/coredns                                                                  1.6.7               67da37a9a360        4 months ago        43.8MB 
  44.  
  45. registry.cn-hangzhou.aliyuncs.com/google_containers/coredns                         1.6.7               67da37a9a360        4 months ago        43.8MB 
  46.  
  47. k8s.gcr.io/etcd                                                                     3.4.3-0             303ce5db0e90        8 months ago        288MB 
  48.  
  49. registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64      

解決鏡像拉取問題后再次執行kubeadm部署命令就可以完成Kubernetes Master控制節點的部署了,具體命令及執行結果如下:

  1. root@kubernetesnode01:/opt/kubernetes-config# kubeadm init --config kubeadm.yaml --v=5 
  2.  
  3. ... 
  4.  
  5. Your Kubernetes control-plane has initialized successfully! 
  6.  
  7. To start using your cluster, you need to run the following as a regular user
  8.  
  9.  mkdir -p $HOME/.kube 
  10.  
  11.  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
  12.  
  13.  sudo chown $(id -u):$(id -g) $HOME/.kube/config 
  14.  
  15. Alternatively, if you are the root user, you can run: 
  16.  
  17.  export KUBECONFIG=/etc/kubernetes/admin.conf 
  18.  
  19. You should now deploy a pod network to the cluster. 
  20.  
  21. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at
  22.  
  23.  https://kubernetes.io/docs/concepts/cluster-administration/addons/ 
  24.  
  25. Then you can join any number of worker nodes by running the following on each as root: 
  26.  
  27. kubeadm join 10.211.55.13:6443 --token yi9lua.icl2umh9yifn6z9k \ 
  28.  
  29.    --discovery-token-ca-cert-hash sha256:074460292aa167de2ae9785f912001776b936cec79af68cec597bd4a06d5998d 

從上面部署執行結果中可以看到,部署成功后kubeadm會生成如下指令:

  1. kubeadm join 10.211.55.13:6443 --token yi9lua.icl2umh9yifn6z9k \ 
  2.  
  3.    --discovery-token-ca-cert-hash sha256:074460292aa167de2ae9785f912001776b936cec79af68cec597bd4a06d5998d 

這個kubeadm join命令就是用來給該Master節點添加更多Worker(工作節點)的命令,后面具體部署Worker節點的時候將會使用到它。此外,kubeadm還會提示我們第一次使用Kubernetes集群所需要配置的命令:

  1. mkdir -p $HOME/.kube 
  2.  
  3. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
  4.  
  5. sudo chown $(id -u):$(id -g) $HOME/.kube/config 

而需要這些配置命令的原因在于Kubernetes集群默認是需要加密方式訪問的,所以這幾條命令就是將剛才部署生成的Kubernetes集群的安全配置文件保存到當前用戶的.kube目錄,之后kubectl會默認使用該目錄下的授權信息訪問Kubernetes集群。如果不這么做的化,那么每次通過集群就都需要設置“export KUBECONFIG 環境變量”來告訴kubectl這個安全文件的位置。

執行完上述命令后,現在我們就可以使用kubectl get命令來查看當前Kubernetes集群節點的狀態了,執行效果如下:

  1. #  kubectl get nodes 
  2.  
  3. NAME                  STATUS     ROLES                  AGE     VERSION 
  4.  
  5. centos-linux.shared   NotReady   control-plane,master   6m55s   v1.20.0 

在以上命令輸出的結果中可以看到Master節點的狀態為“NotReady”,為了查找具體原因可以通過“kuberctl describe”命令來查看下該節點(Node)對象的詳細信息,命令如下:

  1. # kubectl describe node centos-linux.shared 

該命令可以非常詳細地獲取節點對象的狀態、事件等詳情,這種方式也是調試Kubernetes集群時最重要的排查手段。根據顯示的如下信息:

  1. ... 
  2.  
  3. Conditions 
  4.  
  5. ... 
  6.  
  7. Ready False... KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized 
  8.  
  9. ... 

可以看到節點處于“NodeNotReady”的原因在于尚未部署任何網絡插件,為了進一步驗證這一點還可以通過kubectl檢查這個節點上各個Kubernetes系統Pod的狀態,命令及執行效果如下:

  1. # kubectl get pods -n kube-system 
  2.  
  3. NAME                                       READY   STATUS    RESTARTS   AGE 
  4.  
  5. coredns-66bff467f8-l4wt6                   0/1     Pending   0          64m 
  6.  
  7. coredns-66bff467f8-rcqx6                   0/1     Pending   0          64m 
  8.  
  9. etcd-kubernetesnode01                      1/1     Running   0          64m 
  10.  
  11. kube-apiserver-kubernetesnode01            1/1     Running   0          64m 
  12.  
  13. kube-controller-manager-kubernetesnode01   1/1     Running   0          64m 
  14.  
  15. kube-proxy-wjct7                           1/1     Running   0          64m 
  16.  
  17. kube-scheduler-kubernetesnode01            1/1     Running   0      

命令中“kube-system”表示的是Kubernetes項目預留的系統Pod空間(Namespace),需要注意它并不是Linux Namespace,而是Kuebernetes劃分的不同工作空間單位。回到命令輸出結果,可以看到coredns等依賴于網絡的Pod都處于Pending(調度失敗)的狀態,這樣說明了該Master節點的網絡尚未部署就緒。

05、部署Kubernetes網絡插件

前面部署Master節點中由于沒有部署網絡插件,所以節點狀態顯示“NodeNotReady”狀態。接下來的內容我們就來具體部署下網絡插件。在Kubernetes“一切皆容器”的設計理念指導下,網絡插件也會以獨立Pod的方式運行在系統中,所以部署起來也很簡單只需要執行“kubectl apply”指令即可,例如以Weave網絡插件為例:

  1. # kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n'
  2.  
  3. serviceaccount/weave-net created 
  4.  
  5. clusterrole.rbac.authorization.k8s.io/weave-net created 
  6.  
  7. clusterrolebinding.rbac.authorization.k8s.io/weave-net created 
  8.  
  9. role.rbac.authorization.k8s.io/weave-net created 
  10.  
  11. rolebinding.rbac.authorization.k8s.io/weave-net created 
  12.  
  13. daemonset.apps/weave-net created 

部署完成后通過“kubectl get”命令重新檢查Pod的狀態:

  1. # kubectl get pods -n kube-system 
  2.  
  3. NAME                                       READY   STATUS    RESTARTS   AGE 
  4.  
  5. coredns-66bff467f8-l4wt6                   1/1     Running   0          116m 
  6.  
  7. coredns-66bff467f8-rcqx6                   1/1     Running   0          116m 
  8.  
  9. etcd-kubernetesnode01                      1/1     Running   0          116m 
  10.  
  11. kube-apiserver-kubernetesnode01            1/1     Running   0          116m 
  12.  
  13. kube-controller-manager-kubernetesnode01   1/1     Running   0          116m 
  14.  
  15. kube-proxy-wjct7                           1/1     Running   0          116m 
  16.  
  17. kube-scheduler-kubernetesnode01            1/1     Running   0          116m 
  18.  
  19. weave-net-746qj                            2/2     Running   0          14m 

可以看到,此時所有的系統Pod都成功啟動了,而剛才部署的Weave網絡插件則在kube-system下面新建了一個名叫“weave-net-746qj”的Pod,而這個Pod就是容器網絡插件在每個節點上的控制組件。

到這里,Kubernetes的Master節點就部署完成了,如果你只需要一個單節點的Kubernetes,那么現在就可以使用了。但是在默認情況下,Kubernetes的Master節點是不能運行用戶Pod的,需要通過額外的操作進行調整,在本文的最后將會介紹到它。

06、部署Worker節點

為了構建一個完整的Kubernetes集群,這里還需要繼續介紹如何部署Worker節點。實際上Kubernetes的Worker節點和Master節點幾乎是相同的,它們都運行著一個kubelet組件,主要的區別在于“kubeadm init”的過程中,kubelet啟動后,Master節點還會自動啟動kube-apiserver、kube-scheduler及kube-controller-manager這三個系統Pod。

在具體部署之前與Master節點一樣,也需要在所有Worker節點上執行前面“安裝kubeadm及Decker環境”小節中的所有步驟。之后在Worker節點執行部署Master節點時生成的“kubeadm join”指令即可,具體如下:

root@kubenetesnode02:~# kubeadm join 10.211.55.6:6443 --token jfulwi.so2rj5lukgsej2o6 --discovery-token-ca-cert-hash 

  1. root@kubenetesnode02:~# kubeadm join 10.211.55.6:6443 --token jfulwi.so2rj5lukgsej2o6     --discovery-token-ca-cert-hash sha256:d895d512f0df6cb7f010204193a9b240e8a394606090608daee11b988fc7fea6 --v=5 
  2.  
  3.  
  4. ... 
  5.  
  6. This node has joined the cluster: 
  7.  
  8. * Certificate signing request was sent to apiserver and a response was received. 
  9.  
  10. * The Kubelet was informed of the new secure connection details. 
  11.  
  12.  
  13. Run 'kubectl get nodes' on the control-plane to see this node join the cluster. 

完成集群加入后為了便于在Worker節點執行kubectl相關命令,需要進行如下配置:

  1. #創建配置目錄 
  2.  
  3. root@kubenetesnode02:~# mkdir -p $HOME/.kube 
  4.  
  5. #將Master節點中$/HOME/.kube/目錄中的config文件拷貝至Worker節點對應目錄 
  6.  
  7. root@kubenetesnode02:~# scp root@10.211.55.6:$HOME/.kube/config $HOME/.kube/ 
  8.  
  9. #權限配置 
  10.  
  11. root@kubenetesnode02:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config 

之后可以在Worker或Master節點執行節點狀態查看命令“kubectl get nodes”,具體如下:

  1. root@kubernetesnode02:~# kubectl get nodes 
  2.  
  3. NAME               STATUS     ROLES    AGE   VERSION 
  4.  
  5. kubenetesnode02    NotReady   <none>   33m   v1.18.4 
  6.  
  7. kubernetesnode01   Ready      master   29h   v1.18.4 

通過節點狀態顯示此時Work節點還處于NotReady狀態,具體查看節點描述信息如下:

  1. root@kubernetesnode02:~# kubectl describe node kubenetesnode02 
  2.  
  3. ... 
  4.  
  5. Conditions: 
  6.  
  7. ... 
  8.  
  9. Ready False ... KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized 
  10.  
  11. ... 

根據描述信息,發現Worker節點NotReady的原因也在于網絡插件沒有部署,繼續執行“部署Kubernetes網絡插件”小節中的步驟即可。但是要注意部署網絡插件時會同時部署kube-proxy,其中會涉及從k8s.gcr.io倉庫獲取鏡像的動作,如果無法訪問外網可能會導致網絡部署異常,這里可以參考前面安裝Master節點時的做法,通過國內鏡像倉庫下載后通過tag的方式進行標記,具體如下:

  1. #從阿里云拉取必要鏡像 
  2.  
  3. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.20.0 
  4.  
  5. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 
  6.  
  7. #將鏡像重新打tag 
  8.  
  9. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.20.0 k8s.gcr.io/kube-proxy:v1.20.0 
  10.  
  11. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2 
  12.  
  13. 如若一切正常,則繼續查看節點狀態,命令如下: 
  14.  
  15. root@kubenetesnode02:~# kubectl get node 
  16.  
  17. NAME               STATUS   ROLES    AGE     VERSION 
  18.  
  19. kubenetesnode02    Ready    <none>   7h52m   v1.20.0 
  20.  
  21. kubernetesnode01   Ready    master   37h     v1.20.0 

可以看到此時Worker節點的狀態已經變成“Ready”,不過細心的讀者可能會發現Worker節點的ROLES并不像Master節點那樣顯示“master”而是顯示了,這是因為新安裝的Kubernetes環境Node節點有時候會丟失ROLES信息,遇到這種情況可以手工進行添加,具體命令如下:

  1. root@kubenetesnode02:~# kubectl label node kubenetesnode02 node-role.kubernetes.io/worker=worker 

再次運行節點狀態命令就能看到正常的顯示了,命令效果如下:

  1. root@kubenetesnode02:~# kubectl get node 
  2.  
  3. NAME               STATUS   ROLES    AGE   VERSION 
  4.  
  5. kubenetesnode02    Ready    worker   8h    v1.18.4 
  6.  
  7. kubernetesnode01   Ready    master   37h   v1.18.4 

到這里就部署完成了具有一個Master節點和一個Worker節點的Kubernetes集群了,作為實驗環境它已經具備了基本的Kubernetes集群功能!

07、部署Dashboard可視化插件

在Kubernetes社區中,有一個很受歡迎的Dashboard項目,它可以給用戶一個可視化的Web界面來查看當前集群中的各種信息。該插件也是以容器化方式進行部署,操作也非常簡單,具體可在Master、Worker節點或其他能夠安全訪問Kubernetes集群的Node上進行部署,命令如下:

  1. root@kubenetesnode02:~# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml 

部署完成后就可以查看Dashboard對應的Pod運行狀態,執行效果如下:

  1. root@kubenetesnode02:~# kubectl get pods -n kubernetes-dashboard 
  2.  
  3. NAME                                         READY   STATUS    RESTARTS   AGE 
  4.  
  5. dashboard-metrics-scraper-6b4884c9d5-xfb8b   1/1     Running   0          12h 
  6.  
  7. kubernetes-dashboard-7f99b75bf4-9lxk8        1/1     Running   0          12h 

除此之外還可以查看Dashboard的服務(Service)信息,命令如下:

  1. root@kubenetesnode02:~# kubectl get svc -n kubernetes-dashboard 
  2.  
  3. NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE 
  4.  
  5. dashboard-metrics-scraper   ClusterIP   10.97.69.158    <none>        8000/TCP   13h 
  6.  
  7. kubernetes-dashboard        ClusterIP   10.111.30.214   <none>     

需要注意的是,由于Dashboard是一個Web服務,從安全角度出發Dashboard默認只能通過Proxy的方式在本地訪問。具體方式為在本地機器安裝kubectl管理工具,并將Master節點$HOME/.kube/目錄中的config文件拷貝至本地主機相同目錄,之后運行“kubectl proxy”命令,如下:

  1. qiaodeMacBook-Pro-2:.kube qiaojiang$ kubectl proxy 
  2.  
  3. Starting to serve on 127.0.0.1:8001 

本地proxy代理啟動后,訪問Kubernetes Dashboard地址,具體如下:

  1. http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ 

如果訪問正常,就會看到如下圖所示界面:

如上圖所示Dashboard訪問需要進行身份認證,主要有Token及Kubeconfig兩種方式,這里我們選擇Token的方式,而Token的生成步驟如下:

1)、創建一個服務賬號

首先在命名空間kubernetes-dashboard中創建名為admin-user的服務賬戶,具體步驟為在本地目錄創建類似“dashboard-adminuser.yaml”文件,具體內容如下:

  1. apiVersion: v1 
  2.  
  3. kind: ServiceAccount 
  4.  
  5. metadata: 
  6.  
  7.  name: admin-user 
  8.  
  9.  namespace: kubernetes-dashboard 

編寫文件后具體執行創建命令:

  1. qiaodeMacBook-Pro-2:.kube qiaojiang$ kubectl apply -f dashboard-adminuser.yaml 
  2.  
  3. Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply 
  4.  
  5. serviceaccount/admin-user configured 

2)、創建ClusterRoleBinding

在使用kubeadm工具配置完Kubernetes集群后,集群中已經存在ClusterRole集群管理,可以使用它為上一步創建的ServiceAccount創建ClusterRoleBinding。具體步驟為在本地目錄創建類似“dashboard-clusterRoleBingding.yaml”的文件,具體內容如下:

  1. apiVersion: rbac.authorization.k8s.io/v1 
  2.  
  3. kind: ClusterRoleBinding 
  4.  
  5. metadata: 
  6.  
  7.  name: admin-user 
  8.  
  9. roleRef: 
  10.  
  11.  apiGroup: rbac.authorization.k8s.io 
  12.  
  13.  kind: ClusterRole 
  14.  
  15.  name: cluster-admin 
  16.  
  17. subjects: 
  18.  
  19. - kind: ServiceAccount 
  20.  
  21.  name: admin-user 
  22.  
  23.  namespace: kubernetes-dashboard 

執行創建命令:

  1. qiaodeMacBook-Pro-2:.kube qiaojiang$ kubectl apply -f dashboard-clusterRoleBingding.yaml 
  2.  
  3. clusterrolebinding.rbac.authorization.k8s.io/admin-user created 

3)、獲取Bearer Token

接下來執行獲取Bearer Token的命令,具體如下:

  1. qiaodeMacBook-Pro-2:.kube qiaojiang$ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}'
  2.  
  3. Name:         admin-user-token-xxq2b 
  4.  
  5. Namespace:    kubernetes-dashboard 
  6.  
  7. Labels:       <none> 
  8.  
  9. Annotations:  kubernetes.io/service-account.name: admin-user 
  10.  
  11.              kubernetes.io/service-account.uid: 213dce75-4063-4555-842a-904cf4e88ed1 
  12.  
  13.  
  14. Type:  kubernetes.io/service-account-token 
  15.  
  16.  
  17. Data 
  18.  
  19. ==== 
  20.  
  21. ca.crt:     1025 bytes 
  22.  
  23. namespace:  20 bytes 
  24.  
  25. token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IlplSHRwcXhNREs0SUJPcTZIYU1kT0pidlFuOFJa 

獲取Token后回到前面的認證方式選擇界面,將獲取的Token信息填入就可以正式進入Dashboard的系統界面,看到Kubernetes集群的詳細可視化信息了,如圖所示:

到這里就完成了Kubernetes可視化插件的部署并通過本地Proxy的方式進行了登錄。在實際的生產環境中如果覺得每次通過本地Proxy的方式進行訪問不夠方便,也可以使用Ingress方式配置集群外訪問Dashboard,感興趣的讀者可以自行嘗試下。也可以先通過通過暴露端口,設置dashboard的訪問,例如:

  1. #查看svc名稱 
  2.  
  3. # kubectl get sc -n kubernetes-dashboard 
  4.  
  5.  
  6. # kubectl edit services -n kubernetes-dashboard kubernetes-dashboard 

然后修改配置文件,如下:

  1. ports: 
  2.  
  3.  - nodePort: 30000 
  4.  
  5.    port: 443 
  6.  
  7.    protocol: TCP 
  8.  
  9.    targetPort: 8443 
  10.  
  11.  selector: 
  12.  
  13.    k8s-app: kubernetes-dashboard 
  14.  
  15.  sessionAffinity: None 
  16.  
  17.  type: NodePort 

之后就可以通過IP+nodePort端口訪問了!例如:

  1. https://47.98.33.48:30000/ 

08、Master調整Taint/Toleration策略

在前面我們提到過,Kubernetes集群的Master節點默認情況下是不能運行用戶Pod的。而之所以能夠達到這樣的效果,Kubernetes依靠的正是Taint/Toleration機制;而該機制的原理是一旦某個節點被加上“Taint”就表示該節點被“打上了污點”,那么所有的Pod就不能再在這個節點上運行。

而Master節點之所以不能運行用戶Pod,就在于其運行成功后會為自身節點打上“Taint”從而達到禁止其他用戶Pod運行在Master節點上的效果(不影響已經運行的Pod),具體可以通過命令查看Master節點上的相關信息,命令執行效果如下:

  1. root@kubenetesnode02:~# kubectl describe node kubernetesnode01 
  2.  
  3. Name:               kubernetesnode01 
  4.  
  5. Roles:              master 
  6.  
  7. ... 
  8.  
  9. Taints:             node-role.kubernetes.io/master:NoSchedule 
  10.  
  11. ... 

可以看到Master節點默認被加上了“node-role.kubernetes.io/master:NoSchedule”這樣的“污點”,其中的值“NoSchedule”意味著這個Taint只會在調度新的Pod時產生作用,而不會影響在該節點上已經運行的Pod。如果在實驗中只想要一個單節點的Kubernetes,那么可以在刪除Master節點上的這個Taint,具體命令如下:

  1. root@kubernetesnode01:~# kubectl taint nodes --all node-role.kubernetes.io/master- 

上述命令通過在“nodes --all node-role.kubernetes.io/master”這個鍵后面加一個短橫線“-”表示移除所有以該鍵為鍵的Taint。

到這一步,一個基本的Kubernetes集群就部署完成了,通過kubeadm這樣的原生管理工具,Kubernetes的部署被大大簡化了,其中像證書、授權及各個組件配置等最麻煩的操作,kubeadm都幫我們完成了。

09、Kubernetes集群重啟命令

如果服務器斷電,或者重啟,可通過如下命令重啟集群:

  1. #重啟docker 
  2.  
  3. systemctl daemon-reload 
  4.  
  5. systemctl restart docker 
  6.  
  7.  
  8. #重啟kubelet 
  9.  
  10. systemctl restart kubelet.service 

 以上就是在CentOS 7 系統環境下搭建一組Kubernetes學習集群的詳細步驟,其它Linux發行版本的部署方法也類似,大家可以根據自己的需求選擇!

 

責任編輯:武曉燕 來源: 無敵碼農
相關推薦

2019-07-04 13:10:53

Docker設計云計算

2020-02-27 14:58:03

LinuxBash編程命令

2020-11-03 14:50:18

CentOSMySQL 8.0數去庫

2020-06-19 09:55:00

Redis數據庫字符串

2010-03-26 15:14:49

CentOS發行版

2012-11-01 17:15:04

2014-10-09 10:04:23

CentOS集群

2019-08-05 09:19:45

PG事務隔離級別數據庫

2021-06-17 06:29:16

kube-vip Kubernetes開源項目

2020-07-22 16:40:23

增刪改查Java代碼

2019-08-02 09:13:22

Linux腳本語言歡聚時代

2025-04-16 08:35:55

2023-12-08 07:59:04

2025-04-29 08:25:00

logrotateLinux日志輪轉

2019-01-15 09:34:30

MySQL高性能優化

2019-11-05 14:20:02

Oracle分組函數數據庫

2019-10-22 07:50:45

SqlServer數據庫觸發器

2017-02-27 21:55:04

LinuxCentOS 7.0Redis

2021-05-12 10:59:39

Kubernetes容器集群

2023-10-09 07:57:14

JavaJCF
點贊
收藏

51CTO技術棧公眾號

高端美女服务在线视频播放| 国产福利拍拍拍| 91精品国产自产观看在线| 亚洲欧洲制服丝袜| 国产成人女人毛片视频在线| 国产精品100| 99久久婷婷| 日韩国产在线播放| 亚洲天堂av一区二区| 日本在线播放一二三区| 中文字幕在线观看一区| 久久久com| 国产av一区二区三区精品| 噜噜噜91成人网| 不卡中文字幕av| 亚欧洲乱码视频| 77成人影视| 欧美日韩精品一区二区| 成品人视频ww入口| 成人片在线看| 国产日产欧美一区二区视频| 国产精品国产亚洲精品看不卡15| 在线免费观看av网址| 亚洲无线视频| 另类专区欧美制服同性| 少妇视频在线播放| 一区二区三区视频免费观看| 精品欧美久久久| 久久成年人网站| 99久久伊人| 色综合久久综合网97色综合| 超碰成人免费在线| 2024最新电影在线免费观看| 中文天堂在线一区| 奇米影视首页 狠狠色丁香婷婷久久综合| 精品久久久久中文慕人妻| 日韩电影免费在线看| 青青草99啪国产免费| 国产亚洲自拍av| 欧美久久综合| 欧美大片免费看| 国产女人18水真多毛片18精品| 色一区二区三区四区| 亚洲色无码播放| 免费污网站在线观看| 丝袜美腿综合| 精品呦交小u女在线| 日本性生活一级片| 国产精品一区二区三区美女| 欧美mv日韩mv国产网站| 能看毛片的网站| 久久综合给合| 日韩欧美一二三四区| 中文字幕avav| 一本一道久久a久久| 欧美成人video| 日本国产在线视频| 欧美91在线| 亚洲精品中文字幕女同| 色婷婷国产精品综合在线观看| 国产96在线 | 亚洲| 韩国日本一区| 五月激情综合婷婷| 免费观看日韩毛片| 欧美色网在线| 欧美久久久久中文字幕| 99999精品| 超碰成人在线免费| 日韩av中文字幕在线| www.自拍偷拍| 成人vr资源| 久久亚洲精品网站| 国产亚洲精品久久久久久无几年桃| 亚洲激情午夜| 日本精品一区二区三区在线播放视频| 欧美一级淫片免费视频黄| 青青草国产精品97视觉盛宴| 成人在线激情视频| 成人爽a毛片一区二区| 91色.com| 在线不卡日本| 伦理av在线| 色av成人天堂桃色av| 天天干天天操天天做| 一区二区三区高清在线观看| 日韩久久免费视频| 天堂а√在线中文在线鲁大师| 欧美黄污视频| 国产99久久精品一区二区永久免费| 中文字幕人妻一区二区在线视频| 国产乱码字幕精品高清av| 精品亚洲第一| 欧美被日视频| 欧美日韩精品二区| 日本中文字幕影院| 欧洲亚洲视频| 久久伊人免费视频| 免费视频久久久| 国产精品一二三四区| 久久综合一区二区三区| 理论片午午伦夜理片在线播放| 亚洲国产一区二区在线播放| 自拍偷拍 国产| 成人h动漫精品一区二区器材| 亚洲图片在线综合| 国产在线视频99| 麻豆免费精品视频| 久久国产精品99久久久久久丝袜| 麻豆免费在线视频| 欧洲色大大久久| 黄色国产在线视频| 亚洲在线久久| 国产精品美女久久| 青青草视频在线观看| 亚洲影视在线播放| 日本美女视频一区| 不卡视频在线| 热久久美女精品天天吊色| 亚洲av无码片一区二区三区| 国产精品福利av | 亚洲三级免费| 亚洲自拍另类欧美丝袜| 亚洲视频tv| 在线亚洲免费视频| 巨胸大乳www视频免费观看| 欧美午夜a级限制福利片| 成人免费福利在线| 天堂中文8资源在线8| 在线一区二区三区做爰视频网站| 少妇饥渴放荡91麻豆| 亚洲黑丝一区二区| 粉嫩精品一区二区三区在线观看| 草莓福利社区在线| 51精品秘密在线观看| 娇小11一12╳yⅹ╳毛片| 日本午夜一本久久久综合| 久久综合一区二区三区| 中文字幕在线直播| 日韩美女av在线| 特级西西444www大精品视频免费看| 成人精品高清在线| 国产免费黄色小视频| 加勒比色老久久爱综合网| 欧美激情欧美狂野欧美精品| 性欧美一区二区三区| 亚洲精品亚洲人成人网| 四川一级毛毛片| 欧美久久九九| 国产亚洲精品久久飘花| 日本韩国欧美在线| av在线不卡网| 欧美成人蜜桃| 国产精欧美一区二区三区蓝颜男同| 精品对白一区国产伦| 久久久久久久久精| 不卡的av在线| av免费中文字幕| 狠狠做深爱婷婷综合一区| 国产精品久久久久久久久久免费 | 欧美办公室脚交xxxx| 国产99亚洲| 91福利视频久久久久| 蜜桃av免费看| 日韩成人免费电影| 午夜伦欧美伦电影理论片| 日韩成人精品视频在线观看| 99久久综合| caoporen国产精品| caoporn视频在线观看| 日韩精品在线视频| 日韩手机在线观看视频| 成人激情久久| 久久免费福利视频| 欧美日韩国产综合视频| 欧美色男人天堂| 欧美精品一区二区成人| 91免费视频大全| 黄色永久免费网站| 天天干天天爱天天操| 一区二区三区在线免费视频 | 国产无码精品在线观看| 91视频免费看| 污污网站在线观看视频| 精品福利av| 亚洲v国产v在线观看| 一区二区日韩| 国产精品露脸av在线| 亚洲性图自拍| 亚洲香蕉在线观看| 午夜美女福利视频| 欧美三级电影在线观看| 精品午夜福利在线观看| 亚洲国产高清aⅴ视频| 岛国av免费观看| 日本不卡一区二区| 欧美视频免费看欧美视频| 97视频精品| 农村寡妇一区二区三区| 911亚洲精品| 国产精品久久久久免费a∨| bl在线肉h视频大尺度| 日韩中文字幕第一页| 少妇性bbb搡bbb爽爽爽欧美| 欧美一区二区在线免费观看| 无码一区二区三区在线观看| 亚洲国产精品一区二区久久 | 久久av一区二区三| 男女性色大片免费观看一区二区 | 欧美国产成人精品| 亚洲久久久久久| 国产一区二区三区国产| 亚洲成人福利在线观看| 国产精品女主播一区二区三区| 一区二区不卡视频| blacked蜜桃精品一区| 成人午夜在线观看| 在线播放国产一区| 亚洲成人资源在线| 欧美激情精品久久久久久免费| 波多野结衣一区二区三区| 天堂在线中文在线| 天堂资源在线中文精品| 男人日女人的bb| 久久国产影院| 成年人免费在线播放| 操人在线观看| 久久躁狠狠躁夜夜爽| 国产日产精品久久久久久婷婷| 精品日韩欧美在线| 国产女人高潮毛片| 欧美日韩国产乱码电影| 免费一级a毛片| 欧美性高潮在线| 日韩久久精品视频| 日本在线成人| 国产精品美女视频网站| 美女一区网站| 日本老师69xxx| 在线最新版中文在线| 97碰碰碰免费色视频| 美女av在线免费看| 欧美又大粗又爽又黄大片视频| 国产免费拔擦拔擦8x高清在线人| 久久久久久亚洲精品不卡| 国产福利在线免费观看| 久久久在线视频| 欧美videos另类精品| 欧美激情第1页| h片在线观看下载| 午夜精品美女自拍福到在线| 两个人看的在线视频www| 欧美亚洲伦理www| 久久uomeier| 国产精品人成电影| 亚州欧美在线| 97人人澡人人爽| 97久久综合区小说区图片区| 国产精品国产精品国产专区不卡| 激情亚洲另类图片区小说区| 久久综合九色99| 成人综合一区| 六月婷婷激情网| 精品91在线| 91黄色小网站| 精品亚洲成a人在线观看 | 天堂在线中文网官网| 日本午夜在线亚洲.国产| 国产福利一区二区三区在线播放| 国产精品爽爽爽爽爽爽在线观看| 国产精品成人**免费视频| 国产高清一区视频| 国产成人手机高清在线观看网站| 亚洲午夜精品久久| 伊人久久大香线蕉av超碰演员| 国产真实乱子伦| 久88久久88久久久| 日韩av无码一区二区三区不卡| 久久精品人人做人人爽人人| 久久久久久久久久97| 亚洲成人动漫av| 一区二区小视频| 精品av综合导航| 在线观看黄av| 国内精品400部情侣激情| 精品视频在线一区二区在线| 91视频婷婷| 国产亚洲第一伦理第一区| 欧美日韩午夜爽爽| 日韩高清不卡一区二区三区| 亚洲精品成人无码毛片| 久久精品亚洲乱码伦伦中文 | 国产精品日韩一区二区| 极品美女一区二区三区| 日韩欧美精品免费| 久久精品国产秦先生| 性欧美丰满熟妇xxxx性久久久| 中文字幕亚洲不卡| 永久免费无码av网站在线观看| 欧美一级在线免费| 成人精品一区二区| 97精品国产97久久久久久免费| 成人97精品毛片免费看| 清纯唯美一区二区三区| 亚洲国产高清一区二区三区| 国产精品自拍视频在线| 91麻豆精东视频| 日产电影一区二区三区| 91精品午夜视频| fc2在线中文字幕| 欧美一级黑人aaaaaaa做受| 亚洲一区二区免费在线观看| 亚洲图片在线观看| 丝袜亚洲另类欧美| 久久人人爽人人人人片| 亚洲一区日韩精品中文字幕| 国产精品九九九九| 中文字幕av一区中文字幕天堂| 国产在线天堂www网在线观看| 91九色对白| 亚洲国产精品综合久久久 | 免费av观看网址| 国产传媒日韩欧美成人| 国产免费久久久久| 欧美日韩高清一区二区不卡| 国产一区二区三区福利| **欧美日韩vr在线| 成人影院中文字幕| 国产精品无码电影在线观看| 韩国成人精品a∨在线观看| 少妇太紧太爽又黄又硬又爽小说| 色婷婷精品久久二区二区蜜臀av| 香蕉视频911| 97香蕉超级碰碰久久免费软件 | 亚洲精品国产嫩草在线观看| 久久涩涩网站| 亚洲在线电影| 亚州av综合色区无码一区| 亚洲成人av在线电影| 日韩在线观看视频一区二区三区| 色与欲影视天天看综合网| 精品中文字幕一区二区三区四区| 最新视频 - x88av| 国产一区二区三区久久久| 岛国毛片在线观看| 日韩精品一区二区在线观看| a级片国产精品自在拍在线播放| 97操在线视频| 激情欧美丁香| 成熟妇人a片免费看网站| 婷婷国产在线综合| 欧美香蕉爽爽人人爽| 国产精品91免费在线| 成人在线免费视频观看| 男人午夜视频在线观看| 亚洲一区二区三区四区五区黄 | 国产精品麻豆网站| 国产精品爽爽久久| 欧美另类高清videos| 国产精品毛片av| 日韩毛片在线免费看| 国产精品剧情在线亚洲| a级片在线播放| 91精品国产91久久久久久| 视频一区中文| 午夜剧场高清版免费观看| 亚洲精品第一国产综合野| 天天操天天舔天天干| 国产成人精品免高潮在线观看| 久久蜜桃av| www.美色吧.com| 欧美综合在线视频| 一色桃子av在线| 欧美日韩精品免费看| 久久www免费人成看片高清| 久久精品国产av一区二区三区| 亚洲美女性生活视频| 中文成人在线| 国产淫片免费看| 日韩理论片一区二区| 日本黄色一区二区三区| 国产精品免费久久久| 欧美亚洲不卡| 纪美影视在线观看电视版使用方法| 欧美一区二区大片| 手机看片久久| 久久av高潮av| 国产精品网站导航| 图片区 小说区 区 亚洲五月| 国产日韩欧美自拍| 国产乱码精品| 成人免费毛片东京热| 国产一区二区三区18| aiai久久| wwwwwxxxx日本| 欧美日韩国产限制| av大片在线| 亚洲欧美日韩精品综合在线观看| 成人免费观看av| 国产精品丝袜黑色高跟鞋| 国产高清视频一区三区|