Studio环境KVM和Docker

安装KVM

Ubuntu安装KVM

  • 安装软件包:

    sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst libguestfs-tools ovmf
    

注解

  • qemu-kvm QEMU核心
  • libvirt-* libvirtd用于管理QEMU
  • virtinst 安装Guest的工具
  • libguestfs-tools 是Guest文件系统工具,包含了初始化虚拟机的工具命令 virt-sysprep
  • ovmf 是模拟EFI firmwarre的功能,请参考 Using UEFI with QEMU
  • (可选) 将 自己 的账号添加到 libvirt 用户组(18.04版本可能是 libvirtd 用户组),以便可以直接运行虚拟机:

    sudo adduser `id -un` libvirt
    

注解

在最新的Ubuntu 18.10中安装libvirt,安装执行命令的用户已经自动被加入 libvirt 用户组

  • 检查验证:

    virsh list --all
    

注解

Ubuntu安装libvirt时已经自动激活启动

Arch Linux安装KVM

  • 安装:

    sudo pacman -S qemu libvirt virt-install \
       dnsmasq ebtables firewalld bridge-utils
    
    sudo systemctl start firewalld
    sudo systemctl enable firewalld
    sudo systemctl start libvirtd
    sudo systemctl enable libvirtd
    

注解

  • 安装 bridge-utils 才能具备 brctl 工具,这样才能建立virtbr0这个NAT旺桥
  • libvirt需要dnsmasq, ebtables, firewalld 来分配NAT网络IP地址和设置netfilter防火墙规则,否则也启动不了NAT网络。详见 libvirt NAT型网络

参考 How to Create and use Network Bridge on Arch Linux and Manjaro

  • 安装完qemu之后,如果没有重启系统,则此时还没有加载kvm内核模块,可以通过以下命令手工加载:

    modprobe kvm_intel
    
  • 加载virtio模块:

    modprobe virtio
    

嵌套虚拟化

在使用 一台 物理主机(MacBook Pro)模拟多个物理服务器来组成集群,部署基于KVM虚拟化的云计算,需要使用 KVM嵌套虚拟化 来实现。在后续 KVM Atlas 实践中,会详介绍如何在一台物理主机上运行支持hypervisor的虚拟机,以实现物理服务器集群模拟。

Docker

在MacBook Pro的Host环境,不仅要运行嵌套虚拟户的KVM实现OpenStack的集群模拟,而且要运行Docker来支撑一些底层服务。这是因为,底层服务需要更高的性能,而且要具备隔离以实现模拟分布式集群。

注解

安装Docker CE方法参考 Kubernetes 文档 CRI installation

  • 安装Docker CE:

    # remove all previous Docker versions
    sudo apt remove docker docker-engine docker.io
    
    # Install packages to allow apt to use a repository over HTTPS
    apt-get update && apt-get install apt-transport-https ca-certificates curl software-properties-common
    
    # add Docker official GPG key
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
    # Add Docker repository (for Ubuntu Bionic) 注意:nvidia-docker会检查docker-ce版本,强制要求 ubuntu-bionic
    # 所以这里必须采用 bionic 仓库安装 docker-ce
    sudo add-apt-repository \
        "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) \
        stable"
    
    sudo apt update
    sudo apt install docker-ce
    

注意,由于我使用 Docker btrfs 存储驱动 并且 minikube CRI安装排查 要求,需要设置 btrfs 存储驱动和 systemd 作为cgroup驱动,所以执行以下命令:

# Setup daemon
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "btrfs"
}
EOF

mkdir -p /etc/systemd/system/docker.service.d

然后重启docker:

# Restart docker.
systemctl daemon-reload
systemctl restart docker

注解

由于 Docker运行NVIDIA容器 依赖Docker官方最新版本的docker,所以这里不使用发行版提供的docker,而是 安装 docker-ce 。如果没有这个需求,也可以安装Ubuntu发行版的 docker.io

sudo apt install docker.io
  • (可选) 将 自己 的账号添加到 docker 用户组:

    sudo adduser `id -un` docker
    

注解

用户加入docker组还是需要重启主机操作系统才能直接使用 docker ps

Arch Linux安装Docker

  • 安装Docker:

    sudo pacman -S docker
    

注解

在启动docker服务之前,需要确保系统没有启动VPN连接,因为VPN和Docker的网桥以及overlay网络冲突。这种情况下,需要在启动docker之前先断开VPN。

我遇到一个问题,就是 sysctl -a | grep ip_forward 输出已经显示:

net.ipv4.ip_forward = 1

但是创建的容器不能通外网,导致安装以后