OpenWhisk部署指南

OpenWhisk是开源的Serverless平台,Github上的地址,虽然Github上有着部署的相关文档,但还是遇到了不少的问题,将安装过程及问题记录如下。

首先是将项目Clone到本地,进入OpenWhisk目录下
# Install git if it is not installed
sudo apt-get install git -y

# Clone openwhisk
git clone https://github.com/apache/openwhisk.git openwhisk

# Change current directory to openwhisk
cd openwhisk

安装JDK8

(这里比较推荐自己安装并部署好环境变量,便于管理,JDK的安装部署网上有很多教程就不贴出来了)

在 /openwhisk路径下执行以下命令安装 Open JDK8
# Install all required software
(cd tools/ubuntu-setup && ./all.sh)

执行以下命令安装 Oracle JDK 8
# Install all required software
(cd tools/ubuntu-setup && ./all.sh oracle)

这里需要注意到一点是,这个命令不仅是安装JDK,其他需要的一些需要的软件它也会部署。
根据我的经历,这里它会默认安装python2和python3,并且默认的python环境是python2,当默认是python2时运行部署命令会出现下面的问题,可以用https://stackoverflow.com/questions/69502341/error-you-are-using-pip-version-8-1-1-however-version-21-2-4-is-available-you的解决方案去解决
在这里插入图片描述
更新:这里还是修改下python的默认为python3

root@amax7:/usr/local/bin# vi ~/.bashrc 

添加别名

root@amax7:/usr/local/bin# source ~/.bashrc 

这里再运行python --version命令可以看到已经变为python3的版本了

(或者采用该博客的方法)

Build
cd <home_openwhisk>
./gradlew distDocker

再运行这行命令后首先遇到了下图的问题,显示我fetch不到一个压缩包,实际上我是可以直接打开的,在issue也有人遇到了相关的情况,包括一些博客也有提到,是Docker镜像的问题,但是我在服务器搭了梯子再运行上述命令还是失败了
在这里插入图片描述

解决方法主要参考这篇博客,通过更换Docker源的问题初步解决
在这里插入图片描述
有一点小插曲是,找不到到底是哪个Dockerfile出现了相应的命令,参考这篇文章解决了。

继续运行部署命令,遇到了如下的问题,在查询了诸多解决方法无果后重启服务器解决了,reboot大法好
重启后解决

CouchDB部署

CouchDB的部署主要参考了这篇文章
根据github的教程,通过dblocal.ini会配置以下的变量值

[db_creds]
db_provider=
db_username=
db_password=
db_protocol=
db_host=
db_port=

我在这里遇到的问题是我没有dblocal.ini这个文件,所以无法配置,根据文章的教程,可以先创建一个.sh文件,如下

mkdir /home/logconf 这里可以选择其他的文件,用于保存log,由于配置和日志默认保存路径为/tmp,机器重启时会被清空
vim wsk_env.sh
export OW_DB=CouchDB
export OW_DB_USERNAME=openwhisk
export OW_DB_PASSWORD=openwhisk
export OW_DB_PROTOCOL=http
export OW_DB_HOST=172.17.0.1
export OW_DB_PORT=5984 这个端口最好不选 443,openwsk 最后启动的 nginx 占用 443,避免冲突
export OPENWHISK_TMP_DIR=/home/logconf

之后,开始进行ansible安装

source openwsk_env.sh
cd ansible
ansible-playbook -i environments/local setup.yml

执行完后再打开/openwhisk/ansible/dblocal.ini如下所示

在这里插入图片描述
(补充一下,wsk_env.shOW_DB_HOST的值最好改为172.17.0.1,其他不变)

根据参考的文章,CouchDB配置部分就到此结束了,但是我在后面的部署中CouchDB还是遇到了一些问题,留待更新验证。

更新

当我再次运行,./gradlew distDocker 命令时遇到了如下的问题,检查发现是9100端口号被占用,用了这篇文章的解决方案,这里就不再赘述了
9100端口号被占用
查询那个进程占用了9100端口号,可以看到是1126占用了端口号,把它kill掉再次运行couchdb.yml命令
接着切换到ansible路径下依次运行如下命令(参照github)

cd <openwhisk_home>
./gradlew distDocker
cd ansible
ansible-playbook -i environments/$ENVIRONMENT couchdb.yml
ansible-playbook -i environments/$ENVIRONMENT initdb.yml
ansible-playbook -i environments/$ENVIRONMENT wipe.yml
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml

# installs a catalog of public packages and actions
ansible-playbook -i environments/$ENVIRONMENT postdeploy.yml

# to use the API gateway
ansible-playbook -i environments/$ENVIRONMENT apigateway.yml
ansible-playbook -i environments/$ENVIRONMENT routemgmt.yml

但是再运行到openwhisk.yml时始终运行不成功,如下所示,Openwhisk Issue#4303 #4485
等issue均有提到,但是在尝试了多种方法后仍未解决。
运行openwhisk.yml时出现了问题
后续是,重新部署了一遍Openwhisk,怀疑是ansible的安装出了问题,在之前的cd tools/ubuntu-setup && ./all.sh 后单独执行了相应文件夹下的ansible.sh,得到了解决。
(从经历的很多次失败来说,ansible总会出现问题,导致我后面每次出错第一时间就会想重新执行ansible.sh)

接下来在所有的上述命令执行完后,执行docker ps查看当前容器运行状态

参考阿里的一篇文章配置wsk的全局路径并进行测试

vim ~/.bashrc  //配置环境变量
export PATH=$PATH:/home/amax11/openwhisk/bin //填自己的openwhisk bin路径
source ~/.bashrc //source下使文件生效 

OpenWhisk 提供了一个统一的命令行接口 wsk。生成的 wsk 在 openwhisk/bin 下。其有两个属性需要配置。

API host 用于部署 OpenWhisk 的主机名或 IP 地址的 API。
Authorization key(用户名或密码)用来授权操作 OpenWhisk 的 API。


设置 API host,在单机配置中的 IP 应该为 172.17.0.1。

./bin/wsk property set --apihost '172.17.0.1'
./bin/wsk property set --auth `cat ansible/files/auth.guest`

创建测试文件sudo nano hello.js

/**
 * Hello world as an OpenWhisk action.
 */
function main(params) {
    var name = params.name || 'World';
    return {payload:  'Hello, ' + name + '!'};
}

接着create action

wsk action create hello hello.js

查看输出结果

wsk action invoke hello --result

这里我遇到了一个问题,报错大概是这样

x509: cannot validate certificate for x.x.x.x because it doesn’t contain any IP SANs

查了资料发现只用将wsk XXX 改为wsk -i XXX就恢复了正常。或者按照github上的问题链接进行修改

到此为止,部署测试部分就算结束了

一些问题记录

ansible相关的问题

当在命令行运行ansible时有如下提示时:

The program 'ansible' is currently not installed. You can install it by typing:
apt install ansible

根据github教程
在这里插入图片描述

当运行ansible-playbook -i XXXXXX相关的命令时出现如下错误时

Traceback (most recent call last):
  File "/usr/lib/command-not-found", line 27, in <module>
    from CommandNotFound.util import crash_guard
ModuleNotFoundError: No module named 'CommandNotFound'

参考博客
在这里插入图片描述
解决

执行 ./gradlew distDocker时出现下面的错误

java.io.IOException: Cannot run program "node": error=2, No such file or director

通过执行apt install npm解决

由于用的服务器重装了系统,分配了权限,可能会出现XXXPermission deniedXXX之类的问题,加上sudo执行。

版本问题

在执行all.sh或者ansible.sh时,很容易出现失败的现象,我将我的一部分库版本贴出
在这里插入图片描述
在这里插入图片描述
如果是出现

[ImportError: cannot import name 'soft_unicode' from 'markupsafe' (/usr/local/lib/python3.8/dist packages/markupsafe/__init__.py)] 由于 markupsafe 弃用警告:“soft_unicode”已重命名为“soft_str”.旧名称将在 MarkupSafe 2.1 中删除.只能安装2.1下版本,比如pip install markupsafe==2.0.1

或者重装markupsafe,或者是setuptools,细节部分有些遗忘,直接用pip install xx=xx.xx.xx更新即可,也可以用pip uninstall后再次重装,如果出现卸载问题记得加上sudo,比如我就遇到了launchpadlib 1.10.13 requires testresources, which is not installed. 时,卸载不掉launchpadlib的情况。

其他的版本出现问题时一般有提示,也直接用pip install xx=xx.xx.xx更新即可,具体的版本信息可以用上图做一定参考。

当运行 ansible-playbook -i setup.yml时我遇到了

The conditional check 'nginx.ssl.cert == "openwhisk-server-cert.pem"'
failed. The error was: error while evaluating conditional (nginx.ssl.cert ==
"openwhisk-server-cert.pem"): 'ansible_distribution' is undefined The error
appears to have been in '/home/travis/build/odidev/openwhisk/ansible/setup.yml':
line 61, column 5, but may be elsewhere in the file depending on the exact
syntax problem. The offending line appears to be: # Generate nginx
certificates - name: gen untrusted server certificate for host ^ here

一般是ansible版本问题,参照上图更新即可

未完待续

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
OpenWhisk是一个基于事件驱动的服务器无状态计算平台,其目录结构如下: ``` . ├── ansible ├── apigateway ├── catalog ├── clients ├── common ├── core ├── docker ├── docs ├── gradle ├── integration ├── kubernetes ├── main ├── packages ├── proxy ├── providers ├── samples ├── tests └── tools ``` 其中: - `ansible`:包含了用于部署OpenWhisk的Ansible playbooks和相关脚本。 - `apigateway`:实现了OpenWhisk API网关,允许将外部HTTP请求转发到相应的OpenWhisk动作。 - `catalog`:包含了一系列预先构建的OpenWhisk动作和序列,可供用户直接使用。 - `clients`:包含了用于与OpenWhisk API进行交互的客户端库。 - `common`:包含了OpenWhisk中的一些公共组件。 - `core`:包含了OpenWhisk的核心组件,如控制器、触发器、动作运行时等。 - `docker`:包含了OpenWhisk的Docker镜像构建文件。 - `docs`:包含了OpenWhisk的文档。 - `gradle`:包含了Gradle构建脚本。 - `integration`:包含了OpenWhisk的集成测试脚本。 - `kubernetes`:包含了用于在Kubernetes上部署OpenWhisk的脚本。 - `main`:包含了OpenWhisk的主要源代码。 - `packages`:包含了OpenWhisk的预定义软件包。 - `proxy`:实现了OpenWhisk的API代理,用于将API请求转发到OpenWhisk控制器。 - `providers`:包含了OpenWhisk的提供商插件,用于支持不同的云服务提供商。 - `samples`:包含了OpenWhisk的示例代码。 - `tests`:包含了OpenWhisk的单元测试和集成测试代码。 - `tools`:包含了OpenWhisk的一些工具,如部署、监控和管理工具等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武汉大学计算机学院智能计算系统实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值