前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深入serverless原理(1)自建serverless平台,搭建源码调试环境

深入serverless原理(1)自建serverless平台,搭建源码调试环境

原创
作者头像
haimingli
修改于 2020-11-13 15:29:04
修改于 2020-11-13 15:29:04
3.8K00
代码可运行
举报
运行总次数:0
代码可运行

背景

腾讯云云函数Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码, 是实时文件处理和数据处理等场景下理想的计算平台。 您只需使用 SCF 平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。

但是,在我们使用过程中,会经常出现各种疑问,比如经常遇到用户说为什么云函数没有执行到,为什么超时,支持多少并发,等等一系列的问题。那么深入理解serverless原理对我们理解并解决这类问题就显得非常重要了。腾讯SCF不开源,我们也不好分析,但是serverless平台大多依赖k8s和docker容器,实现原理也大同小异,那么我们就以serverless开源框架Fission为例,深入看看无服务函数的运行原理。

下面简单介绍下Fission,这是一个依赖于k8s和docker的高性能生产级的无服务函数运行框架。使用go语言编写,并支持运行多种语言,包括NodeJS, Python, Ruby, Go, PHP, Bash以及任何Linux可执行程序。

为了理解无服务函数,那么下面开始我们将借助Fission,自建一个serverless平台,搭建源码调试环境,看看无服务函数运行原理。

依赖环境安装

本次环境搭建基于 MAC OS 上操作:

  • Docker: v19.03.13
  • Minikube: v0.28.2
  • Kubernetes: v1.10.0
  • Fission: 1.11.2
  • Kubectl: 客户端v1.18.8,服务端v1.10.0
  • go 1.12.17

本次环境会使用Minikube搭建单实例的k8s,docker和go的安装较为简单这里不再介绍

Minikube安装

避免之前有残留安装的版本,先清理一遍

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ minikube stop
$ minikube delete
$ sudo rm -f /usr/local/bin/minikube

然后下载并安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v0.28.2/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

kubectl安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git clone https://github.com/kubernetes/kubernetes.git
$ cd kubernetes
$ make
$ sudo cp _output/bin/kubectl /usr/local/bin/
$ sudo chmod +x /usr/local/bin/kubectl

k8s集群搭建

依赖环境工具安装好之后,就可以开始k8s环境搭建了,该版本的Minikube默认安装的k8s集群版本为v1.10.0,也可以指定版本,指定资源,指定虚拟机类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 设置 docker 加速镜像
$ minikube start --registry-mirror=https://registry.docker-cn.com
Starting local Kubernetes v1.8.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.minikube start --registry-mirror=https://registry.docker-cn.com  
There is a newer version of minikube available (v1.14.2).  Download it here:
https://github.com/kubernetes/minikube/releases/tag/v1.14.2
To disable this notification, run the following:
minikube config set WantUpdateNotification false
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...

# 检查状态
$ minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100

# 查看pod
$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                  READY     STATUS             RESTARTS   AGE
kube-system        etcd-minikube                                                     1/1     Running            0          42s
kube-system        kube-addon-manager-minikube                                       1/1     Running            2          4d
kube-system        kube-apiserver-minikube                                           1/1     Running            0          42s
kube-system        kube-controller-manager-minikube                                  1/1     Running            0          42s
kube-system        kube-dns-86f4d74b45-ccl6q                                         3/3     Running            3          4d
kube-system        kube-proxy-jl58n                                                  1/1     Running            0          21s
kube-system        kube-scheduler-minikube                                           1/1     Running            1          4d
kube-system        kubernetes-dashboard-5498ccf677-tjsn4                             0/1     CrashLoopBackOff   2          4d
kube-system        storage-provisioner                                               0/1     CrashLoopBackOff   2          4d
kube-system        tiller-deploy-664858687b-xmwbq                                    1/1     Running            2          4d
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# kubernetes dashboard打开
$ minikube dashboard

Fission调试环境搭建

至此依赖环境搭建完毕,接下来搭建Fission调试环境。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 下载源码
$ git clone https://github.com/fission/fission.git $GOPATH/src/github.com/fission/fission
$ cd $GOPATH/src/github.com/fission/fission

#下载依赖包
$ go mod vendor

# 检测文件是否正确
$ ./hack/verify-gofmt.sh
$ ./hack/verify-govet.sh    

导入IDE

Fission项目的代码结构很简洁,先简单介绍下项目目录:

* cmd目录是所有运行时组件的入口:

Component

Runtime Component

Used in

fetcher

Docker Image

Environments

fission-bundle

Docker Image

Binary for all components

fission-cli

CLI Binary

CLI by user

preupgradechecks

Docker Image

Pre-install upgrade

* pkg目录是所有核心组件逻辑代码所在:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.
├── pkg
│   ├── apis
│   ├── builder
│   ├── buildermgr
│   ├── cache
│   ├── canaryconfigmgr
│   ├── controller
│   ├── crd
│   ├── error
│   ├── executor
│   ├── fetcher
│   ├── fission-cli
│   ├── generator
│   ├── info
│   ├── kubewatcher
│   ├── logger
│   ├── mqtrigger
│   ├── plugin
│   ├── publisher
│   ├── router
│   ├── storagesvc
│   ├── throttler
│   ├── timer
│   └── uti

* Charts目录看起来是个图标组件,这个我们先不管。

* Environments目录云函数运行时环境

进入Fission-cli,打开main.go准备执行程序,配置程序命令,然后点击运行,即可调试创建云函数命令:

调试云函数修改为:

即可调试云函数运行。

至此,整个serverless环境搭建完毕,可以始阅读并调试代码。Fission的具体用法可以参考这里:https://docs.fission.io/docs/usage

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
部署 Prometheus Operator 监控 Kubernetes 集群
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aixiaoyang168/article/details/81661459
哎_小羊
2019/05/25
1.6K0
部署 Prometheus Operator 监控 Kubernetes 集群
我们知道 Prometheus 是一套开源的系统监控、报警、时间序列数据库的组合,而 Prometheus Operator 是 CoreOS 开源的一套用于管理在 Kubernetes 集群上的 Prometheus 控制器,它是为了简化在 Kubernetes 上部署、管理和运行 Prometheus 和 Alertmanager 集群。
kubernetes中文社区
2019/06/24
2.5K0
部署 Prometheus Operator 监控 Kubernetes 集群
Kubernetes 集群中使用 Helm 搭建 Spinnaker 平台
上一篇文章 初试 Netflix 开源持续云交付平台 Spinnaker 中,我安装的是 Development Spinnaker,安装过程比较繁琐,而且没有跟 Kubernetes 集群集成起来,只能演示其部署管理功能中的 Pipeline 功能,而 Spinnaker 的另一个核心内容集群管理功能没法操作。本次我将实际操作演示如何在 Kubernetes 集群中安装 Spinnaker,后续演示如何使用 Spinnaker 执行 deploy 和 scale 一个应用到 Kubernetes 集群中。本次演示环境,我是在本机 MAC OS 上操作,以下是安装的软件及版本:
菲宇
2019/06/12
2.6K0
Kubernetes 集群中使用 Helm 搭建 Spinnaker 平台
Kubernetes 集群使用 Helm 搭建 GitLab 并配置 Ingress
通过之前的文章 初试 Kubernetes 集群中使用 Helm 搭建 Spinnaker 平台 ,我们已经演示了如何通过 Helm 安装 Spinnaker 平台到本地 Kubernetes 集群中。本次演示环境,我依旧是在本机 MAC OS 上操作,以下是安装的软件及版本:
哎_小羊
2019/05/25
6.1K0
初试 Kubernetes 集群中使用 Helm 搭建 Spinnaker 平台
上一篇文章 初试 Netflix 开源持续云交付平台 Spinnaker 中,我安装的是 Development Spinnaker,安装过程比较繁琐,而且没有跟 Kubernetes 集群集成起来,只能演示其部署管理功能中的 Pipeline 功能,而 Spinnaker 的另一个核心内容集群管理功能没法操作。本次我将实际操作演示如何在 Kubernetes 集群中安装 Spinnaker,后续演示如何使用 Spinnaker 执行 deploy 和 scale 一个应用到 Kubernetes 集群中。本次演示环境,我是在本机 MAC OS 上操作,以下是安装的软件及版本:
哎_小羊
2019/05/25
2.2K0
minikube本地部署运行 kubernetes 实例
本次演示环境,我是在本机 MAC OS 以及虚拟机 Linux Centos7 上操作,以下是安装的软件及版本:
菲宇
2019/06/13
2.1K0
minikube本地部署运行 kubernetes 实例
使用 client-go 对 Kubernetes 进行自定义开发及源码分析
注意:这里 Kubernetes 集群搭建使用 Minikube 来完成,Minikube 启动的单节点 k8s Node 实例是需要运行在本机的 VM 虚拟机里面,所以需要提前安装好 VM,这里我选择 Oracle VirtualBox。k8s 运行底层使用 Docker 容器,所以本机需要安装好 Docker 环境,这里忽略 Docker、VirtualBox、Minikube、Kubectl 的安装过程,可以参考之前文章 Minikube & kubectl 升级并配置, 这里着重介绍下 client-go 安装以及如何自定义操作 k8s 各资源类型。
哎_小羊
2019/05/25
6.4K0
Kubernetes(k8s)中dashboard的部署。
1、k8s的dashboard的安装部署,首先需要将压缩包下载下来,然后进行解压缩操作。
别先生
2020/06/24
1.1K0
Kubernetes(k8s)中dashboard的部署。
深入玩转K8S之使用kubeadm安装Kubernetes v1.10以及常见问题解答
Kubernetes是Google开源的容器集群管理系统。它构建于docker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩 容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台。
DevinGeng
2019/04/09
1K0
Kubernetes Dashboard的安装与配置
通过kubeadm快速完成了kubernetes的安装,即可迅速地体验到kubernetes的强大功能。美中不足的是,只能通过命令来查看或操作,没有一个直观且简洁的Web UI来感受一下这种成功的喜悦。此外,国内的网络环境,也在某种程度上增加了一些门槛。面对如此种种,依然有办法体验kunernetes dashboard。
耕耘实录
2019/07/04
1.6K0
Kubernetes 构建工具浅析
Kubernetes 集群的组件众多,要部署一套符合生产环境的集群并不是一件容易的事。不过随着云原生生态的逐渐成熟、社区的快速发展,特别是在它成为事实上的容器编排标准以后,基本所有的主流云平台都完全支持 Kubernetes,或把它作为核心的云解决方案。同时,本地部署也伴随着出现了各类成熟的主动化解决方案。
Luga Lee
2021/11/23
1.3K1
Kubernetes 构建工具浅析
初试 minikube 本地部署运行 kubernetes 实例
哎_小羊
2018/01/02
4.1K0
Kubernetes简介和安装
Production-Grade Container Orchestration Automated container deployment, scaling, and management
IT小马哥
2021/06/03
1.4K0
Kubernetes简介和安装
使用kind在mac本地搭建k8s及istio
之前使用multipass装ubuntu,然后再用microk8s搭建k8s,这会直接用orbstack及kind在本地搭建k8s及istio
code4it
2023/07/31
1K0
使用kind在mac本地搭建k8s及istio
安装Minikube并启动一个Kubernetes环境
Minikube 是一种轻量级的Kubernetes 实现,可在本地计算机上创建VM 并部署仅包含一个节点的简单集群。Minikube 可用于Linux , macOS 和Windows 系统。Minikube CLI 提供了用于引导集群工作的多种操作,包括启动、停止、查看状态和删除。
小陈运维
2022/12/20
1.5K0
Jenkins X--(6)虚拟机里搭建Minikube环境
上一节《Jenkins X--(5)准备虚拟机环境》完成了虚拟机环境的搭建。这一节开始在虚机上基于minikube搭建k8s环境,用于后面JenkinsX的环境构建。在开始之前,需要对操作系统做一些配置,以方便后续的操作。
DevOps亮哥
2019/11/28
8390
Jenkins X--(6)虚拟机里搭建Minikube环境
K8s 开始
Kubernetes[1] 是用于自动部署,扩展和管理容器化应用程序的开源系统。本文将介绍如何快速开始 K8s 的使用。
GoCoding
2021/09/29
1.6K0
使用minikube搭建本地k8s集群
但是由于这一步需要在线下载一些包,因此如果不访问国外网站的话基本不会成功,所以通常我们得使用代理才可以使上面命令运行成功
kongxx
2022/03/21
1K0
Kubernetes学习环境难搭建?Mac笔记本上安装一个!
要学习Kubernetes技术,先决条件是得有一个实验环境,虽然在之前的文章中给大家介绍过如何安装部署一个Kubernetes(具体可参考<<如何部署一个Kubernetes集群>>),但是这篇文章是基于Linux虚拟机安装的,所需要的资源环境还是相对复杂。而我们在日常学习Kubernetes的过程中,其实是更希望在开发电脑上直接部署一个简单的Kubernetes环境,这样学习起来会更加方便。今天的内容就给大家介绍下如何在Mac开发电脑上安装一个基于MiniKube的Kubernetes学习环境!
用户5927304
2020/12/29
2.2K0
kubernetes系列教程(二)kubeadm离线部署1.14.1集群
本章是kubernetes系列教程第二篇,要深入学习kubernetes,首先需要有一个k8s环境,然而,受制硬件环境,网络环境等因素,要搭建一个环境有一定的困难,让很多初学者望而却步,本章主要介绍通过kubeadm安装工具部署kubernetes集群,考虑到国内网络限制,已将安装镜像通过跳板机下载到本地,方便大家离线安装。
HappyLau谈云计算
2019/08/03
14.2K2
kubernetes系列教程(二)kubeadm离线部署1.14.1集群
相关推荐
部署 Prometheus Operator 监控 Kubernetes 集群
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验