在Kubernetes上实现无服务器和有状态工作负载
立即解锁
发布时间: 2025-08-24 02:05:44 阅读量: 2 订阅数: 4 

### Kubernetes 上的无服务器和有状态工作负载实践
#### 1. 使用 OpenFaaS 在 Kubernetes 上实现无服务器计算
在 Kubernetes 上实现无服务器计算时,除了 Knative,OpenFaaS 也是一个不错的选择。下面我们将详细介绍如何在 Kubernetes 上使用 OpenFaaS 实现函数即服务(FaaS)。
##### 1.1 使用 Helm 安装 OpenFaaS 组件
首先,我们需要创建两个命名空间来存放 OpenFaaS 组件:
- `openfaas`:用于存放 OpenFaaS 的实际服务组件。
- `openfaas-fn`:用于存放我们部署的函数。
可以使用以下命令添加这两个命名空间:
```bash
kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
```
接着,添加 faas-netes Helm 仓库:
```bash
helm repo add openfaas https://openfaas.github.io/faas-netes/
helm repo update
```
最后,部署 OpenFaaS:
```bash
helm install openfaas openfaas/openfaas \
--namespace openfaas \
--set functionNamespace=openfaas-fn \
--set ingress.enabled=true \
--set generateBasicAuth=true
```
部署完成后,获取 Helm 安装过程中生成的凭证:
```bash
OPENFAASPWD=$(kubectl get secret basic-auth -n openfaas -o jsonpath="{.data.basic-auth-password}" | base64 --decode)
```
##### 1.2 安装 OpenFaaS CLI 并部署函数
安装 OpenFaaS CLI:
```bash
curl -sL https://cli.openfaas.com | sudo sh
```
使用 OpenFaaS CLI 创建一个新的 Node.js 函数:
```bash
faas-cli new my-function –lang node
```
执行上述命令后,会生成一个文件夹 `my-function`,其中包含函数代码的样板文件和一个 OpenFaaS YAML 文件 `my-function.yml`,内容如下:
```yaml
provider:
name: openfaas
gateway: http://localhost:8080
functions:
my-function:
lang: node
handler: ./my-function
image: my-function
```
函数代码位于 `my-function` 文件夹中,包含一个函数文件 `handler.js` 和一个依赖清单 `package.json`。编辑 `handler.js` 文件,使其返回一些文本:
```javascript
"use strict"
module.exports = (context, callback) => {
callback(undefined, {output: "my function succeeded!"});
}
```
构建函数:
```bash
faas-cli build -f /path/to/my-function.yml
```
将容器镜像推送到容器仓库:
```bash
faas-cli push -f my-function.yml
```
部署函数到 OpenFaaS:
```bash
faas-cli deploy -f my-function.yml
```
测试函数之前,需要将 OpenFaaS 服务映射到本地端口 8080:
```bash
export OPENFAAS_URL=http://127.0.0.1:8080
kubectl port-forward -n openfaas svc/gateway 8080:8080
```
添加认证凭证到 OpenFaaS CLI:
```bash
echo -n $OPENFAASPWD | faas-cli login -g $OPENFAAS_URL -u admin --password-stdin
```
最后,测试函数:
```bash
faas-cli invoke -f my-function.yml my-function
```
如果要删除特定函数,可以使用以下命令:
```bash
faas-cli rm -f my-function.yml
```
#### 2. Kubernetes 上的有状态工作负载
Kubernetes 为运行无状态和有状态应用程序提供了出色的原语,但有状态工作负载在 Kubernetes 上的成熟度相对较低。不过,近年来一些基于 Kubernetes 的有状态应用程序框架和项目证明了有状态应用程序在 Kubernetes 上的成熟度正在不断提高。
##### 2.1 流行的 Kubernetes 原生有状态应用程序
- **数据库**:
- **CockroachDB**:分布式 SQL 数据库,可在 Kubernetes 上无缝部署。
- **Vitess**:MySQL 分片编排器,可实现 MySQL 的全局可扩展性,可通过操作符在 Kubernetes 上安装。
- **YugabyteDB**:类似于 CockroachDB 的分布式 SQL 数据库,还支持类似 Cassandra 的查询。
- **队列、流和消息传递**:
- **NATS**:开源消息传递和流系统。
- **KubeMQ**:Kubernetes 原生消息代理。
- **对象存储**:
- **Minio**:高性能的 S3 兼容对象存储。
- **Open IO**:类似于 Minio,具有高性能,支持 S3 和 Swift 存储。
- **其他**:
- **密钥和认证管
0
0
复制全文
相关推荐










