国内在Minikube上搭建Knative及示例演示

本文详细介绍了如何在Minikube上搭建Knative,包括Knative的Build、Serving、Eventing和Auto-scaling组件,以及云服务器申请、Knative组件的部署。通过实际操作演示了应用访问和自动扩缩容的功能。
摘要由CSDN通过智能技术生成

1. 什么是Serverless?什么是Mnative?

什么是 Severless, 下面是 CNCFServerless 架构给出的定义:

“Serverless computing refers to the concept of building and running applications that do not require server management. It describes a finer-grained deployment model where applications, bundled as one or more functions, are uploaded to a platform and then executed, scaled, and billed in response to the exact demand needed at the moment”

从定义中可以看出 Serverless 架构应该下面的几个特点:

  • 构建及运行应用的基础设施环境
  • 无需进行服务的状态管理
  • 足够细粒度的部署模式
  • 可扩展且按使用量付费

上面的几个特点,除去足够细粒度的部署模式外,Kubernetes 都能够提供非常好的支持。幸运的是,不管是为了让 Kubernetes 完整支持 Serverless 架构,还是 Google 在 cloud 上更加吸引开发者,Google 在Google Cloud Next 2018 上,发布了 Knative,并将其称为 : “ 基于 Kubernetes 的平台,用来构建、部署和管理现代 Serverless 架构 ”。Knative的主要角色如下图中所描述:
在这里插入图片描述
Knative 致力于提供可重用的“通用模式和最佳实践组合”的实现,目前可用的组件包括:

  • Build: Cloud-native source to container orchestration
  • Eventing: Management and delivery of events
  • Serving:Request-driven compute that can scale to zero

1.1 Build 构建系统

Knative 的构建工作都是被设计于在 Kubernetes 中进行,和整个 Kubernetes 生态结合更紧密;另外,它旨在提供一个通用的标准化构建组件,使其可以在广泛的场景内得以使用。正如官方文档中的说 Build 构建系统,更多是为了定义标准化、可移植、可重用、性能高效的构建方法。Knative 提供了 Build CRD 对象,让用户可以通过 yaml 文件定义构建过程。一个典型的 Build 配置文件如下:

apiVersion: build.knative.dev/v1alpha1
kind: Build
metadata:
  name: kaniko-build
spec:
  serviceAccountName: build-bot
  source:
    git:
      url: https://github.com/my-user/my-repo
      revision: master
  template:
    name: kaniko
    arguments:
    - name: IMAGE
      value: us.gcr.io/my-project/my-app

1.2 Serving:服务系统

Serving 的核心功能是让应用运行起来以提供服务。其提供的基本功能包括:

  • 自动化启动和销毁容器
  • 根据名字生成网络访问相关的 Service、ingress 等对象
  • 监控应用的请求,并自动扩缩容
  • 支持蓝绿发布、回滚功能,方便应用方法流程

Knative Serving 功能是基于 KubernetesIstio 开发的,它使用 Kubernetes 来管理容器(deployment、pod),Istio 来管理网络路由(VirtualService、DestinationRule)。
下面这张图介绍了 Knative Serving 各组件之间的关系。
在这里插入图片描述

1.3. Eventing:事件系统

Knative 定义了很多事件相关的概念。介绍一下:

  • EventSource:事件源,能够产生事件的外部系统。
  • Feed:把某种类型的 EventType 和 EventSource 和对应的 Channel 绑定到一起。
  • Channel:对消息实现的一层抽象,后端可以使用 kafka、RabbitMQ、Google PubSub 作为具体的实现。channel name 类似于消息集群中的topic,可以用来解耦事件源和函数。事件发生后 sink 到某个 channel 中,然后 channel 中的数据会被后端的函数消费。
  • Subscription:把 channel 和后端的函数绑定的一起,一个 channel 可以绑定到多个 Knative Service

目前支持的事件源有三个:github(比如 merge 事件,push 事件等),Kubernetes(events),Google PubSub(消息系统),后面还会不断接入更多的事件源。

1.4 Auto-scaling

Auto-scaling 其实本质上是用于提高云上使用资源的弹性、提供按照使用量计费的能力,以提供给用户高性价比的云服务,其有以下两个特点:

  • Request-driving:根据请求量动态伸缩,目前通过统计系统当前并发请求量、和配置中的基准值比较,做出伸缩决策。
  • Scale to zero:无流量时完全释放资源,有请求时重新唤醒。

Knative Serving 中抽象了一系列用于定义和控制应用行为的资源对象,称为Kubernetes Custom Resource Definitions (CRDs)

  • Service:app/function生命周期管理
  • Route:路由管理
  • Configuration:定义了期望的运行状态
  • Revision: 某一时刻 code + configuration ,Revision 是不可变对象,修改代码或配置生成新的 Revision
    4者间的交互如下图示:
    在这里插入图片描述
    Revision 生命周期有三种运行状态:
  • Active:Revision 启动,可以处理请求
  • Reserve:一段时间未请求为 0 后,Revision 被标记为 Reserve 状态,并释放占用的资源、伸缩至零
  • Retired: Revision 废弃,不再收到请求
    其具体的 auto-scaling 的过程,这里就不介绍了,可以自行了解。

2. Knative 实践

在上面大致了解 Knative 后,本节将详细介绍如何完成 Knative 的部署。为方便大家能按指引同样完成 Knative 的部署,因此选择滴滴云提供的基本的云服务器完成,大家可在滴滴云上申请云服务器然后按下面的步骤,完成 Knative 的基本部署。若未注册滴滴云账号的,可以通过此链接完成注册,有券_

2.1 云服务器申请

注册好滴滴云账号后,申请一个 16核32G内存,带80G本地盘及500G EBS数据盘 的云服务器,然后申请一按流量计费的 公网IP。之所以申请这样的配置,是为后续完成整个部署的过程更为顺畅。

首先登录服务器,滴滴云出于安全考虑默认的登录账户是 dc2-user,并且禁止了 root 用户的直接登录,登录命令如下:

$Code ssh dc2-user@116.85.49.244
Warning: Permanently added '116.85.49.244' (ECDSA) to the list of known hosts.
dc2-user@116.85.49.244's password:
[dc2-user@10-255-1-243 ~]$
[dc2-user@10-255-1-243 ~]$ sudo su
[root@10-255-1-243 dc2-user]#

服务器登录成功,使用 sudo su 命令完成到 root 账户的切换,购买云服务器时,我们购买了一块500G的数据盘,由于从未挂载过,需要先 格式化云盘,才能开始使用该云盘。初始化的过程如下:

[root@10-255-1-243 dc2-user]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0   80G  0 disk
└─vda1 253:1    0   80G  0 part /
vdb    253:16   0  500G  0 disk

vdb 即为那块新买的 EBS 盘。详细的挂载流程可见挂载云盘。通过教程的指引完成了数据盘的挂载,如下:

[root@10-255-1-243 dc2-user]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/vda1        80G  1.6G   79G    2% /
devtmpfs        3.8G     0  3.8G    0% /dev
tmpfs           3.9G     0  3.9G    0% /dev/shm
tmpfs           3.9G   17M  3.9G    1% /run
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
tmpfs           783M     0  783M    0% /run/user/1001
tmpfs           783M     0  783M    0% /run/user/0
/dev/vdb1       500G   33M  500G    1% /data

到目前为此,云服务器的准备好了,下面开始 Knative 的部署。

2.2 Knative 部署

我们买的是一台裸的云服务器,因此需要完成整个 Knative 的部署,大致需要下面的几个步骤:

  • Go 安装
  • Docker 安装
  • Kubectl 安装
  • Minikube 安装
  • Istio 部署
  • Knative Serving/Knative Build 部署

依次完成上面几个相关组件的安装。

2.2.1 Go 安装

安装 Go 环境,先使用 yum 安装一个低版本的 Golang,如下:

[root@10-255-1-243 dc2-user]# yum install golang
已加载插件:fastestmirror
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值