はじめに
この記事は、MicroAd Advent Calendar 2020の9日目の記事です。
ここでハマったこととして書いている内容は、インターネットへのアクセスが限定された環境で起きたもので、
通常の使い方でハマる内容ではありませんのでご注意ください。
Jujuとは
Jujuは、Canonicalが提供しているアプリケーションの構成管理ツールです。
Ansibleとの違いは、各種クラウド基盤と連携しOSのデプロイからアプリのインストール・設定までを一括して管理します。
詳しくはJujuを見ていただくと良いと思います。
Jujuでやりたかったこと
Jujuは、クラウド基盤と連携してアプリのデプロイや構成管理ができるため、Ansibleと比較してどういう使い方ができるのかと思って検証してみることにしました。
Jujuは、AWSなどのパブリッククラウド以外にもLDXやMAASにも対応しているので、
単一ホスト上のLXDでテストしたり、MAASで複数のベアメタルサーバにデプロイしたりと比較的手軽に試すことができます。
その上で、検証を通して手軽にOpenStackの構築ができないかということを試したいと思っていました。
検証用に作った環境
以下のような図の構成で検証環境を作りました。
MAASサーバ1台だけがInternetへ直接アクセスできるという制限のある環境です。
MAAS管理下にあるノードはMAASサーバのProxyを使用してInternetにアクセスするように設定しています。
この環境を使って、まずはNode01のみでLXDを使いjujuの検証を行います。
その後、MAASとJujuを連携させて他のNodeも使いCephのクラスターやOpenStackのクラスターを作ってみようと思っています。
Proxy環境での問題と対策
snapでのjujuインストールが失敗する
まずはノード1台でLXDを使って手軽にjujuを試してみることにしました。
しかし、jujuをsnapでインストールする際に問題がおきました。
snapコマンドを使ってjujuをインストールしようとしましたが、環境変数で設定しているProxyを使ってくれませんでした。
snapdの設定を変更する
snapdの設定を変更して、snap installでproxyを使えるようにします。
ubuntu@node01:~$ sudo systemctl edit snapd.service
[Service]
Environment=http_proxy=http://192.168.100.1:8000
Environment=https_proxy=http://192.168.100.1:8000
snapdを再起動
設定変更を反映してsnapdを再起動します。
ubuntu@node01:~$ sudo systemctl daemon-reload
ubuntu@node01:~$ sudo systemctl restart snapd.service
snapdを再起動したら、snapコマンドを使ってjujuをインストールします。
問題なくインストールできたら、引き続きsnapコマンドでLXDをインストールします。
PATHの設定
snapでインストールすると/snap/bin配下にコマンドがインストールされるので、
PATHが通るように環境設定しておきます。
ubuntu@node01:~$ export PATH=/snap/bin:$PATH
※.bashrcに設定しておく
LXDでjuju bootstrapがコケる
jujuとLXDが無事にインストールできたのもつかの間、jujuコントローラをセットアップするため
juju bootstrap
を実行するもエラーとなって設定できず。。
LXDにProxyの設定をする
snapでLXDをインストールしている場合、Proxyを設定する際に以下のように設定する必要があります。
ubuntu@node01:~$ sudo systemctl edit snap.lxd.daemon.service
※すでにLXDがaptでインストールされている場合は削除しておくと良いです
[Service]
Environment=http_proxy=http://192.168.100.1:8000
Environment=https_proxy=http://192.168.100.1:8000
設定の反映
lxdの再起動を行い設定を反映させます。
ubuntu@node01:~$ sudo systemctl daemon-reload
ubuntu@node01:~$ sudo systemctl restart snap.lxd.daemon.service
PROXY_HTTP等の環境変数を設定
LXDにProxyの設定をしてもjujuのbootstrapがコケてしまいます。
jujuのコマンド実行時に、PROXYの設定を付けて実行する必要があるため、
環境変数を設定します。
PROXY_HTTP,PROXY_HTTPS,PROXY_NOを設定
環境変数を設定してjujuコマンド時に実行しやすいよう設定しておきます。
※.bashrcに設定しておきます
PROXY_HTTP=http://192.168.100.1:8000
PROXY_HTTPS=http://192.168.100.1:8000
PROXY_NO=$(echo localhost 127.0.0.1 192.168.100.{1..255} 10.216.37.{1..255} | sed 's/ /,/g')
ここではlocalhost、127.0.0.1と192.168.100.XX(接続しているNWのアドレス)、
10.216.37.XX(LXDで設定されたコンテナ用のネットワークアドレス帯域)は、PROXYを使わない接続先として変数に登録しておきます。
export http_proxy=$PROXY_HTTP
export https_proxy=$PROXY_HTTP
export no_proxy=$PROXY_NO
export HTTP_PROXY=$PROXY_HTTP
export HTTPS_PROXY=$PROXY_HTTP
export NO_PROXY=$PROXY_NO
export JUJU_CHARM_HTTP_PROXY=$PROXY_HTTP
export JUJU_CHARM_HTTPS_PROXY=$PROXY_HTTP
export JUJU_CHARM_NO_PROXY=$PROXY_NO
ここまでの設定で、インターネットにProxy越しにしかアクセスできない環境でも
jujuを試せる状態になりました。
juju bootstrapコマンドの実行
ubuntu@node01:~$ juju bootstrap localhost overlord --model-default apt-http-proxy=$PROXY_HTTP --model-default apt-https-proxy=$PROXY_HTTPS --model-default http-proxy=$PROXY_HTTP --model-default https-proxy=$PROXY_HTTPS --model-default no-proxy=$NO_PROXY
上記のbootstrapコマンドにより、ローカルのLXD上にjujuのコントローラが設定されました。
あとは、juju deployでアプリをデプロイすることが可能です。
終わりに
インターネットにそのままアクセスできるような環境では、ここで書いているようなProxyの設定は不要です。
ですが、社内の検証環境で万が一に備えてネットワークを分けておきたい場合など、
どうしてもProxyを使う必要があったりします。
そういった環境でjujuを使う際の参考になれば幸いです。