InfoQ 重磅内容产品《中国卓越技术团队访谈录》上新啦! 了解详情
写点什么

Knative 应用在阿里云容器服务上的最佳实践

  • 2019 年 8 月 21 日
  • 本文字数:2751 字

    阅读完需:约 9 分钟

Knative 应用在阿里云容器服务上的最佳实践

相信通过前面几个章节的内容(文末有链接),大家对 Knative 有了初步的体感,那么在云原生时代如何在云上玩转 Knative?本篇内容就给你带来了 Knative 应用在阿里云容器服务上的最佳实践。


何为最佳实践,就是按照生产可用的方式部署服务,提供服务监控告警以及链路追踪。我们按照如下 3 个部分内容进行:


  • Knative Service 服务部署

  • Knative Service 服务日志、监控告警

  • Knative Service 服务分布式链路追踪


准备

参考在阿里云容器服务上部署Knative。 这里注意在部署 Istio 时需要开启 Tracing 分布式追踪。


Knative Service 服务部署

  1. 执行 kubectl 命令:


$kubectl apply -f helloworld-go.yaml
复制代码


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


apiVersion: serving.knative.dev/v1alpha1kind: Servicemetadata:  name: helloworld-go  namespace: defaultspec:  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-ingressgatewayNAME                   TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                                                      AGEistio-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   REASONhelloworld-go   http://helloworld-go.default.example.com   helloworld-go-skcpl   helloworld-go-skcpl   True
复制代码


  1. 最后执行 curl -H “Host: helloworld-go.default.example.comhttp://101.37.100.85 可以获取执行的结果


[root@iZbp11kx5d8so7gb07fbtkZ samples]# curl -H "Host: helloworld-go.default.example.com" http://101.37.100.85Hello Knative!
复制代码


Knative Service 服务日志、监控告警

阿里云日志服务(Log Service,简称 LOG)是针对日志类数据的一站式服务,在阿里巴巴集团经历大量大数据场景锤炼而成。您无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能,提升运维、运营效率,建立 DT 时代海量日志处理能力。


  1. 选择日志库,创建 Logstore。这里以创建 helloworld 为例:



  1. 数据源接入,选择 Docker 标准输出, 参见[日志服务容器标准输出]



  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 列:



  1. 访问 Hello World 示例服务。


[root@iZbp11kx5d8so7gb07fbtkZ samples]# curl -H "Host: helloworld-go.default.example.com" http://101.37.100.85Hello Knative!
复制代码


  1. 登录日志服务控制台, 进入对应的 Project, 选择 helloworld Logstore,点击查询,可以看到日志输出如图所示:



  1. 设置查询 sql 语句。这里设置监控的原则是根据 ERROR 出现的次数,因此可以设计统计 ERROR 的 sql 语句:


* | select 'ERROR' , count(1) as total group by 'ERROR'
复制代码


点击【查询/分析】,结果如图所示:



  1. 告警设置。点击 【另存为告警】。



  1. 设置告警名称、添加到仪表盘(这里可以新建,输入名称即可)等。其中告警触发条件输入判断告警是否触发的条件表达式, 可以参考告警条件表达式语法。我们这里设置“查询区间:1 分钟,执行间隔:1 分钟,触发条件:total > 3” 表示间隔 1 分钟检查,如果 1 分钟内出现 3 次 ERROR 信息,则触发告警。



  1. 告警通知。当前支持如图所示告警通知:



  1. 访问 Hello World 示例服务。执行多次以下命令,就会触发告警通知


[root@iZbp11kx5d8so7gb07fbtkZ samples]# curl -H "Host: helloworld-go.default.example.com" http://101.37.100.85Hello Knative!
复制代码


如果是设置的邮件通知,告警信息如下图所示:



Knative Service 服务分布式链路追踪

阿里云链路追踪 Tracing Analysis 为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。


  1. 选择命名空间设置如下标签启用 Sidecar 自动注入:istio-injection=enabled。通过这种方式就注入了 Istio 的 envoy 代理(proxy)容器, Istio 的 envoy 代理拦截流量后会主动上报 trace 系统。以设置 default 命名空间为例:


kubectl label namespace default istio-injection=enabled
复制代码


  1. 访问 Hello World 示例服务。


[root@iZbp11kx5d8so7gb07fbtkZ samples]# curl -H "Host: helloworld-go.default.example.com" http://101.37.100.85Hello Knative!
复制代码


  1. 登录阿里云链路追踪服务控制台, 选择应用列表,可以查看对应应用的 tracing 信息。



  1. 选择应用,点击查看应用详情,可以看到服务调用的平均响应时间。



结论

通过以上的实践,相信大家已经了解了如何在阿里云容器服务上部署生产可用的 Serverless 服务。如果你有更好的 Knative 实践欢迎一起交流。


本文作者:


冬岛,阿里云容器平台技术专家,负责阿里云容器平台 Knative 相关工作。欢迎加入 Knative 钉钉群(群号 : 23302777)进行深入交流


相关文章:


《初识 Knative:跨平台的 Serverless 编排框架》


《Knative 初体验:Serving Hello World》


《Knative 初体验:Eventing Hello World》


《Knative 初体验:Build Hello World》


《Knative 初体验:CI/CD 极速入门》


《Knative 基本功能深入剖析:Knative Serving 的流量灰度和版本管理》


《Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler》


《Knative 基本功能深入剖析:Knative Serving 之服务路由管理》


2019 年 8 月 21 日 09:278440

评论

发布
暂无评论
发现更多内容

你在备战“字节”时一定需要这个,程序员进大厂指南+算法已开源

Java架构师迁哥

情指勤一体化指挥调度平台建设,重点人员管理平台

不是吧?不会多态,你还说自己会Java

学Java关注我

Java 编程 架构 程序人生 技术宅

架构实战营模块一总结

竹林七贤

2021最新中高阶Android面试题总结,成功入职阿里

欢喜学安卓

android 程序员 面试 移动开发

2021互联网大厂面经最新分享:百度/阿里/蚂蚁(附答案解析)

比伯

Java 架构 面试 程序人生 技术宅

Spring Boot + RabbitMQ实现订单过期自动取消功能

Lonely Sufferer

RabbitMQ springboot

架构实战营模块 1 作业

Geek_2b52aa

架构实战营

超低功耗LoRa无线通信应用实践

不脱发的程序猿

物联网 无线通信 4月日更 LoRa 无线通信模组

架构训练营

架构训练营

3d导航栏

赫鲁小夫

4月日更

“区块链+版权”应用保护者

电微13828808271

架构实战营模块1作业

竹林七贤

独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless

Serverless Devs

阿里云 运维 云原生 #Serverless

如何用 iMazing 备份和恢复辐射避难所

懒得勤快

手机 游戏 ios管理 imazing

什么是 NIO ?6000 字详解 NIO

hepingfly

Java nio IO流

教你一个著名的流行数据格式:Python JSON

华为云开发者联盟

Python 数据 Python JSON JSON序列化 半结构化数据

【Java 试题】AQS解析

程序员架构进阶

AQS Java源码 28天写作 4月日更

CSS实现动画环绕下划线效果

Sakura

4月日更

手起刀落,连斩获阿里(四面)+字节(四面)+美团(三面)三家一线大厂Offer!

Java架构追梦

Java 架构 面试

翻译:《实用的Python编程》07_05_Decorated_methods

codists

Python

「架构实战营」模块一作业

between

架构实战营

企业为何开始选择使用成品训练数据集?

澳鹏Appen

人工智能 机器学习 大数据 数据集 数据流

2021 年推荐给 React 开发者的 Visual Studio Code 插件及配置

清秋

推荐 vscode 插件 React 4月日更

假期后来一波干货:一文理清JVM和GC

比伯

Java 程序员 架构 JVM 计算机

架构实战营-模块1-微信业务架构-学生系统架构备选方案

吴建中

“区块链+”,应用积分营销

电微13828808271

区块链

《iOS应用逆向与安全》

Thrash

读后感

架构实战营模块1作业

阿体

模块一:课后作业

a1vin-tian

架构实战营

架构实战营第一次作业

CmHuang

架构实战营

Knative 应用在阿里云容器服务上的最佳实践_语言 & 开发_冬岛_InfoQ精选文章