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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

创建 tls 客户端 凭据时发生严重错误。内部错误状态为 10013_kubectl 创建 Pod 背后到底发生了什么?...

發布時間:2024/4/11 编程问答 100 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建 tls 客户端 凭据时发生严重错误。内部错误状态为 10013_kubectl 创建 Pod 背后到底发生了什么?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

kubectl 創建 Pod 背后到底發生了什么?

想象一下,如果我想將 nginx 部署到 Kubernetes 集群,我可能會在終端中輸入類似這樣的命令:

$ kubectl run --image=nginx --replicas=3

然后回車。幾秒鐘后,你就會看到三個 nginx pod 分布在所有的工作節點上。這一切就像變魔術一樣,但你并不知道這一切的背后究竟發生了什么事情。

Kubernetes 的神奇之處在于:它可以通過用戶友好的 API 來處理跨基礎架構的 deployments,而背后的復雜性被隱藏在簡單的抽象中。但為了充分理解它為我們提供的價值,我們需要理解它的內部原理。

本指南將引導您理解從 client 到 Kubelet 的請求的完整生命周期,必要時會通過源代碼來說明背后發生了什么。

這是一份可以在線修改的文檔,如果你發現有什么可以改進或重寫的,歡迎提供幫助!

1. kubectl

驗證和生成器

當敲下回車鍵以后,kubectl 首先會執行一些客戶端驗證操作,以確保不合法的請求(例如,創建不支持的資源或使用格式錯誤的鏡像名稱)將會快速失敗,也不會發送給 kube-apiserver。通過減少不必要的負載來提高系統性能。

驗證通過之后, kubectl 開始將發送給 kube-apiserver 的 HTTP 請求進行封裝。kube-apiserver 與 etcd 進行通信,所有嘗試訪問或更改 Kubernetes 系統狀態的請求都會通過 kube-apiserver 進行,kubectl 也不例外。kubectl 使用生成器(generators)來構造 HTTP 請求。生成器是一個用來處理序列化的抽象概念。

通過 kubectl run 不僅可以運行 deployment,還可以通過指定參數 --generator 來部署其他多種資源類型。如果沒有指定 --generator 參數的值,kubectl 將會自動判斷資源的類型。

例如,帶有參數 --restart-policy=Always 的資源將被部署為 Deployment,而帶有參數 --restart-policy=Never 的資源將被部署為 Pod。同時 kubectl 也會檢查是否需要觸發其他操作,例如記錄命令(用來進行回滾或審計)。

在 kubectl 判斷出要創建一個 Deployment 后,它將使用 DeploymentV1Beta1 生成器從我們提供的參數中生成一個運行時對象。

API 版本協商與 API 組

為了更容易地消除字段或者重新組織資源結構,Kubernetes 支持多個 API 版本,每個版本都在不同的 API 路徑下,例如 /api/v1 或者 /apis/extensions/v1beta1。不同的 API 版本表明不同的穩定性和支持級別,更詳細的描述可以參考 Kubernetes API 概述。

API 組旨在對類似資源進行分類,以便使得 Kubernetes API 更容易擴展。API 的組名在 REST 路徑或者序列化對象的 apiVersion 字段中指定。例如,Deployment 的 API 組名是 apps,最新的 API 版本是 v1beta2,這就是為什么你要在 Deployment manifests 頂部輸入 apiVersion: apps/v1beta2。

kubectl 在生成運行時對象后,開始為它找到適當的 API 組和 API 版本,然后組裝成一個版本化客戶端,該客戶端知道資源的各種 REST 語義。該階段被稱為版本協商,kubectl 會掃描 remote API 上的 /apis 路徑來檢索所有可能的 API 組。由于 kube-apiserver 在 /apis 路徑上公開了 OpenAPI 格式的規范文檔, 因此客戶端很容易找到合適的 API。

為了提高性能,kubectl 將 OpenAPI 規范緩存到了 ~/.kube/cache 目錄。如果你想了解 API 發現的過程,請嘗試刪除該目錄并在運行 kubectl 命令時將 -v 參數的值設為最大值,然后你將會看到所有試圖找到這些 API 版本的HTTP 請求。參考 kubectl 備忘單。

最后一步才是真正地發送 HTTP 請求。一旦請求發送之后獲得成功的響應,kubectl 將會根據所需的輸出格式打印 success message。

客戶端身份認證

在發送 HTTP 請求之前還要進行客戶端認證,這是之前沒有提到的,現在可以來看一下。

為了能夠成功發送請求,kubectl 需要先進行身份認證。用戶憑證保存在 kubeconfig 文件中,kubectl 通過以下順序來找到 kubeconfig 文件:

  • 如果提供了 --kubeconfig 參數, kubectl 就使用 –kubeconfig 參數提供的 kubeconfig 文件。
  • 如果沒有提供 –kubeconfig 參數,但設置了環境變量 $KUBECONFIG,則使用該環境變量提供的 kubeconfig 文件。
  • 如果 –kubeconfig 參數和環境變量 $KUBECONFIG 都沒有提供,kubectl 就使用默認的 kubeconfig 文件 $HOME/.kube/config。

解析完 kubeconfig 文件后,kubectl 會確定當前要使用的上下文、當前指向的群集以及與當前用戶關聯的任何認證信息。如果用戶提供了額外的參數(例如 –username),則優先使用這些參數覆蓋 kubeconfig 中指定的值。一旦拿到這些信息之后, kubectl 就會把這些信息填充到將要發送的 HTTP 請求頭中:

  • x509 證書使用 tls.TLSConfig 發送(包括 CA 證書)。
  • bearer tokens 在 HTTP 請求頭 Authorization 中發送。
  • 用戶名和密碼通過 HTTP 基本認證發送。
  • OpenID 認證過程是由用戶事先手動處理的,產生一個像 bearer token 一樣被發送的 token。

2. kube-apiserver


認證

現在我們的請求已經發送成功了,接下來將會發生什么?這時候就該 kube-apiserver 閃亮登場了!kube-apiserver 是客戶端和系統組件用來保存和檢索集群狀態的主要接口。為了執行相應的功能,kube-apiserver 需要能夠驗證請求者是合法的,這個過程被稱為認證。

那么 apiserver 如何對請求進行認證呢?當 kube-apiserver 第一次啟動時,它會查看用戶提供的所有 CLI 參數,并組合成一個合適的令牌列表。

舉個例子:如果提供了 --client-ca-file 參數,則會將 x509 客戶端證書認證添加到令牌列表中;如果提供了 --token-auth-file 參數,則會將 breaer token 添加到令牌列表中。

每次收到請求時,apiserver 都會通過令牌鏈進行認證,直到某一個認證成功為止:

  • x509 處理程序將驗證 HTTP 請求是否是由 CA 根證書簽名的 TLS 密鑰進行編碼的。
  • bearer token 處理程序將驗證 --token-auth-file 參數提供的 token 文件是否存在。
  • 基本認證處理程序確保 HTTP 請求的基本認證憑證與本地的狀態匹配。

如果認證失敗,則請求失敗并返回相應的錯誤信息;如果驗證成功,則將請求中的 Authorization 請求頭刪除,并將用戶信息添加到其上下文中。這給后續的授權和準入控制器提供了訪問之前建立的用戶身份的能力。

授權

OK,現在請求已經發送,并且 kube-apiserver 已經成功驗證我們是誰,終于解脫了!

然而事情并沒有結束,雖然我們已經證明了我們是合法的,但我們有權執行此操作嗎?畢竟身份和權限不是一回事。為了進行后續的操作,kube-apiserver 還要對用戶進行授權。

kube-apiserver 處理授權的方式與處理身份驗證的方式相似:通過 kube-apiserver 的啟動參數 --authorization_mode 參數設置。它將組合一系列授權者,這些授權者將針對每個傳入的請求進行授權。如果所有授權者都拒絕該請求,則該請求會被禁止響應并且不會再繼續響應。如果某個授權者批準了該請求,則請求繼續。

kube-apiserver 目前支持以下幾種授權方法:

  • webhook: 它與集群外的 HTTP(S) 服務交互。
  • ABAC: 它執行靜態文件中定義的策略。
  • RBAC: 它使用 rbac.authorization.k8s.io API Group實現授權決策,允許管理員通過 Kubernetes API 動態配置策略。
  • Node: 它確保 kubelet 只能訪問自己節點上的資源。

準入控制

突破了之前所說的認證和授權兩道關口之后,客戶端的調用請求就能夠得到 API Server 的真正響應了嗎?答案是:不能!

從 kube-apiserver 的角度來看,它已經驗證了我們的身份并且賦予了相應的權限允許我們繼續,但對于 Kubernetes 而言,其他組件對于應不應該允許發生的事情還是很有意見的。所以這個請求還需要通過 Admission Controller 所控制的一個 準入控制鏈 的層層考驗,官方標準的 “關卡” 有近十個之多,而且還能自定義擴展!

雖然授權的重點是回答用戶是否有權限,但準入控制器會攔截請求以確保它符合集群的更廣泛的期望和規則。它們是資源對象保存到 etcd 之前的最后一個堡壘,封裝了一系列額外的檢查以確保操作不會產生意外或負面結果。不同于授權和認證只關心請求的用戶和操作,準入控制還處理請求的內容,并且僅對創建、更新、刪除或連接(如代理)等有效,而對讀操作無效。

注意
準入控制器的工作方式與授權者和驗證者的工作方式類似,但有一點區別:與驗證鏈和授權鏈不同,如果某個準入控制器檢查不通過,則整個鏈會中斷,整個請求將立即被拒絕并且返回一個錯誤給終端用戶。

準入控制器設計的重點在于提高可擴展性,某個控制器都作為一個插件存儲在 plugin/pkg/admission 目錄中,并且與某一個接口相匹配,最后被編譯到 kube-apiserver 二進制文件中。

大部分準入控制器都比較容易理解,接下來著重介紹 SecurityContextDeny、ResourceQuota 及 LimitRanger 這三個準入控制器。

  • SecurityContextDeny 該插件將禁止創建設置了 Security Context 的 Pod。
  • ResourceQuota 不僅能限制某個 Namespace 中創建資源的數量,而且能限制某個 Namespace 中被 Pod 所請求的資源總量。該準入控制器和資源對象 ResourceQuota 一起實現了資源配額管理。
  • LimitRanger 作用類似于上面的 ResourceQuota 控制器,針對 Namespace 資源的每個個體(Pod 與 Container 等)的資源配額。該插件和資源對象 LimitRange 一起實現資源配額管理。

3. etcd


到現在為止,Kubernetes 已經對該客戶端的調用請求進行了全面徹底地審查,并且已經驗證通過,運行它進入下一個環節。下一步 kube-apiserver 將對 HTTP 請求進行反序列化,然后利用得到的結果構建運行時對象(有點像 kubectl 生成器的逆過程),并保存到 etcd 中。下面我們將這個過程分解一下。

當收到請求時,kube-apiserver 是如何知道它該怎么做的呢?事實上,在客戶端發送調用請求之前就已經產生了一系列非常復雜的流程。我們就從 kube-apiserver 二進制文件首次運行開始分析吧:

  • 當運行 kube-apiserver 二進制文件時,它會創建一個允許 apiserver 聚合的服務鏈。這是一種對 Kubernetes API 進行擴展的方式。
  • 同時會創建一個 generic apiserver 作為默認的 apiserver。
  • 然后利用生成的 OpenAPI 規范來填充 apiserver 的配置。
  • 然后 kube-apiserver 遍歷數據結構中指定的所有 API 組,并將每一個 API 組作為通用的存儲抽象保存到 etcd 中。當你訪問或變更資源狀態時,kube-apiserver 就會調用這些 API 組。
  • 每個 API 組都會遍歷它的所有組版本,并且將每個 HTTP 路由映射到 REST 路徑中。
  • 當請求的 METHOD 是 POST 時,kube-apiserver 就會將請求轉交給 資源創建處理器。
  • 現在 kube-apiserver 已經知道了所有的路由及其對應的 REST 路徑,以便在請求匹配時知道調用哪些處理器和鍵值存儲。多么機智的設計!現在假設客戶端的 HTTP 請求已經被 kube-apiserver 收到了:

  • 如果處理鏈可以將請求與已經注冊的路由進行匹配,就會將該請求交給注冊到該路由的專用處理器來處理;如果沒有任何一個路由可以匹配該請求,就會將請求轉交給基于路徑的處理器(比如當調用 /apis 時);如果沒有任何一個基于路徑的處理器注冊到該路徑,請求就會被轉交給 not found 處理器,最后返回 404。
  • 幸運的是,我們有一個名為 createHandler 的注冊路由!它有什么作用呢?首先它會解碼 HTTP 請求并進行基本的驗證,例如確保請求提供的 json 與 API 資源的版本相匹配。
  • 接下來進入審計和準入控制階段。
  • 然后資源將會通過 storage provider 保存到 etcd 中。默認情況下保存到 etcd 中的鍵的格式為 <namespace>/<name>,你也可以自定義。
  • 資源創建過程中出現的任何錯誤都會被捕獲,最后 storage provider 會執行 get 調用來確認該資源是否被成功創建。如果需要額外的清理工作,就會調用后期創建的處理器和裝飾器。
  • 最后構造 HTTP 響應并返回給客戶端。
  • 原來 apiserver 做了這么多的工作,以前竟然沒有發現呢!到目前為止,我們創建的 Deployment 資源已經保存到了 etcd 中,但 apiserver 仍然看不到它。

    4. 初始化


    在一個資源對象被持久化到數據存儲之后,apiserver 還無法完全看到或調度它,在此之前還要執行一系列Initializers。Initializers是一種與資源類型相關聯的控制器,它會在資源對外可用之前執行某些邏輯。如果某個資源類型沒有Initializers,就會跳過此初始化步驟立即使資源對外可見。

    正如大佬的博客指出的那樣,Initializers是一個強大的功能,因為它允許我們執行通用引導操作。例如:

    • 將代理邊車容器注入到暴露 80 端口的 Pod 中,或者加上特定的 annotation。
    • 將保存著測試證書的 volume 注入到特定命名空間的所有 Pod 中。
    • 如果 Secret 中的密碼小于 20 個字符,就組織其創建。

    initializerConfiguration 資源對象允許你聲明某些資源類型應該運行哪些Initializers。如果你想每創建一個 Pod 時就運行一個自定義Initializers,你可以這樣做:

    通過該配置創建資源對象 InitializerConfiguration 之后,就會在每個 Pod 的 metadata.initializers.pending 字段中添加 custom-pod-initializer 字段。該初始化控制器會定期掃描新的 Pod,一旦在 Pod 的 pending 字段中檢測到自己的名稱,就會執行其邏輯,執行完邏輯之后就會將 pending 字段下的自己的名稱刪除。

    只有在 pending 字段下的列表中的第一個Initializers可以對資源進行操作,當所有的Initializers執行完成,并且 pending 字段為空時,該對象就會被認為初始化成功。

    你可能會注意到一個問題:如果 kube-apiserver 不能顯示這些資源,那么用戶級控制器是如何處理資源的呢?

    為了解決這個問題,kube-apiserver 暴露了一個 ?includeUninitialized 查詢參數,它會返回所有的資源對象(包括未初始化的)。

    5. 控制循環


    Deployments controller

    到了這個階段,我們的 Deployment 記錄已經保存在 etcd 中,并且所有的初始化邏輯都執行完成,接下來的階段將會涉及到該資源所依賴的拓撲結構。在 Kubernetes 中,Deployment 實際上只是一系列 Replicaset 的集合,而 Replicaset 是一系列 Pod 的集合。那么 Kubernetes 是如何從一個 HTTP 請求按照層級結構依次創建這些資源的呢?其實這些工作都是由 Kubernetes 內置的 Controller(控制器) 來完成的。

    Kubernetes 在整個系統中使用了大量的 Controller,Controller 是一個用于將系統狀態從“當前狀態”修正到“期望狀態”的異步腳本。所有 Controller 都通過 kube-controller-manager 組件并行運行,每種 Controller 都負責一種具體的控制流程。首先介紹一下 Deployment Controller:

    將 Deployment 記錄存儲到 etcd 并初始化后,就可以通過 kube-apiserver 使其可見,然后 Deployment Controller 就會檢測到它(它的工作就是負責監聽 Deployment 記錄的更改)。在我們的例子中,控制器通過一個 Informer 注冊一個創建事件的特定回調函數(更多信息參加下文)。

    當 Deployment 第一次對外可見時,該 Controller 就會將該資源對象添加到內部工作隊列,然后開始處理這個資源對象:

    通過使用標簽選擇器查詢 kube-apiserver 來檢查該 Deployment 是否有與其關聯的 ReplicaSet 或 Pod 記錄。

    有趣的是,這個同步過程是狀態不可知的,它核對新記錄與核對已經存在的記錄采用的是相同的方式。

    在意識到沒有與其關聯的 ReplicaSet 或 Pod 記錄后,Deployment Controller 就會開始執行彈性伸縮流程:

    創建 ReplicaSet 資源,為其分配一個標簽選擇器并將其版本號設置為 1。

    ReplicaSet 的 PodSpec 字段從 Deployment 的 manifest 以及其他相關元數據中復制而來。有時 Deployment 記錄在此之后也需要更新(例如,如果設置了 process deadline)。

    當完成以上步驟之后,該 Deployment 的 status 就會被更新,然后重新進入與之前相同的循環,等待 Deployment 與期望的狀態相匹配。由于 Deployment Controller 只關心 ReplicaSet,因此需要通過 ReplicaSet Controller 來繼續協調。

    ReplicaSets controller

    在前面的步驟中,Deployment Controller 創建了第一個 ReplicaSet,但仍然還是沒有 Pod,這時候就該 ReplicaSet Controller 登場了!ReplicaSet Controller 的工作是監視 ReplicaSets 及其相關資源(Pod)的生命周期。和大多數其他 Controller 一樣,它通過觸發某些事件的處理器來實現此目的。

    當創建 ReplicaSet 時(由 Deployment Controller 創建),RS Controller 檢查新 ReplicaSet 的狀態,并檢查當前狀態與期望狀態之間存在的偏差,然后通過調整 Pod 的副本數來達到期望的狀態。

    Pod 的創建也是批量進行的,從 SlowStartInitialBatchSize 開始,然后在每次成功的迭代中以一種 slow start 操作加倍。這樣做的目的是在大量 Pod 啟動失敗時(例如,由于資源配額),可以減輕 kube-apiserver 被大量不必要的 HTTP 請求吞沒的風險。如果創建失敗,最好能夠優雅地失敗,并且對其他的系統組件造成的影響最小!

    Kubernetes 通過 Owner References(在子級資源的某個字段中引用其父級資源的 ID) 來構造嚴格的資源對象層級結構。這確保了一旦 Controller 管理的資源被刪除(級聯刪除),子資源就會被垃圾收集器刪除,同時還為父級資源提供了一種有效的方式來避免他們競爭同一個子級資源(想象兩對父母都認為他們擁有同一個孩子的場景)。

    Owner References 的另一個好處是:它是有狀態的。如果有任何 Controller 重啟了,那么由于資源對象的拓撲關系與 Controller 無關,該操作不會影響到系統的穩定運行。這種對資源隔離的重視也體現在 Controller 本身的設計中:Controller 不能對自己沒有明確擁有的資源進行操作,它們應該選擇對資源的所有權,互不干涉,互不共享。

    有時系統中也會出現孤兒(orphaned)資源,通常由以下兩種途徑產生:

    • 父級資源被刪除,但子級資源沒有被刪除
    • 垃圾收集策略禁止刪除子級資源

    當發生這種情況時,Controller 將會確保孤兒資源擁有新的 Owner。多個父級資源可以相互競爭同一個孤兒資源,但只有一個會成功(其他父級資源會收到驗證錯誤)。

    Informers

    你可能已經注意到,某些 Controller(例如 RBAC 授權器或 Deployment Controller)需要先檢索集群狀態然后才能正常運行。拿 RBAC 授權器舉例,當請求進入時,授權器會將用戶的初始狀態緩存下來,然后用它來檢索與 etcd 中的用戶關聯的所有 角色(Role)和 角色綁定(RoleBinding)。那么問題來了,Controller 是如何訪問和修改這些資源對象的呢?事實上 Kubernetes 是通過 Informer 機制來解決這個問題的。

    Infomer 是一種模式,它允許 Controller 查找緩存在本地內存中的數據(這份數據由 Informer 自己維護)并列出它們感興趣的資源。

    雖然 Informer 的設計很抽象,但它在內部實現了大量的對細節的處理邏輯(例如緩存),緩存很重要,因為它不但可以減少對 Kubenetes API 的直接調用,同時也能減少 Server 和 Controller 的大量重復性工作。通過使用 Informer,不同的 Controller 之間以線程安全(Thread safety)的方式進行交互,而不必擔心多個線程訪問相同的資源時會產生沖突。

    有關 Informer 的更多詳細解析,請參考這篇文章:Kubernetes: Controllers, Informers, Reflectors and Stores

    Scheduler

    當所有的 Controller 正常運行后,etcd 中就會保存一個 Deployment、一個 ReplicaSet 和 三個 Pod 資源記錄,并且可以通過 kube-apiserver 查看。然而,這些 Pod 資源現在還處于 Pending狀態,因為它們還沒有被調度到集群中合適的 Node 上運行。這個問題最終要靠調度器(Scheduler)來解決。

    Scheduler 作為一個獨立的組件運行在集群控制平面上,工作方式與其他 Controller 相同:監聽實際并將系統狀態調整到期望的狀態。具體來說,Scheduler 的作用是將待調度的 Pod 按照特定的算法和調度策略綁定(Binding)到集群中某個合適的 Node 上,并將綁定信息寫入 etcd 中(它會過濾其 PodSpec 中 NodeName 字段為空的 Pod),默認的調度算法的工作方式如下:

  • 當 Scheduler 啟動時,會注冊一個默認的預選策略鏈,這些預選策略會對備選節點進行評估,判斷備選節點是否滿足備選 Pod 的需求。例如,如果 PodSpec 字段限制了 CPU 和內存資源,那么當備選節點的資源容量不滿足備選 Pod 的需求時,備選 Pod 就不會被調度到該節點上(資源容量=備選節點資源總量-節點中已存在 Pod 的所有容器的需求資源(CPU 和內存)的總和)
  • 一旦篩選出符合要求的候選節點,就會采用優選策略計算出每個候選節點的積分,然后對這些候選節點進行排序,積分最高者勝出。例如,為了在整個系統中分攤工作負載,這些優選策略會從備選節點列表中選出資源消耗最小的節點。每個節點通過優選策略時都會算出一個得分,計算各項得分,最終選出分值大的節點作為優選的結果。
  • 一旦找到了合適的節點,Scheduler 就會創建一個 Binding 對象,該對象的 Name 和 Uid 與 Pod 相匹配,并且其 ObjectReference 字段包含所選節點的名稱,然后通過 POST 請求發送給 apiserver。

    當 kube-apiserver 接收到此 Binding 對象時,注冊吧會將該對象反序列化并更新 Pod 資源中的以下字段:

    • 將 NodeName 的值設置為 ObjectReference 中的 NodeName。
    • 添加相關的注釋。
    • 將 PodScheduled 的 status 值設置為 True。可以通過 kubectl 來查看:
      $ kubectl get <PODNAME> -o go-template='{{range .status.conditions}}{{if eq .type "PodScheduled"}}{{.status}}{{end}}{{end}}'
      復制

    一旦 Scheduler 將 Pod 調度到某個節點上,該節點的 Kubelet 就會接管該 Pod 并開始部署。

    注意
    預選策略和優選策略都可以通過 –policy-config-file 參數來擴展,如果默認的調度器不滿足要求,還可以部署自定義的調度器。如果 podSpec.schedulerName 的值設置為其他的調度器,則 Kubernetes 會將該 Pod 的調度轉交給那個調度器。

    6. Kubelet


    Pod 同步

    現在,所有的 Controller 都完成了工作,我們來總結一下:

    • HTTP 請求通過了認證、授權和準入控制階段。
    • 一個 Deployment、ReplicaSet 和三個 Pod 資源被持久化到 etcd 存儲中。
    • 然后運行了一系列Initializers。
    • 最后每個 Pod 都被調度到合適的節點。

    然而到目前為止,所有的狀態變化僅僅只是針對保存在 etcd 中的資源記錄,接下來的步驟涉及到運行在工作節點之間的 Pod 的分布狀況,這是分布式系統(比如 Kubernetes)的關鍵因素。這些任務都是由 Kubelet 組件完成的,讓我們開始吧!

    在 Kubernetes 集群中,每個 Node 節點上都會啟動一個 Kubelet 服務進程,該進程用于處理 Scheduler 下發到本節點的任務,管理 Pod 的生命周期,包括掛載卷、容器日志記錄、垃圾回收以及其他與 Pod 相關的事件。

    如果換一種思維模式,你可以把 Kubelet 當成一種特殊的 Controller,它每隔 20 秒(可以自定義)向 kube-apiserver 通過 NodeName 獲取自身 Node 上所要運行的 Pod 清單。一旦獲取到了這個清單,它就會通過與自己的內部緩存進行比較來檢測新增加的 Pod,如果有差異,就開始同步 Pod 列表。我們來詳細分析一下同步過程:

  • 如果 Pod 正在創建, Kubelet 就會f="https://github.com/kubernetes/kubernetes/blob/fc8bfe2d8929e11a898c4557f9323c482b5e8842/pkg/kubelet/kubelet.go#L1519">記錄一些在 Prometheus 中用于追蹤 Pod 啟動延時的指標。
  • 然后生成一個 PodStatus 對象,它表示 Pod 當前階段的狀態。Pod 的狀態(Phase) 是 Pod 在其生命周期中的最精簡的概要,包括 Pending,Running,Succeeded,Failed 和 Unkown 這幾個值。狀態的產生過程非常過程,所以很有必要深入了解一下背后的原理:
    • 首先串行執行一系列 Pod 同步處理器(PodSyncHandlers),每個處理器檢查檢查 Pod 是否應該運行在該節點上。當所有的處理器都認為該 Pod 不應該運行在該節點上,則 Pod 的 Phase 值就會變成 PodFailed,并且將該 Pod 從該節點上驅逐出去。例如當你創建一個 Job 時,如果 Pod 失敗重試的時間超過了 spec.activeDeadlineSeconds 設置的值,就會將 Pod 從該節點驅逐出去。
    • 接下來,Pod 的 Phase 值由 init 容器 和應用容器的狀態共同來決定。因為目前容器還沒有啟動,容器被視為處于等待階段,如果 Pod 中至少有一個容器處于等待階段,則其 Phase 值為 Pending。
    • 最后,Pod 的 Condition 字段由 Pod 內所有容器的狀態決定。現在我們的容器還沒有被容器運行時創建,所以 "https://github.com/kubernetes/kubernetes/blob/fc8bfe2d8929e11a898c4557f9323c482b5e8842/pkg/kubelet/status/generate.go#L70-L81">PodReady 的狀態被設置為 False。可以通過 kubectl 查看:
      $ kubectl get <PODNAME> -o go-template='{{range .status.conditions}}{{if eq .type "Ready"}}{{.status}}{{end}}{{end}}'
      復制
  • 生成 PodStatus 之后(Pod 中的 status 字段),Kubelet 就會將它發送到 Pod 的狀態管理器,該管理器的任務是通過 apiserver 異步更新 etcd 中的記錄。
  • 接下來運行一系列準入處理器來確保該 Pod 是否具有相應的權限(包括強制執行 "https://github.com/kubernetes/kubernetes/blob/fc8bfe2d8929e11a898c4557f9323c482b5e8842/pkg/kubelet/kubelet.go#L883-L884">AppArmor 配置文件和 NO_NEW_PRIVS),被準入控制器拒絕的 Pod 將一直保持 Pending 狀態。
  • 如果 Kubelet 啟動時指定了 cgroups-per-qos 參數,Kubelet 就會為該 Pod 創建 cgroup 并進行相應的資源限制。這是為了更方便地對 Pod 進行服務質量(QoS)管理。
  • 然后為 Pod 創建相應的目錄,包括 Pod 的目錄(/var/run/kubelet/pods/<podID>),該 Pod 的卷目錄(<podDir>/volumes)和該 Pod 的插件目錄(<podDir>/plugins)。
  • 卷管理器會href="https://github.com/kubernetes/kubernetes/blob/2723e06a251a4ec3ef241397217e73fa782b0b98/pkg/kubelet/volumemanager/volume_manager.go#L330">掛載 Spec.Volumes 中定義的相關數據卷,然后等待是否掛載成功。根據掛載卷類型的不同,某些 Pod 可能需要等待更長的時間(比如 NFS 卷)。
  • 從 apiserver 中檢索 Spec.ImagePullSecrets 中定義的所有 Secret,然后將其注入到容器中。
  • 最后通過容器運行時接口(Container Runtime Interface(CRI))開始啟動容器(下面會詳細描述)。
  • CRI 與 pause 容器

    到了這個階段,大量的初始化工作都已經完成,容器已經準備好開始啟動了,而容器是由容器運行時(例如 Docker 和 Rkt)啟動的。

    為了更容易擴展,Kubelet 從 1.5.0 開始通過容器運行時接口與容器運行時(Container Runtime)交互。簡而言之,CRI 提供了 Kubelet 和特定的運行時之間的抽象接口,它們之間通過協議緩沖區(它像一個更快的 JSON)和 gRPC API(一種非常適合執行 Kubernetes 操作的 API)。這是一個非常酷的想法,通過使用 Kubelet 和運行時之間定義的契約關系,容器如何編排的具體實現細節已經變得無關緊要。由于不需要修改 Kubernetes 的核心代碼,開發者可以以最小的開銷添加新的運行時。

    不好意思有點跑題了,讓我們繼續回到容器啟動的階段。第一次啟動 Pod 時,Kubelet 會通過 Remote Procedure Command(RPC) 協議調用 RunPodSandbox。sandbox 用于描述一組容器,例如在 Kubernetes 中它表示的是 Pod。sandbox 是一個很寬泛的概念,所以對于其他沒有使用容器的運行時仍然是有意義的(比如在一個基于 hypervisor 的運行時中,sandbox 可能指的就是虛擬機)。

    我們的例子中使用的容器運行時是 Docker,創建 sandbox 時首先創建的是 pause 容器。pause 容器作為同一個 Pod 中所有其他容器的基礎容器,它為 Pod 中的每個業務容器提供了大量的 Pod 級別資源,這些資源都是 Linux 命名空間(包括網絡命名空間,IPC 命名空間和 PID 命名空間)。

    pause 容器提供了一種方法來管理所有這些命名空間并允許業務容器共享它們,在同一個網絡命名空間中的好處是:同一個 Pod 中的容器可以使用 localhost 來相互通信。pause 容器的第二個功能與 PID 命名空間的工作方式相關,在 PID 命名空間中,進程之間形成一個樹狀結構,一旦某個子進程由于父進程的錯誤而變成了“孤兒進程”,其便會被 init 進程進行收養并最終回收資源。關于 pause 工作方式的詳細信息可以參考:The Almighty Pause Container。

    一旦創建好了 pause 容器,下面就會開始檢查磁盤狀態然后開始啟動業務容器。

    CNI 和 Pod 網絡

    現在我們的 Pod 已經有了基本的骨架:一個共享所有命名空間以允許業務容器在同一個 Pod 里進行通信的 pause 容器。但現在還有一個問題,那就是容器的網絡是如何建立的?

    當 Kubelet 為 Pod 創建網絡時,它會將創建網絡的任務交給 CNI 插件。CNI 表示容器網絡接口(Container Network Interface),和容器運行時的運行方式類似,它也是一種抽象,允許不同的網絡提供商為容器提供不同的網絡實現。通過將 json 配置文件(默認在 /etc/cni/net.d 路徑下)中的數據傳送到相關的 CNI 二進制文件(默認在 /opt/cni/bin 路徑下)中,cni 插件可以給 pause 容器配置相關的網絡,然后 Pod 中其他的容器都使用 pause 容器的網絡。下面是一個簡單的示例配置文件:

    CNI 插件還會通過 CNI_ARGS 環境變量為 Pod 指定其他的元數據,包括 Pod 名稱和命名空間。

    下面的步驟因 CNI 插件而異,我們以 bridge 插件舉例:

    • 該插件首先會在根網絡命名空間(也就是宿主機的網絡命名空間)中設置本地 Linux 網橋,以便為該主機上的所有容器提供網絡服務。
    • 然后它會將一個網絡接口(veth 設備對的一端)插入到 pause 容器的網絡命名空間中,并將另一端連接到網橋上。你可以這樣來理解 veth 設備對:它就像一根很長的管道,一端連接到容器,一端連接到根網絡命名空間中,數據包就在管道中進行傳播。
    • 接下來 json 文件中指定的 IPAM Plugin 會為 pause 容器的網絡接口分配一個 IP 并設置相應的路由,現在 Pod 就有了自己的 IP。
      • IPAM Plugin 的工作方式和 CNI Plugin 類似:通過二進制文件調用并具有標準化的接口,每一個 IPAM Plugin 都必須要確定容器網絡接口的 IP、子網以及網關和路由,并將信息返回給 CNI 插件。最常見的 IPAM Plugin 是 host-local,它從預定義的一組地址池中為容器分配 IP 地址。它將地址池的信息以及分配信息保存在主機的文件系統中,從而確保了同一主機上每個容器的 IP 地址的唯一性。
    • 最后 Kubelet 會將集群內部的 DNS 服務器的 Cluster IP 地址傳給 CNI 插件,然后 CNI 插件將它們寫到容器的 /etc/resolv.conf 文件中。

    一旦完成了上面的步驟,CNI 插件就會將操作的結果以 json 的格式返回給 Kubelet。

    跨主機容器網絡

    到目前為止,我們已經描述了容器如何與宿主機進行通信,但跨主機之間的容器如何通信呢?

    通常情況下使用 overlay 網絡來進行跨主機容器通信,這是一種動態同步多個主機間路由的方法。 其中最常用的 overlay 網絡插件是 flannel,flannel 具體的工作方式可以參考 CoreOS 的文檔。

    容器啟動

    所有網絡都配置完成后,接下來就開始真正啟動業務容器了!

    一旦 sanbox 完成初始化并處于 active 狀態,Kubelet 就可以開始為其創建容器了。首先啟動 PodSpec 中定義的 init 容器,然后再啟動業務容器。具體過程如下:

  • 首先拉取容器的鏡像。如果是私有倉庫的鏡像,就會利用 PodSpec 中指定的 Secret 來拉取該鏡像。
  • 然后通過 CRI 接口創建容器。Kubelet 向 PodSpec 中填充了一個 ContainerConfig 數據結構(在其中定義了命令,鏡像,標簽,掛載卷,設備,環境變量等待),然后通過 protobufs 發送給 CRI 接口。對于 Docker 來說,它會將這些信息反序列化并填充到自己的配置信息中,然后再發送給 Dockerd 守護進程。在這個過程中,它會將一些元數據標簽(例如容器類型,日志路徑,dandbox ID 等待)添加到容器中。
  • 接下來會使用 CPU 管理器來約束容器,這是 Kubelet 1.8 中新添加的 alpha 特性,它使用 UpdateContainerResources CRI 方法將容器分配給本節點上的 CPU 資源池。
  • 最后容器開始真正啟動。
  • 如果 Pod 中配置了容器生命周期鉤子(Hook),容器啟動之后就會運行這些 Hook。Hook 的類型包括兩種:Exec(執行一段命令) 和 HTTP(發送HTTP請求)。如果 PostStart Hook 啟動的時間過長、掛起或者失敗,容器將永遠不會變成 running 狀態。
  • 7. 總結


    如果上面一切順利,現在你的集群上應該會運行三個容器,所有的網絡,數據卷和秘鑰都被通過 CRI 接口添加到容器中并配置成功。

    上文所述的創建 Pod 整個過程的流程圖如下所示:

    總結

    以上是生活随笔為你收集整理的创建 tls 客户端 凭据时发生严重错误。内部错误状态为 10013_kubectl 创建 Pod 背后到底发生了什么?...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    日日成人网 | 一区精品久久 | 99综合影院在线 | 日韩电影在线观看一区二区 | 欧美二区在线播放 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 精品女同一区二区三区在线观看 | 国产精品久久久久久久久久久免费 | 超碰免费观看 | 欧美 日韩 国产 中文字幕 | www四虎影院 | 精品91| 深夜免费网站 | 97视频人人免费看 | 狠狠狠色丁香婷婷综合久久五月 | 91福利视频网站 | 超碰人人草人人 | 久久精品男人的天堂 | 色妞久久福利网 | 人人dvd| 婷婷激情在线 | 中文字幕资源站 | 亚洲日本一区二区在线 | 五月天免费网站 | 国产亚洲免费的视频看 | 欧美专区国产专区 | 日韩欧美久久 | 97视频免费看 | 69国产盗摄一区二区三区五区 | 国产精品国产三级国产专区53 | 国产成人黄色片 | 99久久这里有精品 | 成 人 黄 色视频免费播放 | 一级黄色视屏 | 天天干视频在线 | 久久国产a| 91视频xxxx| 特及黄色片 | 国产精品亚洲a | 国产在线资源 | 免费看国产视频 | 日韩精品一区二区三区不卡 | 丁香花中文在线免费观看 | 久草网站在线观看 | 久久久久久国产精品免费 | www成人精品 | 欧美精品一区二区在线观看 | 久久综合久久八八 | 91看片淫黄大片91 | 97视频免费看 | 国产麻豆果冻传媒在线观看 | 一级黄色在线视频 | www.亚洲精品 | 夜夜爱av| 人人插人人费 | 黄色软件在线观看 | 免费av片在线 | 91麻豆精品91久久久久同性 | 亚洲精品在线观看视频 | 亚洲美女精品视频 | 午夜精品久久久久久久久久久久久久 | 中文字幕乱码在线播放 | 欧美一区二区在线免费看 | 成人在线观看免费视频 | 涩涩伊人 | 综合黄色网 | 精品99免费视频 | 国产午夜麻豆影院在线观看 | 中文字幕电影网 | 日本不卡一区二区三区在线观看 | 免费观看xxxx9999片 | 在线你懂的视频 | av福利电影 | 亚洲视频国产 | 综合网在线视频 | 亚洲成人xxx | 亚洲影视九九影院在线观看 | 亚洲视频在线观看免费 | 六月婷操 | 国产高清av在线播放 | 国内视频在线 | 成人免费视频播放 | 亚洲一区黄色 | 成人欧美日韩国产 | 18性欧美xxxⅹ性满足 | 色婷婷导航 | 久久不卡国产精品一区二区 | 欧美日韩视频一区二区三区 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 西西大胆免费视频 | av最新资源| 二区三区在线视频 | 亚洲国产中文字幕在线观看 | 奇米影视8888| 一区av在线播放 | 欧美一区二区三区在线播放 | 国产伦理久久精品久久久久_ | 亚洲婷久久 | 91高清免费在线观看 | 激情欧美一区二区三区 | 夜夜夜精品 | 日韩欧美成 | 久久国产经典 | 欧美va在线观看 | 久久一区二区三区超碰国产精品 | 91网址在线 | 精品亚洲网 | 免费a v视频 | 91欧美国产| 亚洲精品午夜久久久久久久 | 区一区二在线 | 中文字幕 国产视频 | 国产一级免费观看视频 | 久草电影在线观看 | 久久美女高清视频 | 黄色成人在线观看 | 久久久久综合 | 成人av资源在线 | 99精品久久久 | 狠狠躁夜夜a产精品视频 | 91久久在线观看 | 色婷婷婷| 人人狠狠综合久久亚洲婷 | 少妇bbbb搡bbbb桶 | 黄色网中文字幕 | 91插插影库 | 天天射天天射天天射 | 国产欧美精品一区二区三区四区 | 日本爱爱免费 | 日产中文字幕 | 91香蕉视频黄 | 91日韩国产| 香蕉视频色 | 亚洲视频2| 亚洲精品在线观看不卡 | 免费看国产黄色 | 欧美一级日韩三级 | 99爱这里只有精品 | 国产精成人品免费观看 | 日韩av有码在线 | 在线观看av片 | 欧美一级爽 | 免费日韩三级 | 久草在线免费在线观看 | 在线观看av的网站 | 欧美日韩午夜 | 96精品高清视频在线观看软件特色 | 99免费在线| 亚洲爽爽网 | 在线免费观看国产精品 | 蜜桃视频在线视频 | 亚洲精品国产精品乱码在线观看 | 亚洲视屏在线播放 | 亚洲好视频 | 99综合久久 | 伊人成人精品 | 亚洲最新av在线网址 | 国产精品日韩在线观看 | 午夜精品视频在线 | 久久成人精品视频 | 手机av电影在线观看 | 国产一区二区久久 | 99国产一区二区三精品乱码 | 久久天天躁夜夜躁狠狠85麻豆 | 91在线看免费 | 免费看的黄色小视频 | 国产精品久久久久久久久久白浆 | 亚洲欧洲精品一区二区 | 亚洲欧美视频在线观看 | 国产一区二区午夜 | 99视频+国产日韩欧美 | 国产精品免费视频久久久 | 欧美 日韩 久久 | 一区二区免费不卡在线 | 国产特级毛片aaaaaa高清 | 日日干综合 | 免费在线观看黄色网 | 欧美日韩在线观看不卡 | 欧美在线观看视频一区二区 | 黄色三级视频片 | 国产一级视频在线 | 九色精品免费永久在线 | 91在线91| 丁香九月婷婷 | 日韩免费一级a毛片在线播放一级 | 日韩黄色大片在线观看 | 久久五月婷婷综合 | 欧美巨乳网 | 久久av黄色| 国产成人黄色 | 天天干天天拍天天操天天拍 | 玖玖爱在线观看 | 中文字幕一区二区三区精华液 | 国产一区二区网址 | 最新中文字幕视频 | 亚洲国产精品电影 | 成人看片 | 91免费观看视频在线 | 天天色成人网 | 丁香 婷婷 激情 | www.夜夜夜 | 一级精品视频在线观看宜春院 | 97狠狠干| 成 人 黄 色视频免费播放 | 亚洲综合色av | 国产精品你懂的在线观看 | 日韩欧美高清免费 | 久久国产精品第一页 | 久久久伊人网 | 黄色av一区 | 五月天激情视频 | 国产精品情侣视频 | 三级av在线免费观看 | 不卡精品 | 黄色中文字幕 | 黄色精品网站 | 国产伦理久久精品久久久久_ | 在线a人片免费观看视频 | 日韩精品中文字幕在线播放 | 久久黄色免费观看 | 久草爱视频 | 青青草国产成人99久久 | 日韩大片在线看 | 国产午夜精品一区二区三区嫩草 | 9热精品 | 精品国产成人在线影院 | 亚洲第二色| 亚洲精品国产精品国 | 久久99精品国产91久久来源 | 91精品国产一区二区在线观看 | 国产一二区免费视频 | 日本不卡视频 | 国产亚洲精品久久久久久移动网络 | 不卡中文字幕在线 | 久久高清国产 | 国产精品激情在线观看 | 日本精品久久久久影院 | 亚洲精品麻豆 | 在线观看福利网站 | 蜜桃视频色 | 久久99国产综合精品 | 欧美在线观看视频一区二区三区 | 九草视频在线 | 久久99中文字幕 | 日韩特级片 | www激情网| 久久男人中文字幕资源站 | 久久国产精品影片 | 三上悠亚一区二区在线观看 | 色婷婷精品 | 欧美日韩在线观看一区二区三区 | 日韩有码中文字幕在线 | 天天玩天天干 | 2000xxx影视 | 亚洲精品午夜国产va久久成人 | 欧美精品久久久久久久久久久 | 久草手机视频 | 国内精品一区二区 | mm1313亚洲精品国产 | 激情丁香| 97综合视频 | 婷婷 综合 色 | 亚洲精品小区久久久久久 | 亚洲精品乱码久久久久久写真 | 免费在线电影网址大全 | 91精品国产91久久久久福利 | 国产成人在线免费观看 | 久久99精品一区二区三区三区 | 国产精品24小时在线观看 | 日日干精品 | 亚洲精品乱码久久久久久按摩 | 成人高清av在线 | 国产手机av在线 | 精品国产一区二区三区在线 | 99国产情侣在线播放 | 欧美性色黄 | 在线观看视频国产一区 | 久久av免费电影 | 中中文字幕av在线 | 欧美一区二区三区不卡 | 国产亚洲精品久久19p | 99热日本| 欧美日韩在线观看一区二区 | 九九日九九操 | 91一区二区三区久久久久国产乱 | 国产欧美日韩视频 | 亚洲精品免费在线播放 | 日日夜夜中文字幕 | 在线激情影院一区 | 天天操月月操 | 九九热在线播放 | 亚洲综合成人婷婷小说 | 国产精品美女免费看 | 中文在线免费看视频 | 国产麻豆电影在线观看 | 日韩精品观看 | 免费日韩电影 | 成人国产精品一区 | 福利视频区 | 亚洲视频在线免费观看 | 久草国产精品 | 中文字幕成人一区 | 亚洲精品在线观看免费 | 亚洲精品成人av在线 | 日韩久久久久 | 免费精品在线观看 | 黄色亚洲精品 | 国产一二三区av | 91精品久久久久久综合乱菊 | 日韩av电影免费在线观看 | 日韩高清成人在线 | 久久免费国产电影 | 婷婷中文字幕 | 国产精品999久久久 久产久精国产品 | 日韩a在线看 | 黄网站免费大全入口 | 午夜少妇一区二区三区 | 欧美最爽乱淫视频播放 | 亚洲日本在线视频观看 | 日韩亚洲在线视频 | 在线观看免费一级片 | 亚洲精品99久久久久中文字幕 | 中文字幕一区二区三区四区 | 99热在线看 | 国产在线视频一区二区三区 | 狠狠操操操 | 国产精品刺激对白麻豆99 | 免费av 在线| 中文字幕在线观看第二页 | 久久人91精品久久久久久不卡 | 久久免费av电影 | 国内精品视频一区二区三区八戒 | 99热这里只有精品1 av中文字幕日韩 | 精品999在线观看 | 在线免费色视频 | 91视频在线看 | 国产精品一区二区美女视频免费看 | 九九九九精品 | 97碰在线视频 | 久久久久久久久久久精 | 日韩精品一区二区三区在线视频 | 亚洲天堂香蕉 | 毛片永久免费 | 99爱爱| 99久久精品免费视频 | 中文在线8新资源库 | 色伊人网 | 午夜久久精品 | 久久免费国产电影 | 日韩欧美在线观看一区二区 | 亚洲一区二区视频在线播放 | 成人精品999| av免费网页| 日韩视频一区二区在线 | 久久草草影视免费网 | 久草视频资源 | 亚洲电影一区二区 | 国产精品系列在线观看 | 久草视频在线免费看 | 激情网第四色 | 日韩av电影中文字幕在线观看 | 成人精品久久 | 日本中文字幕在线免费观看 | 911国产在线观看 | 亚洲网站在线看 | www视频在线播放 | av片一区 | 1024手机基地在线观看 | 国产亚洲一区二区在线观看 | 中文在线免费看视频 | 五月激情片 | 久久久久久国产精品免费 | 国产九九精品视频 | 欧美日韩亚洲在线 | 一级c片 | 一级黄色毛片 | 日韩高清无线码2023 | 麻豆免费精品视频 | 亚洲综合日韩在线 | 成人一级片在线观看 | 亚洲精品免费在线播放 | 亚洲乱码中文字幕综合 | 色婷婷啪啪免费在线电影观看 | 国产精品成人久久久 | 久久久久网址 | 九九久久久| 日本一区二区三区视频在线播放 | 在线观看精品视频 | 在线岛国av | 国产1级视频 | 国产午夜精品免费一区二区三区视频 | 亚洲黄色在线观看 | 国产在线精品一区二区三区 | 在线观看完整版免费 | 日日夜夜噜 | 日韩欧美在线视频一区二区 | 日本一区二区三区免费观看 | 久久在线精品视频 | 一区二区三区四区在线 | 欧美91精品久久久久国产性生爱 | 色综合天天视频在线观看 | 99久热在线精品 | 免费观看国产视频 | 麻花豆传媒mv在线观看 | 又黄又爽又无遮挡免费的网站 | 成 人 黄 色 免费播放 | 成人a v视频 | 91网页版免费观看 | 国产视频一区在线 | 欧美无极色 | 国产大片黄色 | 91视频免费看片 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 色婷婷啪啪免费在线电影观看 | 亚州精品在线视频 | 91九色在线视频观看 | 日韩电影在线观看一区二区 | 亚洲精品视 | 国产99精品在线观看 | 国产短视频在线播放 | 欧美激情综合色 | 免费91麻豆精品国产自产在线观看 | 欧美国产大片 | 亚洲成成品网站 | 欧美一区二区在线免费观看 | 亚洲aⅴ乱码精品成人区 | 色5月婷婷| www久久国产 | 日韩欧美在线观看一区二区 | 丁香婷婷成人 | 亚洲精品视频第一页 | www.久久色| 久爱综合 | 91亚洲精品视频 | 久久精品电影 | 成人av教育 | 一级片免费观看 | 国产精品18久久久久vr手机版特色 | 欧美 亚洲 另类 激情 另类 | 日韩久久视频 | 色视频在线免费观看 | 国产精品va在线观看入 | 久久免费视频4 | 国产黄色精品在线观看 | 国产精品免费人成网站 | 日韩理论在线视频 | 亚洲精品中文在线资源 | 349k.cc看片app | 97超碰在线免费 | 婷婷六月天综合 | 黄在线免费观看 | 亚洲黄色免费 | www.色综合.com| 毛片一区二区 | 国产精品欧美 | 国产精品18久久久久vr手机版特色 | 欧美成人猛片 | 夜夜操天天摸 | 精品国产视频一区 | av一二三区 | 五月花婷婷 | 久爱综合 | 日本黄色免费看 | 精品久久电影 | 国产一区不卡在线 | 亚洲视频aaa | 亚洲第一香蕉视频 | 久久精品99久久久久久 | 亚洲精品在线免费 | 99 视频 高清| 精品一二三区视频 | 视频直播国产精品 | 中文字幕在线视频第一页 | 96香蕉视频| 日日夜夜艹| 狠狠色噜噜狠狠 | 久久香蕉电影网 | 中文字幕在线观看一区 | 天天干天天操天天 | 色综合久久久久久中文网 | 日韩大片在线免费观看 | 男女激情网址 | 精品久久久久久亚洲综合网站 | 色噜噜日韩精品一区二区三区视频 | 欧美资源 | 久久久久久久18 | 成人丝袜 | 激情五月亚洲 | 久久中文字幕导航 | 日韩在线观看视频一区二区三区 | 午夜精品久久久久久久久久 | 免费日韩 精品中文字幕视频在线 | 国内99视频 | 97色在线观看| av黄色成人| 在线观看涩涩 | www.com黄色| 亚州视频在线 | 久艹在线观看视频 | av字幕在线 | 91精选在线| 91热视频| 伊人成人久久 | 成人在线黄色电影 | 人人添人人澡人人澡人人人爽 | 久久久精品99 | 国产一区精品在线观看 | 天天操天天射天天舔 | 欧美日韩超碰 | 波多野结衣精品视频 | 毛片网站观看 | 最近2019中文免费高清视频观看www99 | www.99在线观看 | av网站在线观看免费 | 色播五月激情五月 | 伊人婷婷在线 | 一区二区三区在线看 | 久草在线免费在线观看 | 插插插色综合 | 日韩精品久久久久久 | 在线观看黄色av | 在线视频观看亚洲 | 蜜桃久久久 | 亚洲国产片色 | 2019中文字幕网站 | 亚洲精品天天 | av中文字幕在线播放 | 中文字幕在线免费 | 久久精品影片 | 精品 激情| 91视频在线免费下载 | 久久久久久久综合色一本 | 亚洲精品国产品国语在线 | 亚洲综合一区二区精品导航 | 亚洲成a人片77777kkkk1在线观看 | 亚洲国产午夜 | 久久精品一区二区三 | 久久在线精品视频 | 在线观看理论 | 国产 日韩 欧美 自拍 | ,午夜性刺激免费看视频 | 亚洲黄色av网址 | 亚洲精色| 91在线小视频 | 中文字幕观看在线 | 91亚色视频在线观看 | 蜜臀久久99静品久久久久久 | 五月天久久婷 | 中文综合在线 | 国产青春久久久国产毛片 | 色婷婷午夜 | 韩日视频在线 | 欧美一级在线观看视频 | 日日爱av | 免费网站观看www在线观看 | a在线免费| 久久精品牌麻豆国产大山 | 久草在线费播放视频 | 久久综合色一综合色88 | 人人艹人人 | 在线日韩一区 | 在线成人av | 国产手机精品视频 | 又黄又刺激的网站 | 亚洲精品久久久久www | 日韩在线观看精品 | 777久久久 | 一区国产精品 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 日韩国产精品一区 | 午夜精品一区二区三区免费 | 中文 一区二区 | 久久精品在线免费观看 | 最新免费av在线 | 婷婷九月激情 | av成人在线播放 | 97免费视频在线播放 | 人人爽人人爽人人爽 | 欧美伦理电影一区二区 | 天干啦夜天干天干在线线 | 99精品久久久久久久 | 国产亚洲在线 | 亚洲专区中文字幕 | 99视频免费观看 | 国产真实精品久久二三区 | 四虎亚洲精品 | 亚洲精品视频在线免费 | 国产精品mv在线观看 | 免费视频xnxx com | 中文字幕在线观看免费高清完整版 | 免费日韩一区二区三区 | 国产精品一区二区av日韩在线 | 亚洲精品456在线播放第一页 | 在线看毛片网站 | 久久蜜臀av | 中文字幕国产一区二区 | 久久精品波多野结衣 | 九九国产精品视频 | 久久狠狠亚洲综合 | 夜夜夜草 | 四虎影视国产精品免费久久 | www.狠狠 | 天天干,天天操 | 色搞搞 | 国产成人精品在线 | 五月天激情在线 | 日韩在线观看精品 | av免费在线免费观看 | 91九色蝌蚪视频网站 | 日韩免费在线观看 | 91成人网页版 | 欧美99热 | 成人免费中文字幕 | 免费看一级特黄a大片 | 欧美成人久久 | 国产黄色精品网站 | 天堂成人在线 | 亚洲精品一区二区网址 | 国产成人一区二区啪在线观看 | 美女黄网站视频免费 | 国内精品美女在线观看 | 麻豆视频国产精品 | 免费在线成人 | 97超碰在线视 | 免费电影一区二区三区 | 日韩视频在线观看视频 | 91污污| 亚洲亚洲精品在线观看 | 国产精品1区2区3区在线观看 | 国产亚洲精品久久久久久移动网络 | 亚洲精品欧美专区 | 久久久久久久久久久久久久av | 女人18片毛片90分钟 | 久久伦理网 | 国产精品丝袜 | 99精品久久久久久久久久综合 | 91人人揉日日捏人人看 | 天天插综合网 | 精品二区视频 | 色香蕉网| 日韩理论片中文字幕 | 精品视频免费在线 | 国产成人一区二 | 国产 日韩 在线 亚洲 字幕 中文 | 久久tv视频 | 99热只有精品在线观看 | 亚洲一区美女视频在线观看免费 | 国产精品久久久久久久久免费 | 在线观看91久久久久久 | 亚洲精品456在线播放第一页 | 免费亚洲精品 | 精品久久久国产 | 久久久免费精品视频 | 一区在线观看 | 国产一级电影网 | 精品自拍网 | 国产精品久久久久久久久毛片 | 手机av在线网站 | 中文在线www | 日日摸日日添夜夜爽97 | 一级片免费视频 | 日韩免费成人av | 国产一区二区在线免费播放 | 亚洲黄色片 | 精品一区二区三区四区在线 | 免费福利小视频 | 97成人资源站| 欧美日韩免费观看一区二区三区 | 日韩免费不卡av | 超碰在线cao | 欧美日韩伦理在线 | 韩国在线视频一区 | av手机在线播放 | 亚洲欧美怡红院 | 日韩av视屏| 3d黄动漫免费看 | 亚洲天堂香蕉 | 天天色婷婷| 99视频在线精品免费观看2 | 亚州国产精品视频 | 高清有码中文字幕 | 天天干天天天 | 欧美色一色 | 成人午夜影院在线观看 | 丁香六月欧美 | 在线电影91 | 免费在线观看成人小视频 | 成人蜜桃| 18国产精品福利片久久婷 | 2021国产视频 | 黄色一级免费 | 干狠狠| 狠狠伊人| 一区二区三区日韩视频在线观看 | 亚洲专区视频在线观看 | 国产成人久久精品77777 | 不卡av在线免费观看 | 国产69精品久久久久99尤 | 91大神在线观看视频 | 欧美精品一区二区免费 | 国产精品日韩久久久久 | 国产一区免费观看 | 日本中文不卡 | 亚洲国产黄色 | 国产黄色美女 | 午夜精品一区二区三区视频免费看 | 亚洲国产精品免费 | 久久国产日韩 | 天天操夜夜做 | 欧美日韩精品二区第二页 | 日韩啪啪小视频 | 一二区av| av电影在线不卡 | 天天射天天爽 | 高潮毛片无遮挡高清免费 | 99久久久国产精品美女 | 中文国产成人精品久久一 | 国产美女免费看 | 亚洲成人软件 | 婷婷色站| 久久综合狠狠综合久久综合88 | 丁香免费视频 | 久久经典国产视频 | 最近中文字幕在线播放 | 国产在线视频在线观看 | 六月婷色 | 欧美日比视频 | 99国产情侣在线播放 | 97超在线视频 | 最近日本mv字幕免费观看 | 久久久精品影视 | 丝袜美腿在线视频 | 午夜精品av| 青草视频在线看 | 日韩精品一区二区电影 | 日韩久久精品一区二区 | 天天插日日射 | 久草视频国产 | 免费在线观看黄色网 | 91九色蝌蚪国产 | 综合久久影院 | 免费看一及片 | 中文字幕在线观看免费 | 午夜av影院 | 亚洲黄色av网址 | 一区二区三区在线观看中文字幕 | 天天操天天操天天操天天操 | 国产精品18久久久久久不卡孕妇 | 国产成人精品一区二区在线观看 | 视频在线观看国产 | 中文字幕999 | 日韩在线观看一区二区三区 | 国产一区视频导航 | 久草在线在线视频 | 久草在线 | 在线视频精品 | 一区二区在线影院 | 国产精品自拍av | 色多多污污在线观看 | 久久久亚洲电影 | 一级免费片 | 天天射综合网视频 | 欧美一区二区三区免费看 | 韩国三级一区 | 在线免费高清一区二区三区 | 欧美精品久久久久久 | 97电影网站 | 欧美日韩视频观看 | 欧美日韩在线视频免费 | wwwww.国产 | 日韩在线免费电影 | 午夜视频在线观看一区二区 | 久久久久蜜桃 | 在线中文字幕观看 | 亚洲高清视频在线观看免费 | 婷婷午夜天 | 亚洲情影院 | 在线观看视频精品 | 色偷偷男人的天堂av | 国产啊v在线| 国产亚洲精品久久久久久 | 国产一二三在线视频 | 久久国语露脸国产精品电影 | 久久毛片网| 午夜18视频在线观看 | 久久成人高清视频 | 免费看久久 | 在线免费精品视频 | 国产高清免费视频 | 色多多污污在线观看 | 久久精品视频在线 | 精品国产视频在线观看 | 国产免费人成xvideos视频 | 国产精品免费av | 国精产品999国精产品岳 | 欧美成人黄色 | 91在线看| 亚洲国产精品500在线观看 | 国产成人久久av | 亚洲人视频在线 | 91精品国自产在线观看 | 国产精品一区久久久久 | 999成人免费视频 | 五月在线 | 日日夜夜婷婷 | 日韩18p| 成人av网址大全 | 97av视频在线观看 | 天天干天天插 | 久久久一本精品99久久精品66 | 免费在线观看毛片网站 | 在线观看的a站 | 久久久人人人 | 国产日韩欧美综合在线 | 久久av网址| 97超碰资源站 | 视频精品一区二区三区 | 精品欧美小视频在线观看 | 久久亚洲综合色 | 在线一级片 | 夜夜躁狠狠躁 | 亚洲激情在线观看 | 久草精品视频在线看网站免费 | 五月婷婷综合在线视频 | 绯色av一区 | 91精品在线播放 | 欧美成人999| 99精品观看 | 99精品久久只有精品 | 欧美一级裸体视频 | 天天摸天天舔天天操 | 色综合天天射 | 在线激情影院一区 | 国产一区二区高清 | 91精品一区国产高清在线gif | 麻豆系列在线观看 | 久久中文字幕在线视频 | 日日夜夜婷婷 | 欧美精品九九99久久 | 奇米影视777影音先锋 | 久久99网 | 日韩www在线| 中文字幕精品三区 | 久久精品亚洲综合专区 | 色多视频在线观看 | 天天色天天操天天爽 | 日韩乱码在线 | 日韩精品视| 最新中文字幕在线资源 | 日本在线观看视频一区 | 国产黄在线免费观看 | av黄在线播放 | 欧美亚洲另类在线视频 | 午夜久久久影院 | 日韩二区在线观看 | 在线视频日韩一区 | 美女在线观看网站 | 草莓视频在线观看免费观看 | 韩日三级av | 天天爽天天爽夜夜爽 | 九月婷婷色 | 天天操·夜夜操 | 久久99在线视频 | 国产九九九精品视频 | 国产精品成人自拍 | 免费中文字幕在线观看 | 欧美精品久久久久a | 国产在线视频一区二区 | 日韩一级黄色片 | 国产涩涩网站 | 美女视频a美女大全免费下载蜜臀 | 精品999在线 | 99国产一区二区三精品乱码 | 亚洲综合视频网 | 亚洲精品免费在线观看视频 | 精品久久久久久综合 | 4438全国亚洲精品观看视频 | 欧美色图亚洲图片 | 免费在线观看黄网站 | 91麻豆精品国产自产在线游戏 | 国产精品久久一区二区三区, | 国产一级二级在线 | 超碰av在线播放 | 久久综合免费视频影院 | 黄色成人在线网站 | 在线v片免费观看视频 | 成人毛片在线观看视频 | 97在线资源 | 日日夜夜精品免费视频 | 久久草草影视免费网 | 911国产精品 | 色爱成人网 | 免费黄a大片 | 草久中文字幕 | 中文字幕日韩电影 | 在线影院av | 美女网站色在线观看 | 免费高清在线视频一区· | 色av色av色av | 日韩精品视频一二三 | 深爱激情av | 狠狠88综合久久久久综合网 | 99精品视频在线观看 | 五月婷婷一区二区三区 | 伊人一级 | 欧美另类xxx | 在线观看亚洲国产精品 | 精品美女在线视频 | 69视频国产 | 国产精品国产三级国产aⅴ入口 | 国产精品福利在线播放 | 国产精品久久久久久久午夜 | 黄色一级在线视频 | 九草视频在线观看 | 天天·日日日干 | 日本韩国中文字幕 | 国产精品免费观看在线 | 久久伊人八月婷婷综合激情 | 91亚洲网 | 激情小说网站亚洲综合网 | 91综合色 | 免费色网 | 丰满少妇对白在线偷拍 | 91x色| 丝袜av网站 | 国产主播大尺度精品福利免费 | 婷婷久月 | 午夜电影 电影 | 国产涩涩网站 | 日韩在线电影观看 | 亚洲一二三久久 | 免费在线观看视频a | 国产精品一码二码三码在线 | 国产精品18p | 美女精品国产 | 国产精品一区二区三区在线看 | 久草在线视频新 | 99热国产在线中文 | 一级片观看 | 国产精品自产拍在线观看 | 亚洲视频在线免费观看 | 美女av在线免费 | 国产视频精品视频 | 在线不卡视频 | 久久久性 | 国产精品久久久久9999 | 91人人揉日日捏人人看 | 中文亚洲欧美日韩 | 久久精品韩国 | 啪啪免费试看 | 成年人国产在线观看 | 综合色站| 中文字幕 国产精品 | 日韩一区二区三区高清免费看看 | 国产看片网站 | 亚洲天堂精品视频在线观看 | 日日色综合 | 国产精品成人一区二区 | av黄网站 | 91九色蝌蚪国产 | 91亚洲国产成人久久精品网站 | 伊在线视频 | 色无五月 | 欧美成人精品欧美一级乱黄 | 99热手机在线观看 | 日韩av不卡在线播放 | 久久久精品福利视频 | 中文字幕电影一区 | 99精品视频免费全部在线 | 欧美国产日韩在线观看 | 久久综合五月天 | 18国产精品福利片久久婷 | www.99久久.com | 黄色av电影| 色婷婷视频网 | 久久久高清免费视频 | 国产精品综合在线观看 | av大片网址 | 久久免费视频播放 | 色婷婷国产精品一区在线观看 | 久久夜色精品国产欧美一区麻豆 | 午夜aaaa | 亚洲天堂社区 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 日韩欧美视频一区二区 | 国产精品高清一区二区三区 | 亚洲天天在线日亚洲洲精 | 91免费日韩 | 在线观看日韩免费视频 | 国产精品一区二区你懂的 | 国产一区二区久久精品 | 色综合天天狠天天透天天伊人 | 久久久污 | 色婷婷在线观看视频 | 亚洲精品一区二区三区四区高清 | 狠狠的操| 日韩v在线91成人自拍 | 国产精品影音先锋 |