[TOC]
我们没办法通过ssh这种网络方法进入到kata虚拟机中,只能通过vsock的方法进入到kata虚拟机中。但是kata虚拟机中必须有bash或sh,否则无法进去。kata默认使用的是操作系统镜像为clear-linux,该系统是没有bash命令的,所以我们需要使用其他镜像
### **准备工作**
1、根据 [kubernetes + kata](https://www.kancloud.cn/pshizhsysu/kubernetes/3113823) 一文档安装好单节点的k8s与kata
2、根据上文构建得到 kata-ubuntu.image 镜像
### **配置kata使用kata-ubuntu.image镜像**
在k8s节点上,进入到`/opt/kata/share/kata-containers/`目录下,删除`kata-containers.img`这个软链接文件,然后为 kata-ubuntu.image创建软链接:
```
$ cd /opt/kata/share/kata-containers/
$ rm -f kata-containers.img
$ ln -s kata-ubuntu.image kata-containers.img
```
### **开启`debug_console_enabled`**
编辑`/opt/kata/share/defaults/kata-containers/configuration.toml`文件,找到`debug_console_enabled = true`一行,去掉注释(参考[set-up-a-debug-console](https://github.com/kata-containers/kata-containers/blob/2.5.2/docs/Developer-Guide.md#set-up-a-debug-console))
```
[agent.kata]
...
debug_console_enabled = true
...
```
### **进入到虚机中**
创建一个kata容器,找到它的sandox的id,由于这里我们使用qemu作为hypervisor,且只创建了一个容器,所以通过如下命令就能找到:
```
$ ps -ef | grep qemu
root 37855 1 0 20:04 ? 00:00:09 /opt/kata/bin/qemu-system-x86_64 -name sandbox-38a3dea6f67691256d1fb09dd46988e44ca7e36330ec9c9f4b315c945bc49089 -uuid b2fbe069-3195-4280-99c4-5e013bb9a806 -machine q35,accel=kvm,kernel_irqchip=on,nvdimm=on -cpu host,pmu=off -qmp unix:/run/vc/vm/38a3dea6f67691256d1fb09dd46988e44ca7e36330ec9c9f4b315c945bc49089/qmp.sock,server=on,wait=off -m 2048M,slots=10,maxmem=4920M -device pci-bridge,bus=pcie.0,id=pci-bridge-0,chassis_nr=1,shpc=off,addr=2,io-reserve=4k,mem-reserve=1m,pref64-reserve=1m -device virtio-serial-pci,disable-modern=true,id=serial0 -device virtconsole,chardev=charconsole0,id=console0 -chardev socket,id=charconsole0,path=/run/vc/vm/38a3dea6f67691256d1fb09dd46988e44ca7e36330ec9c9f4b315c945bc49089/console.sock,server=on,wait=off -device nvdimm,id=nv0,memdev=mem0,unarmed=on -object memory-backend-file,id=mem0,mem-path=/opt/kata/share/kata-containers/kata-ubuntu.image,size=134217728,readonly=on -device virtio-scsi-pci,id=scsi0,disable-modern=true -object rng-random,id=rng0,filename=/dev/urandom -device virtio-rng-pci,rng=rng0 -device vhost-vsock-pci,disable-modern=true,vhostfd=3,id=vsock-3814740061,guest-cid=3814740061 -chardev socket,id=char-78737151f4b5b27d,path=/run/vc/vm/38a3dea6f67691256d1fb09dd46988e44ca7e36330ec9c9f4b315c945bc49089/vhost-fs.sock -device vhost-user-fs-pci,chardev=char-78737151f4b5b27d,tag=kataShared -netdev tap,id=network-0,vhost=on,vhostfds=4,fds=5 -device driver=virtio-net-pci,netdev=network-0,mac=22:4d:e0:63:74:88,disable-modern=true,mq=on,vectors=4 -rtc base=utc,driftfix=slew,clock=host -global kvm-pit.lost_tick_policy=discard -vga none -no-user-config -nodefaults -nographic --no-reboot -daemonize -object memory-backend-file,id=dimm1,size=2048M,mem-path=/dev/shm,share=on -numa node,memdev=dimm1 -kernel /opt/kata/share/kata-containers/vmlinux-5.19.2-96 -append tsc=reliable no_timer_check rcupdate.rcu_expedited=1 i8042.direct=1 i8042.dumbkbd=1 i8042.nopnp=1 i8042.noaux=1 noreplace-smp reboot=k cryptomgr.notests net.ifnames=0 pci=lastbus=0 root=/dev/pmem0p1 rootflags=dax,data=ordered,errors=remount-ro ro rootfstype=ext4 console=hvc0 console=hvc1 quiet systemd.show_status=false panic=1 nr_cpus=2 systemd.unit=kata-containers.target systemd.mask=systemd-networkd.service systemd.mask=systemd-networkd.socket scsi_mod.scan=none agent.log=debug agent.debug_console agent.debug_console_vport=1026 -pidfile /run/vc/vm/38a3dea6f67691256d1fb09dd46988e44ca7e36330ec9c9f4b315c945bc49089/pid -smp 1,cores=1,threads=1,sockets=2,maxcpus=2
```
执行如下命令我们就可以进入到kata虚拟机中:
```
$ kata-runtime exec 38a3dea6f67691256d1fb09dd46988e44ca7e36330ec9c9f4b315c945bc49089
```
可以看一下操作系统版本、kata-agent版本等信息:
```
root@localhost:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
root@localhost:/# kata-agent --version
kata-agent version 2.5.2 (api version: 0.0.1, commit version: 2.5.2-4b39dc0a390584d2ee21072cca7707f4ee7f56c5, type: rust)
```
看一下里面的文件系统情况:
```
root@localhost:/# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
pmem0 259:0 0 126M 1 disk
└─pmem0p1 259:1 0 124M 1 part /
root@localhost:/# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/root ext4 117M 102M 8.5M 93% /
devtmpfs devtmpfs 996M 0 996M 0% /dev
tmpfs tmpfs 998M 0 998M 0% /dev/shm
tmpfs tmpfs 200M 20K 200M 1% /run
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 998M 0 998M 0% /sys/fs/cgroup
tmpfs tmpfs 998M 0 998M 0% /tmp
kataShared virtiofs 2.0G 11M 1.9G 1% /run/kata-containers/shared/containers
shm tmpfs 998M 0 998M 0% /run/kata-containers/sandbox/shm
none virtiofs 50G 5.9G 45G 12% /run/kata-containers/38a3dea6f67691256d1fb09dd46988e44ca7e36330ec9c9f4b315c945bc49089/rootfs
none virtiofs 50G 5.9G 45G 12% /run/kata-containers/dbf323183212dcc93b5560fa3765f4f491760cee7f5a628b9ee0a1feadaf5c39/rootfs
```
### **参考**
https://github.com/kata-containers/kata-containers/blob/2.5.2/docs/Developer-Guide.md#set-up-a-debug-console
https://github.com/kata-containers/kata-containers/tree/main/docs/design/architecture#exec-command
- 安装
- 在线安装
- 离线安装
- 下载镜像
- 下载DockerHub镜像
- 下载Google镜像
- 阿里云镜像中心
- 下载ARM镜像
- 容器命名空间
- Linux命名空间概述
- 根据PID快速定位到容器
- 进入到容器的命名空间
- Dockerfile
- 基本语法
- 前台运行
- 镜像存储
- 本地存储
- Registry中的存储
- 如何判断两个镜像是否是同一个
- Registry
- Notification
- Auth
- 基本原理
- Token认证的设计
- API
- Pull镜像
- Push镜像
- Docker设置代理
- 日志
- 磁盘占用与清理
- Docker选项与K8S的Yaml
- 运维总结
- 常用命令
- DockerCompose
- 构建ARM版本
- 跨架构
- x86架构下构建arm64镜像
- Containerd
- ctr-crictl-nerdctl
- ctr
- Insecure-Registry
- Kata
- 构建OS镜像
- 进入到kata虚机