Skip to content

Latest commit

 

History

History
504 lines (400 loc) · 20.1 KB

phases.rst

File metadata and controls

504 lines (400 loc) · 20.1 KB

フェーズ

ここでは、 hive-builder のサイト構築機能をフェーズごとに説明します。

build-infra

ホストとネットワークを作成し、環境を構築します。

(未執筆)

プロバイダ

build-infraフェーズでは、サーバを配備する基盤のプロバイダをステージオブジェクトの provider 属性に指定することで、様々なプロバイダを利用できます。 プロバイダとして有効な値は以下のとおりです。

プロバイダID 説明
vagrant Vagrant for VirtualBox/libvirt on local machine
aws Amazon Web Service
azure Microsoft Azure(未実装)
gcp Gooble Computing Platform
openstack Some OpenStack Provider(未実装)
prepared sshでアクセス可能なサーバ群
kickstart OSが未インストールの物理サーバ

vagrant

プロバイダIDにvagrant を指定した場合、vagrant のプロバイダは libvirt, VirtualBox の順に試して、成功したものを使用します。

setup-hosts

ホストを設定します。setup-hosts は3個のPLAYに分割された27個の role からなります。 setup-hosts コマンドでは -T オプションで適用する role を限定できます。 以下にインストールされるソフトウェアとそれぞれの PLAY で実行される role のタスク内容について説明します。

インストールされるソフトウェア

以下にインストールされるソフトウェアの一覧を示します。

パッケージ名 role リポジトリ 説明
bridge-utils base CentOS yum repository 仮想ブリッジ制御
docker docker docker CE repository (1) docker(ただし、 AWS EC2 の場合は Amazon Linux Repository からインストール)
docker (Python) docker PyPI docker python API
docker-compose docker-compose PyPI docker-compose コマンド
drbd drbd procube-open/drbd-rpm(2) drbd
glibc-common base CentOS yum repository ロケール情報(hive_localeが設定されているときのみ)
iptables iptalbes CentOS yum repository サーバファイアウォール(firewalldは削除します)
libselinux-python base CentOS yum repository SE Linux python API
lsof base CentOS yum repository ファイルディスクリプタ情報採取
mariadb zabbix dockerhub zabbix 用 DBMS
NetworkManager internal-network CentOS yum repository ネットワーク管理サービス
pip pip-venv PyPI Python パッケージマネージャ(pytho3-pip でインストールされたものをバージョンアップ)
python3 pip-venv CentOS yum repository Python処理系
python3-libs pip-venv CentOS yum repository Python処理系ライブラリ
python3-devel pip-venv CentOS yum repository Python処理系開発ツール
python3-pip pip-venv CentOS yum repository Python パッケージマネージャ
python3-setuptools pip-venv CentOS yum repository Python パッケージマネージャ開発ツール
python-dxf pip-venv PyPI Docer registry API
python-virtualenv pip-venv CentOS yum repository Python 仮想環境構築ツール
registry registry dockerhub docker プライベートリポジトリ
strace base CentOS yum repository システムコールトレース
sysstat base CentOS yum repository 性能統計情報採取
tcpdump base CentOS yum repository パケットキャプチャ
telnet base CentOS yum repository telnetコマンド
unzip base CentOS yum repository 圧縮ファイル解凍
vim base CentOS yum repository テキストエディタ
wget base CentOS yum repository ファイルダウンロード
zabbix zabbix-agent zabbix download site (3) zabbix エージェント
zabbix/zabbix-server-mysql zabbix dockerhub zabbix server
zabbix/zabbix-web-mysql zabbix dockerhub zabbix web UI

(1) docker CE repository https://download.docker.com/linux/centos/docker-ce.repo を yum リポジトリとして登録後、 yum でインストール。

(2) procube のオープンソース https://github.com/procube-open/drbd9-rpm からカーネルのバージョンに従ってダウンロード。

  • Amazon Linux の場合、9.0.22/drbd9-rpm-amzn2
  • カーネルのバージョンが 3.10.0-1127 より小さい場合、 9.0.20/drbd9-rpm
  • 上記以外の場合、9.0.22/drbd9-rpm

(3) zabbix repository https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm をインストール。

hive サーバ設定 PLAY

最初に実行される "setup hive servers" という名称の PLAY では各サーバに共通の role を適用します。 以下に各 role について説明します。

base role

base role で実施するタスクについて以下に説明します。

yum の設定

hive_yum_url を指定されている場合は、 CentOS および AlmaLinux の Base, AppStream, Extras リポジトリの yum のダウンロード元として指定します。 https://mirrors.cat.net/centos のようにミラーサイトの '/centos' までを切り取ったパスで指定してください。 almalinux の場合も http://ftp.iij.ad.jp/pub/linux/almalinux のように '/almalinux' までを切り取ったパスで指定してください。 また、この場合、yum の fastestmirror の機能を無効にします。 CentOS のミラーサイトで近いものがわかっている場合は、指定してインストールにかかる時間を短縮できます。

AWS, Azure, GCP などの IaaS の場合は、デフォルトで近くのサイトが設定されている場合が多いので、 指定しないほうが良いでしょう。

パッケージのインストール

yumでCentOSの標準パッケージをインストールします。 インストールされるソフトウェアの節で示したパッケージのうち、 role 欄が base となっているものをインストールします。 sysstat については、インストール後、有効にします。

selinux の Permissive 化

selinux のモードを Permissive に設定にします。

ホスト名の設定

ホスト名を設定します。プロバイダが AWS の場合は、再起動時にホスト名が巻き戻らないように /etc/cloud/cloud.cfg に preserve_hostname: true の設定を追加します。

デフォルトタイムゾーンの設定

hive_timezone が設定されている場合、その値を OSのデフォルトのタイムゾーンとして設定します。

デフォルトロケールの設定

hive_locale が設定されている場合、その値を OSのデフォルトのロケールとして設定します。この場合、ロケール設定のために glibc-common を追加でインストールします。

sshd の設定

sshdを以下の仕様で設定します。

  • パスワードによるログインはできません
  • チャレンジレスポンスによるログインはできません
  • 送信元IPに対するDNS への逆引き問い合わせは行いません
NetworkManager へのパッチ

仮想マシンを起動する過程で、インタフェースのデバイスの生成前にサービスが起動してしまい起動に失敗する場合があり、これを回避するパッチをあてます。

Bringing up interface eth0: Error: Connection activation failed: No suitable device found for this connection.

具体的には、NetworkManager-wait-online.service で実行される nm-online コマンドの -s オプションを削除します。

hostsfile role

サーバ間で通信する際に互いを hive0.pdns のような内部名で指定できるように /etc/hosts ファイルに登録します。

ntp-client role

hive_ntp_servers が指定されている場合、その値の NTP サーバから時刻を取得するように chronyd を設定します。

iptables role

iptables をインストールし、 firewalld を削除します。

pip-venv role

python, pip, virtualenv をインストールします。 インストールされるソフトウェアの節で示したパッケージのうち、 role 欄が pip-venv となっているものをインストールします。

addon role

サイト固有のインストールを実行します。サイトの roles に addon role が定義されていればそれを適用し、そうでなければ何もしません。

internal-network role

hive_internal_net_if が定義されている場合、その値でネットワークインタフェースを設定します。 このネットワークには hive_private_ip の値のIPアドレスが付与され、サーバ間のクラスタ通信に利用されます。 VPSサービス上の仮想マシンなどで、グローバルIPを持つインタフェースとは別に内部通信用のネットワークを追加できるが、OSには設定されていない状態で提供される場合に利用します。

users role

hive_users が指定されている場合、その値に従ってユーザを追加します。その場合、 hive_user_groups も指定しなければなりません。 また、ssh で root によるログインを拒否するよう設定します。

グループの定義

hive_user_groups にはグループ名をキーにしてグループオブジェクトを指定してください。 グループに属するユーザは sudo をパスワードなしで実行できるように設定します。 グループオブジェクトの属性は以下の通り。

属性名 説明
gid グループの gid (1から2147483647までの整数)
ユーザの定義

hive_users にはユーザ名をキーにしてユーザオブジェクトを指定してください。 ユーザごとの SSH 設定で、公開鍵認証でログインできるように設定し、サーバの鍵を既知のホストとして登録します。 ユーザオブジェクトの属性は以下の通り。

属性名 説明
uid ユーザの uid (1から2147483647までの整数)
group ユーザの基本グループの gid
id_rsa_pub ユーザのSSHログインのための公開鍵

strict-source-ip role

hive_ssh_source_ips が定義されている場合、sshd への接続の送信元IPアドレスを制限します。 hive_ssh_source_ips にはアクセスを許容するIPアドレスをリストで指定してください。 また、hive_safe_sshd_port が指定されている場合には、 sshd の受付ポート番号をその値に変更します。

tls-certificate role

docker API および registry API に使用するプライベート証明書を生成します。

docker role

docker をインストールします。

  • リモートから docker APIを呼び出せるように設定します。
  • docker デーモン間の通信を許可します。
  • GCPの場合は、docker が仮想ネットワークを利用できるように IP forwarding を可能なように設定します。
  • hive定義に internal_cidr 属性が定義されている場合は、その値の範囲からネットワークアドレスを割り当て docker ネットワークを設定します。

drbd role

drbd をインストールします。

  • drbd 間の通信を許容します。
  • セカンダリドライブに drbd resource pool を作成します。

docker-client role

docker python API をインストールし、 API クライアントの TLS 認証を設定し、 hive のユーティリティコマンドをインストールします。

follow-swarm-service role

swarm 拡張機能をインストールします。

docker-client-proxy role

プロキシに対応するように docker を設定します。HTTP_PROXY 環境変数が設定されている場合のみに適用されます。

zabbix-agent role

zabbix-agent をインストールします。

リポジトリサーバ設定 PLAY

二番目に実行される "setup repository and zabbix" という名称の PLAY ではリポジトリサーバに共通の role を適用します。 以下に各 role について説明します。

docker-compose role

docker-compose をインストールします。

zabbix role

zabbix コンテナをインストールします。

registry role

registry コンテナをインストールします。

backup-tools role

バックアップツールをインストールします。 サービス定義にしたがって、バックアップ/リストア用のシェルスクリプトを生成し、夜間バッチでバックアップを実行するように設定します。

rsyslogd role

マイクロサービス型のコンテナのログを受信して記録するように rsyslogd を設定します。

クラスタ構築 PLAY

三番目に実行される "build cluster" という名称の PLAY ではコンテナ収容サーバ間のクラスタ連携を設定する role を適用します。 以下に各 role について説明します。

swarm role

docker swarm クラスタを設定します。

  • hive定義に internal_cidr 属性が定義されている場合は、その値の範囲からネットワークアドレスを割り当て docker_gwbridge ネットワークを設定します。
  • hive定義に internal_cidr 属性が定義されている場合は、その値の範囲からネットワークアドレスを割り当て ingress ネットワークを設定します。
  • docker swarm ノードとして初期化し、クラスタとして結合します。
  • サーバが属する ansible グループ名をノードのラベルとして設定します。

build-images

コンテナイメージをビルドします。サービス定義で image 属性の下にfrom属性を指定した場合にビルドの対象となります。

再実行

build-images フェーズを複数回行う場合、前回のビルドに利用したコンテナを再利用することでビルドにかかる時間を短縮しています。 このため、image 属性の配下の属性を変更して build-images をやり直しても反映されません。 また、roles に指定したタスクについて内容が減少する方向の変更が行われた場合、反映されません。 たとえば、ファイルのインストール先が変更された場合や、設定ファイルの行追加をやめた場合などがこれに該当します。 このような場合は、以下の手順でビルド用のコンテナを削除してから build-images をやり直してください。

hive ssh
docker rm build_image_サービス名
exit

デバッグ

build-images でエラーが発生し、-v オプションで詳細ログをみても原因がわからない場合、以下の手順でビルド用コンテナにログインして build-images で実行する内容をコマンドで実行してみることでデバッグすることができます。

1. リポジトリサーバへのログイン

以下のコマンドでリポジトリサーバにログインしてください。

hive ssh

2. ビルド用のコンテナの起動

以下のコマンドでビルド用コンテナが起動しているかを確かめてください。

CN=build_image_サービス名
docker ps -f name=$CN -a

この結果 STATUS 列に Exited が表示される場合は次のコマンドでコンテナを起動してください。

docker start $CN

3. ビルド用のコンテナへの起動

以下のコマンドでビルド用コンテナにログインしてデバッグしてください。

docker exec -it $CN /bin/bash

ただし、alpineベースのコンテナの場合、/bin/bash が入っていない場合があります。 その場合、"stat /bin/bash: no such file or directory" というエラーが表示されますので、 /bin/bash のかわりに /bin/ash を利用してください。

作業が終わりましたら、exit を2回実行して mother 環境に戻ってください。

外部リポジトリへのログイン

イメージをダウンロードする際に外部リポジトリを利用することができます。 外部リポジトリにアクセスする際にログインが必要な場合、 hive_ext_repositories にログインに必要な情報を設定してください。 hive_ext_repositories は dockerログインオブジェクトの配列です。 dockerログインオブジェクトは以下の属性を持ちます。

属性名 説明
repository リポジトリ。FQDN:ポート番号の形式で指定してください。省略すると dockerhub にログインします。
login_user ユーザID
password パスワード
email メールアドレス(省略可能)

build-networks

内部ネットワークを構築します。

(未執筆)

build-volumes

ボリュームを構築します。

(未執筆)

deploy-services

サービスを配備します。

(未執筆)

外部リポジトリへのログイン

イメージをダウンロードする際に外部リポジトリを利用することができます。 外部リポジトリにアクセスする際にログインが必要な場合、build-images の場合と同様に hive_ext_repositories にログインに必要な情報を設定してください。

initialize-services

サービスを初期化します。

(未執筆)