Metal as a Service (Maas)
Bare Metal Provisioning을 위한 도구 중 MAAS (Metal as a Service)라는 오픈소스가 있다.
쉽게 말하면 여러대의 컴퓨터를 클라우드처럼 쓸수 잇게 해준다.
해보자.
install maas server
os install
ubuntu 20.04를 서버 한대에 설치한다. (각 버전에 맞는 maas버전이 있으므로 꼭 확인하자.)
application install
이제 작업을 해보자.
sudo apt update -y
sudo snap install --channel=2.9/stable maas
sudo apt install -y postgresql
MAAS_DBUSER=my-user
MAAS_DBPASS=my-password
MAAS_DBNAME=maas
sudo -u postgres psql -c "CREATE USER \"$MAAS_DBUSER\" WITH ENCRYPTED PASSWORD '$MAAS_DBPASS'"
sudo -u postgres createdb -O "$MAAS_DBUSER" "$MAAS_DBNAME"
sudo vi /etc/postgresql/10/main/pg_hba.conf
# host $MAAS_DBNAME $MAAS_DBUSER 0/0 md5
host maas my-user 0/0 md5
sudo maas init region+rack --database-uri "postgres://$MAAS_DBUSER:$MAAS_DBPASS@localhost/$MAAS_DBNAME"
MASS URL : (just enter)
결과
MAAS URL [default=http://192.168.3.2:5240/MAAS]:
MAAS has been set up.
If you want to configure external authentication or use
MAAS with Canonical RBAC, please run
sudo maas configauth
To create admins when not using external authentication, run
sudo maas createadmin
상태 확인
sudo maas status
> bind9 RUNNING pid 8142, uptime 0:02:21
> dhcpd STOPPED Not started
> dhcpd6 STOPPED Not started
> http RUNNING pid 8411, uptime 0:00:46
> ntp RUNNING pid 8327, uptime 0:00:51
> proxy RUNNING pid 8486, uptime 0:00:39
> rackd RUNNING pid 8145, uptime 0:02:21
> regiond RUNNING pid 8146, uptime 0:02:21
> syslog RUNNING pid 8324, uptime 0:00:51
어드민 생성
sudo maas createadmin --username=admin --email=teamsmiley@gmail.com
your-password
Import SSH keys [] (lp:user-id or gh:user-id): (just enter)
웹 브라우져 http://192.168.3.2:5240/MAAS/ (대소문자 주의)
화면이 잘 뜨면 admin으로 접속해본다.
서버 구성은 완료되었다.
ssh key 구성
-
website » setting » users » admin » edit » ssh key
-
import ssh keys » upload
여기에 ssh key를 등록할수 있다. maas서버에 public 키를 넣어두는게 좋을거같다.
그럼 노드가 설치되면서 기본적으로 public key를 넣어주는거 같다.
이미지 옵션 구성
ubuntu 21 20 18 centos 7 8 이미지를 다 받아두면 새로운 컴퓨터에 위 os를 설치할수 있다.
http://maas:5240/MAAS/l/images
IPMI 정보
http://192.168.3.2:5240/MAAS/r/settings/configuration/commissioning
이정보로 commissioning할때 ipmi 유저를 추가한다. BMC키는 빈칸으로 사용 이건 사용하는 ipmi설정을 봐야하는데 기본적으로 빈칸으로 해두고 쓰니가 편하다.
dhcp
subnet » click vlan
reserved range 를 dynamic으로 추가해넣는다. 시작 아이피와 끝 아이피를 넣어주자.
sudo maas status
bind9 RUNNING pid 19886, uptime 0:09:28
dhcpd RUNNING pid 20664, uptime 0:00:49
dhcpd6 STOPPED Not started
http RUNNING pid 20198, uptime 0:07:34
ntp RUNNING pid 20085, uptime 0:07:43
proxy RUNNING pid 20602, uptime 0:02:28
rackd RUNNING pid 19889, uptime 0:09:28
regiond RUNNING pid 19890, uptime 0:09:28
syslog RUNNING pid 20084, uptime 0:07:43
dhcp가 실행중임을 확인할수 잇다.
다른노드를 pxe부팅을 해보면 아이피를 가져오는것을 확인할수 있다.
new node add
이제 다른 컴퓨터에 maas를 이용하여 os설치부터 해보자.
노드로 사용할 컴퓨터를 준비한다. maas는 총 3번에 pxe 부팅을 사용한다. 그러므로 하드에 os가 있으면 하드를 사용해서 부팅을 해버리므로 꼭 하드가 부팅이 안되거나 pxe부팅을 기본으로 해두어서 로컬 하드가 부팅이 되버리는것을 방지하자.
나는 부팅 1 순위를 pxe로 변경해두고 작업했다.
노드를 자동으로 부팅하기위해 maas는 많은 옵션을 제공해주고 있다. 그런데 오래된 서버나 이런부분들은 뭔가 잘안된다. 부팅만 계속하고잇기도 하고.
그래서 난 power를 매뉴얼로 해두고 실제 수동으로 컴퓨터를 켜줬다.
MAAS 노드의 Lifecycle
-
New : MAAS 네크워크 상에서 PXE-boot 가능한 신규 머신을 탐색한 상태
-
Commissioning : RAM, CPU, disks, NICs 등과 같은 머신 리소스를 MAAS에서 사용할 수 있도록 구성중인 상태
-
Ready : MAAS를 통해 머신에 신규 노드를 할당할 수 있는 상태
-
Allocated : MAAS 서비스 가능한 머신이 네크웍이나 디스크를 구성할 사용자에게 할당된 상태
-
Deploying : MAAS 서비스를 통해 할당된 노드를 활성화하고 서버 OS를 설치중인 상태, 완료되면 Deployed 상태
-
Releasing : MAAS 서비스를 통해 사용중인 노드를 비활성화하고 리소스를 초기화하는 상태, 완료되면 Ready 상태
New 상태
일단 노드를 켜고 네트워크 부팅으로 되면서 자동으로 maas 에서 dhcp tftp iso등을 받아서 pxe로 부팅을 하게 한다. 이때는 headless로 메모리상에서만 linux가 돌아간다.
이 과정에서 필요한 하드웨어 정보를 모두 읽어들여 maas 에 보내서 디비에 저장후 나중에 사용할수 있게 한다.
이걸 하고 나면 머신이 보이고 new 상태가 된다. 정보를 다 maas 서버로 보내서 저장하엿으면 power off된다.
Commissioning
이걸 시도하면 다시 컴퓨터가 켜지면서 또 pxe부팅을 한다. 나의 경우는 ipmi가 오류가 있어서 계속 리부팅이 되는 문제가 잇어서 power를 매뉴얼로 해두고 수동으로 파워버튼을 눌러서 켰다.
다 되고 나면 commissioning으로 상태가 변경된다.
완료후 컴퓨터가 off된다.
deploy
이제 노드에 os를 킬수가 있다. 이걸 실행하고 power버튼을 눌러서 켜면 다시 pxe부팅을 하면서 headless로 os가 올라온후 하드에 이미지를 넣어버린다.
다 완료후 노드를 재부팅 시킨다.
노드가 재부팅이 완료되면 하드디스크에서 부팅하며 os 초기 관련 설정들을 진행한다. ssh키도 기존에 넣어들어가있던것이 들어간다.
완료되고 나면 컴퓨터가 재부팅이 된다.
재부팅 노드는 유저가 ubuntu이며 ssh key로 로그인이 가능하다.
혹시 kvm을 쓰면 디플로이시 옵션에서 kvm host라는것을 체크해주고 디플로이하면 kvm을 마음대로 관리할수 있게 된다.
kvm 나중에 추가하는 방법
설정을 켜고 작업을 진행하면 kvm이 자동으로 설치되는데 그걸 안하고 수동으로 추가를 하려면 어떻게 해야할가.
일단 노드에 유저를 만들어야한다. 자동설치시에는 virsh이라는 유저를 만들더라. 그래서 똑같이 virsh이라는 유저를 만들었다.
make sure $USER is a member of the libvirtd group. 이거 중요
cat /etc/group
libvirt:x:120:ubuntu,virsh
이제 Kvm에서 등록을 하면 되는데 주소/비밀번호가 필요하다. 주소는 아래와 같고 비번은 방금 유저 추가때 사용한 비번을 사용하면 된다.
qemu+ssh://virsh@172.16.1.14/system
maas서버에서 다음 명령어가 되는지 확인해보면 된다.
virsh -c qemu+ssh://$USER@$VM_HOST_IP/system list --all
The maas user on your rack controllers will issue all libvirt commands.
Therefore, you’ll need to set up SSH public keys on every rack controller for user maas.
First create SSH keys on all rack controllers:
maas서버에 maas유저에 ssh public key를 설정해야한다.
$ sudo -i
root@maas:~$ mkdir -p /var/snap/maas/current/root/.ssh
root@maas:~$ cd /var/snap/maas/current/root/.ssh
root@maas:~$ ssh-keygen -f id_rsa
Next, add the contents of ~maas/.ssh/id_rsa.pub to the VM host user’s ~$USER/.ssh/authorized_keys.
To accomplish this, log into your VM host node, via SSH, from a host for which MAAS has a matching public SSH key.
문서에는 위처럼 나와있는데..음…확인은 안되고 있음.
현재는 저파일이 없어도 동작되고 있는데. 어떻게 동작되는 것일가?
추가 작업
아이피를 dynamic하게 maas에서 처리해주는데 이게 실제 사용시 불편할수도 있다.
새로 추가한 노드를 체크하고 mark broken을 선택한다.
이제 노드를 클릭하고 들어가서 네트워크를 보자.
edit phisical 클릭
이제 ip mode를 수정하자.
스테틱 아이피를 추가하자.
이제 marked fixed 를 선택하면된다.
아이피도 잘 바꿔준다.
summary
이제 노드를 설치를 편하게 할수 있게 되었다.
kvm도 관리가 편해졋으므로 vm을 더 많이 만들고 쓸수잇는 베어메탈 클라우드가 완성되었다.
파워 때문에 잘 안되면 매뉴얼로 해두고 수동으로 전원을 넣어가면 테스트해보기 바란다.
꼭 KVM 호스트 기능도 사용해보기 바란다.