Попытка создания контейнеров runv
Согласно https://github.com/hyperhq/runv/blob/master/README.md
Дата: 25.12.2019
Запущен в ВМ ESXI 6.7
Версии:
- kernel 4.15.0-72-generic
- дистрибутив Ubuntu 18.04.3
- xen 4.9.2
- docker 18.09.7
- runv https://github.com/giggsoff/runv/commit/09561b1b87a9ac254f0573557ae278d38f6aed13
- hyperstart https://github.com/hyperhq/hyperstart/commit/c0c07d218b482dd07f9068b52a6e7468ae4172ac
root@xenrunv:/# xl dmesg | grep -i hvm (XEN) HVM: ASIDs enabled. (XEN) HVM: VMX enabled (XEN) HVM: Hardware Assisted Paging (HAP) detected (XEN) HVM: HAP page sizes: 4kB, 2MB
Создание непосредственно через runv:
giggsoff@xenrunv:~/containerbundle$ mkdir rootfs giggsoff@xenrunv:~/containerbundle$ docker export $(docker create busybox) | tar -C rootfs -xvf - … giggsoff@xenrunv:~/containerbundle$ runv spec giggsoff@xenrunv:~/containerbundle$ ls config.json rootfs giggsoff@xenrunv:~/containerbundle$ sudo runv --debug --kernel /var/lib/hyper/kernel --initrd /var/lib/hyper/hyper-initrd.img run mycontainer [sudo] password for giggsoff: got child pid: 7327 check whether child proc is created by libxl: 0 got child pid: 0
При этом подсказка командного интерпретатора не появляется.
В другом терминале:
root@xenrunv:~# xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 2048 6 r----- 593.6
vm-qyqCnShRcJ 22 127 1 -b---- 2.2
root@xenrunv:~# xl list -l 22
[
{
"domid": 22,
"config": {
"c_info": {
"type": "hvm",
"name": "vm-qyqCnShRcJ",
"uuid": "48403dce-87d0-4edd-92ca-7837a5b51266",
"run_hotplug_scripts": "False"
},
"b_info": {
"max_vcpus": 1,
"avail_vcpus": [
0
],
"max_memkb": 131072,
"target_memkb": 131072,
"video_memkb": 0,
"shadow_memkb": 2048,
"extra": [
"-device",
"virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=3",
"-chardev",
"socket,id=charch0,path=/var/run/hyper/vm-qyqCnShRcJ/hyper.sock,server,nowait",
"-device",
"virtserialport,bus=virtio-serial0.0,nr=1,chardev=charch0,id=channel0,name=sh.hyper.channel.0",
"-chardev",
"socket,id=charch1,path=/var/run/hyper/vm-qyqCnShRcJ/tty.sock,server,nowait",
"-device",
"virtserialport,bus=virtio-serial0.0,nr=2,chardev=charch1,id=channel1,name=sh.hyper.channel.1",
"-fsdev",
"local,id=virtio9p,path=/var/run/hyper/vm-qyqCnShRcJ/share_dir,security_model=none",
"-device",
"virtio-9p-pci,fsdev=virtio9p,mount_tag=share_dir"
],
"sched_params": {
"sched": "credit",
"weight": 1000,
"cap": 0
},
"kernel": "/var/lib/hyper/kernel",
"cmdline": "console=ttyS0 pci=nomsi",
"ramdisk": "/var/lib/hyper/hyper-initrd.img",
"type.hvm": {
"pae": "True",
"apic": "False",
"acpi": "True",
"nographic": "True",
"vga": {
"kind": "none"
},
"vnc": {
"enable": "False"
},
"sdl": {
"enable": "False"
},
"spice": {
},
"serial": "unix:/var/run/hyper/vm-qyqCnShRcJ/console.sock,server,nowait",
"boot": "c",
"rdm": {
}
},
"arch_arm": {
}
}
}
}
]
root@xenrunv:~# runv list
ID PID STATUS BUNDLE CREATED OWNER
mycontainer 7348 created /home/giggsoff/containerbundle 1970-01-01T00:00:00Z root
root@xenrunv:~# runv state mycontainer
{
"ociVersion": "1.0.1",
"id": "mycontainer",
"pid": 7348,
"bundlePath": "/home/giggsoff/containerbundle",
"rootfsPath": "/home/giggsoff/containerbundle/rootfs",
"status": "created",
"created": "1970-01-01T00:00:00Z",
"owner": "root"
}
Для выключения необходимо в разных терминалах запустить runv delete… и xl destroy… При этом выдаётся текст вида в консоль, где был запущен runv:
got child pid: 7340
check whether child proc is created by libxl: -14
got child pid: 7348
check whether child proc is created by libxl: -14
E1225 13:07:55.849923 7315 vm_states.go:186] SB[vm-qyqCnShRcJ] Shutting down because of an exception: %!(EXTRA string=Destroy pod failed: &status.statusError{Code:2, Message:"send ctl channel error, the hyperstart might have closed", Details:[]*any.Any(nil)})
E1225 13:07:55.850438 7315 sandbox.go:155] StopPod fail: chan: true, response: &{vm-qyqCnShRcJ false Response Chan is broken}
E1225 13:07:55.886053 7315 delete.go:69] cmdDeleteContainer() failed to associated to the vm, err: &os.PathError{Op:"readlink", Path:"/run/runv/mycontainer/sandbox", Err:0x2}
Create new container failed: rpc error: code = Unknown desc = hyperstart closed
Создание через docker:
giggsoff@xenrunv:~/containerbundle$ cat /etc/docker/daemon.json
{
"default-runtime": "runv",
"runtimes": {
"runv": {
"path": "runv"
}
}
}
giggsoff@xenrunv:~/containerbundle$ sudo systemctl restart docker
giggsoff@xenrunv:~/containerbundle$ docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
Digest: sha256:1828edd60c5efd34b2bf5dd3282ec0cc04d47b2ff9caa0b6d4f07a21d1c08084
Status: Image is up to date for busybox:latest
giggsoff@xenrunv:~/containerbundle$ docker run --rm -it busybox
При этом подсказка командного интерпретатора не появляется.
В другом терминале:
root@xenrunv:/boot# xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 2048 6 r----- 771.1
vm-VEYVnifEqN 25 127 1 -b---- 2.3
root@xenrunv:/boot# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
feb5a54f4982 busybox "sh" 51 seconds ago Created cranky_engelbart
root@xenrunv:/boot# xl list -l 25
[
{
"domid": 25,
"config": {
"c_info": {
"type": "hvm",
"name": "vm-VEYVnifEqN",
"uuid": "be3dfa4a-b811-4ef5-a4a0-780f50a9219f",
"run_hotplug_scripts": "False"
},
"b_info": {
"max_vcpus": 1,
"avail_vcpus": [
0
],
"max_memkb": 131072,
"target_memkb": 131072,
"video_memkb": 0,
"shadow_memkb": 2048,
"extra": [
"-device",
"virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=3",
"-chardev",
"socket,id=charch0,path=/var/run/hyper/vm-VEYVnifEqN/hyper.sock,server,nowait",
"-device",
"virtserialport,bus=virtio-serial0.0,nr=1,chardev=charch0,id=channel0,name=sh.hyper.channel.0",
"-chardev",
"socket,id=charch1,path=/var/run/hyper/vm-VEYVnifEqN/tty.sock,server,nowait",
"-device",
"virtserialport,bus=virtio-serial0.0,nr=2,chardev=charch1,id=channel1,name=sh.hyper.channel.1",
"-fsdev",
"local,id=virtio9p,path=/var/run/hyper/vm-VEYVnifEqN/share_dir,security_model=none",
"-device",
"virtio-9p-pci,fsdev=virtio9p,mount_tag=share_dir"
],
"sched_params": {
"sched": "credit",
"weight": 1000,
"cap": 0
},
"kernel": "/var/lib/hyper/kernel",
"cmdline": "console=ttyS0 pci=nomsi",
"ramdisk": "/var/lib/hyper/hyper-initrd.img",
"type.hvm": {
"pae": "True",
"apic": "False",
"acpi": "True",
"nographic": "True",
"vga": {
"kind": "none"
},
"vnc": {
"enable": "False"
},
"sdl": {
"enable": "False"
},
"spice": {
},
"serial": "unix:/var/run/hyper/vm-VEYVnifEqN/console.sock,server,nowait",
"boot": "c",
"rdm": {
}
},
"arch_arm": {
}
},
"nics": [
{
"devid": 0,
"mtu": 1492,
"model": "e1000",
"mac": "02:42:ac:11:00:02",
"ip": "172.17.0.2/16",
"bridge": "runv0",
"ifname": "vm-VEYVnifEq0",
"nictype": "vif_ioemu",
"gatewaydev": "runv0"
}
]
}
}
]
root@xenrunv:/boot# ping -c 5 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.076 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.102 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.079 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.107 ms
64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.101 ms
--- 172.17.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4077ms
rtt min/avg/max/mdev = 0.076/0.093/0.107/0.012 ms
В процессе удаления (также через 2 окна терминала) появляется:
docker: Error response from daemon: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v1.linux/moby/feb5a54f49825ba2f6bd7e88ab80b5a27c235ff89e1e61c435ce64b1fceb6622/log.json: no such file or directory): runv did not terminate sucessfully: E1225 13:33:34.119488 8363 network.go:139] rpc error: code = Unknown desc = json: failed to send <add interface> command to hyperstart: hyperstart closed : unknown.
