基于Knative开发应用

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: - 安装 Istio - 安装 Knative - 日志、监控和 Tracing 管理

准备工作

安装 kubectl

Linux 安装 kubectl

curl -LO https://kstarter-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubectl/kubectl/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl --help

MacOS 安装 kubectl

curl -LO https://kstarter-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubectl/kubectl/darwin/amd64/kubectl 
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl --help

Windows 安装 kubectl

https://kstarter-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubectl/kubectl/windows/amd64/kubectl.exe 放到系统 PATH 路径下

kubectl --help

配置 kubeconfig

配置 kubectl 连接 Kubernetes 集群的配置,可参考文档 通过kubectl连接Kubernetes集群

创建 Kubernetes 集群
如果还未创建 Kubernetes 集群,可以到这里 创建一个 Kubernetes 集群

部署 Istio

在容器服务集群管理页面

可以直接在目标集群上部署 Istio

1b67a7f3bcb04c58a10e44ee211ea360aa8eb759

选择启用链路追踪,点击【立即开通】 跳转到调用链页面获取接入点链接

image_20190617171351903

到链路追踪页面开启日志服务授权

image_20190617141625445

image_20190617141642918

如下所示的状态标明已经开通成功

image_20190617173035910

选择对应 region 的 ZipKin 内网 v1 的接入点
image_20190617174149980

回到 Istio 页面粘贴接入点,继续安装。
image_20190618091643776

部署 Knative

到容器服务的控制台上面选择好目标集群使用一键部署功能直接部署 Knative 安装文档

156024301948852_zh_CN

开始部署 Knative, 等十几秒钟即可完成部署。
image_20190617175044602

部署 WordPress

开启 Istio Sidecar 注入

kubectl label namespace default istio-injection=enabled --overwrite

添加 egress
执行下面命令添加 egress 配置,使得 Pod 内部可以访问数据库服务:

kubectl apply -f https://knative-sample.oss-cn-shanghai.aliyuncs.com/kubecon-2019-sh/egress.yaml 

修改默认域名
默认 Istio Gateway 绑定的域名是 example.com,防止 example.com 未备案导致不能访问我们把域名改成 kubedemo.com

kubectl apply -f https://knative-sample.oss-cn-shanghai.aliyuncs.com/kubecon-2019-sh/custom-domain.yaml

创建 Knative Service

点击链接下载 wp-service.yaml ,把文件中的 __DB_NAME__ 替换成你自己的数据库名称.

执行 kubectl apply -f wp-service.yaml 安装WordPress

  • 获取 istio Gateway IP
└─# kubectl get svc istio-ingressgateway --namespace istio-system --output jsonpath="{.status.loadBalancer.ingress[*]['ip']}"
  
  47.95.139.84
  • 获取 WordPress 访问地址
└─# kubectl get ksvc wordpress --output=custom-columns=NAME:.metadata.name,DOMAIN:.status.domain
  
  NAME        DOMAIN
  wordpress   wordpress.default.kubedemo.com
  • 添加 host 绑定

Linux 和 Mac 编辑 /etc/hosts 文件,在最后添加一行

  sudo vim /etc/hosts  
  47.95.139.xx wordpress.default.kubedemo.com

Windows
直接在 C:\WINDOWS\system32\drivers\etc 目录的 HOSTS 文件最后添加一行 47.95.139.xx wordpress.default.kubedemo.com 即可。具体操作方法参见:https://yq.aliyun.com/articles/706009

  • 通过浏览器访问 WordPress

点击链接:http://wordpress.default.kubedemo.com/ 应该就能访问到部署的 WordPress 了
image

CICD 自动化

例子: https://github.com/knative-sample/wordpress

  • CICD 原理介绍

image

运维操作

Tracing

https://tracing-analysis.console.aliyun.com/ 查看 tracing 信息

选择相应的 Region,点击应用列表查看应用列表

image_20190614132351721

调用链查询页面

image_20190614111731967

image
image

日志管理

  • 日志服务控制台: https://sls.console.aliyun.com
  • 本示例以容器标准输出采集为例进行展示,详细设置步骤可以参考日志服务文档
  • 根据 Kubernetes 集群 ID 找到对应的日志服务 Project
  • 创建一个新的 Logstore

image_20190613112709733

设置数据导入方式

image_20190613112738869

选择 Docker标准输出

image_20190613112814144

  • 配置容器标准输出日志采集策略
{
  "inputs": [
    {
      "detail": {
        "IncludeEnv": {
          "K_SERVICE": "wordpress"
        },
        "IncludeLabel": {},
        "ExcludeLabel": {}
      },
      "type": "service_docker_stdout"
    }
  ],
  "processors": [
    {
      "detail": {
        "KeepSource": false,
        "NoMatchError": true,
        "Keys": [
          "ip",
          "time",
          "action",
          "url",
          "code"
        ],
        "NoKeyError": true,
        "Regex": "(\\d+.\\d+.\\d+.\\d+)\\s+-\\s+(\\d+/\\w+/\\d+:\\d+:\\d+:\\d+\\s\\+\\d+)\\s\"(\\w+)\\s(.*)\"\\s(\\d+)",
        "SourceKey": "content"
      },
      "type": "processor_regex"
    }
  ]
}

分别为相应的键值 ip、time、action、url 和 code 设置数据类型

image

创建完成以后回到刚才的 Project 可以看到创建的 logstore , 然后即可进行日志查询等管理动作

image_20190618105806630

image

告警

code 400 | SELECT  COUNT(*) as total

触发告警

watch -n 1 ' curl http://wordpress.default.kubedemo.com/wp-admin/admin-ajax.php'

image_20190618110410378

image_20190618110449649

image_20190618110633595

过一分钟左右可以看到邮件告警通知

image_20190618110849925

Autoscaler

简单压测
可以到这里下载二进制文件,然后执行如下所示的命令开始压测。

hey -z 15s -c 30 "http://wordpress.default.kubedemo.com/" && kubectl get pods

knload 压测工具

image_20190614134930922

压测数据展示

压测的并发数陡增导致服务响应时间抖动,但随着 Pod 数量的自动扩容 RT 很快就恢复到了正常水位。

OSS 事件触发

  • 安装 MNSOSS Chart 包

image

  • namespace 开启默认 broker
kubectl label namespace default knative-eventing-injection=enabled --overwrite
  • 安装 mnsoss source 配置
kubectl apply -f mnsoss.yaml

image

  • 向 OSS 中上传一张带有人像的图片
  • OSS 上传图片的事件自动触发 Knative 人脸识别程序执行,并且生成一张新图片。新图片中有人像性别的标识。
  • 更多场景
    image

清理环境

  • 取消 Istio 自动注入
kubectl label  namespace default istio-injection-
  • 卸载 Knative 组件

image

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
Kubernetes Cloud Native Oracle
开源FaaS平台(一):Knative
Serverless构架不仅仅在工业界有诸多厂商不断为之努力,在开源领域也是有诸多优秀的开源Serverless项目。在《CNCF Cloud Native Interactive Landscape》的Serverless标签中,我们可以看到包括OpenWhisk、Fission、Knative以及Kubeless等在内的众多优秀开源FaaS平台。
1055 0
|
5月前
|
存储 NoSQL 机器人
Knative 实战:基于 Knative Serverless 技术实现天气服务-下篇
Knative 实战:基于 Knative Serverless 技术实现天气服务-下篇
|
消息中间件 存储 Kubernetes
【无服务器架构】Knative Eventing 介绍
【无服务器架构】Knative Eventing 介绍
|
运维 监控 Kubernetes
KubeVela 对接 Istio 实现应用灰度发布实践|学习笔记(一)
快速学习 KubeVela 对接 Istio 实现应用灰度发布实践
KubeVela 对接 Istio 实现应用灰度发布实践|学习笔记(一)
|
测试技术 开发者
KubeVela 对接 Istio 实现应用灰度发布实践|学习笔记(二)
快速学习 KubeVela 对接 Istio 实现应用灰度发布实践
KubeVela 对接 Istio 实现应用灰度发布实践|学习笔记(二)
|
消息中间件 存储 人工智能
开源 Serverless 里程碑:Knative 1.0 来了
近期Knative发布了1.0版本,达到了一个重要的里程碑。Knative自2018年7月首次发布以来, 版本不断的迭代发展,除了无数的错误修复、稳定性和性能增强之外,按时间顺序还进行了一些改进,下文将进行简单介绍。
开源 Serverless 里程碑:Knative 1.0 来了
|
存储 运维 Kubernetes
K8s 原生 Serverless 实践:ASK 与 Knative
K8s 处在一个承上启下的位置,云原生用户使用 K8s 的目的是为了交付和管理应用,也包括灰度发布、扩容缩容等。但是对用户来说,实现这些能力,通过直接操作 K8s API 难免有些复杂。另外节省资源成本和弹性对于用户来说也越来越重要。那么,如何才能简单地使用 K8s 的技术,并且实现按需使用,最终实现降本增效的目的呢?答案就是 Knative。
K8s 原生 Serverless 实践:ASK 与 Knative
|
Kubernetes Cloud Native Serverless
Serverless 工程实践 | 零基础上手 Knative 应用
Knative 是一款基于 Kubernetes 的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 编排标准。
Serverless 工程实践 | 零基础上手 Knative 应用
|
消息中间件 运维 Kubernetes
春色满园关不住,带你体验阿里云 Knative
Knative 是基于 Kubernetes 的开源 Serverless 应用编排框架。阿里云 Knative 在社区 Knative 基础之上,与阿里云产品进行了深度的融合,给你带来最纯粹的容器化 Serverless 体验。
春色满园关不住,带你体验阿里云 Knative
|
Kubernetes 监控 JavaScript
阿里云K8s+Istio+Knative搭建Serverless平台
本文以一个Nodejs前端开发者角度出发,从零基于阿里云平台能力搭建一个弹性的Serverless平台的记录。希望对也想了解这个产品整体的小伙伴们有一定帮助 以上我们利用阿里云K8s+Istio+Knative 搭建Serverless平台 - 部署了k8s集群 - 部署了Istio - .
5669 1
阿里云K8s+Istio+Knative搭建Serverless平台