blog.monophile.net

コンピュータのこととかのメモ。

山本 一彰 | Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 2015年にコンビネータ論理を基に計算完備な計算手法 "論理珠算"を開発し、 それを含む体系である"算道"を構成した。 その成果により、 第19回 文化庁メディア芸術祭 アート部門 新人賞 (文部科学大臣賞) を2016年に受賞。 現在はインフラエンジニアとして生計をたててている。

技術

Configuration Management Ansible, Terraform, Cloud-Init
Cloud Platform GCP, AWS, Azure, OpenStack
Virtualization, Container QEMU+KVM, Xen, LXD/LXC, Docker
OS Ubuntu, Debian GNU/Linux, CentOS, FreeBSD, ...
Storage Ceph, GlusterFS, ZFS, btrfs, ...
Router Linux+Netfilter, Quagga, VyOS, Cisco IOS, YAMAHA RTX, ...
Switch Dell FTOS, AlaxalA, NETGEAR, ...
DB MySQL, MariaDB(Galera Cluster), MongoDB
Mail postfix, dovecot, RainLoop
WebApps WordPress, GitLab, MatterMost, Redmine, ...
Monitoring Nagios, Munin, Zabbix, Prometheus, Grafana
Misc Kubernetes/Istio, certbot, dnsmasq, ...

習得中

OS CoreOS(Container Linux), Windows on QEMU, ...
SQL PostgreSQL, BigQuery, ...
NoSQL CouchDB, ArangoDB, Neo4J, ...
Misc Proxmox, oVirt, MAAS, NFV, ...

投稿

snapでインストールしたLXDを使ってみる

概要

LXDがsnapパッケージに対応したようなので、使ってみた。 snapは “Installable across Linux distributions” らしいので、 各ディストリビューションのパッケージ管理システムに依存しない方法でLXDを使えるはず。 各ディストリでのLXDテスト状況は↓で確認できる。

今回はUbuntu16.04で行った。 snap自体はデフォルトでインストールされている。

$ lsb_release -d
Description:	Ubuntu 16.04.3 LTS

LXDをsnapでインストールする

今回はsnapに入っているLXDを使うので、aptの方は削除しておく。

$ sudo apt purge lxd lxd-client

そして、snapでLXDをインストールする。

$ sudo snap install lxd

インストールされたLXDの情報は↓で確認できる。

snap info lxd
name:      lxd
summary:   System container manager and API
publisher: canonical
contact:   https://github.com/lxc/lxd/issues
description: |
  LXD is a container manager for system containers.

  It offers a REST API to remotely manage containers over the network, using an
  image based workflow and with support for live migration.

  Images are available for all Ubuntu releases and architectures as well as for
  a wide number of other Linux distributions.

  LXD containers are lightweight, secure by default and a great alternative to
  virtual machines.
snap-id: J60k4JY0HppjwOjW8dZdYc8obXKxujRu
commands:
  - lxd.benchmark
  - lxd.check-kernel
  - lxd.lxc
  - lxd
  - lxd.migrate
services:
  lxd.daemon:    simple, enabled, active
tracking:        stable
installed:       2.20 (5235) 44MB -
refreshed:       2017-12-07 10:46:48 +0900 JST
channels:
  stable:        2.20        (5235) 44MB -
  candidate:     2.20        (5249) 44MB -
  beta:          ↑
  edge:          git-2d9eb5d (5285) 44MB -
  2.0/stable:    2.0.11      (4689) 20MB -
  2.0/candidate: 2.0.11      (4770) 20MB -
  2.0/beta:      ↑
  2.0/edge:      git-fec4021 (5291) 19MB -

LXDの状態を確認する

LXDの状態は↓で確認できる。 初期の状態でserviceは立ち上がっているようす。

$ snap services
Snap  Service  Startup  Current
lxd   daemon   enabled  active

LXDの開始と停止

LXDを開始する場合は↓。

$ sudo snap start lxd

LXDを停止する場合は↓。

$ sudo snap stop lxd

PATHに /snap/bin を追加する

snapパッケージでインストールされたコマンドは /snap/bin にシンボリックリンクが張られるため、PATHを設定しておく。

$ export PATH=/snap/bin:$PATH

ちなみにaptにはなかったlxc, lxd以外のコマンドも置かれていた。

$ ls -l /snap/bin/
total 24
lrwxrwxrwx 1 root root  7 Dec 14 12:45 lxc -> lxd.lxc
lrwxrwxrwx 1 root root 13 Dec 14 12:45 lxd -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 Dec 14 12:45 lxd.benchmark -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 Dec 14 12:45 lxd.check-kernel -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 Dec 14 12:45 lxd.lxc -> /usr/bin/snap
lrwxrwxrwx 1 root root 13 Dec 14 12:45 lxd.migrate -> /usr/bin/snap

LXDを初期化する

  • ストレージバックエンド: zfs (ループバックマウント)
  • ネットワーク: 10.0.1.0/24
  • ブリッジのアドレス: 10.0.1.254/24
  • LXDのAPI: ブリッジのアドレス 10.0.1.254:8443 でListenできるように設定する

今回は↑を満たすLXDを設定したいので↓のlxd.ymlを用意した。

config:
  core.https_address: 0.0.0.0:8443
  core.trust_password: secretsecret
  images.auto_update_interval: 6

# Storage pools
storage_pools:
- name: default
  driver: zfs
  config:
    zfs.pool_name: default

# Network devices
networks:
- name: lxdbr
  type: bridge
  config:
    ipv4.firewall: true
    ipv4.nat:      true
    ipv4.dhcp:     true
    ipv4.address:  10.0.1.254/24
    ipv6.address:  none

# Profiles
profiles:
- name: default
  devices:
    root:
      path: /
      pool: default
      type: disk
    eth0:
      name:     eth0
      nictype:  bridged
      parent:   lxdbr
      type:     nic

設定を変更したい場合は↓を参考にするとよい。

lxd.ymlを用意したら↓で初期化する。 ちなみに事前に用意したYAMLフォーマットのデータで初期化できるのはLXD2.14から。

$ cat lxd.yml | sudo /snap/bin/lxd init --preseed
LXD has been successfully configured.

すると↓のようにlxdbrが作成されて、アドレス10.0.1/254が振られていることがわかる。

$ ip link show lxdbr
36: lxdbr: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 66:88:d0:c4:24:82 brd ff:ff:ff:ff:ff:ff
$ ip address show lxdbr
36: lxdbr: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
   link/ether 66:88:d0:c4:24:82 brd ff:ff:ff:ff:ff:ff
   inet 10.0.1.254/24 scope global lxdbr
      valid_lft forever preferred_lft forever

またzfsにはdefaultプールが作成されていた。 通常のLXDでは /var/lib/lxd/disks/default.img にファイルが作られるが、 snapで入れたLXDの場合は /var/snap/lxd/common/lxd/disks/default.img に作られる様子。

$ zpool status default
  pool: default
 state: ONLINE
  scan: none requested
config:

	NAME                                          STATE     READ WRITE CKSUM
	default                                       ONLINE       0     0     0
	  /var/snap/lxd/common/lxd/disks/default.img  ONLINE       0     0     0

errors: No known data errors

初期化は終わったので↓のようにしてコンテナを立ち上げられる。

$ lxc launch ubuntu:16.04 xenial00
Creating xenial00
Starting xenial00
$ lxc list
+----------+---------+------------------+------+------------+-----------+
|   NAME   |  STATE  |       IPV4       | IPV6 |    TYPE    | SNAPSHOTS |
+----------+---------+------------------+------+------------+-----------+
| xenial00 | RUNNING | 10.0.1.66 (eth0) |      | PERSISTENT | 0         |
+----------+---------+------------------+------+------------+-----------+

LXDをsnapから削除する

↓を打てば良い。

$ sudo snap remove lxd

↑を行うとコンテナが保管されていたzfsのループバックファイルごと削除されるので注意する。

参考