Knative 应用在阿里云容器服务上的最佳实践-阿里云开发者社区

开发者社区> 阿里巴巴云原生小助手> 正文

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

简介: 作者|元毅 阿里云智能事业群高级开发工程师 相信通过前面几个章节的内容,大家对 Knative 有了初步的体感,那么在云原生时代如何在云上玩转 Knative?本篇内容就给你带来了 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/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!

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.85
Hello 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.85
Hello 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.85
Hello Knative!
  1. 登录阿里云链路追踪服务控制台, 选择应用列表,可以查看对应应用的 tracing 信息。

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

结论

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

欢迎加入 Knative 交流群

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生(套打报表)
原文:ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生(套打报表) 6月27日京东商城发布了中国电子商务领域首张电子发票,同时宣布相关系统正式上线,这标志着中国电子商务的步伐又向前迈出了重要的一步。
909 0
阿里云Cloud Shell中使用日志服务CLI最佳实践
目前阿里云云命令行Cloud Shell已经部署日志服务CLI,免部署配置,一键管理日志服务资源与下载日志服务数据更轻松!
11442 0
容器服务里限制应用的带宽
容器场景下,一个标准的需求就是限制容器能够使用的最大资源,在Kubernetes里,我们可以很方便的设置一个容器能使用的最大内存,也能限制容器能分配到的CPU。然而容器使用的资源不光CPU和内存,网络带宽也是很重要的资源,设想某个应用因为代码缺陷把整个节点的带宽打满,必然影响同一台机器上其他的其他服务,造成服务的不可用。
6865 0
视觉中国:基于容器云的同城双活微服务架构上云实践
本文正在参加阿里云「最佳上云实践」征文大赛(https://yq.aliyun.com/activity/150),欢迎届时给我们投票 视觉中国集团(Visual China Group)创立于2000年6月,是中国领先的视觉影像产品和服务提供商。
13189 0
SpringCloud迁移至EDAS微服务——Series3:在容器服务K8s集群中部署应用
SpringCloud迁移至EDAS微服务——Series3:在容器服务K8s集群中部署应用
2567 0
使用阿里云容器服务 ACK 和文件存储 NAS 构建现代化企业应用
大规模构建容器化应用程序需要高可靠、弹性、共享且支持高性能数据处理的数据存储解决方案。通过迁移到公共云,企业可以获得更高的生产效率和更低的成本。阿里云文件存储可以为现代化应用提供强健的数据稳定性,可靠性,高性能和在线扩展能力。
1322 0
《容器上云的攻与守》-云栖演讲实录
今天上午王坚博士讲了一句话我比较有感触,大家做系统的时候,一定要想下你的系统的数据是怎么流转,这些系统的数据是怎么形成闭环。我们在设计阿里云的K8S容器服务ACK的时候也是融入了这些思考。 首先是跟大家先看一下整个容器上云的解决方案。首先因为你已经做过容器,所以当你容器上云的时候,实际上这个事情是非常简单的,我们只需要提供的相应的工具,帮助大家把容器镜像迁入阿里云同时通过工具把K8S的配置迁到阿
874 0
借助阿里云ECS实现传统.NET应用容器化(上)
我们都知道.NET Core应用可以跑在Docker上,那.NET Framework 4.x应用呢?借助阿里云ECS主机(Windows Server 2019 with Container版本),一切变得So Easy!
305 0
1315
文章
0
问答
来源圈子
更多
阿里云 云原生应用平台 肩负阿里巴巴集团基础设施云化以及核心技术互联网化的重要职责,致力于打造稳定、标准、先进的云原生产品,成为云原生时代的引领者,推动行业全面想云原生的技术升级,成为阿里云新增长引擎。商业化产品包括容器、云原生中间件、函数计算等。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载