0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Proxyが存在する環境でkolla-ansibleを使ってOpenStackのAll-in-Oneマシンを作成してみた

Last updated at Posted at 2022-02-03

はじめに

この記事では、Proxy環境下でkolla-ansibleを使ったOpenStackのAll-in-Oneマシンを作成するにあたっての留意点をまとめています。

kolla-ansibeを使ったOpenStackの作成方法は、ググると色々出てきますが、いずれもProxyのない環境での構築をベースにしているように見えます。Proxy環境下での作成は大変骨が折れますし、意味不明なエラーが出力されて断念された方(犠牲者)も多いのではないかと感じていました。今回、大いにはまりつつもProxy環境下で作成することができたので、備忘として情報を残しておきたいと思います。

前提

前提として、ここで作成したAll-in-Oneマシンは検証などのテスト用途で作成したものであります。本番環境での利用を想定していないので、あくまで参考手順として利用下さい.

簡単ですが、作成環境は以下の通りです。
・サーバー(VM) : 12vCPU / 16GB Mem / 900GB HDD / 2vNIC (VMware ESXi6台上で作成)
・OS : ubuntu 20.4 LTS (枝番なし。20.4.xでは未実施)
・kolla-ansible : 12.3.1.dev46
・OpenStack Release : wallaby

(02/12/2022更新) OpenStack Xenaでも同手順となることを確認済

手順

Proxy環境下での構築における重要ポイントだけ列挙していきます。
基本的な作成方法は、Kolla Ansible deploying OpenStack wallaby on Ubuntu 20.04 を参考として下さい。

1. ubuntu OSへのProxy設定

まず、ubuntuの初期インストール時にProxy設定が行えますので、そちらにProxy設定を入れます。これをやっておくと、aptが通るようになります。当然ながら、Proxyサーバのドメイン名で設定する場合は、インターフェースのIPアドレス登録画面にてDNSサーバのIPアドレスの登録も必要になります。

[http or https]://[ユーザー名]:[パスワード]@[Proxyサーバのドメイン名 or IPアドレス]:[ポート番号]

【サンプル】
http://proxy.sample.com:8080
※ユーザー名、パスワード、ポート番号は利用環境毎にあったりなかったりだと思います。

2. pipへのProxy設定

次に、Kolla Ansible deploying OpenStack wallaby on Ubuntu 20.04 - Creating python virtual environment 手順の実行前に、/etc/pip.confを作成し、下記のProxy設定を書き込みます。

[global]
proxy = [http or https]://[ユーザー名]:[パスワード]@[proxyサーバのドメイン名 or IPアドレス]:[ポート番号]
※ユーザー名、パスワード、ポート番号は利用環境毎にあったりなかったりだと思います。

(任意) gitへのProxy設定

pip install kolla-ansible でkolla-ansibleをインストールすると、最新のリリースがインストールされます。pip install git+https://opendev.org/openstack/kolla-ansible@stable/[ブランチ名] などで、最新以外のリリースをインストールしたい場合は、下記コマンドを実行してgitにもProxyを設定します。

$git config --global http.proxy [http or https]://[ユーザー名]:[パスワード]@[proxyサーバのドメイン名 or IPアドレス]:[ポート番号]
$git config --global https.proxy [http or https]://[ユーザー名]:[パスワード]@[proxyサーバのドメイン名 or IPアドレス]:[ポート番号]
※ユーザー名、パスワード、ポート番号は利用環境毎にあったりなかったりだと思います。

3. pre-install.ymlへのProxy設定

Kolla Ansible deploying OpenStack wallaby on Ubuntu 20.04 - Deployment 手順の実行前に、Ansible Playbook内に下記「★」付き行の追加が必要です。対象ファイルは、基本的な作成手順の通りに作成した場合は~/wallaby/share/kolla-ansible/ansible/roles/baremetal/tasks/pre-install.ymlとなります。

110         - name: Install docker apt gpg key
111           environment: ★
112             http_proxy: [http or https]://[ユーザー名]:[パスワード]@[proxyサーバのドメイン名 or IPアドレス]:[ポート番号] ★
113             https_proxy: [http or https]://[ユーザー名]:[パスワード]@[proxyサーバのドメイン名 or IPアドレス]:[ポート番号] ★
114           apt_key:
115             url: "{{ docker_apt_url }}/{{ docker_apt_key_file }}"
116             id: "{{ docker_apt_key_id }}"
117             state: present
118           become: True

これをやらないと、kolla-ansible -i /etc/kolla/all-in-one bootstrap-servers の実行時に下記のようなエラーが出ます。

TASK [baremetal : Install docker apt gpg key] **********************************************************************************************************************************************************
[0;31mfatal: [localhost]: FAILED! => {"changed": false, "msg": "Failed to download key at https://download.docker.com/linux/ubuntu/gpg: Request failed: <urlopen error timed out>"} [0m

4. dockerへのProxy設定

Kolla Ansible deploying OpenStack wallaby on Ubuntu 20.04 - Deployment 手順のkolla-ansible -i /etc/kolla/all-in-one deployコマンドの実行直前で、dockerへProxy設定を行います。手順は「ubuntu 20.04.1 上でプロキシ環境でdocker を利用する」 が参考になります。

これをやらないと、kolla-ansible -i /etc/kolla/all-in-one deployの実行時に下記のようなエラーが出ます。
(これがProxyのせいだと気が付くまでにとても時間がかかりました・・・)

TASK [common : Ensure fluentd image is present for label check] ****************************************************************************************************************************************
[1;30mtask path: /home/xxxxx/wallaby/share/kolla-ansible/ansible/roles/common/tasks/config.yml:26[0m
[0;34mUsing module file /home/xxxxx/wallaby/share/kolla-ansible/ansible/library/kolla_docker.py[0m
[0;34mPipelining is enabled.[0m
[0;34m<localhost> ESTABLISH LOCAL CONNECTION FOR USER: xxxxx[0m
[0;34m<localhost> EXEC /bin/sh -c 'sudo -H -S -n  -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-bawiyztivrzsmtncvhvtgpoohrmozoga ; /usr/bin/python3'"'"' && sleep 0'[0m
[0;31mThe full traceback is:[0m
[0;31m  File "/tmp/ansible_kolla_docker_payload_b9_nm8n4/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py", line 1241, in main[0m
[0;31m  File "/tmp/ansible_kolla_docker_payload_b9_nm8n4/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py", line 1116, in ensure_image[0m
[0;31m  File "/tmp/ansible_kolla_docker_payload_b9_nm8n4/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py", line 691, in pull_image[0m
[0;31m  File "/usr/local/lib/python3.8/dist-packages/docker/api/image.py", line 430, in pull[0m
[0;31m    self._raise_for_status(response)[0m
[0;31m  File "/usr/local/lib/python3.8/dist-packages/docker/api/client.py", line 270, in _raise_for_status[0m
[0;31m    raise create_api_error_from_http_exception(e)[0m
[0;31m  File "/usr/local/lib/python3.8/dist-packages/docker/errors.py", line 31, in create_api_error_from_http_exception[0m
[0;31m    raise cls(e, response=response, explanation=explanation)[0m
[0;31mfatal: [localhost]: FAILED! => {[0m
[0;31m    "changed": true,[0m
[0;31m    "invocation": {[0m
[0;31m        "module_args": {[0m
[0;31m            "action": "ensure_image",[0m
[0;31m            "api_version": "auto",[0m
[0;31m            "auth_email": null,[0m
[0;31m            "auth_password": null,[0m
[0;31m            "auth_registry": null,[0m
[0;31m            "auth_username": null,[0m
[0;31m            "cap_add": [],[0m
[0;31m            "cgroupns_mode": null,[0m
[0;31m            "client_timeout": 120,[0m
[0;31m            "command": null,[0m
[0;31m            "detach": true,[0m
[0;31m            "dimensions": {},[0m
[0;31m            "environment": {[0m
[0;31m                "KOLLA_CONFIG_STRATEGY": "COPY_ALWAYS"[0m
[0;31m            },[0m
[0;31m            "graceful_timeout": 10,[0m
[0;31m            "healthcheck": null,[0m
[0;31m            "ignore_missing": false,[0m
[0;31m            "image": "kolla/ubuntu-source-fluentd:wallaby",[0m
[0;31m            "labels": {},[0m
[0;31m            "name": null,[0m
[0;31m            "privileged": false,[0m
[0;31m            "remove_on_exit": true,[0m
[0;31m            "restart_policy": "unless-stopped",[0m
[0;31m            "restart_retries": 10,[0m
[0;31m            "security_opt": [],[0m
[0;31m            "state": "running",[0m
[0;31m            "tls_cacert": null,[0m
[0;31m            "tls_cert": null,[0m
[0;31m            "tls_key": null,[0m
[0;31m            "tls_verify": false,[0m
[0;31m            "tmpfs": null,[0m
[0;31m            "tty": false,[0m
[0;31m            "volumes": null,[0m
[0;31m            "volumes_from": null[0m
[0;31m        }[0m
[0;31m    },[0m
[0;31m    "msg": "'Traceback (most recent call last):\\n  File \"/usr/local/lib/python3.8/dist-packages/docker/api/client.py\", line 268, in _raise_for_status\\n    response.raise_for_status()\\n  File \"/usr/lib/python3/dist-packages/requests/models.py\", line 940, in raise_for_status\\n    raise HTTPError(http_error_msg, response=self)\\nrequests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http+docker://localhost/v1.41/images/create?tag=wallaby&fromImage=kolla%2Fubuntu-source-fluentd\\n\\nDuring handling of the above exception, another exception occurred:\\n\\nTraceback (most recent call last):\\n  File \"/tmp/ansible_kolla_docker_payload_b9_nm8n4/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py\", line 1241, in main\\n  File \"/tmp/ansible_kolla_docker_payload_b9_nm8n4/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py\", line 1116, in ensure_image\\n  File \"/tmp/ansible_kolla_docker_payload_b9_nm8n4/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py\", line 691, in pull_image\\n  File \"/usr/local/lib/python3.8/dist-packages/docker/api/image.py\", line 430, in pull\\n    self._raise_for_status(response)\\n  File \"/usr/local/lib/python3.8/dist-packages/docker/api/client.py\", line 270, in _raise_for_status\\n    raise create_api_error_from_http_exception(e)\\n  File \"/usr/local/lib/python3.8/dist-packages/docker/errors.py\", line 31, in create_api_error_from_http_exception\\n    raise cls(e, response=response, explanation=explanation)\\ndocker.errors.APIError: 500 Server Error for http+docker://localhost/v1.41/images/create?tag=wallaby&fromImage=kolla%2Fubuntu-source-fluentd: Internal Server Error (\"Get \"https://registry-1.docker.io/v2/\": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)\")\\n'"[0m
[0;31m}[0m

5. Docker Hub の Rate Limit 回避

必要なProxy設定は以上となりますが、Docker Hub の Rate Limit によってこれでもまだエラーが出てしまいます。
Kolla Ansible deploying OpenStack wallaby on Ubuntu 20.04 - Deployment 手順のkolla-ansible -i /etc/kolla/all-in-one deployコマンドの実行直前に、Dockerの公式サイトへアクセスし、ユーザーアカウントを作成します。その後、ubuntu上で下記コマンドを実行し、ubuntuマシンがDocker Hubへログインしている状態にします。

sudo docker login --username=[Docker Hubで作成したユーザー名]
Password: [Docker Hubで作成したユーザー名のパスワード]

Docker Hubへログインしていない場合、下記のようなエラーが出ます。

TASK [common : Ensure fluentd image is present for label check] ****************************************************************************************************************************************
[1;30mtask path: /home/xxxxx/wallaby/share/kolla-ansible/ansible/roles/common/tasks/config.yml:26[0m
[0;34mUsing module file /home/xxxxx/wallaby/share/kolla-ansible/ansible/library/kolla_docker.py[0m
[0;34mPipelining is enabled.[0m
[0;34m<localhost> ESTABLISH LOCAL CONNECTION FOR USER: xxxxx[0m
[0;34m<localhost> EXEC /bin/sh -c 'sudo -H -S -n  -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-zdsnyhuhqeakfohywfvxwnzxzjqfcgtm ; http_proxy=http://proxy.sample.com:8080 https_proxy=http://proxy.sample.com:8080 /usr/bin/python3'"'"' && sleep 0'[0m
[0;31mThe full traceback is:[0m
[0;31m  File "/tmp/ansible_kolla_docker_payload_qcyrnm88/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py", line 1241, in main[0m
[0;31m  File "/tmp/ansible_kolla_docker_payload_qcyrnm88/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py", line 1116, in ensure_image[0m
[0;31m  File "/tmp/ansible_kolla_docker_payload_qcyrnm88/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py", line 691, in pull_image[0m
[0;31m  File "/usr/local/lib/python3.8/dist-packages/docker/api/image.py", line 430, in pull[0m
[0;31m    self._raise_for_status(response)[0m
[0;31m  File "/usr/local/lib/python3.8/dist-packages/docker/api/client.py", line 270, in _raise_for_status[0m
[0;31m    raise create_api_error_from_http_exception(e)[0m
[0;31m  File "/usr/local/lib/python3.8/dist-packages/docker/errors.py", line 31, in create_api_error_from_http_exception[0m
[0;31m    raise cls(e, response=response, explanation=explanation)[0m
[0;31mfatal: [localhost]: FAILED! => {[0m
[0;31m    "changed": true,[0m
[0;31m    "invocation": {[0m
[0;31m        "module_args": {[0m
[0;31m            "action": "ensure_image",[0m
[0;31m            "api_version": "auto",[0m
[0;31m            "auth_email": null,[0m
[0;31m            "auth_password": null,[0m
[0;31m            "auth_registry": null,[0m
[0;31m            "auth_username": null,[0m
[0;31m            "cap_add": [],[0m
[0;31m            "cgroupns_mode": null,[0m
[0;31m            "client_timeout": 120,[0m
[0;31m            "command": null,[0m
[0;31m            "detach": true,[0m
[0;31m            "dimensions": {},[0m
[0;31m            "environment": {[0m
[0;31m                "KOLLA_CONFIG_STRATEGY": "COPY_ALWAYS"[0m
[0;31m            },[0m
[0;31m            "graceful_timeout": 10,[0m
[0;31m            "healthcheck": null,[0m
[0;31m            "ignore_missing": false,[0m
[0;31m            "image": "kolla/ubuntu-source-fluentd:wallaby",[0m
[0;31m            "labels": {},[0m
[0;31m            "name": null,[0m
[0;31m            "privileged": false,[0m
[0;31m            "remove_on_exit": true,[0m
[0;31m            "restart_policy": "unless-stopped",[0m
[0;31m            "restart_retries": 10,[0m
[0;31m            "security_opt": [],[0m
[0;31m            "state": "running",[0m
[0;31m            "tls_cacert": null,[0m
[0;31m            "tls_cert": null,[0m
[0;31m            "tls_key": null,[0m
[0;31m            "tls_verify": false,[0m
[0;31m            "tmpfs": null,[0m
[0;31m            "tty": false,[0m
[0;31m            "volumes": null,[0m
[0;31m            "volumes_from": null[0m
[0;31m        }[0m
[0;31m    },[0m
[0;31m    "msg": "'Traceback (most recent call last):\\n  File \"/usr/local/lib/python3.8/dist-packages/docker/api/client.py\", line 268, in _raise_for_status\\n    response.raise_for_status()\\n  File \"/usr/lib/python3/dist-packages/requests/models.py\", line 940, in raise_for_status\\n    raise HTTPError(http_error_msg, response=self)\\nrequests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http+docker://localhost/v1.41/images/create?tag=wallaby&fromImage=kolla%2Fubuntu-source-fluentd\\n\\nDuring handling of the above exception, another exception occurred:\\n\\nTraceback (most recent call last):\\n  File \"/tmp/ansible_kolla_docker_payload_qcyrnm88/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py\", line 1241, in main\\n  File \"/tmp/ansible_kolla_docker_payload_qcyrnm88/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py\", line 1116, in ensure_image\\n  File \"/tmp/ansible_kolla_docker_payload_qcyrnm88/ansible_kolla_docker_payload.zip/ansible/modules/kolla_docker.py\", line 691, in pull_image\\n  File \"/usr/local/lib/python3.8/dist-packages/docker/api/image.py\", line 430, in pull\\n    self._raise_for_status(response)\\n  File \"/usr/local/lib/python3.8/dist-packages/docker/api/client.py\", line 270, in _raise_for_status\\n    raise create_api_error_from_http_exception(e)\\n  File \"/usr/local/lib/python3.8/dist-packages/docker/errors.py\", line 31, in create_api_error_from_http_exception\\n    raise cls(e, response=response, explanation=explanation)\\ndocker.errors.APIError: 500 Server Error for http+docker://localhost/v1.41/images/create?tag=wallaby&fromImage=kolla%2Fubuntu-source-fluentd: Internal Server Error (\"toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit\")\\n'"[0m
[0;31m}[0m

上記を全て行えば、Proxy環境下でもkolla-ansibleが正常に動作してくれると思います。

最後に

その他にも、kolla-ansibleでplaybookを実行中に「sudo しないとこのコマンド打てないよ」というエラーが出ることがありましたが、私の場合はplaybookを再実行することでエラーが出力されることなく、正常に処理が完了されるケースが2回ほどありました。もし同じようなエラーが出る場合は、該当のplaybookの再実行で回避できるかもしれません。(一体なぜそのようなエラーが一時的に出たのかは不明です・・)

(02/23/2022更新) 処理が長くなってしまうとsudoのタイムアウトに引っかかり、上記のようなエラーが出る場合があるようです。あらかじめ /etc/sudoers へ「Defaults timestamp_timeout=<タイムアウトまでの時間(分)>」を追加しておけば回避できると思います。

ansible のべき等性のおかげで、同じplaybookを何度も実行できるのは少し心強く感じました。
この記事が、同じ悩みを持つ方の問題解消に役立てれば幸いです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?