在Kubernetes中运行无服务器函数及相关技术探索
发布时间: 2025-08-12 00:07:03 阅读量: 2 订阅数: 9 

### 在 Kubernetes 中运行无服务器函数及相关技术探索
#### 1. 无服务器函数抽象与 Serverless 项目
在 Kubernetes 中实现无服务器架构时,某些开源项目可能会面临活跃度下降的问题。为降低引入此类项目的风险,可以使用名为 Serverless 的通用项目对无服务器实现进行抽象。
Serverless 项目可对函数定义进行标准化,并与底层无服务器平台集成以执行实际工作。例如,可将 Serverless 部署在 Kubeless 之上,使用 Serverless 规范来定义函数,而非直接使用 Kubeless。这样,若后续想从 Kubeless 迁移到 Knative、OpenWhisk 或 Fn Project 等平台,只需进行少量工作,因为 Serverless 也支持这些平台。
Serverless 引入了额外的 YAML 规范来定义函数,虽不如 Kubeless 简洁,但该规范简单且将函数定义和触发器定义整合在一起。以下是一个 Serverless 函数规范示例:
```yaml
service: todo-api # A service can group many functions.
provider:
name: kubeless # The provider is the actual platform.
runtime: nodejs12 # You can use any runtime it supports.
hostname: api.todo.kiamol.local # This is used for ingress rules.
plugins:
- serverless-kubeless
functions: # This is the function definition.
todo-api:
description: 'ToDo list - create item API'
handler: server.handler
events: # Complete with the trigger events.
- http:
path: /todos
```
#### 2. 使用 Serverless 部署函数的操作步骤
- **替换 Kubeless 函数**
1. 删除 Kubeless 自定义资源以移除函数和触发器:
```bash
kubectl delete cronjobtriggers,natstriggers,httptriggers,functions --all
```
2. 创建包含 Serverless CLI 的 Pod:
```bash
kubectl apply -f serverless-cli.yaml
```
3. 等待 Pod 准备就绪:
```bash
kubectl wait --for=condition=ContainersReady pod serverless-cli
```
4. 确认 Serverless CLI 已设置:
```bash
kubectl exec serverless-cli -- serverless --version
```
- **创建待办事项 API 函数**
1. 连接到 Serverless CLI 会话:
```bash
kubectl exec -it serverless-cli -- sh
```
2. 切换到 API 代码文件夹:
```bash
cd /kiamol/ch21/serverless/todo-api
```
3. 安装所有部署依赖项:
```bash
npm install
```
4. 部署函数:
```bash
serverless deploy
```
5. 列出 Kubeless 函数:
```bash
kubectl get functions
```
6. 确认 Pod 已创建:
```bash
kubectl get pods -l function=todo-api
```
7. 列出 HTTP 触发器:
```bash
kubectl get httptriggers
```
- **部署审计函数**
1. 切换到审计函数文件夹:
```bash
cd /kiamol/ch21/serverless/todo-audit
```
2. 部署 Serverless Node.js 依赖项:
```bash
npm install
```
3. 部署函数:
```bash
serverless deploy
```
4. 确认函数已部署:
```bash
kubectl get functions
```
5. 确认触发器已部署:
```bash
kubectl get natstriggers
```
0
0
相关推荐









