KVM指的是基于Linux内核的虚拟机(Kernel-based Virtual Machine)。但其实,KVM是Linux内核中的一个提供虚拟化支持的模块。

Prerequisites

基于KVM安装MiniKube需要安装以下列出的依赖,用以和KVM中的虚拟化接口进行数据交换。

  • Docker Machine: 一个管理工具,用来管理安装了Docker Engine的虚拟机,支持AWS, OpenStack, KVM/Libvirt, VMWARE Fusion, VirtualBox.这里被用来wrap Minikube.
  • Docker Machine KVM2 Driver: MinikubeKVM连接所需的驱动程序。
  • Libvirt: 提供虚拟化管理所需的API库(如存储,网络接口等)。
  • QEMU: Hypervisor
  • Minikube: 单节点的Kubernetes集群。
  • KubeCtl: Kubernetes集群管理工具

Environment

  • OS: Linux-4.19.12-2
  • Minikube: v0.32.0
  • docker-machine-driver-kvm2: 0.30.0-1

安装libvirt和QEMU

LibvirtQEMUKVM虚拟机得以运行的基础,另外还需要为NAT/DHCP安装所需的网络模块,否则Minikube无法运行。这里所安装的QEMU是不包含GUI的版本,如果需要可以替换QEMU-headlessQEMU.

pacman -Sy libvirt QEMU-headless ebtables dnsmasq

装好软件,启动libvirtdvirtlogd:

systemctl enable libvirtd.service && systemctl start libvirtd.service
systemctl enable virtlogd.service && systemctl start virtlogd.service

安装Docker-machine

pacman -Sy docker-machine

安装Minikube和KubeCtl

Archlinux中安装MinikubeKubeCtl很简单,用yaourt安装AUR库中的minikube-binkubectl-bin即可,还会安装minikubekubectlshell自动补齐,所以更推荐这种安装方式。

yaourt -Sy minikube-bin kubectl-bin

安装KVM2驱动

pacman -Sy docker-machine-driver-kvm2

启动Minikube

minikube start --vm-driver kvm2

更改代理设置

因为墙的原因,需要设置代理才能下载Minikube插件,让Minikube正常运行。

修改Minikube配置。

echo '
Enter a proxy for the minikube environment:'

read proxy

python -c "
import json, pathlib

config_file = '$HOME/.minikube/machines/minikube/config.json'
http_proxy = 'HTTP_PROXY=$proxy'
https_proxy = 'HTTPS_PROXY=$proxy'
no_proxy = 'NO_PROXY=registry.docker-cn.com,127.0.0.1,localhost'
registry_mirror = 'https://registry.docker-cn.com'

config = json.loads(pathlib.Path(config_file).read_text())
config['HostOptions']['EngineOptions']['Env'] = [http_proxy, https_proxy, no_proxy]
config['HostOptions']['EngineOptions']['RegistryMirror'] = [registry_mirror]
pathlib.Path(config_file).write_text(json.dumps(config, indent=4))
"

重新启动Minikube后设置生效。