1.什么是Knative?

  1. Knative是Google2018的Google Cloud Next大会上发布的一款基于kubernetes的Serverless框架。
  2. knative的目的是在kubernetes之上提供一个简单、一致的层,以解决在开发人员和平台之间创建更牢固的边界,使得开发人员可以专注他们的业务逻辑。knative是建立在kubernetes和Istio平台之上的,使用了kubernetes提供的容器管理组件(deployment、service、Pod、ConfigMap等)以及Istio提供的网络管理组件(Ingress、LB);
  3. Knative中有两个重要的组件,分别是为其提供流量的Serving(服务)组件以及确保应用程序能够轻松消费事件的Eventing组件;
  4. 部署、升级和路由。

    应用部署应该是全部部署或者全部不部署吗?knative支持渐进式交付,并不是所有的HTTP请求都会到达生产环境系统中的一个软件版本上,而是所有的HTTP请求都会到达整个分布式系统上,由该软件的多个版本共同响应,在系统中可以同时运行多个版本,并在这些版本之间分配流量,这意味着部署可以按请求而不是实例的粒度进行;
  5. 自动扩/缩容

    系统中的流量是不固定的,有时没有流量,有时候流量过大,当没有流量时,系统的部分资源是浪费的,当流量过大时,系统就会承受过大的压力。Knative使用Knative Pod自动缩放器(KPA)进行扩/缩容,它是一种基于请求指标的自动缩放器,已与Knative的路由、缓冲和指标组件深度集成。自动缩放器无法解决所有问题,但是可以解决大部分流量的问题。

2. 什么是Serving?

2.1 Serving服务

  1. Serving模块提供了一组特定的对象,包括Service(服务)、Configuration(配置)、Revision(修订版本)、Route(路由)。Knative通过kubernetes CRD(自定义资源)的方式实现了这些对象。

  2. 在kubernetes创建一个应用的时候需要定义什么?

    APP->Deployment->Service->ConfigMap->Secrets甚至我们还需要定义一个Ingress;但是在Knative当中,一个Service就可以搞定。这里的Service不是kubernetes的Service,而是Knative中的service,可以简写为kvc,在资源桧规范里可以看见;
[root@knative-k8s-master-139 ~]# kubectl api-resources | grep "knative"
services kservice,ksvc serving.knative.dev/v1 true Service
  1. 创建一个Service(kservice)的时候会自动生成一个Configuration,基于Configuration创建Revision,再创建Route,客户端请求的流量也是由Route发给Revision;

2.2 Serving组件;

  1. Configuration: 配置是待运行软件的期望状态,包含所需的容器镜像、环境变量等详细信息。Knative将此信息转换为底层的Kubernetes概念,例如部署。实际上,那些熟悉kubernetes的人可能知道Knative到底在做什么。即使没有Knative,开发人员也可以自己创建和提交一个部署;

  2. Revision: 修订版本是配置的快照,每次更改配置时,Knative都会创建一个修订版本,实际上修订版本还会转换为底层Kubernetes资源。如果单纯只是保存修订版本,则有些浪费资源,毕竟Git就可以进行版本控制,为什么用Knative?因为Knative并不只支持蓝/绿部署,实际上,Knative还支持多版本之间更详细的流量配置规则;

  3. Route: Knative中的Route提供了一种将流量路由到正在运行代码的机制,它将一个HTTP可寻端点映射到一个或者多个Revision。可以做流量的切割和金丝雀发布;

3. 部署一个应用;

3.1 安装Knative的CLI

  1. 这里已经确保安装了kn,kn是Knative的"官方"客户端,但它不是官方的第一个客户端。在kn出现之前,Knative已经有了很多可选的客户端,比如knctl。这些工具有助于探索Knative客户端的不同使用体验;
  2. kn有两个作用。(1)客户端本身是专门给Knative设计的,你不需要详细了解kubectl;kn淘汰了Knative的Golang API,让knative的Golang API尽在其他使用Go语言编写的和Knative交互的工具使用;
  3. Knative CLI官方文档:https://knative.dev/docs/client/
  4. 我的上一篇博文有部署文档Knative Serving安装

3.2 部署一个简单的应用

在这里你必须有一个kubernetes集群并且安装了Knative;安装部署文档在我上篇博客有说明;

3.2.1 使用kn创建服务;

  1. 部署hello world实例;
# 可以使用--help来查看如何部署;
[root@knative-k8s-master-139 ~]# kn service --help
[root@knative-k8s-master-139 ~]# kn service create --help #
[root@knative-k8s-master-139 ~]# kn service create helloworld-example \ # name就叫做hello-example;
--image gcr.io/knative-samples/helloworld-go \ # 引用的容器镜像,使用knative提供的简单应用;
--env TRAGET="First" # 注入示例应用需要的环境变量;
Creating service 'helloworld-example' in namespace 'default': # 未指定namespace,在默认的default名称空间下; 0.042s The Route is still working to reflect the latest desired specification.
0.050s ...
0.090s Configuration "helloworld-example" is waiting for a Revision to become ready.
575.648s ...
575.679s Ingress has not yet been reconciled.
575.748s Waiting for load balancer to be ready
575.951s Ready to serve. Service 'helloworld-example' created to latest revision 'helloworld-example-00001' is available at URL:
http://helloworld-example.default.example.com
  1. 通过kn service list来查看;
[root@knative-k8s-master-139 ~]# kn service list
NAME URL LATEST AGE CONDITIONS READY REASON helloworld-example http://helloworld-example.default.example.com helloworld-example-00001 12h 3 OK / 3 True

3.2.2观察knative到底做了什么?

1.首先它给我们创建了一个deployment,我们可以看到此时的Pod Ready是处于0的,这是Knative独有的冷启动,在后续会说明;

[root@knative-k8s-master-139 ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
helloworld-example-00001-deployment 0/0 0 0 12h
tools-test 1/1 1 1 12h

2.为我们创建了一个Service,所有入口流量都是要注册到isto-ingressgateway上面的;

[root@knative-k8s-master-139 ~]# kubectl get svc
helloworld-example ExternalName <none> knative-local-gateway.istio-system.svc.cluster.local 80/TCP

3.我们为什么看不见创建的Pod呢?因为在没有人访问的情况下,Pod是无法启动会被置为0的状态;这就是Knative的KPA,Pod缩放至0;

[root@knative-k8s-master-139 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
tools-test-8444596cb5-rvpf9 1/1 Running 0 12h

3.2.3 应用测试访问;

1.我们启动一个终端访问这个Service是没有问题的;

[root@tools-test-8444596cb5-rvpf9 /]# curl helloworld-example.default.svc
Hello World!
[root@tools-test-8444596cb5-rvpf9 /]# while true; do curl --connect-timeout 1 helloworld-example.default; sleep .2; done
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

2.我们观察Pod的状态与deploy的状态,当我们持续访问的时候,Pod是会被拉起的;

[root@knative-k8s-master-139 ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
helloworld-example-00001-deployment 1/1 1 1 12h
tools-test 1/1 1 1 12h [root@knative-k8s-master-139 ~]# kubectl get pods
helloworld-example-00001-deployment-7787f5cf4f-rfwhb 2/2 Running 0 12s
tools-test-8444596cb5-rvpf9 1/1 Running 0 12h

Serverless之Knative部署应用实例;的更多相关文章

  1. 分享 KubeCon 2019 (上海)关于 Serverless 及 Knative 相关演讲会议

    有幸参加了 KubeCon 2019 上海大会,并参加了 Knative 及 Serverless 相关的几场分享会,收获满满.这里简单介绍一下各个演讲主题的主要内容.详细的演讲主题文档可以在Kube ...

  2. 微服务架构 - 离线部署k8s平台并部署测试实例

    一般在公司部署或者真实环境部署k8s平台,很有可能是内网环境,也即意味着是无法连接互联网的环境,这时就需要离线部署k8s平台.在此整理离线部署k8s的步骤,分享给大家,有什么不足之处,欢迎指正. 1. ...

  3. 从零入门 Serverless | Serverless Kubernetes 应用部署及扩缩容

    作者 | 邓青琳(轻零) 阿里云技术专家 导读:本文分为三个部分,首先给大家演示 Serverless Kubernetes 集群的创建和业务应用的部署,其次介绍 Serverless Kuberne ...

  4. 阿里云宣布 Serverless 容器服务 弹性容器实例 ECI 正式商业化

    摘要: 阿里云宣布弹性容器实例 ECI(Elastic Container Instance)正式商业化,ECI 是阿里云践行普惠的云计算理念,将 Serverless 和 Container 技术结 ...

  5. Serverless助力AI计算:阿里云ACK Serverless/ECI发布GPU容器实例

    ACK Serverless(Serverless Kubernetes)近期基于ECI(弹性容器实例)正式推出GPU容器实例支持,让用户以serverless的方式快速运行AI计算任务,极大降低AI ...

  6. 简述SQL2008部署多实例集群(学习)

    数据库集群     集群的存在意义是为了保证高可用.数据安全.扩展性以及负载均衡. 什么是集群? 由二台或更多物理上独立的服务器共同组成的"虚拟"服务器称之为集群服务器.一项称做M ...

  7. spring cloud之Eureka不能注销docker部署的实例

    1 起因 事件的起因是这样的,我们在微服务改造的过程中,选择将服务注册到eureka中,开发的时候还好,使用场景是这样的: 在idea中启动服务,成功注册到eureka,关闭服务,eureka成功注销 ...

  8. Serverless X OpenKruise 部署效率优化之道

    作者 | 许成铭(竞霄) Serverless 作为云计算的最佳实践.云原生发展的方向和未来演进趋势,其核心价值在于快速交付.智能弹性.更低成本.SAE(Serverless 应用引擎)作为首款面向应 ...

  9. Knative部署应用以及应用的更新、应用的分流(二)

    1. 应用的更新 1.1 更新hello-example应用 1.更新应用的环境变量 可通过命令行的方式亦可以通过读取配置文件的方式,这里主要来看命令行的方式 [root@kn-server-mast ...

随机推荐

  1. Spring Security之短信登录

    实现短信验证码登录 前面实现了 用户名+密码 的登录方式,现在实现一下短信验证码登录. 开发短信验证码接口 短信验证码和图形验证码类似,用户从手机短信得到验证码和从图片得到验证码类似. 校验短信验证码 ...

  2. 好客租房39-react组件基础总结

    1组件的两种创建方式:函数组件和类组件 2无状态函数组件 负责静态结构展示 3有状态组件 负责更新ui 让页面动起来 4绑定事件注意this指向问题 5使用受控组件创建表单 6完全利用js语言的能够力 ...

  3. 使用ROOT用户运行Jenkins

    !本教程仅适用于以YUM.APT等包管理器安装的Jenkins. 使用ROOT用户运行Jenkins,以保证Jenkins以最高权限执行任务. 注:会存在安全风险! 1.找到Jenkins启动脚本 通 ...

  4. 目标检测复习之Faster RCNN系列

    目标检测之faster rcnn系列 paper blogs1: 一文读懂Faster RCNN Faster RCNN理论合集 code: mmdetection Faster rcnn总结: 网络 ...

  5. nginx 部署前端资源的最佳方案

    前言 最近刚来一个运维小伙伴,做线上环境的部署的时候,前端更新资源后,总是需要清缓存才能看到个更新后的结果.客户那边也反馈更新了功能,看不到. 方案 前端小伙伴应该都知道浏览器的缓存策略,协商缓存和强 ...

  6. iNeuOS工业互联网操作系统,在线报表(Excel)开发工具

    目       录 1.      概述... 2 2.      视频介绍... 2 3.      应用过程... 2 1.   概述 iNeuOS工业互联网操作系统在线报表(Excel)工具的开 ...

  7. SAP 实例 1 Images in HTML

    REPORT zharpo_010 NO STANDARD PAGE HEADING. TABLES : t001. TYPE-POOLS: slis. DATA : w_repid LIKE sy- ...

  8. Vue2自定义插件的写法-Vue.use()

    最近在用vue2完善一个项目,顺便温习下vue2的基础知识点! 有些知识点恰好没用到时间一长就会淡忘,这样对自己是一种损失. 定义一个对象 对象里可以有任何内容 但install的函数是必不可少的,因 ...

  9. 建立QT工程的规范型,以及重要性

    当前管理开发多个项目,故名Projects 下一级目录,具体项目,故示例Project,根据实际情况自行取名 再下一级目录,有三个子目录 bin:生成的可执行文件或者动态链接库,build:编译源码时 ...

  10. PotPlayer播放百度云盘视频

    需要的工具 PotPlayer.油猴tampermonkey.坚果(这个不用下载,有个账号就行) 下载地址:百度网盘 步骤 安装油猴tampermonkey 拖拽Tampermonkey_4.14.c ...