天天看點

Knative 應用在阿裡雲容器服務上的最佳實踐

作者|元毅 阿裡雲智能事業群進階開發工程師

相信通過前面幾個章節的内容,大家對 Knative 有了初步的體感,那麼在雲原生時代如何在雲上玩轉 Knative?本篇内容就給你帶來了 Knative 應用在阿裡雲容器服務上的最佳實踐。

何為最佳實踐,就是按照生産可用的方式部署服務,提供服務監控告警以及鍊路追蹤。我們按照如下 3 個部分内容進行:

  • Knative Service 服務部署
  • Knative Service 服務日志、監控告警
  • Knative Service 服務分布式鍊路追蹤

準備

參考在阿裡雲容器服務上

部署Knative

。 這裡注意在部署 Istio 時需要開啟 Tracing 分布式追蹤。

  1. 執行 kubectl 指令:
$kubectl apply -f helloworld-go.yaml           

其中 helloworld-go.yaml 示例内容:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      containers:
      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4db7
        env:
        - name: TARGET
          value: "Knative"           
  1. 檢視 istio-ingressgateway 服務。
[root@iZbp11kx5d8so7gb07fbtkZ samples]# kubectl -n  istio-system get svc istio-ingressgateway
NAME                   TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                                                      AGE
istio-ingressgateway   LoadBalancer   172.21.5.96   101.37.100.85   15020:30816/TCP,80:31380/TCP,443:31390/TCP,15443:31412/TCP   19d           
  1. 執行 kubectl 如下指令,擷取 Domin 資訊
[root@iZbp11kx5d8so7gb07fbtkZ samples]# kubectl get ksvc helloworld-go 
NAME            URL                                        LATESTCREATED         LATESTREADY           READY   REASON
helloworld-go   http://helloworld-go.default.example.com   helloworld-go-skcpl   helloworld-go-skcpl   True           
  1. 最後執行 curl -H "Host: helloworld-go.default.example.com" http://101.37.100.85 可以擷取執行的結果
[root@iZbp11kx5d8so7gb07fbtkZ samples]# curl -H "Host: helloworld-go.default.example.com" http://101.37.100.85
Hello Knative!           

阿裡雲日志服務(Log Service,簡稱 LOG)是針對日志類資料的一站式服務,在阿裡巴巴集團經曆大量大資料場景錘煉而成。您無需開發就能快捷完成日志資料采集、消費、投遞以及查詢分析等功能,提升運維、營運效率,建立 DT 時代海量日志處理能力。

  1. 選擇日志庫,建立 Logstore。這裡以建立 helloworld 為例:
Knative 應用在阿裡雲容器服務上的最佳實踐
  1. 資料源接入,選擇 Docker 标準輸出, 參見 日志服務容器标準輸出
Knative 應用在阿裡雲容器服務上的最佳實踐
  1. 插件配置這裡我們針對

    helloworld-go

    Service, 設定采集的環境變量為:"K_SERVICE": "helloworld-go"。并且通過 processors 分割日志資訊,如這裡 "Keys": [ "time","level", "msg" ]。
{
  "inputs": [
    {
      "detail": {
        "IncludeEnv": {
          "K_SERVICE": "helloworld-go"
        },
        "IncludeLabel": {},
        "ExcludeLabel": {}
      },
      "type": "service_docker_stdout"
    }
  ],
  "processors": [
    {
      "detail": {
        "KeepSource": false,
        "NoMatchError": true,
        "Keys": [
          "time",
          "level",
          "msg"
        ],
        "NoKeyError": true,
        "Regex": "(\\d+-\\d+-\\d+\\s+\\d+:\\d+:\\d+)\\s+(\\w+)\\s+(.*)",
        "SourceKey": "content"
      },
      "type": "processor_regex"
    }
  ]
}           
  1. 設定查詢分析,參考 查詢與分析 。為了便于分析這裡設定 level、msg 和 time 這 3 列:
Knative 應用在阿裡雲容器服務上的最佳實踐
  1. 通路 Hello World 示例服務。
[root@iZbp11kx5d8so7gb07fbtkZ samples]# curl -H "Host: helloworld-go.default.example.com" http://101.37.100.85
Hello Knative!           
  1. 登入 日志服務控制台 , 進入對應的 Project, 選擇

    helloworld

    Logstore,點選查詢,可以看到日志輸出如圖所示:
Knative 應用在阿裡雲容器服務上的最佳實踐
  1. 設定查詢 sql 語句。這裡設定監控的原則是根據 ERROR 出現的次數,是以可以設計統計 ERROR 的 sql 語句:
* | select 'ERROR' , count(1) as total group by 'ERROR'           

點選【查詢/分析】,結果如圖所示:

Knative 應用在阿裡雲容器服務上的最佳實踐
  1. 告警設定。點選 【另存為告警】。
Knative 應用在阿裡雲容器服務上的最佳實踐
  1. 設定告警名稱、添加到儀表盤(這裡可以建立,輸入名稱即可)等。其中告警觸發條件輸入判斷告警是否觸發的條件表達式, 可以參考 告警條件表達式文法 。我們這裡設定“查詢區間:1 分鐘,執行間隔:1 分鐘,觸發條件:total > 3” 表示間隔 1 分鐘檢查,如果 1 分鐘内出現 3 次 ERROR 資訊,則觸發告警。
Knative 應用在阿裡雲容器服務上的最佳實踐
  1. 告警通知。目前支援如圖所示告警通知:
Knative 應用在阿裡雲容器服務上的最佳實踐
  1. 通路 Hello World 示例服務。執行多次以下指令,就會觸發告警通知
[root@iZbp11kx5d8so7gb07fbtkZ samples]# curl -H "Host: helloworld-go.default.example.com" http://101.37.100.85
Hello Knative!           

如果是設定的郵件通知,告警資訊如下圖所示:

Knative 應用在阿裡雲容器服務上的最佳實踐

阿裡雲鍊路追蹤 Tracing Analysis 為分布式應用的開發者提供了完整的調用鍊路還原、調用請求量統計、鍊路拓撲、應用依賴分析等工具,可以幫助開發者快速分析和診斷分布式應用架構下的性能瓶頸,提高微服務時代下的開發診斷效率。

  1. 選擇命名空間設定如下标簽啟用 Sidecar 自動注入:istio-injection=enabled。通過這種方式就注入了 Istio 的 envoy 代理(proxy)容器, Istio 的 envoy 代理攔截流量後會主動上報 trace 系統。以設定 default 命名空間為例:
kubectl label namespace default istio-injection=enabled           
[root@iZbp11kx5d8so7gb07fbtkZ samples]# curl -H "Host: helloworld-go.default.example.com" http://101.37.100.85
Hello Knative!           
  1. 阿裡雲鍊路追蹤服務控制台 , 選擇應用清單,可以檢視對應應用的 tracing 資訊。
Knative 應用在阿裡雲容器服務上的最佳實踐
  1. 選擇應用,點選檢視應用詳情,可以看到服務調用的平均響應時間。
Knative 應用在阿裡雲容器服務上的最佳實踐

結論

通過以上的實踐,相信大家已經了解了如何在阿裡雲容器服務上部署生産可用的 Serverless 服務。如果你有更好的Knative 實踐歡迎一起交流。

歡迎加入 Knative 交流群

Knative 應用在阿裡雲容器服務上的最佳實踐

繼續閱讀