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

Stella981
• 阅读 848

作者|元毅 阿里云智能事业群高级开发工程师

相信通过前面几个章节的内容,大家对 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/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

  2. 执行 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

  3. 最后执行 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!

Knative Service 服务日志、监控告警

阿里云日志服务(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" } ] }

  2. 设置查询分析,参考查询与分析。为了便于分析这里设置 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!

  2. 登录日志服务控制台, 进入对应的 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 应用在阿里云容器服务上的最佳实践

Knative Service 服务分布式链路追踪

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

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

    kubectl label namespace default istio-injection=enabled

  2. 访问 Hello World 示例服务。

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

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

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

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

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

结论

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

欢迎加入 Knative 交流群

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
OpenKruise:阿里巴巴 双11 全链路应用的云原生部署基座
简介:Kruise是Cruise的谐音,'K'forKubernetes,寓意Kubernetes上应用的航行和自动巡行,它满载着阿里巴巴多年在大规模应用部署、发布与管理最佳实践,以及阿里云Kubernetes服务数千客户的需求沉淀。来源|阿里巴巴云原生公众号(https://www.oschina.net/acti
Stella981 Stella981
3年前
Knative 基本功能深入剖析:Knative Eventing 之 Sequence 介绍
!(https://oscimg.oschina.net/oscnet/5c96a4010b9d64f7d864d8a9f78d6c14c24.jpg)作者| 元毅,阿里云容器平台高级开发工程师,负责阿里云容器平台Knative相关工作。导读:在实际的开发中我们经常会遇到将一条数据需要经过多次处理的场景,称为Pipeline。
Stella981 Stella981
3年前
Knative 实战:基于阿里云 Kafka 实现消息推送
在Knative中已经提供了对Kafka事件源的支持,那么如何在阿里云上基于Kafka实现消息推送,本文给大家解锁这一新的姿势。背景消息队列forApacheKafka是阿里云提供的分布式、高吞吐、可扩展的消息队列服务。消息队列forApacheKafka广泛用于日志收集、监控数据聚合、流式数据处理、在线和离线分析等
Stella981 Stella981
3年前
Knative 实战:基于 Kafka 实现消息推送
!1(https://yqfile.alicdn.com/01ee67ae04a648166d18ad84af8538056340b4f8.png)作者| 元毅 阿里云智能事业群高级开发工程师导读:当前在Knative中已经提供了对Kafka事件源的支持,那么如何基于Kafka实现消息推送呢?本文作者将以阿里云Kafk
可莉 可莉
3年前
15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布
本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署JenkinsXPlatform并结合demo实践演示GitOps的操作流程。注意:本文中使用的jx工具、cloudenvironments等做过改造用以适配阿里云Kubernetes容器服务,并未在自建Kubernetes集群中做过验证。先决条件:首先,
Stella981 Stella981
3年前
Kubernetes 时代的安全软件供应链
作者汤志敏 阿里云容器服务高级技术专家汪圣平 阿里云云平台安全高级安全专家导读:从Dockerimage到Helm,从企业内部部署到全球应用分发,作为开发者的我们如何来保障应用的交付安全。本文会从软件供应链的攻击场景开始,介绍云原生时代的应用交付标准演进和阿里云上的最佳实践。“没有集装箱,就不会有全球化”。在软件行业里,
Stella981 Stella981
3年前
Knative 实战:一个微服务应用的部署
!file(https://oscimg.oschina.net/oscnet/552da4b91eb64f39e2cdb0b44d426332fdc.jpg)作者|元毅阿里云智能事业群高级开发工程师在Istio中提供了一个Bookinfo的示例,用于演示微服务之间的调用,那么如何在Knative中部署这个示例呢?本文将会给大家
Stella981 Stella981
3年前
Knative 实战:如何在 Knative 中配置自定义域名及路由规则
!file(https://oscimg.oschina.net/oscnet/bd4167e941bcbe7b88e3a1a40bdc9fd4a9c.jpg)作者| 元毅 阿里云智能事业群高级开发工程师当前Knative中默认支持是基于域名的转发,可以通过域名模板配置后缀,但目前对于用户来说并不能指定全域名设置。另外一个问题就是基于Pa