MAASデプロイ操作メモ
MAASにマシン登録済みが前提
デプロイ時に以下設定をする
・NICのIP/Bonding設定
・パーティション設定
マシン登録状態
Bonding設定
まずサブネット設定
サブネットはMAASがパケットをキャプチャし自動生成される。
しかし接続端末がない場合、自動生成されない為、必要に応じて手動で設定する。
設定の流れは、「Fabric」作成し、次に「subnet」作成する。
「subnet」作成時に対応する「Fabric」を指定する。
サブネット設定画面一覧
Fabric追加
fabric-10が追加された
サブネット追加
fabric-10を割り当て
fabric-10・192.168.5.0/24が追加された
デプロイ
AptlyでOpenStackレポジトリ構築
参考
aptly - aptly mirror create
※Aptly使い方は以下を参照
第485回 aptlyで本格的なパッケージリポジトリを作る:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
基本的な使い方は以下
ミラー作成→ミラー同期→スナップショット作成→公開(Publish)
Aptlyサーバ構築
以下レポジトリをAptlyで管理する。
コンポーネント情報(main restricted universe multiverse)も引き継ぐ。手順によっては全てmainに統合される為。
・Ubuntu標準レポジトリ
・OpenStackレポジトリ(Cloud Archive)
・Mariadb(Galera Cluster実装のため)
・JUJU
手順
①Ubuntu 16.04.3 LTS (Xenial Xerus)インストール
②Appamor無効化
③aptlyインストール
# sudo apt -y update # sudo apt -y install aptly # mkdir /home/aptly # useradd aptly -d /home/aptly # chown -R aptly. /home/aptly
※以後手順でプロンプトが#の場合はrootユーザー、$の場合はaptlyユーザーで実行することを意味する。
④レポジトリGPG公開鍵登録
$ gpg --list-key $ gpg --no-default-keyring --keyring /usr/share/keyrings/ubuntu-archive-keyring.gpg --export | gpg --no-default-keyring --keyring trustedkeys.gpg --import # For Ubuntu Repository $ gpg --no-default-keyring --keyring trustedkeys.gpg --keyserver keys.gnupg.net --recv-keys 5EDB1B62EC4926EA # For Cloud Archive $ gpg --no-default-keyring --keyring trustedkeys.gpg --keyserver keys.gnupg.net --recv-keys F1656F24C74CD1D8 # For Galera $ gpg --no-default-keyring --keyring trustedkeys.gpg --keyserver keys.gnupg.net --recv-keys 376A290EC8068B11 # For JUJU
keyringは鍵の束。以下コマンドで7個公開鍵が登録されてればOK
$ gpg --no-default-keyring --keyring trustedkeys.gpg --list-keys /home/aptly/.gnupg/trustedkeys.gpg ---------------------------------- pub 1024D/437D05B5 2004-09-12 uid Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com> sub 2048g/79164387 2004-09-12 pub 1024D/FBB75451 2004-12-30 uid Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com> pub 4096R/C0B21F32 2012-05-11 uid Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com> pub 4096R/EFE21092 2012-05-11 uid Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com> pub 4096R/EC4926EA 2012-08-14 uid Canonical Cloud Archive Signing Key <ftpmaster@canonical.com> sub 4096R/ECD76E3E 2012-08-14 pub 4096R/C74CD1D8 2016-03-30 uid MariaDB Signing Key <signing-key@mariadb.org> sub 4096R/DE8F6914 2016-03-30 pub 1024R/C8068B11 2010-07-13 uid Launchpad Ensemble PPA
⑤GPGキー生成 & 公開鍵エクスポート
鍵生成
# apt -y install rng-tools # rngd -r /dev/urandom $ gpg --gen-key
※rngdコマンド実行しないと、次のpgpコマンドが乱数入力待ち状態で固まる。
linux - GPG does not have enough entropy - Server Fault
※useridは"ubuntu"を指定。他はデフォルト
鍵エクスポート
$ gpg -o /tmp/pub.key --export $(gpg --list-keys ubuntu | egrep "^pub" | cut -d"/" -f2| cut -d" " -f1)
例)コマンド出力例
$ gpg --list-keys ubuntu pub 2048R/E07FC524 2018-01-03 uid ubuntu sub 2048R/79A3B446 2018-01-03
※エクスポートした鍵ファイルをクライアントがインポートして利用する
⑥ミラー作成
以下スクリプトをaptlyユーザーで実行
set_mirror.sh
# xenial for i in main restricted universe multiverse do aptly mirror create --architectures="amd64,i386" xenial-$i http://jp.archive.ubuntu.com/ubuntu/ xenial $i || logger -s "########## ERROR ##########: xenial $i" done echo "" # xenial-updates for i in main restricted universe multiverse do aptly mirror create --architectures="amd64,i386" xenial-updates-$i http://jp.archive.ubuntu.com/ubuntu/ xenial-updates $i || logger -s "########## ERROR ##########: xenial-updates $i" done echo "" # xenial-security for i in main restricted universe multiverse do aptly mirror create --architectures="amd64,i386" xenial-security-$i http://security.ubuntu.com/ubuntu xenial-security $i || logger -s "########## ERROR ##########: xenial-security $i" done echo "" # xenial-backports for i in main restricted universe multiverse do aptly mirror create --architectures="amd64,i386" xenial-backports-$i http://jp.archive.ubuntu.com/ubuntu/ xenial-backports $i || logger -s "########## ERROR ##########: xenial-backports $i" done echo "" # OpenStack aptly mirror create --architectures="amd64,i386" openstack-pike http://ubuntu-cloud.archive.canonical.com/ubuntu/ xenial-updates/pike main || logger -s "########## ERROR ##########: OpenStack" echo "" # Mariadb For Galera Cluster aptly mirror create --architectures="amd64,i386" mariadb http://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/10.2/ubuntu/ xenial main || logger -s "########## ERROR ##########: Mariadb" echo "" # JUJU aptly mirror create juju ppa:juju/stable || logger -s "########## ERROR ##########: juju" echo "" # Mirror update for i in $(aptly mirror list --raw) do aptly mirror update $i || logger -s "########## ERROR ##########: $i update failed" done
⑦スナップショット作成
以下スクリプトをaptlyユーザーで実行
set_snap.sh
SNAP=$(date +%Y%m%d) for i in $(aptly mirror list --raw) do aptly snapshot create "$i-$SNAP" from mirror $i if [ $? -ne 0 ];then logger -s "ERROR: aptly snapshot create $i-$SNAP from mirror $i" fi done
※distribution名に/を含むとエラーになる。
Publish multiple snapshots to the same prefix/distribution ; sharing the same `/pool` · Issue #196 · smira/aptly · GitHub
⑧パブリッシュ
以下スクリプトをaptlyユーザーで実行
set_publish.sh
SNAP=$(date +%Y%m%d) for i in xenial xenial-updates xenial-security xenial-backports do aptly snapshot list --raw | egrep -w "$i-(main|multiverse|restricted|universe)-$SNAP" | sort | xargs aptly publish snapshot --distribution=$i --component="main,multiverse,restricted,universe" --passphrase="pike" if [ $? -ne 0 ];then logger -s "ERROR: $i publish failed" fi echo "INFO: $i Fisnished" done for i in juju mariadb openstack-pike do aptly publish snapshot --distribution="$i" --component="main" --passphrase="pike" "$i-20180113" if [ $? -ne 0 ];then logger -s "ERROR: $i publish failed" fi echo "INFO: $i Fisnished" done
⑧Apacheレポジトリ公開設定
# apt install apache2
# ln -s /home/aptly/.aptly/public /var/www/html/ubuntu # cat /etc/apache2/conf-enabled/aptly.conf <Directory "/var/www/html/ubuntu"> AllowOverride None Options +Indexes +FollowSymLinks Require all granted </Directory>
⑨クライアント設定
鍵のインポート
# apt-key add [aptlyサーバでエクスポートしたファイル]
/etc/apt/sources.listの変更
deb http://[SERVER_IP]/ubuntu/ xenial main restricted deb http://[SERVER_IP]/ubuntu/ xenial-updates main restricted deb http://[SERVER_IP]/ubuntu/ xenial universe deb http://[SERVER_IP]/ubuntu/ xenial-updates universe deb http://[SERVER_IP]/ubuntu/ xenial multiverse deb http://[SERVER_IP]/ubuntu/ xenial-updates multiverse deb http://[SERVER_IP]/ubuntu/ xenial-backports main restricted universe multiverse deb http://[SERVER_IP]/ubuntu xenial-security main restricted deb http://[SERVER_IP]/ubuntu xenial-security universe deb http://[SERVER_IP]/ubuntu xenial-security multiverse
※上記はデフォルトsources.list内容を以下コマンドで置換した内容。
egrep -v "^$|^#" /etc/apt/sources.list | sed -e 's/jp\.archive\.ubuntu\.com/\[SERVER_IP\]/' -e 's/security\.ubuntu\.com/\[SERVER_IP\]/'
補足
GPG keyringの動き
GPGキー生成後にkeyringインポートをすると以下エラーが出る。
$ gpg --no-default-keyring --keyring /usr/share/keyrings/ubuntu-archive-keyring.gpg --export | gpg --no-default-keyring --keyring trustedkeys.gpg --import gpg: key 437D05B5: public key "Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>" imported gpg: key FBB75451: public key "Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>" imported gpg: key C0B21F32: public key "Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>" imported gpg: key EFE21092: public key "Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>" imported gpg: Total number processed: 4 gpg: imported: 4 (RSA: 2) gpg: public key of ultimately trusted key E07FC524 not found gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
E07FC524は作成したGPGキーに該当する。関連情報として以下があり。
Gpg: Public Key of Ultimately Trusted Key 00000000 Not Found - Stuff… And Things…
対処不要そうな感じでもあるが、先にkeyringインポートでエラー回避
Ubuntuパッケージ管理メモ
software-properties-commonとは?
apt-add-repository(レポジトリを追加するコマンド)を含むパッケージ
ubuntuのリリースは以下URLで確認可能
http://releases.ubuntu.com
17.10はArtful
17.04はZesty
16.04.3はXenial
参照するレポジトリの確認
apt-cache policy
Ubuntuのレポジトリの考え方
レポジトリは以下4種類に分類される。
What is the difference between security, updates, proposed and backports in /etc/apt/apt.conf.d/50unattended-upgrades? - Ask Ubuntu
UbuntuUpdates - Community Help Wiki
種類 | 説明 | 推奨 |
---|---|---|
Security | セキュリティ修正 | 推奨 |
Updates | 該当アプリレベル修正・他ソフト互換性に影響なし | 推奨 |
Proposed | テスト段階の修正(Updatesへ以降する前)・他ソフト互換性に影響あり | 非推奨 |
Backports | 最新メジャーリリースの修正含む・他ソフト互換性に影響あり | 非推奨 |
さらに各レポジトリは以下のタイプに分かれる。
Repositories/Ubuntu - Community Help Wiki
タイプ | 説明 |
---|---|
Main | CaonicalがサポートするOSS |
Universe | コミュニティがサポートするOSS |
Restricted | OSSでないデバイスドライバ |
Multiverse | OSSでないソフトウェア |
※proprietryは「独占的な」も意味。Open対義語
インストールCDには、「main」と「Restricted」が含まれる。
レポジトリ格納サイトは以下
Index of /ubuntu/dists
レポジトリ管理
Repositories/CommandLine - Community Help Wiki
参照するリポジトリは以下で定義
/etc/apt/sources.list /etc/apt/sources.list.d/
定義方法の例
deb http://ch.archive.ubuntu.com/ubuntu/ saucy main restricted deb-src http://ch.archive.ubuntu.com/ubuntu/ saucy main restricted
各項目の意味は以下の通り
項目 | 説明 |
---|---|
deb | バイナリパッケージを含むレポジトリの意味 |
deb-src | ソースコードを含むレポジトリの意味 |
http://~ | レポジトリのURI |
saucy | リリース名 |
mainとrestricted | レオジトリの種類 スペース区切りで複数指定可能 |
以下にUbuntuオフィシャルミラーレポジトリの情報あり
Mirrors : Ubuntu
OpenStackレポジトリ
Pikeレポジトリ有効化は以下コマンド
add-apt-repository cloud-archive:pike
JUJU/MAASでOpenStack構築メモ
目的
JUJU/MAASからOpenStack環境を作る。
参考URL
OpenStack Docs: Install MAAS
Installation | MAAS documentation
Ubuntu16.04でOpenStack(成功) | wabuntu
Add Nodes | MAAS documentation
Ubuntu MAAS/Juju 2.0 で OpenStack Mitaka 構築 (その1) - Qiita
構成メモ
サーバは3台用意
MAASサーバ1台(Ubuntu16.04LTS)
KVMサーバ2台(CentOS7)
MAASにKVMホストを2台登録して使う
KVM1号機上のVM1台をJUJUコントローラにする
KVM2号機上のVM1台をOpenStackコンポーネント展開するLXDサーバにする
メモ
OSインストール時にMAASインストール可能
しかしインストーラの処理中にエラーになる。。。
(ubuntu-16.04.3-server-amd64.isoで確認)
大人しくOSインストールしてからMAASパッケージを入れる。
手順
※ KVMサーバ構築手順は省略。以下作業は明示的に指定がない限りMAASサーバで実施
※ MAASでデプロイした仮想マシンはaptを実行する為、プロキシ設定しない場合は、仮想マシンがインターネットに接続できる必要あり
※ KVM・MAASは時刻同期できている状態であること
1. OSインストール & 基本設定
2. パッケージアップデート
sudo apt update && sudo apt full-upgrade
3. MAASインストール
sudo apt install maas
4. MAAS管理者アカウント作成
sudo maas createadmin
※鍵のインポートはここではしない
※管理者アカウントはmadminで作成
5. libvirt-binインストール
sudo apt install libvirt-bin
6. KVMサーバへのvirsh接続設定
sudo chsh -s /bin/bash maas sudo su - maas ssh-keygen -f ~/.ssh/id_rsa -N '' ssh-copy-id -i ~/.ssh/id_rsa root@KVM1号機IP ssh-copy-id -i ~/.ssh/id_rsa root@KVM2号機IP virsh -c qemu+ssh://root@KVM1号機IP/system list --all virsh -c qemu+ssh://root@KVM2号機IP/system list --all
7. JUJUコントローラ用VM作成
Virt-managerで以下仮想マシン作成
TYEP: Linux-Ubuntu16.04LTS
NIC: 2個
vCPU: 2個
MEM: 8GB
Boot OptionでMAAS DHCPが動くNWに接続したNICを一番上にする
9. MAAS管理Web画面にログインし各種設定
192.168.0.100:5240/MAAS/.
【鍵登録】
MAASサーバでssh-keygetコマンド実行し公開鍵を登録
【DHCP有効化】
"Subnet"タブ→Fabric(NW)一覧表示→DHCP動かすFabricの"VLAN"クリック→右上"Take action"より"Provider DHCP"をクリックして設定
【KVMサーバのPOD登録】
PODタブより追加。
※公開鍵認証設定済みなのでパスワードは入れない。
※追加後、KVMサーバ上のVMが起動しNode登録コミッション処理が動く。Network Bootに失敗してたら対処必要。
【JUJU/OpenStackサーバ作成】
KVMの仮想マシンとして作成
【コミッション】
POD→KVMサーバ→Take ActionよりRefreshを押す
これで、仮想マシンがコミッションされる。
※それぞれ"juju"と"openstack"のタグをつける
8. JUJUクライアントインストール & セットアップ
MAASサーバにインストールする
sudo add-apt-repository -u ppa:juju/stable sudo apt install juju
MAASエンドポイント認証キーの取得
MAASにログインし右上"madmin"をクリック
クラウド登録
juju add-cloud mymaas
以下を指定
"maas"
"http://MAAS_IPアドレス:5240/MAAS/"
DNSサーバ等
MAASがDNSになる。ここで設定するのはMAASのForwarder先のDNSサーバ。
DNSSECに対応している必要があり。
資格情報設定
juju add-credential mymaas
以下を指定
"madmin"
エンドポイント認証キー
JUJUコントローラーデプロイ
juju bootstrap --constraints tags=juju mymaas maas-controller
※jujuコマンド
利用可能クラウド出力
juju clouds
資格情報出力
juju credentials
デプロイノード出力
juju status
コントローラの再デプロイ
juju kill-controller maas-controller juju bootstrap --constraints tags=juju maas maas-controller
モデル作成
モデルはアプリケーションの入れ物
jujuコントローラはdefaultモデルに作成されている
OpenStack用のモデルを別に作る(管理・保守性がよくなる)
juju add-model uos
※上記でuosモデルにスイッチされる
JUJU/MAASメモ
参考URL
OpenStack Docs: Install MAAS
最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月
What is MAAS? | MAAS documentation
Getting started with Juju | Documentation | Juju
Concepts and Terms | MAAS documentation
Google 翻訳
Juju Manual Cloud で OpenStack 環境構築
→マニュアルクラウドという形態もあり。
マニュアルクラウドとは?
MAASなしで使える。
SSHで管理可能なノードを登録して利用。
jujuコントローラ(bootstrap)を作る時に、manualを指定する。
crudiniメモ
設定ファイル編集だけでなく有効パラメタ出力も可能
出力フォーマットは3種類
①ini
# crudini --get --format=ini /etc/keystone/keystone.conf |head -5 [DEFAULT] [assignment] [auth] [cache] [catalog] #
②sh
# crudini --get --format=sh /etc/keystone/keystone.conf |head -5 DEFAULT assignment auth cache catalog #
③lines
[ DEFAULT ] log_dir = /var/log/keystone [ assignment ] [ auth ] [ cache ] [ catalog ] #