LoginSignup
9
4

More than 3 years have passed since last update.

jujuの検証でハマったこと

Last updated at Posted at 2020-12-08

はじめに

この記事は、MicroAd Advent Calendar 2020の9日目の記事です。

ここでハマったこととして書いている内容は、インターネットへのアクセスが限定された環境で起きたもので、
通常の使い方でハマる内容ではありませんのでご注意ください。

Jujuとは

juju_logo.png

Jujuは、Canonicalが提供しているアプリケーションの構成管理ツールです。
Ansibleとの違いは、各種クラウド基盤と連携しOSのデプロイからアプリのインストール・設定までを一括して管理します。

詳しくはJujuを見ていただくと良いと思います。

Jujuでやりたかったこと

Jujuは、クラウド基盤と連携してアプリのデプロイや構成管理ができるため、Ansibleと比較してどういう使い方ができるのかと思って検証してみることにしました。

Jujuは、AWSなどのパブリッククラウド以外にもLDXやMAASにも対応しているので、
単一ホスト上のLXDでテストしたり、MAASで複数のベアメタルサーバにデプロイしたりと比較的手軽に試すことができます。

その上で、検証を通して手軽にOpenStackの構築ができないかということを試したいと思っていました。

検証用に作った環境

以下のような図の構成で検証環境を作りました。
MAASサーバ1台だけがInternetへ直接アクセスできるという制限のある環境です。
MAAS管理下にあるノードはMAASサーバのProxyを使用してInternetにアクセスするように設定しています。

Juju構成図1.png

この環境を使って、まずは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を使う際の参考になれば幸いです。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4