环境:
架构:aarch64
操作系统:openEuler SP1
前方路滑,辩证参考!
懵比ing,2021/12/20下午启动研究:
了解了isulad(一种容器引擎)的架构,目的似乎是为了兼容所有类型容器,如K8s容器管理平台、docker引擎创建的容器等。架构图如下,
图来源:https://docs.openeuler.org/zh/docs/20.03_LTS_SP1/docs/Container/iSula%E5%AE%B9%E5%99%A8%E5%BC%95%E6%93%8E.html
架构可知,LCR容器使用docker或K8s容器应用的流程如下:
1 LCR容器(可能有多个)首先和isulad容器引擎进行“感情交流"。isulad与cocker容器引擎大同小异,分为只读image镜像和可读写运行时。只读image镜像由一些服务如Content服务、Rootfs服务、Content插件、Snapshot快照插件组成;可读写运行时有Execution服务和lcr(引擎)插件以及其他自由插件。Content服务、Rootfs服务和Execution服务又被内聚为isulad服务。
2 isulad容器引擎开始通过CLI命令行、gRPC API(远程进程通信)、REST API(前后端分离但能沟通的实现,”若即若离“)的方式与K8s、docker沟通并使用它们的容器应用。
1 安装isulad,依赖安装有lcr(isulad的一种运行时)、clibcni(isula的网络组件)等。
yum install iSulad
isulad服务可以通过命令行参数或/etc/isulad/daemon.json或/etc/sysconfig/iSulad配置。
逐渐清晰ing,2021/12/21:
明确目标:安装6个东西:iSulad、lcr、clibcni、isula-transform、stratovirt、openeuler-docker-images,前3个已经安装好。
1 安装isula-transform,没有直接可用的rpm包
1.1 安装git
yum install git -y
1.2 git克隆isula-transform代码
git clone https://gitee.com/openeuler/isula-transform.git
1.3 查看README.md提示依赖golang1.13及以后版本,lcr2.0.1及以后版本,安装编译依赖
1.3.1 查看lcr版本符合,如下图
1.3.2 安装golang,并查看版本符合,如下图
yum install golang -y
1.4 编译isula-transform
cd isula-transform
make -j8 && make install
出错如下图,缺少头文件的一般都是需要devel包,想想。
根据错误提示找不到isula_libutils/oci_image_manifest.h,执行如下命令查看文件属于哪个包
yum provides /usr/include/isula_libutils/oci_image_manifest.h
结果如下图
开干!
yum install lcr-devel -y
再次编译又报差不多错误如下图
依葫芦画瓢,再干!
yum install yajl-devel-2.1.0-12.oe1.aarch64 -y
编译又报错误如下图!
葫芦七兄弟!干干干!
yum install lxc-devel-4.0.3-2020121501.oe1.aarch64 -y
终于编译成功了,我giao,如下图!
有请下一位!
2 git克隆stratovirt源码
2.1 git下载
git clone https://gitee.com/openeuler/stratovirt.git
2.2 安装编译依赖rust和cargo
yum install rust cargo -y
2.3 编译stratovirt源码
cd stratovirt
cargo build --release
3 下载openEuler容器镜像仓库
3.1 克隆仓库
git clone https://gitee.com/openeuler/openeuler-docker-images.git
3.2 执行下载脚本
cd openeuler-docker-images/openeuler
downlaod.sh
下载过程如下图
3.3 使用isula命令加载20.03-lts-sp1的基础docker镜像
isula load -i 20.03-lts-sp1/openEuler-docker.aarch64.tar.xz //加载基础docker镜像
isula images //查看基础docker镜像
isula rmi e5cdd7e62f7e //移除基础docker镜像
如下图
3.4 使用isula命令创建20.03-lts-sp1的容器
isula create openeuler-20.03-lts-sp1 //创建容器
isula ps -a //查看容器
isula rm 86fb128ecd17 //移除容器
如下图
2021/12/22
1 启动容器,结果状态为Exited,如下图
2 执行如下命令查看日志,日志报错误,如下图。
systemctl status isulad
原因:终端错误。
解决方法:创建容器时,增加-t参数,如下命令
isula create -t e5cdd7e62f7e
2021/12/23
1 直接通过run子命令创建并运行容器,如下图
isula images //查看镜像ID
isula run -td e5cdd7e62f7e //创建并运行容器在后台
isula ps -a //查看容器状态
2 执行attach子命令进入容器环境,如下图
isula attach 44ac43a0097a
退出环境则输入exit命令,且容器STATUS状态为Exited(127)。
若要将Exited(127)重新运行输入如下命令,如下图
isula start 44ac43a0097a
3 删除运行中的容器,如下图
isula stop 44ac43a0097a //停止容器运行
isula rm 44ac43a0097a //删除容器
2021/12/24
参考链接:https://gitee.com/openeuler/isula-transform
一、isula-transform
2021/12/28
参考链接:https://docs.openeuler.org/zh/docs/20.03_LTS_SP2/docs/Container/%E7%B3%BB%E7%BB%9F%E5%AE%B9%E5%99%A8.html
2021/12/29
1 下载docker
yum install docker-engine.aarch64 -y
2 下载openEuler20.03下编译isula-transform的依赖
yum install golang lcr-devel yajl-devel lxc-devel -y
编译仍报错如下图
执行如下命令,搜索seccomp相关的包,发现需要下载libseccomp-devel
yum search seccomp
yum install libseccomp-devel -y
编译成功如下图
3 使用docker命令加载openEuler-docker.aarch64.tar.xz,如下图
4 使用isula-transform转换时报错误如下图
扮演沉思者ing:错误提示也讲isuladimg返回空的rootfs,原来是isulad没有加载基础镜像!
4.1 先用isula加载基础镜像,如下图
isula load -i openEuler-docker.aarch64.tar.xz
4.2 再用isula-transform转换,如下图
4.3 重启isulad服务后,即可查看isula多了容器且容器ID与docker的ID一样,如下图
2021/12/30
二、Isulad
isulad容器只看到lo回环网卡,所以得自己配置网络。
参考链接:https://gitee.com/openeuler/docs/blob/stable2-21.09/docs/zh/docs/Container/%E5%AE%B9%E5%99%A8%E8%B5%84%E6%BA%90%E5%8A%A8%E6%80%81%E7%AE%A1%E7%90%86.md#%E7%BD%91%E5%8D%A1%E7%AE%A1%E7%90%86
1 下载系统容器工具RPM包syscontainer-tools和网桥工具bridge-tools包
yum install syscontainer-tools-0.9-1.oe1.aarch64 bridge-tools -y
2 添加网桥isulad0并激活,如下图
brctl addbr isulad0 //添加网桥isulad0
ip link set isulad0 up //激活网桥isulad0
3 配置网桥IP和广播地址,如下图
ip a add 10.10.0.1/16 dev isulad0 broadcast 10.10.255.255
4 使用syscontainer-tools给宿主机和容器间添加veth pair虚拟网卡对,结果如下图
syscontainer-tools add-nic --type "veth" --name abc2:bcd2 --ip 10.10.0.2/16 --mac 00:ff:48:13:11:11 --bridge isulad0 7bee9bf890c6
宿主机现象如下图
容器现象如下图
5 从宿主机复制ping命令到容器
isula cp /usr/bin/ping 7bee9bf890c6:/usr/bin
容器可ping通宿主机网桥isulad0,主机壳ping通容器10.10.0.2,但容器无法ping外网114.114.114.114,如下图
期间添加默认路由提示无权限,后经测试在创建容器时添加–privileged参数设为特权容器即可拥有权限。但仍无法pnig通外网114.114.114.114。
干正事了,静待有缘人!