基于Knative开发应用

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: - 安装 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

image

CICD 自动化

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

运维操作

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 压测工具

压测数据展示
下载压测结果文件 ,下载后直接用浏览器打开即可查看

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

OSS 事件触发

  • 安装 MNSOSS Chart 包
    image
  • namespace 开启默认 broker
kubectl label namespace default knative-eventing-injection=enabled --overwrite
  • 安装 mnsoss source 配置
kubectl apply -f mnsoss.yaml
  • 详情参考: https://yq.aliyun.com/articles/706126
  • 实验原理
    image
  • 向 OSS 中上传一张带有人像的图片
  • OSS 上传图片的事件自动触发 Knative 人脸识别程序执行,并且生成一张新图片。新图片中有人像性别的标识。
  • 更多场景
    image

清理环境

  • 取消 Istio 自动注入
kubectl label  namespace default istio-injection-
  • 卸载 Knative 组件
    image
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes Cloud Native Oracle
开源FaaS平台(一):Knative
Serverless构架不仅仅在工业界有诸多厂商不断为之努力,在开源领域也是有诸多优秀的开源Serverless项目。在《CNCF Cloud Native Interactive Landscape》的Serverless标签中,我们可以看到包括OpenWhisk、Fission、Knative以及Kubeless等在内的众多优秀开源FaaS平台。
850 0
|
测试技术 开发者
KubeVela 对接 Istio 实现应用灰度发布实践|学习笔记(二)
快速学习 KubeVela 对接 Istio 实现应用灰度发布实践
362 0
KubeVela 对接 Istio 实现应用灰度发布实践|学习笔记(二)
|
运维 监控 Kubernetes
KubeVela 对接 Istio 实现应用灰度发布实践|学习笔记(一)
快速学习 KubeVela 对接 Istio 实现应用灰度发布实践
607 0
KubeVela 对接 Istio 实现应用灰度发布实践|学习笔记(一)
|
弹性计算 Kubernetes Cloud Native
【云原生 | 从零开始学Kubernetes】十五、k8s核心技术-Deployment 控制器
Deployment表示用户对K8S集群的一次更新操作。Deployment是一个比RS( Replica Set, RS) 应用模型更广的 API 对象,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。滚动升级一个服务,实际是创建一个新的RS,然后逐渐将新 RS 中副本数增加到理想状态,将旧RS中的副本数减少到0的复合操作。
171 0
【云原生 | 从零开始学Kubernetes】十五、k8s核心技术-Deployment 控制器
|
存储 Prometheus Kubernetes
使用 Flux+Flagger+Istio+Kubernetes 实战 GitOps 云原生渐进式(金丝雀)交付
使用 Flux+Flagger+Istio+Kubernetes 实战 GitOps 云原生渐进式(金丝雀)交付
382 0
使用 Flux+Flagger+Istio+Kubernetes 实战 GitOps 云原生渐进式(金丝雀)交付
|
消息中间件 存储 人工智能
开源 Serverless 里程碑:Knative 1.0 来了
近期Knative发布了1.0版本,达到了一个重要的里程碑。Knative自2018年7月首次发布以来, 版本不断的迭代发展,除了无数的错误修复、稳定性和性能增强之外,按时间顺序还进行了一些改进,下文将进行简单介绍。
开源 Serverless 里程碑:Knative 1.0 来了
|
Kubernetes Cloud Native Serverless
Serverless 工程实践 | 零基础上手 Knative 应用
Knative 是一款基于 Kubernetes 的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 编排标准。
Serverless 工程实践 | 零基础上手 Knative 应用
|
存储 运维 Kubernetes
K8s 原生 Serverless 实践:ASK 与 Knative
K8s 处在一个承上启下的位置,云原生用户使用 K8s 的目的是为了交付和管理应用,也包括灰度发布、扩容缩容等。但是对用户来说,实现这些能力,通过直接操作 K8s API 难免有些复杂。另外节省资源成本和弹性对于用户来说也越来越重要。那么,如何才能简单地使用 K8s 的技术,并且实现按需使用,最终实现降本增效的目的呢?答案就是 Knative。
K8s 原生 Serverless 实践:ASK 与 Knative
|
存储 运维 Kubernetes
k8s 原生Serverless 实践:ASK 与 Knative
随着云计算技术的发展,云资源交付变的越来越简单,按需使用已经成为可能。在按需使用资源的模式下,用户更多的聚焦于业务自身,而减少了对基础设施的关注,Serverless 理念也因此应运而生。Knative 在 K8s 之上又做了进一步的简化,大大降低了应用生命周期管控复杂度,同时提供了自动弹性和灰度发布等能力,同时基于阿里云 Severless Kubernetes (ASK)提供的极致容器化 Serverless,给您带来云原生 Serverless 应用完全体。
736 0
|
弹性计算 Kubernetes Cloud Native
周四直播预告:基于 OAM 和 Kubernetes 快速构建开放 Serverless 平台
7月2日(周四)14:00,阿里云技术专家孙健波(天元),讲解《基于 OAM 和 Kubernetes 快速构建开放 Serverless 平台》。
周四直播预告:基于 OAM 和 Kubernetes 快速构建开放 Serverless 平台