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つの主要な方法をサポートしています。

  1. スタティック。

    プレイブック実行後に、etcdctl member add コマンドを使用して、各メンバーを手動で追加する必要があります。これを手動で行うか、別の Ansible タスクで自動化する必要があります。

  2. DNS 発見。

    ここでの主な前提条件は、お使いの DNS ローカルゾーンに SRV および A レコードが準備されていることです。事前に作成すべき DNS レコードの要件 をよく確認してください。すべてが正しく作成されている場合、次の DNS 発見関連のプロパティを etcd_config に追加する必要があります:

    etcd_config:
      discovery-srv: "company.local"
      discovery-srv-name: "dev" # オプション
    

    プレイブック実行後、etcd クラスターは自動的に作成されます。この方法は本番環境で強く推奨されます。

重要:

  • 最初の実行後は、プレイブック内の etcd_config.initial-cluster-statenew から 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

著作者情報

Igor Nikiforov

プロジェクトについて

Install and configures etcd key-value store

インストール
ansible-galaxy install igor_nikiforov.etcd
ライセンス
mit
ダウンロード
1.7M
所有者