华为云之使用iSula生态链进行容器镜像构建和运行【玩转华为云】

举报
江湖有缘 发表于 2024/03/30 11:43:19 2024/03/30
【摘要】 华为云之使用iSula生态链进行容器镜像构建和运行【玩转华为云】

一、本次实践介绍

1.1 实践环境简介

1.本次实践环境使用华为KooLabs云实验平台。
2.本次实践基于华为云ECS弹性云服务器。
3.使用iSula生态链进行容器镜像构建和运行。

1.3 本次实践完成目标

  • 使用iSulad运行容器,了解和掌握iSulad容器引擎基本操作指令。
  • 使用isula-build构建容器镜像,了解和掌握isula-build进行容器镜像的构建。
  • iSulad与docker性能对比, 感受到相比于docker,iSulad在性能上的优势。。

二、 相关服务介绍

2.1 华为云ECS云服务器介绍

弹性云服务器(Elastic Cloud Server, ECS)是一种云上可随时自助获取、可弹性伸缩的计算服务,可帮助您打造安全、可靠、灵活、高效的应用环境。

image.png

2.2 iSulad介绍

iSulad是华为公司推出的一款容器技术。它是一种轻量级的虚拟化技术,允许用户在独立的运行环境中部署和运行应用程序。iSulad使用Linux容器技术,通过隔离进程、文件系统、网络和其他系统资源来实现应用程序之间的隔离。

三、环境准备工作

3.1 预置实验环境

1.开始实验之前请点击手册上方“预置实验环境”按钮。
2.预置实验环境约等待2分钟左右。环境预置会生成虚拟私有云、安全组以及一台鲲鹏架构的弹性云服务器。

在这里插入图片描述

3.2 查看预置环境信息

预置成功后ECS资源用户、密码信息可点击预置环境信息查看。

在这里插入图片描述

四、访问ECS云服务器

4.1 登录华为云

进入【实验操作桌面】,打开Chrome浏览器,首次可自动登录并进入华为云控制台页面。

在这里插入图片描述

登录完毕后,进入华为云控制台管理首页。
在这里插入图片描述

4.2 查看云服务器状态

在华为云的首页服务列表中,点击“弹性云服务器ECS”,进入ECS云服务器管理页面,查看云服务器状态。

在这里插入图片描述

在这里插入图片描述

五、登录云服务器

5.1 复制弹性公网IP地址

在ECS云服务器列表,我们可以看到实验系统为我们创建一台鲲鹏架构的弹性云服务器, 复制ECS弹性云服务器的弹性公网IP地址。

在这里插入图片描述

5.2 远程连接接ECS服务器

打开桌面的Xfce终端,进行SSH登录。这里由于实验环境设置的随机密码过于复杂,非常不友好且无权限重置密码,在Xfce终端中逐个敲密码和粘贴密码都错误及卡住不动,浪费大量时间。建议直接使用本地电脑的Xshell登录,快速远程连接上。

ssh root@EIP

在这里插入图片描述

5.3 检查云服务器操作系统版本

检查云服务器操作系统版本,当前使用操作系统版本为openEuler 20.03。

[root@ecs-isula ~]# cat /etc/os-release
NAME="openEuler"
VERSION="20.03 (LTS)"
ID="openEuler"
VERSION_ID="20.03"
PRETTY_NAME="openEuler 20.03 (LTS)"
ANSI_COLOR="0;31"

六、安装及配置iSulad

6.1 安装iSulad

直接执行以下命令,安装iSulad。

yum install -y iSulad-2.0.0 --nogpgcheck

在这里插入图片描述

6.2 备份配置文件

执行以下命令,我们将iSulad的原始配置文件进行备份。

cp /etc/isulad/daemon.json /etc/isulad/daemon.json.origin

6.3 修改配置文件

打开iSulad的配置文件daemon.json,修改其镜像仓库地址。

vim /etc/isulad/daemon.json

将图中部分修改镜像仓库。

 "registry-mirrors": [
             "hub.oepkgs.net"
    ]

在这里插入图片描述

6.4 安装JSON格式数据处理工具

执行以下命令,安装JSON格式数据处理工具。

yum install -y jq --nogpgcheck

在这里插入图片描述

6.5 检查配置文件

执行以下命令,将iSulad配置文件内容daemon.json输出,确保配置正确。

cat /etc/isulad/daemon.json | jq

在这里插入图片描述

6.6 重新启动iSulad服务

  • 重新启动iSulad服务
systemctl restart isulad
  • 检查iSulad服务服务状态
systemctl status isulad

在这里插入图片描述

七、使用iSula运行容器

7.1 创建openeuler容器

使用 isula命令创建openeuler容器

 isula create -it openeuler/openeuler:20.09

在这里插入图片描述

7.2 查看创建容器状态

执行以下命令,查询刚才创建的容器状态。

isula ps

由于容器没有运行,我们可以看到没有在运行的容器。
在这里插入图片描述
我们使用isula ps -a命令,查看宿主机所有容器状态。

isula ps -a

在这里插入图片描述

7.3 启动容器

将查看到的容器ID复制后,使用isula start命令启动。

 isula start c4a

查看当前容器状态

[root@ecs-isula ~]# isula  ps
CONTAINER ID	IMAGE                    	COMMAND    	CREATED      	STATUS           	PORTS	NAMES
c4a63da78bd7	openeuler/openeuler:20.09	"/bin/bash"	6 minutes ago	Up About a minute	     	c4a63da78bd787a2f198382cccedb7bd37f713db169ef99dbc6045a146ae29a4

7.4 查看容器内系统版本

执行以下命令进入容器内,查看系统版本为20.09,而宿主机版本为20.03。

isula  exec -it c4a /bin/bash

在这里插入图片描述

八、构建容器镜像

8.1 安装构建工具

安装构建工具,iSula提供了容器镜像构建工具isula-build。

yum --enablerepo update install -y isula-build

在这里插入图片描述

8.2 启动isula-build服务

启动isula-build服务

systemctl status isula-build

在这里插入图片描述

8.3 安装 runc

isula-build构建Dockerfile内的RUN指令时依赖可执行文件runc,需要执行以下命令在isula-build的运行环境上预装好 runc。

yum install -y docker-runc --nogpgcheck

在这里插入图片描述

8.4 构建镜像导入到iSulad

  • 创建目录
mkdir test-isula-build && cd test-isula-build
  • 编辑dockerfile文件
vim Dockerfile
FROM hub.oepkgs.net/openeuler/openeuler:20.09
COPY hello.sh /usr/bin/
CMD ["sh", "-c", "/usr/bin/hello.sh"]

编辑hello.sh脚本

vim hello.sh
chmod +x hello.sh

开始构建镜像

isula-build ctr-img build -f Dockerfile -o isulad:hello-isula-build:v0.1 .

在这里插入图片描述

8.5 查询构建镜像

查询构建镜像。我们使用以下命令。

isula-build ctr-img images

在这里插入图片描述

也可以使用isula命令查询

hello-isula-build

在这里插入图片描述

8.6 运行镜像

执行以下命令,运行刚构建好的镜像。

isula run hello-isula-build:v0.1

在这里插入图片描述

九、测试性能

9.1 测试iSulad的性能

和Docker相比,iSulad是通过C/C++实现的轻量级容器引擎,底噪开销更小,具备更少的资源占用、更快的容器启动速度等优势。接下来的操作将尝试使用iSulad运行多个容器,并与Docker进行对比。

  • 依次执行以下命令
cd ~; isula pull openeuler/openeuler:20.09
vim get_time.sh
#!/bin/bash

function getTiming() {
    local start=$1
    local end=$2

    local start_s=$(echo $start | cut -d '.' -f 1 | tr -d -c '0-9 n')
    local start_ns=$(echo $start | cut -d '.' -f 2 | tr -d -c '0-9 n')

    local end_s=$(echo $end | cut -d '.' -f 1 | tr -d -c '0-9 n')	
    local end_ns=$(echo $end | cut -d '.' -f 2 | tr -d -c '0-9 n')

    while [ $(echo ${start_ns:0:1}) == 0 ]
    do
        start_ns=$(echo ${start_ns#*0})
    done

    while [ $(echo ${end_ns:0:1}) == 0 ]
    do
        end_ns=$(echo ${end_ns#*0})
    done

    local sum_start_ms=$(($start_s*1000+$start_ns/1000000))
    local sum_end_ms=$(($end_s*1000+$end_ns/1000000))
    time=$(($sum_end_ms-$sum_start_ms))

    echo "${time}"
}

说明:本脚本将并发创建、启动、停止、删除100个容器,计算所需要消耗的时间。

vim isula_performance.sh
#!/bin/bash

source ./get_time.sh

container_num=100
image=openeuler/openeuler:20.09
client=isula

function create_containers() {
	t1=$(date +%s.%N)
	for i in $(seq 1 $container_num)
	do
		$client create --name container${i} --net none ${image} &
	done
	wait

	t2=$(date +%s.%N)
	create_time=$(getTiming ${t1} ${t2})
}

function start_containers() {
    t1=$(date +%s.%N)
    for i in $(seq 1 $container_num)
    do
        $client start container${i} &
    done
    wait

    t2=$(date +%s.%N)
    start_time=$(getTiming ${t1} ${t2})
}

function stop_containers() {
    t1=$(date +%s.%N)
    for i in $(seq 1 $container_num)
    do
        $client stop -t 0 container${i} &
    done
    wait

    t2=$(date +%s.%N)
    stop_time=$(getTiming ${t1} ${t2})
}

function remove_containers() {
    t1=$(date +%s.%N)
    for i in $(seq 1 $container_num)
    do
        $client rm container${i} &
    done
    wait

    t2=$(date +%s.%N)
    remove_time=$(getTiming ${t1} ${t2})
}

create_containers
sleep 3
start_containers
sleep 3
stop_containers
sleep 3
remove_containers

echo "Sum time of create $container_num containers: ${create_time}ms"
echo "Sum time of start $container_num containers: ${start_time}ms"
echo "Sum time of stop $container_num containers: ${stop_time}ms"
echo "Sum time of remove $container_num containers: ${remove_time}ms"

9.2 执行测试脚本

该脚本会依次并发创建、启动、停止、删除100个容器,并在运行过程中输出容器的ID、Name等信息,在最后该脚本还会输出执行的时间,执行完毕如下图所示。

bash isula_performance.sh

在这里插入图片描述

9.3 Docker测试结果

由于实验环境时间结束,将官方已经测试好的Docker运行结果贴在下方。将Docker的运行结果与iSulad进行对比,发现iSulad对容器的操作速度更快、性能更好,至此实验全部结束。

在这里插入图片描述

十、总结

Docker与iSulad服务使用命令基本相似,也可以单独查询isula命令帮助信息或官方文档,所以对于习惯使用Docker的人来说非常容器上手,并且经测试,iSulad对容器的操作速度更快、性能更好。由于本次官方实验环境限制的实验时间紧张,有兴趣的同学可以自己准备环境上手详细体验一番!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。