在 win10 中使用 multipass 创建 ubuntu
multipass 是一款轻量级的虚拟化软件,是创建 ubuntu 虚拟机的靠谱选择。
描述
Multipass是一个开源命令行实用程序,允许用户协调Ubuntu Linux虚拟机的创建,管理和维护,以简化应用程序的开发。
目前看来功能和vagrant类似。
1: 去multipass下载地址下载不同平台下的安装包并安装。
2: multipass默认使用的是hyper-V,为了减轻C盘存储压力我将修改默认的hyper-v存储路径(Hyper-V管理器),.
打开
开始菜单
---windows管理工具-
---Hyper-V管理器
选择
操作
---Hyper-V设置
,修改虚拟硬盘
和虚拟机
的存储路径。
3: 修改multipass默认镜像和实例存放路径。
默认实例存放路径:
C:\Windows\System32\config\systemprofile\AppData\Roaming\multipassd
默认虚拟镜像存放路径:
C:\Windows\System32\config\systemprofile\AppData\Local\multipassd\cache
使用管理员打开powershell,然后执行如下命令:
PS C:\Windows\system32> Stop-Service Multipass
PS C:\Windows\system32> setx /M MULTIPASS_STORAGE "D:\work_Files\Hyper-V\multipassd"
成功: 指定的值已得到保存。
PS C:\Windows\system32> Start-Service Multipass
修改后实例存放路径:
D:\work_Files\Hyper-V\multipassd\data\vault
修改后虚拟镜像存放路径:
D:\work_Files\Hyper-V\multipassd\cache\vault
4: 使用multipass launch -n fastdfs
创建名为fastdfs的ubuntu实例
此命令会在线下载当前release的ubuntu版本,有时会很慢。
也可先去cloud-images.ubuntu.com下载img镜像,然后通过命令
multipass launch -n fastdfs file://ubuntu-20.04-server-cloudimg-amd64.img
创建实例。
5: 常用命令:
multipass launch -c 2 -d 2G -m 512M -n fastdfs # 创建一个2核512M内存2G硬盘名为fastdfs的实例
multipass list # 查看已创建的ubuntu实例
multipass start fastdfs # 开启fastdfs实例
multipass stop fastdfs # 关闭fastdfs实例
multipass stop fastdfs # 关闭fastdfs实例
multipass delete --purge fastdfs # 删除fastdfs实例
multipass find # 在线查找可使用的ubuntu实例
multipass shell fastdfs # 进入到fastdfs实例的shell终端
multipass exec fastdfs -- uname -r # 不进入终端执行命令
multipass set client.primary-name=mysql # 修改通过multipass launch创建的实例的实例名称
挂载本地目录到multipass虚拟机中
multipass提供挂载本地目录功能,方便本机与虚拟机之间进行文件传输。
方法如下:
1: 首先在ubuntu虚拟机中创建用户存放传输文件的目录: mkdir datafiles
2: 在本机终端输入: multipass mount D:\work_Files\multipassFiles minio:/home/ubuntu/datafiles
, multipassFiles
目录是你本机的目录,而minio:/home/ubuntu/datafiles
指的是将文件挂载到minio这个虚拟机实例下的/home/ubuntu/datafiles
目录下。
查看挂载是否成功:
PS D:\Apps> multipass info minio # 查看实例信息
Name: minio
State: Running
IPv4: 192.168.1.96
Release: Ubuntu 20.04.2 LTS
Image hash: c5f2f08c6a1a (Ubuntu 20.04 LTS)
Load: 0.00 0.00 0.00
Disk usage: 4.2G out of 9.5G
Memory usage: 2.2G out of 2.8G
Mounts: D:/work_Files/multipassFiles => /home/ubuntu/datafiles # 发现已成功挂载
UID map: -2:default
GID map: -2:default
取消挂载: multipass umount minio
, 取消挂载时只需提供虚拟机实例名即可。
在hyper-v给虚拟机设置静态ip
multipass默认使用hyper-v作为虚拟化方案,要想给multipass创建的虚拟机绑定静态ip,分别要在hyper-v以及ubuntu虚拟机中做些设置。
hyper-v网络相关设置
通过hyper-v管理器进行网络相关配置,操作如下图:
配置完成后重启ubuntu虚拟机使之配置生效。
ubuntu网络配置相关设置
为了防止网络设置错误导致登录不了ubuntu虚拟机,默认是使用密钥登录,应先修改ssh配置:
修改ssh登录用户名ubuntu的密码,
sudo passwd ubuntu
启用ssh使用账号密码登录设置,其值为
PasswordAuthentication yes
。重启sshd服务,
sudo service sshd restart
注意: 当配置完静态ip后需要将ssh配置文件中的PasswordAuthentication yes
改为PasswordAuthentication no
。
接下来就要在ubuntu中配置静态ip了:
使用sudo vim /etc/netplan/50-cloud-init.yaml
编辑网络配置文件:
添加如下内容:
network:
ethernets:
eth0:
dhcp4: true
addresses: [192.168.1.96/24]
optional: true
gateway4: 192.168.1.88
match:
macaddress: 52:54:00:c4:a7:55
set-name: eth0
version: 2
sudo netplan apply
使之网络配置生效。
当然此操作也可在win10本机中进行,找到 控制面板---网络和Internet---网络连接
然后根据如下图填写 静态ip 即可:
win10本机解决ssh timeout问题
当上面的操作完成后会发现通过multipass list
等命令时会出现list failed: ssh connection failed: 'Timeout connecting to minio.mshome.net'
错误。
这是因为当使用hyper-v虚拟化方案时,通过ssh连接multipass创建的虚拟机时,默认会使用ssh ubuntu@ubuntu设置的hostname.mshome.net
进行连接。
我这里设置的hostname是minio,所以ssh 名称就是minio.mshome.net, 而这个名称对应的ip是控制面板---网络和Internet---网络连接
中的vEthernet (Default Switch)
生成的172.17.8.157
这样的ip地址,但我们现在没用启用vEthernet (Default Switch)
的配置,自然就不能进行连接了。
解决办法:
用管理员身份打开cmd,然后输入: notepad C:\WINDOWS\System32\drivers\etc\hosts.ics
打开hosts.ics文件,找到与你本机相关的
192.168.1.91 echoxu-win.mshome.net # 2026 4 5 24 5 36 29 846 # 有一个以你本机名的dns解析,将其值改为你本机的ip地址
192.168.1.96 minio.mshome.net # 2026 4 5 24 5 36 29 846 # 此处是你创建的虚拟机,将其ip修改为你已经绑定的静态ip地址
上面的操作完成后应该就可通过multipass list
获取到虚拟机的ip信息了。
另一种解决ip与虚拟机主机名对应关系的方法是(非必须):
去C:\Windows\System32\drivers\etc\hosts
中添加192.168.1.96 minio.mshome.net
,然后使用管理员身份打开cmd并在其中输入ipconfig /flushdns
刷新缓存即可。
现在就可以通过multipass list
等命令查看虚拟机信息了。
Multipass IPV4 unknown instance is in running state
结果如下:
PS D:\Apps> ping minio.mshome.net
正在 Ping minio.mshome.net [192.168.1.96] 具有 32 字节的数据:
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64
192.168.1.96 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
PS D:\Apps> multipass info minio
Name: minio
State: Running
IPv4: 172.17.8.157
192.168.1.96
Release: Ubuntu 20.04.2 LTS
Image hash: c5f2f08c6a1a (Ubuntu 20.04 LTS)
Load: 0.06 0.01 0.00
Disk usage: 4.2G out of 9.5G
Memory usage: 2.2G out of 2.8G
Mounts: D:/work_Files/xftpFiles => D:/work_Files/xftpFiles
UID map: -2:default
GID map: -2:default
ssh连接ubuntu虚拟机
通过multipass创建的虚拟机默认是使用密钥进行登录的,当然也可按照上面的方法启用用户名和密码进行登录。
而这个密钥默认是在C:\Windows\System32\config\systemprofile\AppData\Roaming\multipassd\data\ssh-keys
,然后将其复制到C:\Users\你的用户名\.ssh
目录下。
如果你修改了multipass实例存储路径,将其替换为修改后的multipass实例存储路径\multipassd\data\ssh-keys
找到密钥后进行如下操作:
1: 将私钥复制到C:\Users\你的用户名\.ssh
目录下
2: 编辑当前用户的C:\Users\你的用户名\.ssh
目录下名称为config
的文件(没有就创建,没有后缀名,就叫config),添加如下内容:
# minio ssh config
Host minio.mshome.net # 上面ssh时报错提示的域名
HostName minio.mshome.net # 同上
Port 22 # ssh端口
PreferredAuthentications publickey
User ubuntu # multipass创建的ubuntu虚拟机的默认用户名
IdentityFile ~/.ssh/id_rsa_minio # 私钥存放位置
做完上面的操作后就可进行ssh连接了。
连接信息如下:
PS D:\Apps> multipass shell minio # 或者使用ssh ubuntu@minio.mshome.net
The authenticity of host 'minio.mshome.net (192.168.1.96)' can't be established.
ECDSA key fingerprint is SHA256:aPiO0SWF7OB4kilPP1IM0aZlKd+K/OoSF+qoN4UQnFU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'minio.mshome.net,192.168.1.96' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-67-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Thu Apr 22 17:27:11 CST 2021
System load: 0.0
Usage of /: 44.0% of 9.52GB
Memory usage: 79%
Swap usage: 0%
Processes: 138
Users logged in: 0
IPv4 address for eth0: 192.168.1.96
IPv6 address for eth0: 2409:8a1e:9310:4252::e87
IPv6 address for eth0: fd75:4eb4:bf39::e87
IPv6 address for eth0: fd75:4eb4:bf39:0:5054:ff:fec4:a739
IPv6 address for eth0: 2409:8a1e:9310:4252:5054:ff:fec4:a739
* Pure upstream Kubernetes 1.21, smallest, simplest cluster ops!
https://microk8s.io/
8 updates can be installed immediately.
8 of these updates are security updates.
To see these additional updates run: apt list --upgradable
Last login: Thu Apr 22 16:43:26 2021 from 192.168.1.91
参考:
multipass installing-on-windows
Windows default multipass folder
关闭Hyper-v
正因为使用multipass只能安装ubuntu虚拟机,所以切换回了vagrant + virtualbox。
但Hyper-v 和 virtualbox不兼容,决定删除Hyper-V,删除它还有一个原因是,当使用Hyper-v后,windows主机也将变成一个特殊的虚拟机,这个在hyper-v中可找到描述,这可能会影响某些程序的性能,另外其创建的虚拟交换机对网络有影响。
卸载方法:
1: 控制面板---程序---程序和功能---启用或关闭windows功能
取消 Hyper-v
前面的勾选。
或者以管理员身份运行命令提示符,执行命令 bcdedit /set hypervisorlaunchtype off
2: 打开windows defender安全中心,左边选项"设备安全性",关闭内核隔离。
然后重启。
检查是否关闭:
1: 去电脑->管理->服务中
检测所有与Hyper-v相关的服务是否设置为手动启动。
2: 以管理员身份运行命令提示符,执行命令 bcdedit
查看hypervisorlaunchtype Off
表示hyper-v已关闭。