谢谢您的订阅!
当新的内容发布后您将开始接收邮件。您也可以点击邮件内的链接随时取消订阅。关闭Close

  1. 博客
  2. 文章

liam zheng
1 May 2020

裸机云快速部署利器Ubuntu MAAS:单机安装及测试系列教程第三篇


我们在前2篇教程中介绍了MAAS安装环境搭建和MAAS安装。现在我们继续此系列教程。如果您在学习过程有相关问题,欢迎前往MAAS网站查询和了解。

2.3 配署MAAS KVM POD及测试虚拟机自动供给

2.3.1 在test1主机上安装KVM,配置libvirt网络及存储

在test1主机(非maas-server)上运行以下命令行安装kvm相关包, 配置libvirt网络及存储。

ubuntu@test1:~$ sudo apt install bridge-utils qemu-kvm libvirt-bin
ubuntu@test1:~$ sudo virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes

ubuntu@test1:~$ sudo virsh net-destroy default  
Network default destroyed

ubuntu@test1:~$ sudo virsh net-undefine default
Network default has been undefined

ubuntu@test1:~$ vi net-default.txt
ubuntu@test1:~$ mv net-default.txt net-default.xml
ubuntu@test1:~$ cat net-default.xml 
< network >  
    < name >default  
    < forward mode="bridge" />  
    < bridge name="lxdbr0" />  

ubuntu@test1:~$ sudo virsh net-define net-default.xml
Network default defined from net-default.xml

ubuntu@test1:~$ sudo virsh net-autostart default 
Network default marked as autostarted

ubuntu@test1:~$ sudo virsh net-start default
Network default started

ubuntu@test1:~$ sudo virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes

ubuntu@test1:~$ sudo virsh pool-define-as default dir - - - - "/var/lib/libvirt/images"  
ubuntu@test1:~$ sudo virsh pool-autostart default  
ubuntu@test1:~$ sudo virsh pool-start default
ubuntu@test1:~$ sudo virsh pool-list --all
 Name                 State      Autostart 
-------------------------------------------
 default              active     yes       

ubuntu@test1:~$

以下命令操作目的是在maas-server上安装libvirt工具,生成ssh key并使能pub key登录到test1以便maas-server能够通过libvirt工具控制及管理KVM虚拟机的创建,上下电等。

ubuntu@test1:~$ lxc exec maas-server bash
root@maas-server:~# apt install libvirt-bin
...
root@maas-server:~# chsh -s /bin/bash maas 
root@maas-server:~# su - maas
maas@maas-server:~$ ssh-keygen -f ~/.ssh/id_rsa -N ''
maas@maas-server:~$ exit
root@maas-server:~# exit
ubuntu@test1:~$ lxc file pull maas-server/var/lib/maas/.ssh/id_rsa.pub maas.pub 
ubuntu@test1:~$ cat maas.pub >> .ssh/authorized_keys 
ubuntu@test1:~$ rm maas.pub
ubuntu@test1:~$ lxc exec maas-server bash
root@maas-server:~# su - maas
maas@maas-server:~$ ssh ubuntu@192.168.10.1 "date"   #验证maas用户是否可以用ssh登录
Wed Apr  1 07:55:28 UTC 2020
maas@maas-server:~$ virsh -c qemu+ssh://ubuntu@192.168.10.1/system list --all #验证virsh能正常工作状态
 Id    Name                           State
----------------------------------------------------

maas@maas-server:~$ exit
root@maas-server:~# exit
ubuntu@test1:~$ 

2.3.2 创建KVM Pods

从MAAS管理介面选择KVM菜单,显示如下图,输入name (例如: pod-test1), address (qemu+ssh://ubuntu@192.168.10.1/system)

点击”Save KVM”按钮后,显示如下图:

点击FQDN栏下的pod-test1链接,并选择Configuration菜单,修改CPU overcommit和Memory overcommit,以便能够在test1创建超过主机资源的KVM虚拟机。

2.3.3 通过KVM Pods创建KVM虚拟机

从MAAS管理介面选择KVM菜单,点击FQDN栏下的pod-test1链接,从”Take Action”菜单中选持”Compose”,出现如下介面,输入创建KVM虚拟机的主机名(hostname),域名(Domain使用默认的maas),指定虚拟机分配核数,内存及存储大小。

点击“Composed machines”铵钮,显示如下介面表示一台vm1.maas机器已经在test1上创建,并已pxe启动进行系统探测中。

在系统探测(commissioning)过程中,可以通过在test1上的virsh console来查看过程及问题定位。方法如下:

ubuntu@test1:~$ virsh list --all                                                                                                                    
 Id    Name                           State                                                                                                       
----------------------------------------------------                                                                                                                                                        
 12    vm1                            running                                                                                       
                                                                                                                                    
ubuntu@test1:~$ virsh console 12                                                                                             
Connected to domain vm1                                                                                                           
Escape character is ^]                                 #ctrl+]退出virsh console                                                                       
[    0.000000] Linux version 4.15.0-55-generic (buildd@lcy01-amd64-029) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 (Ubuntu 4.15.0-55.60-generic 4.15.18)
[    0.000000] Command line: nomodeset ro root=squash:http://192.168.10.10:5248/images/ubuntu/amd64/generic/bionic/daily/squashfs ip=::::vm1:BOOTIF ip6=off overlayroot=tmpfs overlayroot_cfgdisk=disabled c
c:{'datasource_list': ['MAAS']}end_cc cloud-config-url=http://192-168-10-0--24.maas-internal:5248/MAAS/metadata/latest/by-id/qgpqfh/?op=get_preseed apparmor=0 log_host=192.168.10.10 log_port=5247 --- cons
ole=tty1 console=ttyS0 BOOTIF=01-52:54:00:76:d6:14                                                                          
[    0.000000] KERNEL supported cpus:                                                                                       
...
[    7.737436] xor: using function: prefetch64-sse (13529.000 MB/sec)                                                         
[    7.746397] async_tx: api initialized (async)                                                                        
done.                                                                                                                                                                                                       
Begin: Running /scripts/init-premount ... done.                                                                                                                                                             
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... IP-Config: ens4 hardware address 52:54:00:76:d6:14 mtu 1500 DHCP RARP 
...
[   19.627627] systemd[1]: Detected architecture x86-64.                     
                                                                                                                                  
Welcome to Ubuntu 18.04.2 LTS!

[   19.668445] systemd[1]: Set hostname to .
[   19.679109] systemd[1]: Initializing machine ID from KVM UUID.
...
[  OK  ] Reached target Network.                                               
[  OK  ] Reached target Host and Network Name Lookups.
[   28.378653] cloud-init[772]: Cloud-init v. 19.1-1-gbaa47854-0ubuntu1~18.04.1 running 'init' at Fri, 03 Apr 2020 03:45:00 +0000. Up 27.08 seconds.
...
[  OK  ] Started Wait until snapd is fully seeded.                                              
                                                       
Ubuntu 18.04.2 LTS vm1 ttyS0                                                               
                                                             
vm1 login: [   37.673496] cloud-init[1093]: Cloud-init v. 19.1-1-gbaa47854-0ubuntu1~18.04.1 running 'modules:config' at Fri, 03 Apr 2020 03:45:09 +0000. Up 36.24 seconds.
[   39.353496] cloud-init[1169]: Get:1 http://cn.archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
...
[  OK  ] Stopped LVM2 metadata daemon.                                                                                                                                          
[  145.247144] reboot: Power down                                                                                                                                        
                                                                                                                         
ubuntu@test1:~$

系统探测(commissioning)完成之后,这个机器就成功加入到MAAS管理的机器资源池中,状态显示为ready,表示这个机器可以进一步被申请及取用。

至此,相对复杂及困难的MAAS安装配置,将test1作为KVM Pods加入到MAAS都已完。接下来为通常的机器(或节点)取用,OS部署,ssh访问,释放等OS部署及机器管理操作,它们相对容易也很少出错。

在用户取用之前,管理员通常会进行一些特定的存储(soft raid),文件系统(lvm, flat, bache),网络(网卡绑定,网桥,路由,网卡别名),IP地址(MAAS自动分配,dhcp,手工分配)等许多配置选项及功能。但MAAS的默认配置也能正常工作。

2.4 OS部署及机器管理

对于已加入MAAS的机器资源,通常是Juju把MAAS作为一个资源提供者,MAAS会按Juju申请的类型,大小,标鉴,网络空间等条件查找符合条件的机器,然后自动部署,最后Juju进一步自动接管及部署相应的应用和服务。Juju不需要时相应机器资源时,可以调用MAAS API来释放机器,MAAS会作可选的磁盘清理后关机下电,机器重新回到可用的资源池。如果第三方工具,也可以使用MAAS提供的Restfull API,CLI等集成。下面我们演示通过MAAS web管理介面的部署及MAAS CLI创建,部署,锁定,释放及删除等的机器管理操作。

2.4.1 MAAS管理介面的OS部署及机器管理

如下图选择Machines菜单,选择你要操作的机器,从Take Action菜单中选择想执行的操作(或动作):

  • Commissioning — 探测或重新探测,对状态为new的新机器,动作执行成功后显示为ready状态,动作执行失败显示为“failed Commissioning”,动作执行过程中显示为‘Commissioning’。探测会自动侦测机器配置,并记录于MAAS数据库,用作资源取用的匹配条件,如果机器配置改变如增减网卡,则需要再次探测。
  • Acquire — 取用及预留机器,动作完成后显示为allocated状态,在release之前不能执行其它任何动作。
  • Deploy — 对在ready或allocated状态的机器部署OS, 部署成功显示Deployed,否则显示 “Failed deployment”。部署过程包括上电(显示Power On状态), 安装操作系统,配置网卡,磁盘分区等,所有都自动完成无需手工干预。
  • Release — 释放状态为“Deployed”或 “Allocated”的机器到可用资源池,会执行下电动作,机器状态回到“Ready”。可配置为释放前进行磁盘清除及磁盘安全擦除。
  • Abort — 中止或取消正在进行动作,目前只支持Commissioning和Deploy动作的中止
  • Resuce mode — 对于处于Deployed,failed to deploy及Broken的机器,启动一个运行于内存中Ubuntu系统用于故障修复,可以ssh远程登录。
  • Delete — 从MAAS中移除机器,但不对实际机器执行任何操作。如果对机器重新pxe启动或手工增加,则会作为新机器(状态new)重新加入到MAAS管理机器列表中。
  • Lock  — 机器锁定,不应允执行改变机器状态的操作,如对于已部署的机器防止意外关机或释放

如果选取Deploy,会显示如下图,可以选择所要部署的OS(如果没有你需要OS或版本,则需进行相应OS的映像同步),Ubuntu内核可选择ga还是hwe,如果选中Register as MAAS KVM host则会同时将这个机器配置为KVM Pod。

点击Deploy 1 Machine按钮开始部署。 如果你选择了多台机器,但有些机器又处于不能部署状态,需要重新选择后才能进行部署。在部署过程中,MAAS会通过电源管理自动上电开机,安装指定的OS,注入ssh pub key,部署成功最后显示为如下已部署状态。

以从test1机器直接ssh登录:

ubuntu@test1:~$ ssh 192.168.10.100
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-91-generic x86_64)
...
ubuntu@vm1:~$ sudo -i
root@vm1:~# date
Wed Apr  1 09:20:24 UTC 2020
root@vm1:~# exit
logout
ubuntu@vm1:~$ exit
logout
Connection to 192.168.10.100 closed.
ubuntu@test1:~$

MAAS web管理介面相对易用,但对于大批量的机器管理及如果需要进一步的自动化,则可考虙MAAS CLI,API或Juju。

 2.4.2 通过MAAS CLI机器创建及管理

大批量的机器管理及如果有需进一步的自动化需求,如果不能直接例用Juju情况下,通过MAAS CLI及定制相应的脚本程序是比较简便及快速方法。以下例子通过MAAS CLI方法演示机器或节点的创建,部署,释放及删除,可作为批量操作及自动化的参考:

ubuntu@test1:~$ lxc exec maas-server bash
root@maas-server:~# su - ubuntu
ubuntu@maas-server:~$ sudo apt install jq
ubuntu@maas-server:~$ maas login root http://192.168.10.10:5240/MAAS $(sudo maas-region apikey --user root)
ubuntu@maas-server:~$ maas root pods read | jq '.[] | .name, .id'
"pod-test1"
1
ubuntu@maas-server:~$ maas root pod compose 1 cores=2 memory=1024 storage="label1:8(default)" hostname=vm2
Success.                                              # memory in MB and storage in GB   
Machine-readable output follows:
{
    "system_id": "ff633q",
    "resource_uri": "/MAAS/api/2.0/machines/ff633q/"
}
ubuntu@maas-server:~$ maas root machines read | jq '.[] | select (.hostname=="vm2") | .hostname, .system_id, .status_message'
"vm2"
"7cwska"
"Ready"
ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
"vm2"
"ff633q"
"Ready"
ubuntu@maas-server:~$ 
ubuntu@maas-server:~$ maas root machine deploy ff633q os=ubuntu distro_series=bionic hwe_kernel=true
Success.                                                          
Machine-readable output follows:
...
ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
"vm2"
"ff633q"
"Loading ephemeral"
ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
"vm2"
"ff633q"
"Installing OS"
ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
"vm2"
"ff633q"
"Configuring OS"
ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
"vm2"
"ff633q"
"Rebooting"
ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
"vm2"
"ff633q"
"Deployed"
ubuntu@maas-server:~$ maas root machines lock ff633q
Success.                                                               
...
ubuntu@maas-server:~$ maas root machine lock ff633q
Machine is already locked
ubuntu@maas-server:~$ maas root machine release ff633q     
                                                       
ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
"vm2"                                       
"ff633q"                                                           
"Deployed"                                                         
ubuntu@maas-server:~$ maas root machine release ff633q; echo $?     #释放不能成功,因为已lock原因
                                        
2                                                
ubuntu@maas-server:~$ maas root machine delete ff633q; echo $?      #删除不能成功,因为已lock原因
                                                                       
2                                                                                          
ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
"vm2"                                       
"ff633q"                                                           
"Deployed"                                                         
ubuntu@maas-server:~$ 

vm2已创建及部署了OS,可以ssh访问如下所示:

ubuntu@test1:~$ dig @192.168.10.10  vm2.maas A  +short
192.168.10.101
ubuntu@test1:~$ ssh ubuntu@192.168.10.101
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-91-generic x86_64)
...
Last login: Wed Apr  1 10:39:10 2020 from 192.168.10.1
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.

ubuntu@vm2:~$ logout
Connection to 192.168.10.101 closed.
ubuntu@test1:~$

vm2不再需要之后,可以释放或进一步删除 :

ubuntu@maas-server:~$ maas root machine unlock ff633q                                                     
Success.                                                               
...
ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
"vm2"                                                      
"ff633q"                                                                                   
"Deployed"                                                         
ubuntu@maas-server:~$ maas root machine release ff633q            #释放成功,因为已unlock原因
Success.                                                               
...
ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
"vm2"
"ff633q"
"Released"
ubuntu@maas-server:~$ maas root machine delete ff633q            #删除不能成功,因为unlock原因
Success.
Machine-readable output follows:

ubuntu@maas-server:~$ maas root machines read hostname=vm2 | jq '.[] | .hostname, .system_id, .status_message'
ubuntu@maas-server:~$ maas logout root                          #maas退出登录
ubuntu@maas-server:~$

3. 扩展支持物理服务器的管理及在线资源链接

3.1 扩展支持物理服务器的管理

如果想用实际的物理服务器来测试,可以将物理服务器的pxe网口和测试机的一个空闲网口直连或通过交换机相连。注意如果交换机相连的话,这个网段不能有外部DHCP服务器,否则会因为DHCP竞争原因导致MAAS PXE启动失败。另外MAAS服务还需要能访问到物理服务器的BMC IP地址以通过ipmi进行上下电。以下例子将eth2网口加入到lxdbr0网桥,从而MAAS能直接管理和eth2相连物理服务器,注意DHCP只能工作于二层,不支持三层的经过路由和MAAS相连接的服务器管理。

ubuntu@test1:~$ sudo brctl show
bridge name     bridge id               STP enabled     interfaces
lxdbr0          8000.fe54004add70       no              veth8YV76X
                                                        vnet0
                                                        vnet1
ubuntu@test1:~$ sudo brctl addif lxdbr0 eth2

DHCP/PXE网络及IPMI网络准备好后,物理服务器还需要配置为PXE启动优先。将物理服务器增加进MAAS管理有2种方法,一是直接将物理服务器上电开机,PXE启动后会自动增加一个随机生成的机器名及状况为new的新机器,然后进一步检查ipmi配置(大部份Ubuntu认证过的服务器会自动配置及创建ipmi管理用户到服务器,也有一些机器由于还不支持通过host os的ipmi管理,需要手工输入及配置ipmi ip地址,用户名及密码),最后执行Commissioning。二是手工增加机器,如下图,需要知道机器的BMC IP地址,IPMI 管理用户名及密码,可以指定机器名,机器加入后会自动进行探测(commissioning),最后机器为Ready状态。

3.2 代理访问Internet时的设置方法

当需要透过代理而非直接的Internel访问时,需要在test1主机,lxd容器中的maas-server中设置相应的环境变量以便apt-get或apt、add-apt-repository、lxc命令能通过proxy访问在线源及下载软件,比较方便的设置proxy方法如下:

ubuntu@test1:~$ sudo vi /etc/environment
ubuntu@test1:~$ sudo cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export http_proxy=http://172.24.204.10:3128/        #替换为环境中的相应代理服务器IP及端口
export https_proxy=http://172.24.204.10:3128/
export no_proxy="127.0.0.1,localhost,::1,192.168.10.10"  
ubuntu@test1:~$ exit  #退出及重新ssh登录以使环境变量生效之后,再继续2.2.2的创建maas-server LXD虚拟机 
ubuntu@test1:~$        
ubuntu@test1:~$ lxc file push /etc/environment maas-server/etc/ 
ubuntu@test1:~$ lxc exec maas-server bash
root@maas-server:~# source /etc/environment #或者 su - ubuntu,然后再用sudo继续2.2.3的maas安装命令; 
                                            #每次lxc exec都需要这样方法使你的proxy环境变量生效;
                                            #另外一种方法是ssh登录到maas-server, 这样会自动设置/etc/environment;
                                            #maa-server默认不支持ssh 密码登录,比较方便是配置ssh pub key
ubuntu@test1:~$ ls .ssh/                    #如果没有id_rsa和id_rsa.pub,则需要ssh-keygen -t rsa先创建一对
authorized_keys  id_rsa  id_rsa.pub  known_hosts
ubuntu@test1:~$ lxc file push .ssh/id_rsa.pub maas-server/tmp/
ubuntu@test1:~$ lxc exec maas-server -- bash -c 'cat /tmp/id_rsa.pub >>  /home/ubuntu/.ssh/authorized_keys' 
ubuntu@test1:~$ ssh 192.168.10.10 "date"
Fri Apr 10 04:21:00 UTC 2020
ubuntu@test1:~$

注意:如果外部proxy是不能访问到MAAS管理机器的子网(如这个例子中的192.168.10.0/24),则如果相应的机器上提供web服务(http或htpps)的情况下,则提供web服务的IP地址就应加入到no_porxy以防止透过代理而出现不能访问。在这个例子中,我们加了maas-server及本机地址到no-proxy, 请勿更改或遗漏。

MAAS也需要相应设置以使增加,探测及部署OS时能够正确透过代理访问Internet,设置可为如下External或Peer之一,推荐使用Peer除非不能正常工作或MAAS可用空间太小因为MAAS代理服务器的缓存通常更有效。

3.3 在线资源列表

如果您需要Ubuntu专家支持,请联系我们。

*本教程由Canonical 云架构师Zhanglei Mao所撰写。转载注明出处。


查看更多内容

使用 MAAS 部署 VMware 虚拟机管理程序

多数现代数据中心本身均为异构架构。VMware 环境常与容器平台、数据库及其他裸机业务负载共存,多年运行于同一套硬件之上。服务器一次性采购,但会随业务需求变化调整承载业务。 然而,ESXi(VMware 虚拟机管理程序)的配置通常由独立流程负责。主机通过 VMware 工具、自定义脚本或专为将部署 ESXi...

Canonical Managed Kubeflow AI 运维平台现已登陆 Microsoft Azure Marketplace

Ubuntu 发行商 Canonical 近日宣布,其 Managed Kubeflow 服务已在 Microsoft Azure Marketplace 正式上线,实现全面商用(GA)。该解决方案允许 AI 团队在自有云租户环境内获得一个完全托管、可直接投入生产的 MLOps 平台。 上游 Kubeflow...

全新工具 Workshop 上线:一条命令即可在 Ubuntu 中启动沙箱开发环境

开发者如今可在智能体 AI 等前沿工作流程中,获得环境统一、可复现的开发体验 Canonical 正式发布 Workshop,该解决方案可通过单条命令快速启动开发环境。只需配置一次,此开发环境即可在多台设备上复现使用。这意味着各类开发设备与部署流水线可保持统一工作流程,并可大幅减少管理依赖关系所花费的时间。...

Canonical 技术案例 – 彻底解决 12 年老旧代码中的 Linux 性能漏洞

部分支持案例处理起来十分简单。另一些案例则要深入老旧遗留代码,一处逻辑缺陷就能悄无声息让常规指令引发严重性能故障。本系列将介绍 Canonical 技术支持与持续工程团队如何协作,排查、修复并向上游提交仅靠常规故障排查无法解决的疑难问题。在第二篇帖子中,libnss-db 中一处存在 12 年之久的漏洞导致 getent...