このマニュアルには、LXDをインストールおよび構成するための段階的なアルゴリズムが含まれています。 この手順では、次のトピックについて説明します。
-コンテナのインストールと起動。
-ネットワークのセットアップ。
-コンテナの静的IPアドレスを構成します。
-NATおよびIptablesを構成します。
-バックアップの作成とそれらからの復元。
-Dockerの特徴的な機能。
はじめに
LXDは、LXCに基づいたコンテナハイパーバイザーです[1]。 LXCとの主な違いは、LXDがコンテナイメージの概念を導入し、これら2つの概念に基づいてインフラストラクチャを構築することです。
簡単に言えば、LXDは仮想OS用のDockerです。 原則は同じです。リポジトリからOSイメージをダウンロードし、ホストとしてコンテナとしてインスタンスを展開できます。 1つのイメージを複数の仮想マシンに「クローン」できます。
Dockerとの違い:
- Dockerはアプリケーションの仮想化であり、LXDはオペレーティングシステムの仮想化です。
- コンテナが起動すると、完全なLinux環境が起動します。スクリプトは、init.dおよびインストールされているさまざまなサービス(mysql、apache、nginx、cronなど)で起動されます。
- コンテナの静的IPアドレスを設定することが可能です。
- コンテナを起動した後、コンテナの構成を変更できます(フォルダを「転送」するなど)。
-
exit
を使用してコンテナを終了すると、作業が続行されます。 - ホストマシンからコンテナファイルシステムに直接アクセスできます。 コンテナのルートシステムは、
/var/lib/lxd/containers/< >/rootfs
フォルダに/var/lib/lxd/containers/< >/rootfs
。 - デフォルトでは、LXDサービスはUNIXソケットを介して機能しますが、外部ネットワークで開いて画像を配布できます。 つまり、画像を使用して個人用サーバーを作成できます。
LXDのその他の機能:
- nova-lxdプラグインを介してOpenStackと統合できます。
- コンテナのスリープモード(休止状態)の可能性があります。
- コンテナ管理API [4]があります。
- LXD内でDockerを実行できます[5]。
LXDをインストールする
現在、LXDはUbuntu 16.04 LTSで正常に動作します。 他のシステムで実行することもできますが、問題がある場合や、正常に機能しない場合があります。 たとえば、Centos 7では、コンテナは特権モードでのみ実行され、既製のlxdアセンブリはないため、手動でコンパイルする必要があります。
新しいUbuntuバージョンでは、デフォルトでlxdはすでに統合されています。 インストールされていない場合は、次のように配置できます。
aptitude install lxd
LXDを構成する
システムを更新し、作業に必要なパッケージをインストールします。
aptitude update aptitude upgrade aptitude install lxd zfs zfsutils-linux
LXDを初期化する
コンテナの使用を開始する前に、LXDの初期化を行う必要があります。
初期化を行う前に、使用するバックエンドストレージを決定する必要があります。 バックエンドストレージ-これは、すべてのコンテナとイメージが配置される場所です。 ストレージには、ZFSとDirの2つの主なタイプがあります。
- ZFSを使用すると、コンテナのスナップショットを即座に作成および復元し、イメージからコンテナを作成できます。 ZFSのおかげで、LXDスナップショットは、コンテナー自体よりもかなり少ないスペースを占有します。
- Dirは、イメージを通常の方法でディスクに保存します。 各スナップショットは、コンテナ自体と同じ量を占有します。
ZFSはループデバイスとしてファイルにマウントされるため、ストレージのサイズを監視し、十分な空きがない場合はスペースを増やす必要があります。 プライベートリモートイメージストレージがある場合は、ZFSを使用して、コンテナーのスナップショットをバックアップとして時々送信し、そこからダウンロードして、新しいバージョンをインストールしたり、バックアップからコンテナーを復元したりするのは理にかなっています。
運用サーバーにDirをインストールすることにしました。 LANでZFSをテストします。 通常のスクリプトを使用してバックアップを作成します-それらをtarにパックし、Amazon S3に送信します。
使用するバックエンドストレージを決定したら、初期化プロセスを開始します。 これは次のコマンドで実行されます。
lxd init
ユーティリティは、答える必要がある質問をします。 ユーティリティは最初の質問をします:使用するストレージの種類は?
Name of the storage backend to use (dir or zfs): dir
答えがDirの場合、ユーティリティはすぐにネットワークの構成に進みます。 答えがZFSの場合、システムは次の質問をします。
Create a new ZFS pool (yes/no)? yes Name of the new ZFS pool: lxd Would you like to use an existing block device (yes/no)? no Size in GB of the new loop device (1GB minimum): 10
「新しいループデバイスのサイズ(GB単位)」は、ZFSストレージのサイズです。 すべての画像とコンテナはこのストレージに保存されるため、多くの画像やコンテナを保存する場合は、この数を増やす必要があります。
次に、ユーティリティは「外部からLXDへのアクセスを開く必要がありますか?」 答えはノーです。 パブリックまたはプライベートリポジトリを作成する場合は、yesと答える必要があります。
Would you like LXD to be available over the network (yes/no)? no
LXDブリッジを構成する
ストレージタイプを設定すると、ユーティリティは「LXDブリッジを設定しますか?」と尋ねます。 答えはイエスです。
Do you want to configure the LXD bridge (yes/no)? yes
ネットワークセットアップインターフェイスが起動します。 次のように質問に答えてください。
Would you like to setup a network bridge for LXD containers now? Yes Bridge interface name: lxdbr0 Do you want to setup an IPv4 subnet? Yes IPv4 address: 10.200.0.1 IPv4 CIDR mask: 16 First DHCP address: 10.200.100.1 Last DHCP address: 10.200.255.254 Max number of DHCP clients: 25399 Do you want to NAT the IPv4 traffic? Yes Do you want to setup an IPv6 subnet? No
ネットワークには、lxdbr0インターフェースを備えたブリッジが使用されます。
ネットマスク10.200.0.0/16。
ホストIPアドレスは10.200.0.1です。
DHCPは、コンテナのIPを10.200.100.1から10.200.255.254に自動的に配布しますが、10.200.0.2から手動で設定できます。
コンテナのip6プロトコルは省略できます。
次のコマンドを使用して、LXDブリッジ構成ユーティリティを再起動できます。
dpkg-reconfigure -p medium lxd
コンテナの静的IPを設定する
ファイルを開きます。
nano /etc/default/lxd-bridge
行LXC_DHCP_CONFILEのコメントを解除して、次のように記述します。
LXD_CONFILE="/etc/lxd-dnsmasq.conf"
静的IPアドレス構成ファイルを作成します。
nano /etc/lxd-dnsmasq.conf
テストコンテナの静的IPアドレスを記述します。
dhcp-host=test,10.200.1.1
将来的には、他のコンテナ用の他の静的IPアドレスをこのファイルに追加できるようになるでしょう。
/etc/lxd-dnsmasq.confファイルを変更するたびに、次のコマンドでlxd-bridgeを再起動する必要があります。
service lxd-bridge restart
これで解決しない場合は、間違ったIPを持つコンテナを停止し、dnsmasq.lxdbr0.leasesファイルを削除してから、lxd-bridgeを再起動する必要があります。
lxc stop test rm /var/lib/lxd-bridge/dnsmasq.lxdbr0.leases service lxd-bridge restart
NATセットアップ
コマンドを実行してNATが機能するには:
echo 1 > /proc/sys/net/ipv4/ip_forward echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Grubを構成する
ファイルを編集
nano /etc/default/grub
行を変更する
GRUB_CMDLINE_LINUX="swapaccount=1 quiet"
この行がないと、lxdを起動したときに、cgroupスワップアカウントが機能しないという警告が表示されました。 オプションswapaccount = 1を有効にすることにしました。 quiet-これはQuietブートシステムです(オプション)
自動実行へのLXDの追加
systemctl enable lxd
システムの再起動
Ubuntuを再起動します。
init 6
仮想マシンイメージをインストールして実行する
リポジトリを追加します(オプション、デフォルトでは、画像はすでに追加されています):
lxc remote add images images.linuxcontainers.org:8443
ダウンロード画像:
lxc image copy images:centos/6/amd64 local: --alias=centos-image
centos-image-画像への同義語であり、アクセスしやすい
イメージを実行します。
lxc launch local:centos-image test
test-将来のコンテナの名前
次の2つのコマンドで画像を実行できます。
lxc init local:centos-image test lxc start test
最初のコマンドはコンテナを作成し、2番目のコマンドはそれを起動します。 最初のコマンドは、コンテナを作成するだけで実行したくない場合に便利です。
実行中のコンテナのステータスを表示する
lxc list
チームは次の情報を表示する必要があります。
(Ubuntu)[root@ubuntu /]# lxc list +------+---------+-------------------+------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------+---------+-------------------+------+------------+-----------+ | test | RUNNING | 10.200.1.1 (eth0) | | PERSISTENT | 0 | +------+---------+-------------------+------+------------+-----------+
LXDは、/ etc / lxc-dnsmasq.confで構成したコンテナーの静的IPを発行したことに注意してください。
フォルダー転送
このコマンドは、フォルダ/データ/テスト/フォルダをフォルダ/フォルダ内のテストコンテナにマウントします
mkdir -p /data/test/folder chown 100000:100000 /data/test/folder lxc config device add disk_name test disk path=/folder source=/data/test/folder
フォルダーをマウントしても、/ var / lib / lxd / containers / testフォルダーの内容は変更されませんが、別のフォルダー/ var / lib / lxd / devices / testにマウントされます。 したがって、コンテナーのバックアップとスナップショットには、マウントされたフォルダーとファイルは含まれません。 バックアップまたはイメージからコンテナーを更新しても、マウントされたフォルダーの内容には影響しません。
次のコマンドを使用して、構成情報を表示できます。
lxc config show test
仮想マシンの接続
実行中のテストコンテナに移動します。
lxc exec test -- /bin/bash
接続を確認します。
ifconfig
結論:
[root@test ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:16:3E:23:21:3F inet addr:10.200.1.1 Bcast:10.200.255.255 Mask:255.255.0.0 inet6 addr: fe80::216:3eff:fe23:213f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15078 errors:0 dropped:0 overruns:0 frame:0 TX packets:15320 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:28090645 (26.7 MiB) TX bytes:841975 (822.2 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
NATを確認します。
ping ya.ru
結論:
[root@test ~]# ping ya.ru PING ya.ru (93.158.134.3) 56(84) bytes of data. 64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=1 ttl=50 time=105 ms 64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=2 ttl=50 time=106 ms 64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=3 ttl=50 time=105 ms 64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=4 ttl=50 time=105 ms 64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=5 ttl=50 time=104 ms 64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=6 ttl=50 time=106 ms ^C --- ya.ru ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 6671ms rtt min/avg/max/mdev = 104.942/105.845/106.664/0.568 ms
基本パッケージをインストールします。
yum install mc nano openssh-server epel-release wget -y yum update -y chkconfig sshd on service sshd start
ルートパスワードを設定する
passwd
コンテナから切断します。
exit
SSH接続
ホストsshキーをコンテナにコピーします
ssh-copy-id root@10.200.1.1
Ubuntuがキーを見つけられないと誓った場合、最初にsshキーを生成し、次にssh-copy-idコマンドでコピーします。 キーが正常にコピーされた場合、この手順(キー生成)をスキップします。
ssh-keygen
これで、パスワードなしで(証明書を使用して)sshを介してコンテナーに入ることができます。
ssh root@10.200.1.1
NATを介したsshの転送
多くの場合、ホストをバイパスして、sshを介してコンテナに直接接続する機能を取得する必要があります(毎回ホストに移動しないように、コンテナに移動するため)。
これを行うには、次のコマンドを実行します。
iptables -t nat -A PREROUTING -p tcp --dport 22001 -j DNAT --to-destination 10.200.1.1:22
Ubuntuの起動後にiptablesを自動保存する
Ubuntuでは、デフォルトではホストマシンを再起動するとiptablesが失われます。 この問題を解決するには、ファイルを作成する必要があります。
nano /etc/network/if-up.d/00-iptables
記録ファイルの内容:
#!/bin/sh iptables-restore < /etc/default/iptables #ip6tables-restore < /etc/default/iptables6
起動権を設定します。
chmod +x /etc/network/if-up.d/00-iptables
現在の設定を保存します。
iptables-save > /etc/default/iptables
再起動して、sshを使用してコンテナに接続してみます。
ssh root@< ip > -p22001
iptablesを微調整する
ブート時にiptablesリカバリを使用すると、LXDはコマンドをiptablesに追加し、重複したエントリがiptablesに含まれます。 さらに、さまざまなサーバーへの着信接続を禁止し、必要なポートのみを開く必要があります。
完成したリスト/etc/default/iptables
、2つのタスクを同時に解決します。
# Generated by iptables-save v1.6.0 on Fri Aug 19 16:21:18 2016 *mangle :PREROUTING ACCEPT [129:9861] :INPUT ACCEPT [129:9861] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [102:11316] :POSTROUTING ACCEPT [102:11316] COMMIT # Completed on Fri Aug 19 16:21:18 2016 # Generated by iptables-save v1.6.0 on Fri Aug 19 16:21:18 2016 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] # ssh test -A PREROUTING -p tcp -m tcp --dport 22001 -j DNAT --to-destination 10.200.1.1:22 COMMIT # Completed on Fri Aug 19 16:21:18 2016 # Generated by iptables-save v1.6.0 on Fri Aug 19 16:21:18 2016 *filter :INPUT ACCEPT [128:9533] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [102:11316] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT # http ssh -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT # -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Fri Aug 19 16:21:18 2016
バックアップを作成する
このメソッドは、インポートの準備ができたLXDイメージとしてコンテナーバックアップを作成します。 理想的には、スナップショットを作成し、プライベートLXDリポジトリに送信する必要があります。 しかし、時にはこれを行うことができません。 たとえば、小さな会社には別のサーバーを購入する機会がありません。 この場合、単純なtar + Amazon S3ソリューションでできます。
バックアップを作成および復元するための既製のスクリプトをダウンロードします。
wget https://github.com/vistoyn/lxd_backup/raw/1.1/scripts/lxc-backup -O "/usr/local/bin/lxc-backup" wget https://github.com/vistoyn/lxd_backup/raw/1.1/scripts/lxc-restore -O "/usr/local/bin/lxc-restore"
スクリプトの実行フラグを設定します。
chmod +x /usr/local/bin/lxc-restore chmod +x /usr/local/bin/lxc-backup
バックアップを作成および復元する前に、作業コンテナを停止する必要があります。 原則として、実行中のコンテナでバックアップを作成できますが、バックアップを作成すると、一部のデータが失われる可能性があります(コンテナにインストールされているプログラムによって異なります)。
dirの場合
このコマンドは、テストコンテナーのバックアップを作成し、ファイルをアーカイブに圧縮して、/ backup / lxc / testフォルダーのディスクに保存します。
lxc stop test lxc-backup test
スナップショットからバックアップを復元します。
lxc-restore test /backup/lxc/test/snap-test-2016-08-19.tar.bz2
ZFSの場合
ZFSの場合、コンテナ名の後に「.zfs」を追加します
バックアップの作成:
lxc stop test lxc-backup test.zfs
スナップショットからバックアップを復元します。
lxc-stop test lxc-restore test.zfs /backup/lxc/test/snap-test.zfs-2016-08-19.tar.bz2
バックアップをインポート
新しいホストでは、バックアップからコンテナを作成する必要がある場合があります。 これを行うには、最初にイメージをインポートしてから、コンテナーとして実行します。
バックアップをLXDイメージとしてインポートするコマンド:
lxc image import /backup/lxc/test/snap-test-2016-08-19.tar.bz2 --alias my-new-image
コンテナとしてイメージを開始するコマンド:
lxc launch me-new-image test2
素材
この記事では、LXDに関連する他の多くの問題には対処していません。 LXDの詳細については、こちらをご覧ください。