igor_nikiforov.etcd
Ansible ロール: etcd
このロールは、ターゲットホスト上で etcd と etcdctl を設定します。すべての etcd 設定オプションをサポートし、できるだけ柔軟であることを目指しています。
要件
このロールは次の Ansible バージョンで開発・テストされています:
名前 | バージョン |
---|---|
ansible | >= 2.9.13 |
ansible-base | >= 2.10.1 |
他の Ansible バージョンもテストされていませんが、おそらく動作するでしょう。
インストール
最新の安定リリースのロールをインストールするには、ansible-galaxy install igor_nikiforov.etcd
を使用してください。
requirements からインストールすることもできます: ansible-galaxy install -r requirements.yml
:
# requirements.yml
---
roles:
- name: igor_nikiforov.etcd
version: v1.0.0
プラットフォーム
名前 | バージョン |
---|---|
Debian | buster, bullseye |
Ubuntu | focal, jammy |
CentOS | 7.4+, stream8 |
RedHat | 7.4+, 8 |
他の OS ディストリビューションはテストされていませんが、おそらく動作するでしょう。動作しない場合は、PR を提起してください!
変数
名前 | 説明 | デフォルト |
---|---|---|
etcd_version | インストールする etcd のバージョン | 3.4.13 |
etcd_user | etcd ユーザー | etcd |
etcd_group | etcd グループ | etcd |
etcd_config | etcd 設定パラメータのキー・バリューリスト。 | {} |
etcd_service_enabled | サービスをブート時に開始するかどうか。 | True |
etcd_service_state | etcd のサービス状態。 | started |
etcdctl_output_format | etcdctl で使用する出力形式。 | table |
使用法
ロールは、etcd_config
変数を通じて渡すことができるすべての etcd 設定パラメータをサポートしています。YAML 設定形式の例は etcd 公式リポジトリ で見つけることができ、すべての利用可能なフラグの説明は etcd 公式ドキュメント で確認できます。
etcd は、クラスターを構築するための2つの主要な方法をサポートしています。
-
プレイブック実行後に、
etcdctl member add
コマンドを使用して、各メンバーを手動で追加する必要があります。これを手動で行うか、別の Ansible タスクで自動化する必要があります。 -
ここでの主な前提条件は、お使いの DNS ローカルゾーンに SRV および A レコードが準備されていることです。事前に作成すべき DNS レコードの要件 をよく確認してください。すべてが正しく作成されている場合、次の DNS 発見関連のプロパティを
etcd_config
に追加する必要があります:etcd_config: discovery-srv: "company.local" discovery-srv-name: "dev" # オプション
プレイブック実行後、etcd クラスターは自動的に作成されます。この方法は本番環境で強く推奨されます。
重要:
- 最初の実行後は、プレイブック内の
etcd_config.initial-cluster-state
をnew
からexisting
に変更することを忘れないでください。 - クラスターを構築した後、設定変更時に安全に更新するために、プレイブックで
serial: 1
を使用してください。詳細は こちら を参照してください。
例
スタティック
# playbook.yml
---
- hosts: all
become: True
gather_facts: False
pre_tasks:
- wait_for_connection: {timeout: 300}
- setup:
tasks:
- name: etcd をインストール
import_role:
name: etcd
vars:
etcd_version: "3.4.13"
etcd_config:
name: "{{ ansible_facts.hostname }}"
data-dir: "/var/lib/etcd/data"
wal-dir: "/var/lib/etcd/wal"
initial-advertise-peer-urls: "https://{{ ansible_facts.fqdn }}:2380"
initial-cluster-token: "token"
initial-cluster-state: "new"
advertise-client-urls: "https://{{ ansible_facts.fqdn }}:2379"
listen-client-urls: "https://{{ ansible_default_ipv4.address }}:2379,https://127.0.0.1:2379"
listen-peer-urls: "https://{{ ansible_default_ipv4.address }}:2380"
client-transport-security:
trusted-ca-file: "{{ etcd_conf_dir }}/certs/ca.crt"
cert-file: "{{ etcd_conf_dir }}/certs/server.crt"
key-file: "{{ etcd_conf_dir }}/certs/server.key"
peer-transport-security:
trusted-ca-file: "{{ etcd_conf_dir }}/certs/ca.crt"
cert-file: "{{ etcd_conf_dir }}/certs/server.crt"
key-file: "{{ etcd_conf_dir }}/certs/server.key"
log-level: "debug"
logger: "zap"
DNS 発見
# playbook.yml
---
- hosts: all
become: True
gather_facts: False
pre_tasks:
- wait_for_connection: {timeout: 300}
- setup:
tasks:
- name: etcd をインストール
import_role:
name: etcd
vars:
etcd_version: "3.4.13"
etcd_config:
name: "{{ ansible_facts.hostname }}"
data-dir: "/var/lib/etcd/data"
wal-dir: "/var/lib/etcd/wal"
discovery-srv: "company.local"
initial-advertise-peer-urls: "https://{{ ansible_facts.fqdn }}:2380"
initial-cluster-token: "token"
initial-cluster-state: "new"
advertise-client-urls: "https://{{ ansible_facts.fqdn }}:2379"
listen-client-urls: "https://{{ ansible_default_ipv4.address }}:2379,https://127.0.0.1:2379"
listen-peer-urls: "https://{{ ansible_default_ipv4.address }}:2380"
client-transport-security:
trusted-ca-file: "{{ etcd_conf_dir }}/certs/ca.crt"
cert-file: "{{ etcd_conf_dir }}/certs/server.crt"
key-file: "{{ etcd_conf_dir }}/certs/server.key"
peer-transport-security:
trusted-ca-file: "{{ etcd_conf_dir }}/certs/ca.crt"
cert-file: "{{ etcd_conf_dir }}/certs/server.crt"
key-file: "{{ etcd_conf_dir }}/certs/server.key"
log-level: "debug"
logger: "zap"
ライセンス
MIT