Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
2
2298a0032
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Summer2022
2298a0032
Commits
65ceac96
Commit
65ceac96
authored
2 years ago
by
bj
Browse files
Options
Downloads
Patches
Plain Diff
add image
Signed-off-by:
bj
<
925836951@qq.com
>
parent
60f57172
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
sig-node/openharmony/implementation/RK3568 OpenHarmony运行KubeEdge.md
+110
-11
110 additions, 11 deletions
...penharmony/implementation/RK3568 OpenHarmony运行KubeEdge.md
with
110 additions
and
11 deletions
sig-node/openharmony/implementation/RK3568 OpenHarmony运行KubeEdge.md
+
110
−
11
View file @
65ceac96
# RK3568 OpenHarmony运行KubeEdge
-----------------------------
以润和DAYU200为例,展示了OpenHarmony设备上运行Kubeedge的具体过程。这里,KubeEdge所用的运行时为docker。
## OpenHarmony运行Docker的关键步骤
-----
##### 1. 准备支持Docker容器的OpenHarmony内核
-
修改内核配置:
cggroup和namespace相关特性,主要修改的文件是openharmony3.1/kernel/linux/config/linux-5.10/arch/arm64/configs/rk3568_standard_defconfig
...
...
@@ -139,10 +142,16 @@ For more examples and ideas, visit:
https://docs.docker.com/get-started/
```
## OpenHarmony运行KubeEdge的关键步骤
---------------------
利用KubeEdge打通云端和OpenHarmony边端交互。这边使用的KubeEdge是1.9.1版本(提醒:k8s与KubeEdge版本是有匹配的,有些高版本的k8s是不支持的。)
##### 1. 云端安装KubeEdge cloudcore
```
# 以centos7为例 部署k8s v1.21.0
...
...
@@ -233,7 +242,10 @@ cd keadm/
keadm gettoken
```
##### 2. KubeEdge edgecore 源码静态编译
在Arm server上编译KubeEdge源码获得edgecore静态二进制文件
```
# 1. 匹配openhamrony的memory.stat格式, 修改kubeedge-1.9.1/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/utils.go
...
...
@@ -285,7 +297,9 @@ docker cp $(docker create --rm kubeedge/edgecore:v1.9.1):/usr/local/bin/edgecore
```
##### 3. OpenHarmony 边缘端安装edgecore
```
# 文件添加内容
echo "0" > /dev/cpuset/background/cpuset.mems
...
...
@@ -360,7 +374,8 @@ modules:
## 在润和DAYU200上实现参考
-----------------------------------------
### 环境信息
----------------------------------------
开发板:润和DAYU200
...
...
@@ -372,7 +387,9 @@ Docker:18.03.1
KubeEdge:1.9.1
### 操作过程与参考文件
------------------------------------------------------------------
#### DockerOnOpenHarmony
...
...
@@ -458,11 +475,16 @@ CONFIG_ARCH_HAS_TICK_BROADCAST=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
```
-
执行脚本
./check-config.sh /home/.config
./check-config.sh /home/.config
-
检测结果如图
![[img/check-1.png]]
![[check-2.png]]
![[check-3.png]]


!
[](
image/check-3.png
)
##### 2. 修改源码内核配置
...
...
@@ -660,11 +682,35 @@ def _prepare_root(system_path, target_cpu):
/lib u:object_r:rootfs:s0
```
##### 3. 编译并且在设备运行openharmony系统
-
编译
```
# 拉取最新openharmony编译环境docker镜像,镜像较大,拉取时间较长,请耐心等待
docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0
# 进入openharmony源码目录下启动镜像
cd openharmony
docker run --name ohos_build -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0
# 预编译工具包:下载和编译时间较长,请耐心等待
./build/prebuilts_download.sh
# 我使用的润和DAYU200开发板是rk3568主板,大家根据自己使用的主板进行name的填写
# 执行编译脚本:如首次编译不成功,且不是下述错误,可考虑再次运行
./build.sh --product-name rk3568 --ccache
# 编译后的img放在在路径 out/rk3568/packages/phone/images 目录里
```
-
烧录
-
并且通过hdc_std标准工具(通过蓝色的debug线也就是烧录线与PC进行通信)进入oh系统
```
# 查看是否有oh设备
D:>hdc_std.exe list targets
...
...
@@ -676,7 +722,10 @@ D:>hdc_std.exe shell
mount -o rw,remount -t auto /
```
##### 4. 格式化sd卡为f2fs文件系统
-
docker overlay filesystem推荐backing filesystem是未加密的f2fs。而RK3568的data分区是加密的ext4,可以通过micro sd card卡扩展RK3568的存储将sd card格式化为f2fs解决此问题。
-
准备一个sd卡,插入到DAYU200板子上
```
...
...
@@ -691,7 +740,10 @@ blkid
mkfs.f2fs /dev/sdc1
```
##### 5. 安装ip、iptables和busybox必备组件
-
通过有线或者无线连接网络
```
# 查看正在运行的
...
...
@@ -814,6 +866,8 @@ https://www.linux.org/docs/man5/os-release.html
/usr/lib/os-release
```
##### 6. 安装docker容器引擎组件
-
创建cgroups.json
...
...
@@ -947,6 +1001,7 @@ export PATH=$PATH:/system/bin/docker/
```
##### 7. docker环境准备
运行脚本(如果脚本无法运行也可以按脚本一步一步来)
...
...
@@ -1043,13 +1098,19 @@ setenforce 0
```
##### 8. 运行docker
```
# run dockerd
dockerd -D -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &
```
##### 9. 验证docker工作状态
```
# docker run hello-world
...
...
@@ -1082,9 +1143,14 @@ docker ps -a
docker images
```
![[dockerhello.jpg]]

#### KubeEdgeOnOpenHarmony
-
Arm server上编译edgecore
```
# 匹配openhamrony的memory.stat格式, 修改kubeedge-1.9.1/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/utils.go
...
...
@@ -1209,4 +1275,37 @@ modules:
```
最终效果是
![[edgecore.jpg]]
\ No newline at end of file

## 项目中可能遇到的问题及解决方案
-
问题一:二进制部署Docker流程
二进制部署Docker虽然官网有相应的静态二进制,但是要通过静态二进制运行起来Docker并不是一件容易的事。社区的老师真的提供了很多帮助,其中一位老师提供了他在Android运行Docker容器关键步骤教程让我来做参考。https://github.com/ThunderSoft001/kubeedgeOnAndroid
-
问题二:OpenHarmony许多开发板不适配无法运行
OpenHarmony还处于一个研发和推广阶段,所以支持OpenHarmony开发板并不是很多。在购入两块开发板不太适配OpenHarmony后,我联系了华为运营通过参与润和DAYU200体验适用活动申请到OpenHarmony官方用的开发板。DAYU200适配OpenHarmony各个标准版本,所以节省了研究开发板的烧录和运行时间。
-
问题三:OpenHarmony内核部分配置即使设置也无效
OpenHarmony 3.1 release使用的是5.10内核,有些配置是默认关闭的需要在deconfig去配置以下才能打开。然后有些配置即使在deconfig设置了,也无法打开。经过搜索和寻求帮助,发现有些配置是有依赖配置的,需要将依赖配置也打开才可以。查看具体配置的熟悉可以通过 https://cateee.net/lkddb/web-lkddb/CGROUPS.html 查看。
-
问题四:iptables静态交叉编译后无法在OpenHarmony上运行
运行docker需要一些基本软件工具,而OpenHarmony很多组件是需要自己去编译安装的。我所使用的DAYU200开发板是rk3568主板即arm64得。经过静态交叉编译iptables源码得到了arm64位的二进制文件,拷贝到OpenHarmony上一直无法运行。寻求社区老师帮助后,交叉编译iptables源码得到arm32位的静态二进制文件就可以在OpenHarmony上运行。解决方法是从64位的降到32位,这种情况平时安装软件的时候也有出现过。
-
问题五:OpenHarmony与KubeEdge的memory.stat格式不匹配
KubeEdge的edgecore在初始化的过程中会去访问系统memory.stat文件获取系统内存相关的信息。然而OpenHarmony在填充memory.stat时做了格式转换,导致edgecore无法读取memory.stat的最后四行。经过代码阅读和考虑,鉴于无法估量OpenHarmony对memory.stat数据的依赖程度,暂时修改了KubeEdge所使用的opencontainers第三方库的代码来解决这个问题。
-
问题六:OpenHarmony作为边缘端成功加入到云端后,云端无法下发任务。
在成功运行起来edgecore后,需要验证KubeEdge是否部署成功。需要从云端下发hello-world到边缘端并且运行起来,然而pod一直处于cannotrun状态。在请教过社区的老师后,发现是docker使用的overlay2模式下运行pod的路径与KubeEdge启动pod路径不同,需要将edgecore的defaultdir改成docker的pod路径即可。
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment