成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Argo Rollouts 基于 Analysis 的漸進(jìn)式發(fā)布

云計(jì)算
Rollout 是 Deployment 資源的直接替代品,它提供額外的 blueGreen 和 canary 更新策略,這些策略可以在更新期間創(chuàng)建 AnalysisRuns 和 Experiments,可以推進(jìn)更新,或中止更新。

[[411608]]

前面我們介紹了使用手動(dòng)的方式來(lái)控制 Argo Rollouts 進(jìn)行應(yīng)用交付,此外我們還可以利用 Argo Rollouts 提供的分析(Analysis)來(lái)執(zhí)行自動(dòng)交付。Argo Rollouts 提供了幾種執(zhí)行分析(Analysis)的方法來(lái)推動(dòng)漸進(jìn)式交付,首先需要了解幾個(gè) CRD 資源:

  • Rollout:Rollout 是 Deployment 資源的直接替代品,它提供額外的 blueGreen 和 canary 更新策略,這些策略可以在更新期間創(chuàng)建 AnalysisRuns 和 Experiments,可以推進(jìn)更新,或中止更新。
  • AnalysisTemplate:AnalysisTemplate 是一個(gè)模板,它定義了如何執(zhí)行金絲雀分析,例如它應(yīng)該執(zhí)行的指標(biāo)、頻率以及被視為成功或失敗的值,AnalysisTemplate 可以用輸入值進(jìn)行參數(shù)化。
  • ClusterAnalysisTemplate:ClusterAnalysisTemplate 和 AnalysisTemplate 類似,但它是全局范圍內(nèi)的,它可以被整個(gè)集群的任何 Rollout 使用。
  • AnalysisRun:AnalysisRun 是 AnalysisTemplate 的實(shí)例化。AnalysisRun 就像 Job 一樣,它們最終會(huì)完成,完成的運(yùn)行被認(rèn)為是成功的、失敗的或不確定的,運(yùn)行的結(jié)果分別影響 Rollout 的更新是否繼續(xù)、中止或暫停。

后臺(tái)分析

金絲雀正在執(zhí)行其部署步驟時(shí),分析可以在后臺(tái)運(yùn)行。

以下示例是每 10 分鐘逐漸將 Canary 權(quán)重增加 20%,直到達(dá)到 100%。在后臺(tái),基于名為 success-rate 的 AnalysisTemplate 啟動(dòng) AnalysisRun,success-rate 模板查詢 Prometheus 服務(wù)器,以 5 分鐘間隔/樣本測(cè)量 HTTP 成功率,它沒有結(jié)束時(shí)間,一直持續(xù)到停止或失敗。如果測(cè)量到的指標(biāo)小于 95%,并且有三個(gè)這樣的測(cè)量值,則分析被視為失敗。失敗的分析會(huì)導(dǎo)致 Rollout 中止,將 Canary 權(quán)重設(shè)置回零,并且 Rollout 將被視為降級(jí)。否則,如果 rollout 完成其所有 Canary 步驟,則認(rèn)為 rollout 是成功的,并且控制器將停止運(yùn)行分析。

如下所示的 Rollout 資源對(duì)象:

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: Rollout 
  3. metadata: 
  4.   name: guestbook 
  5. spec: 
  6. ... 
  7.   strategy: 
  8.     canary: 
  9.       analysis: 
  10.         templates: 
  11.         - templateName: success-rate 
  12.         startingStep: 2 # 延遲開始分析,到第3步開始 
  13.         args: 
  14.         - name: service-name 
  15.           value: guestbook-svc.default.svc.cluster.local 
  16.       steps: 
  17.       - setWeight: 20 
  18.       - pause: {duration: 10m} 
  19.       - setWeight: 40 
  20.       - pause: {duration: 10m} 
  21.       - setWeight: 60 
  22.       - pause: {duration: 10m} 
  23.       - setWeight: 80 
  24.       - pause: {duration: 10m} 

上面我們引用了一個(gè) success-rate 的模板:

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: AnalysisTemplate 
  3. metadata: 
  4.   name: success-rate 
  5. spec: 
  6.   args: 
  7.   - name: service-name 
  8.   metrics: 
  9.   - name: success-rate 
  10.     interval: 5m 
  11.     # NOTE: prometheus queries return results in the form of a vector. 
  12.     # So it is common to access the index 0 of the returned array to obtain the value 
  13.     successCondition: result[0] >= 0.95 
  14.     failureLimit: 3 
  15.     provider: 
  16.       prometheus: 
  17.         address: http://prometheus.example.com:9090 
  18.         query: | 
  19.           sum(irate( 
  20.             istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}",response_code!~"5.*"}[5m] 
  21.           )) / 
  22.           sum(irate( 
  23.             istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}"}[5m] 
  24.           )) 

內(nèi)聯(lián)分析

分析也可以作為內(nèi)嵌“分析”步驟來(lái)執(zhí)行,當(dāng)分析以 "內(nèi)聯(lián) "方式進(jìn)行時(shí),在到達(dá)該步驟時(shí)啟動(dòng) AnalysisRun,并在運(yùn)行完成之前阻止其推進(jìn)。分析運(yùn)行的成功或失敗決定了部署是繼續(xù)進(jìn)行下一步,還是完全中止部署。

如下所示的示例中我們將 Canary 權(quán)重設(shè)置為 20%,暫停 5 分鐘,然后運(yùn)行分析。如果分析成功,則繼續(xù)發(fā)布,否則中止。

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: Rollout 
  3. metadata: 
  4.   name: guestbook 
  5. spec: 
  6. ... 
  7.   strategy: 
  8.     canary: 
  9.       steps: 
  10.       - setWeight: 20 
  11.       - pause: {duration: 5m} 
  12.       - analysis: 
  13.           templates: 
  14.           - templateName: success-rate 
  15.           args: 
  16.           - name: service-name 
  17.             value: guestbook-svc.default.svc.cluster.local 

上面的對(duì)象中我們將 analysis 作為一個(gè)步驟內(nèi)聯(lián)到了 Rollout 步驟中,當(dāng)20%流量暫停5分鐘后,開始執(zhí)行 success-rate 這個(gè)分析模板。

這里 AnalysisTemplate 與上面的后臺(tái)分析例子相同,但由于沒有指定間隔時(shí)間,分析將執(zhí)行一次測(cè)量就完成了。

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: AnalysisTemplate 
  3. metadata: 
  4.   name: success-rate 
  5. spec: 
  6.   args: 
  7.   - name: service-name 
  8.   - name: prometheus-port 
  9.     value: 9090 
  10.   metrics: 
  11.   - name: success-rate 
  12.     successCondition: result[0] >= 0.95 
  13.     provider: 
  14.       prometheus: 
  15.         address: "http://prometheus.example.com:{{args.prometheus-port}}" 
  16.         query: | 
  17.           sum(irate( 
  18.             istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}",response_code!~"5.*"}[5m] 
  19.           )) / 
  20.           sum(irate( 
  21.             istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}"}[5m] 
  22.           )) 

此外我們可以通過(guò)指定 count 和 interval 字段,可以在一個(gè)較長(zhǎng)的時(shí)間段內(nèi)進(jìn)行多次測(cè)量。

  1. metrics: 
  2.   - name: success-rate 
  3.     successCondition: result[0] >= 0.95 
  4.     interval: 60s 
  5.     count: 5 
  6.     provider: 
  7.       prometheus: 
  8.         address: http://prometheus.example.com:9090 
  9.         query: ... 

多個(gè)模板的分析

Rollout 在構(gòu)建 AnalysisRun 時(shí)可以引用多個(gè) AnalysisTemplate。這樣我們就可以從多個(gè) AnalysisTemplate 中來(lái)組成分析,如果引用了多個(gè)模板,那么控制器將把這些模板合并在一起,控制器會(huì)結(jié)合所有模板的指標(biāo)和 args 字段。如下所示:

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: Rollout 
  3. metadata: 
  4.   name: guestbook 
  5. spec: 
  6. ... 
  7.   strategy: 
  8.     canary: 
  9.       analysis: 
  10.         templates: 
  11.         - templateName: success-rate 
  12.         - templateName: error-rate 
  13.         args: 
  14.         - name: service-name 
  15.           value: guestbook-svc.default.svc.cluster.local 
  16.  
  17. --- 
  18.  
  19. apiVersion: argoproj.io/v1alpha1 
  20. kind: AnalysisTemplate 
  21. metadata: 
  22.   name: success-rate 
  23. spec: 
  24.   args: 
  25.   - name: service-name 
  26.   metrics: 
  27.   - name: success-rate 
  28.     interval: 5m 
  29.     successCondition: result[0] >= 0.95 
  30.     failureLimit: 3 
  31.     provider: 
  32.       prometheus: 
  33.         address: http://prometheus.example.com:9090 
  34.         query: | 
  35.           sum(irate( 
  36.             istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}",response_code!~"5.*"}[5m] 
  37.           )) / 
  38.           sum(irate( 
  39.             istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}"}[5m] 
  40.           )) 
  41. --- 
  42. apiVersion: argoproj.io/v1alpha1 
  43. kind: AnalysisTemplate 
  44. metadata: 
  45.   name: error-rate 
  46. spec: 
  47.   args: 
  48.   - name: service-name 
  49.   metrics: 
  50.   - name: error-rate 
  51.     interval: 5m 
  52.     successCondition: result[0] <= 0.95 
  53.     failureLimit: 3 
  54.     provider: 
  55.       prometheus: 
  56.         address: http://prometheus.example.com:9090 
  57.         query: | 
  58.           sum(irate( 
  59.             istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}",response_code=~"5.*"}[5m] 
  60.           )) / 
  61.           sum(irate( 
  62.             istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}"}[5m] 
  63.           )) 

當(dāng)執(zhí)行的分析的時(shí)候,控制器會(huì)將上面的 success-rate 和 error-rate 兩個(gè)模板合并到一個(gè) AnalysisRun 對(duì)象中去。

需要注意的是如果出現(xiàn)以下情況,控制器在合并模板時(shí)將出錯(cuò):

  • 模板中的多個(gè)指標(biāo)具有相同的名稱
  • 兩個(gè)同名的參數(shù)都有值

分析模板參數(shù)

AnalysisTemplates 可以聲明一組參數(shù),這些參數(shù)可以由 Rollouts 傳遞。然后,這些參數(shù)可以像在 metrics 配置中一樣使用,并在 AnalysisRun 創(chuàng)建時(shí)被實(shí)例化,參數(shù)占位符被定義為 {{ args. }},如下所示:

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: AnalysisTemplate 
  3. metadata: 
  4.   name: args-example 
  5. spec: 
  6.   args: 
  7.   # required 
  8.   - name: service-name 
  9.   - name: stable-hash 
  10.   - name: latest-hash 
  11.   # optional 
  12.   - name: api-url 
  13.     value: http://example/measure 
  14.   # from secret 
  15.   - name: api-token 
  16.     valueFrom: 
  17.       secretKeyRef: 
  18.         name: token-secret 
  19.         key: apiToken 
  20.   metrics: 
  21.   - name: webmetric 
  22.     successCondition: result == 'true' 
  23.     provider: 
  24.       web: 
  25.         # placeholders are resolved when an AnalysisRun is created 
  26.         url: "{{ args.api-url }}?service={{ args.service-name }}" 
  27.         headers: 
  28.           - keyAuthorization 
  29.             value: "Bearer {{ args.api-token }}" 
  30.         jsonPath: "{$.results.ok}" 

在創(chuàng)建 AnalysisRun 時(shí),Rollout 中定義的參數(shù)與 AnalysisTemplate 的參數(shù)會(huì)合并,如下所示:

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: Rollout 
  3. metadata: 
  4.   name: guestbook 
  5. spec: 
  6. ... 
  7.   strategy: 
  8.     canary: 
  9.       analysis: 
  10.         templates: 
  11.         - templateName: args-example 
  12.         args: 
  13.         # required value 
  14.         - name: service-name 
  15.           value: guestbook-svc.default.svc.cluster.local 
  16.         # override default value 
  17.         - name: api-url 
  18.           value: http://other-api 
  19.         # pod template hash from the stable ReplicaSet 
  20.         - name: stable-hash 
  21.           valueFrom: 
  22.             podTemplateHashValue: Stable 
  23.         # pod template hash from the latest ReplicaSet 
  24.         - name: latest-hash 
  25.           valueFrom: 
  26.             podTemplateHashValue: Latest 

此外分析參數(shù)也支持 valueFrom,用于讀取 meta 數(shù)據(jù)并將其作為參數(shù)傳遞給 AnalysisTemplate,如下例子是引用元數(shù)據(jù)中的 env 和 region 標(biāo)簽,并將它們傳遞給 AnalysisTemplate。

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: Rollout 
  3. metadata: 
  4.   name: guestbook 
  5.   labels: 
  6.     appType: demo-app 
  7.     buildType: nginx-app 
  8.     ... 
  9.     env: dev 
  10.     region: us-west-2 
  11. spec: 
  12. ... 
  13.   strategy: 
  14.     canary: 
  15.       analysis: 
  16.         templates: 
  17.         - templateName: args-example 
  18.         args: 
  19.         ... 
  20.         - name: env 
  21.           valueFrom: 
  22.             fieldRef: 
  23.               fieldPath: metadata.labels['env'
  24.         # region where this app is deployed 
  25.         - name: region 
  26.           valueFrom: 
  27.             fieldRef: 
  28.               fieldPath: metadata.labels['region'

藍(lán)綠預(yù)發(fā)布分析

使用 BlueGreen 策略的 Rollout 可以在使用預(yù)發(fā)布將流量切換到新版本之前啟動(dòng)一個(gè) AnalysisRun。分析運(yùn)行的成功或失敗決定 Rollout 是否切換流量,或完全中止 Rollout,如下所示:

  1. kind: Rollout 
  2. metadata: 
  3.   name: guestbook 
  4. spec: 
  5. ... 
  6.   strategy: 
  7.     blueGreen: 
  8.       activeService: active-svc 
  9.       previewService: preview-svc 
  10.       prePromotionAnalysis: 
  11.         templates: 
  12.         - templateName: smoke-tests 
  13.         args: 
  14.         - name: service-name 
  15.           value: preview-svc.default.svc.cluster.local 

上面我們的示例中一旦新的 ReplicaSet 完全可用,Rollout 會(huì)創(chuàng)建一個(gè)預(yù)發(fā)布的 AnalysisRun,Rollout 不會(huì)將流量切換到新版本,而是會(huì)等到分析運(yùn)行成功完成。

注意:如果指定了 autoPromotionSeconds 字段,并且 Rollout 已經(jīng)等待了 auto promotion seconds 的時(shí)間,Rollout 會(huì)標(biāo)記 AnalysisRun 成功,并自動(dòng)將流量切換到新版本。如果 AnalysisRun 在此之前完成,Rollout 將不會(huì)創(chuàng)建另一個(gè) AnalysisRun,并等待 autoPromotionSeconds 的剩余時(shí)間。

藍(lán)綠發(fā)布后分析

使用 BlueGreen 策略的 Rollout 還可以在流量切換到新版本后使用發(fā)布后分析。如果發(fā)布后分析失敗或出錯(cuò),Rollout 則進(jìn)入中止?fàn)顟B(tài),并將流量切換回之前的穩(wěn)定 Replicaset,當(dāng)后分析成功時(shí),Rollout 被認(rèn)為是完全發(fā)布狀態(tài),新的 ReplicaSet 將被標(biāo)記為穩(wěn)定,然后舊的 ReplicaSet 將根據(jù) scaleDownDelaySeconds(默認(rèn)為30秒)進(jìn)行縮減。

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: Rollout 
  3. metadata: 
  4.   name: guestbook 
  5. spec: 
  6. ... 
  7.   strategy: 
  8.     blueGreen: 
  9.       activeService: active-svc 
  10.       previewService: preview-svc 
  11.       scaleDownDelaySeconds: 600 # 10 minutes 
  12.       postPromotionAnalysis: 
  13.         templates: 
  14.         - templateName: smoke-tests 
  15.         args: 
  16.         - name: service-name 
  17.           value: preview-svc.default.svc.cluster.local 

失敗條件

failureCondition 可以用來(lái)配置分析運(yùn)行失敗,下面的例子是每隔5分鐘持續(xù)輪詢 Prometheus 服務(wù)器來(lái)獲得錯(cuò)誤總數(shù),如果遇到10個(gè)或更多的錯(cuò)誤,則認(rèn)為分析運(yùn)行失敗。

  1. metrics: 
  2. name: total-errors 
  3.   interval: 5m 
  4.   failureCondition: result[0] >= 10 
  5.   failureLimit: 3 
  6.   provider: 
  7.     prometheus: 
  8.       address: http://prometheus.example.com:9090 
  9.       query: | 
  10.         sum(irate( 
  11.           istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}",response_code~"5.*"}[5m] 
  12.         )) 

無(wú)結(jié)果的運(yùn)行

分析運(yùn)行j結(jié)果也可以被認(rèn)為是不確定的,這表明運(yùn)行既不成功,也不失敗。無(wú)結(jié)果的運(yùn)行會(huì)導(dǎo)致發(fā)布在當(dāng)前步驟上暫停。這時(shí)需要人工干預(yù),以恢復(fù)運(yùn)行,或中止運(yùn)行。當(dāng)一個(gè)指標(biāo)沒有定義成功或失敗的條件時(shí),分析運(yùn)行可能成為無(wú)結(jié)果的一個(gè)例子。

  1. metrics: 
  2.  - name: my-query 
  3.    provider: 
  4.      prometheus: 
  5.        address: http://prometheus.example.com:9090 
  6.        query: ... 

此外當(dāng)同時(shí)指定了成功和失敗的條件,但測(cè)量值沒有滿足任何一個(gè)條件時(shí),也可能發(fā)生不確定的分析運(yùn)行。

  1. metrics: 
  2. name: success-rate 
  3.   successCondition: result[0] >= 0.90 
  4.   failureCondition: result[0] < 0.50 
  5.   provider: 
  6.     prometheus: 
  7.       address: http://prometheus.example.com:9090 
  8.       query: ... 

不確定的分析運(yùn)行的一個(gè)場(chǎng)景是使 Argo Rollouts 能夠自動(dòng)執(zhí)行分析運(yùn)行,并收集測(cè)量結(jié)果,但仍然允許我們來(lái)判斷決定測(cè)量值是否可以接受,并決定繼續(xù)或中止。

延遲分析運(yùn)行

如果分析運(yùn)行不需要立即開始(即給指標(biāo)提供者時(shí)間來(lái)收集金絲雀版本的指標(biāo)),分析運(yùn)行可以延遲特定的指標(biāo)分析。每個(gè)指標(biāo)可以被配置為有不同的延遲,除了特定指標(biāo)的延遲之外,具有后臺(tái)分析的發(fā)布可以延遲創(chuàng)建分析運(yùn)行,直到達(dá)到某個(gè)步驟為止

如下所示延遲一個(gè)指定的分析指標(biāo):

  1. metrics: 
  2. name: success-rate 
  3.   # Do not start this analysis until 5 minutes after the analysis run starts 
  4.   initialDelay: 5m 
  5.   successCondition: result[0] >= 0.90 
  6.   provider: 
  7.     prometheus: 
  8.       address: http://prometheus.example.com:9090 
  9.       query: ... 

延遲開始后臺(tái)分析運(yùn)行,直到步驟3(設(shè)定重量40%)。

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: Rollout 
  3. metadata: 
  4.   name: guestbook 
  5. spec: 
  6.   strategy: 
  7.     canary: 
  8.       analysis: 
  9.         templates: 
  10.         - templateName: success-rate 
  11.         startingStep: 2 
  12.       steps: 
  13.       - setWeight: 20 
  14.       - pause: {duration: 10m} 
  15.       - setWeight: 40 
  16.       - pause: {duration: 10m} 

引用 Secret

AnalysisTemplate 和 AnalysisRun 可以在 .spec.args 中引用 Secret 對(duì)象,這允許用戶安全地將認(rèn)證信息傳遞給指標(biāo)提供方,如登錄憑證或 API 令牌。

需要注意一個(gè) AnalysisRun 只能引用它所運(yùn)行的同一命名空間的 Secret。

如下所示的例子中,一個(gè) AnalysisTemplate 引用了一個(gè) API 令牌,并把它傳遞給一個(gè)Web 指標(biāo)提供者。

  1. apiVersion: argoproj.io/v1alpha1 
  2. kind: AnalysisTemplate 
  3. spec: 
  4.   args: 
  5.   - name: api-token 
  6.     valueFrom: 
  7.       secretKeyRef: 
  8.         name: token-secret 
  9.         key: apiToken 
  10.   metrics: 
  11.   - name: webmetric 
  12.     provider: 
  13.       web: 
  14.         headers: 
  15.         - keyAuthorization 
  16.           value: "Bearer {{ args.api-token }}" 

 【編輯推薦】

 

責(zé)任編輯:姜華 來(lái)源: k8s技術(shù)圈
相關(guān)推薦

2022-08-22 10:40:40

Kubernete部署分析運(yùn)行

2023-09-28 07:34:33

2023-04-11 07:59:56

Kruise漸進(jìn)式交付

2014-12-16 13:51:55

華為eSpace UC統(tǒng)一通信

2021-07-13 06:35:11

Argo Rollou GitOpsKubernetes

2010-04-27 13:41:42

云計(jì)算

2024-11-04 16:04:06

2021-12-21 11:01:30

自動(dòng)駕駛數(shù)據(jù)人工智能

2021-01-13 13:49:29

漸進(jìn)式網(wǎng)頁(yè)應(yīng)用應(yīng)用程序開發(fā)

2021-06-22 10:07:20

漸進(jìn)式創(chuàng)新顛覆性創(chuàng)新二元方法

2013-09-23 10:00:33

5G4G5G研究

2024-11-20 09:39:56

漸進(jìn)式遷移云策略云支出

2011-05-19 09:21:37

互聯(lián)網(wǎng)信息化

2016-01-05 16:07:17

2021-02-02 10:22:48

Web應(yīng)用程序架構(gòu)

2021-07-22 09:00:00

SPAPWAWeb

2024-12-25 16:42:18

2021-06-24 08:25:38

flux2GitOps 云原生

2025-02-21 12:58:02

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文字幕成人av | 国产成人免费网站 | h片在线看 | 久久久久国产一区二区三区不卡 | 九九在线| 亚洲国产精品成人 | 免费一区二区 | 国产一区二区麻豆 | 亚洲精品一区二区三区丝袜 | 亚洲精彩视频在线观看 | 成人蜜桃av| 亚洲最色视频 | 日本韩国电影免费观看 | 精品国产91 | 国户精品久久久久久久久久久不卡 | 亚洲精品久久久久久久久久久 | 久久中文免费视频 | 久久精品色欧美aⅴ一区二区 | 国产激情视频在线 | 国产精品久久久久久久久久久免费看 | 久久精品福利 | 日韩免费| 成人高清在线视频 | 免费看黄视频网站 | 国产真实精品久久二三区 | 美女视频黄的免费 | 亚洲国产欧美91 | 久久精品国产一区二区电影 | 先锋资源亚洲 | 国产激情视频在线免费观看 | 一级毛片视频在线 | 国产欧美精品一区二区色综合朱莉 | 巨大黑人极品videos精品 | 日产精品久久久一区二区福利 | www.久草.com | 在线看片网站 | 久久久久久久久久久久久9999 | 欧美色性 | 91精品久久久久久久 | 久久国产美女视频 | 国产高清在线 |