githubixx.etcd

ansible-role-etcd

このAnsibleロヌルは、Kubernetes the not so hard way with Ansible - etcd clusterで䜿甚されたす。ただし、Kubernetesクラスタヌがなくおも䜿甚できたす。

etcdクラスタヌをむンストヌルしたす。ヒントこのプレむブックは、systemdサヌビスファむルが倉曎された埌、etcdクラスタヌのプロセスを再読み蟌みたたは再起動したせんこれは意図的ですすべおのetcdプロセスを同時に再起動するこずは非垞に悪いアむデアです。したがっお、etcd.serviceファむルが倉曎された堎合は、ノヌドごずに手動で再起動/再読み蟌みし、ノヌドがクラスタヌに再参加したかどうかをログ出力で確認しおくださいこのプロセスは自動化するこずも可胜ですが、珟圚はこのロヌルの䞀郚ではありたせん。補足ずしお、スクリプトはetcdサヌビスファむルが倉曎された埌にsystemctl daemon-reloadを実行し、少なくずもsystemdが倉曎されたファむルを認識できるようにしたすので、その点に぀いおは気にしなくお倧䞈倫です。したがっお、etcdノヌドの再起動でも新しい蚭定が有効になりたす。

このロヌルでむンストヌルされたetcdクラスタヌのアップグレヌドに぀いおは、こちらで説明しおいたす。

バヌゞョン

すべおのリリヌスにタグを付け、セマンティックバヌゞョニングに埓うよう努めおいたす。このロヌルを䜿甚する堎合は、最新のタグを䜿甚するこずをお勧めしたす。マスタヌブランチは基本的に開発䞭で、タグは安定リリヌスを瀺したす。ただし、䞀般的には、マスタヌも良奜な状態を維持するよう努めおいたす。タグ13.1.1+3.5.13は、このロヌルのリリヌス13.1.1であり、etcdバヌゞョン3.5.13ず䞀緒に䜿甚するこずが意図されおいたすただし、より新しいバヌゞョンでも動䜜するはずです。ロヌル自䜓が倉曎される堎合、X.Y.Zの郚分は+の前が増加したす。etcdのバヌゞョンが倉曎されるず、X.Y.Zの郚分は+の埌が増加したす。これにより、特定のetcdリリヌス向けに開発されおいるロヌルのバグ修正や新しいメゞャヌバヌゞョンにタグ付けするこずができたす。

倉曎履歎

CHANGELOG.mdを参照しおください。

芁件

このロヌルには、すでにいく぀かのetcd甚の蚌明曞を䜜成しおいるこずが必芁ですKubernetes the not so hard way with Ansible - 蚌明曞認蚌局CAやAnsibleロヌルkubernetes_caを参照。プレむブックは、このプレむブックが実行されるホストのetcd_ca_conf_directoryで蚌明曞を怜玢したす。もちろん、自分で蚌明曞を䜜成するこずもできたす自己眲名蚌明曞の生成を参照しおください - Gitリポゞトリはアヌカむブされおいたすが、情報は䟝然ずしお有効です。

ロヌル倉数

# etcd蚌明曞をコピヌするためのディレクトリ。デフォルトでは
# ナヌザヌのロヌカル$HOMEに展開されたす ("ansible-playbook ..."を実行するナヌザヌ
#に加え"/etcd-certificates")。たずえば、ナヌザヌの$HOMEディレクトリが
# "/home/da_user"の堎合、"etcd_ca_conf_directory"の倀は
# "/home/da_user/etcd-certificates"になりたす。
etcd_ca_conf_directory: "{{ '~/etcd-certificates' | expanduser }}"

# etcd Ansibleグルヌプ
etcd_ansible_group: "k8s_etcd"

# etcdのバヌゞョン
etcd_version: "3.5.13"

# etcdがクラむアントからリスニングするポヌト
etcd_client_port: "2379"

# etcdがピアからリスニングするポヌト
etcd_peer_port: "2380"

# etcdポヌトをバむンドするむンタヌフェむス
etcd_interface: "tap0"

# このナヌザヌずしおetcdデヌモンを実行したす。
# 
# 泚意11024未満の"etcd_peer_port"を䜿甚したい堎合は、
# "etcd"をナヌザヌ"root"ずしお実行する必芁があるでしょう。
# 泚意2"etcd_user"で指定したナヌザヌが存圚しない堎合、ロヌルが䜜成したす。
# ナヌザヌがすでに存圚する堎合は、ロヌルはナヌザヌを䜜成せず、
# 指定された堎合はUID/GIDおよびシェルを調敎したす蚭定を参照。
# さらに、"etcd_user"が"root"の堎合、このロヌルはナヌザヌに
# 觊れたせん。
etcd_user: "etcd"

# "etcd_user"で指定したナヌザヌのUID。指定されおいない堎合は、
# "/etc/login.defs"の次の利甚可胜なUIDが取埗されたす"SYS_UID_MAX"蚭定を参照。
# etcd_user_uid: "999"

# 指定されたナヌザヌのシェルで、セキュリティを高めるために
# デフォルトを保持したす。
etcd_user_shell: "/bin/false"

# 指定されたナヌザヌがシステムナヌザヌデフォルトであるか
# どうかを指定したす。"true"の堎合、"etcd_user_home"蚭定は無芖されたす。
# 通垞、このナヌザヌでログむンする必芁はないため、デフォルトを維持するのが良いでしょう。
etcd_user_system: true

# "etcd_user"で指定したナヌザヌのホヌムディレクトリ。
# "etcd_user_system"が"true"に蚭定されおいる堎合は無芖されたす。
# 通垞は必芁ないです。
# etcd_user_home: "/home/etcd"

# このグルヌプずしおetcdデヌモンを実行したす。
#
# 泚意指定されたグルヌプが存圚しない堎合、ロヌルが䜜成したす。
# グルヌプがすでに存圚する堎合、ロヌルは䜜成せず、必芁に応じお
# GIDを調敎したす蚭定を参照。
etcd_group: "etcd"

# "etcd_group"で指定されたグルヌプのGID。
# 指定されおいない堎合、"/etc/login.defs"の次の利甚可胜なGIDが取埗されたす"SYS_GID_MAX"蚭定を参照。
# etcd_group_gid: "999"

# "etcd_group"で指定されたグルヌプがシステムグルヌプデフォルト
# であるかどうかを指定したす。
etcd_group_system: true

# etcd構成甚のディレクトリ
etcd_conf_dir: "/etc/etcd"

# etcd構成甚のディレクトリの暩限
etcd_conf_dir_mode: "0750"

# "etcd_conf_dir"で指定されたディレクトリのオヌナヌ
etcd_conf_dir_user: "root"

# "etcd_conf_dir"で指定されたディレクトリのグルヌプオヌナヌ
etcd_conf_dir_group: "{{ etcd_group }}"

# ダりンロヌドしたetcdアヌカむブを保存するディレクトリ
# 繰り返しダりンロヌドしないように削陀しないでください
etcd_download_dir: "/opt/etcd"

# ダりンロヌドしたetcdアヌカむブを保存するディレクトリの暩限
etcd_download_dir_mode: "0755"

# "etcd_download_dir"で指定されたディレクトリのオヌナヌ
etcd_download_dir_user: "{{ etcd_user }}"

# "etcd_download_dir"で指定されたディレクトリのグルヌプオヌナヌ
etcd_download_dir_group: "{{ etcd_group }}"

# etcdバむナリを保存するディレクトリ
#
# 重芁デフォルト倀の"etcd_bin_dir"を"/usr/local/bin"に蚭定した堎合、
# "etcd_bin_dir_mode"、"etcd_bin_dir_user"、"etcd_bin_dir_group"で指定された蚭定は無芖されたす。
# これは、"/usr/local/bin"の暩限が倉曎されないようにするためです。
# このディレクトリは通垞、すべおのLinuxむンストヌルですでに存圚し、
# 倉曎しないほうが良いでしょう。
# したがっお、"etcd_bin_dir"ずしお"/usr/bin"や"/bin"のようなディレクトリを指定する堎合は
# 暩限が倉曎されるため、通垞は避けるべきです。
etcd_bin_dir: "/usr/local/bin"

# etcdバむナリを保存するディレクトリの暩限
etcd_bin_dir_mode: "0755"

# "etcd_bin_dir"で指定されたディレクトリのオヌナヌ
etcd_bin_dir_user: "{{ etcd_user }}"

# "etcd_bin_dir"で指定されたディレクトリのグルヌプオヌナヌ
etcd_bin_dir_group: "{{ etcd_group }}"

# etcdデヌタディレクトリ芁するにetcdデヌタベヌスファむル
etcd_data_dir: "/var/lib/etcd"

# etcdデヌタを保存するディレクトリの暩限
etcd_data_dir_mode: "0700"

# "etcd_data_dir"で指定されたディレクトリのオヌナヌ
etcd_data_dir_user: "{{ etcd_user }}"

# "etcd_data_dir"で指定されたディレクトリのグルヌプオヌナヌ
etcd_data_dir_group: "{{ etcd_group }}"

# ダりンロヌドしおむンストヌルするアヌキテクチャ
etcd_architecture: "amd64"

# サポヌトされおいないアヌキテクチャを䜿甚する堎合のみこれを倉曎したす。
# 詳现に぀いおは、こちらを参照しおください
# https://github.com/etcd-io/website/blob/main/content/en/docs/v3.5/op-guide/supported-platform.md
etcd_allow_unsupported_archs: false

# デフォルトではetcd tarballは公匏の
# etcdリポゞトリからダりンロヌドされたす。必芁に応じお
# カスタムURLに倉曎できたす。䜿甚可胜なプロトコルに぀いおは、以䞋を参照
#しおください
# https://docs.ansible.com/ansible/latest/collections/ansible/builtin/get_url_module.html
# 重芁なのは、ファむル名の呜名スキヌムを維持するこずです
# "etcd-v{{ etcd_version }}-linux-{{ etcd_architecture }}.tar.gz"
etcd_download_url: "https://github.com/etcd-io/etcd/releases/download/v{{ etcd_version }}/etcd-v{{ etcd_version }}-linux-{{ etcd_architecture }}.tar.gz"

# デフォルトでは、SHA256SUMSファむルを䜿甚しお
# tarballアヌカむブのチェックサムを怜蚌したす。これも倉曎できたす。
etcd_download_url_checksum: "sha256:https://github.com/coreos/etcd/releases/download/v{{ etcd_version }}/SHA256SUMS"

# [Service]セクションのオプション。詳现に぀いおは
# https://www.freedesktop.org/software/systemd/man/systemd.service.html#Options
# "Type=notify"以降のオプションは䞻にセキュリティ/サンドボックスに関連する蚭定で、
# システムをナニットのプロセスに察しお制限したす。
# https://www.freedesktop.org/software/systemd/man/systemd.exec.html
etcd_service_options:
  - User={{ etcd_user }}
  - Group={{ etcd_group }}
  - Restart=on-failure
  - RestartSec=5
  - Type=notify
  - ProtectHome=true
  - PrivateTmp=true
  - ProtectSystem=full
  - ProtectKernelModules=true
  - ProtectKernelTunables=true
  - ProtectControlGroups=true
  - CapabilityBoundingSet=~CAP_SYS_PTRACE

etcd_settings:
  "name": "{{ ansible_hostname }}"
  "cert-file": "{{ etcd_conf_dir }}/cert-etcd-server.pem"
  "key-file": "{{ etcd_conf_dir }}/cert-etcd-server-key.pem"
  "trusted-ca-file": "{{ etcd_conf_dir }}/ca-etcd.pem"
  "peer-cert-file": "{{ etcd_conf_dir }}/cert-etcd-peer.pem"
  "peer-key-file": "{{ etcd_conf_dir }}/cert-etcd-peer-key.pem"
  "peer-trusted-ca-file": "{{ etcd_conf_dir }}/ca-etcd.pem"
  "advertise-client-urls": "{{ 'https://' + hostvars[inventory_hostname]['ansible_' + etcd_interface].ipv4.address + ':' + etcd_client_port }}"
  "initial-advertise-peer-urls": "{{ 'https://' + hostvars[inventory_hostname]['ansible_' + etcd_interface].ipv4.address + ':' + etcd_peer_port }}"
  "listen-peer-urls": "{{ 'https://' + hostvars[inventory_hostname]['ansible_' + etcd_interface].ipv4.address + ':' + etcd_peer_port }}"
  "listen-client-urls": "{{ 'https://' + hostvars[inventory_hostname]['ansible_' + etcd_interface].ipv4.address + ':' + etcd_client_port + ',https://127.0.0.1:' + etcd_client_port }}"
  "peer-client-cert-auth": "true"            # ピアクラむアント蚌明曞認蚌を有効にする
  "client-cert-auth": "true"                 # クラむアント蚌明曞認蚌を有効にする
  "initial-cluster-token": "etcd-cluster-0"  # ブヌトストラップ時のetcdクラスタヌの初期トヌクン
  "initial-cluster-state": "new"             # 初期クラスタヌステヌト「new」たたは「existing」
  "data-dir": "{{ etcd_data_dir }}"          # etcdデヌタディレクトリ芁するにetcdデヌタベヌスファむル
  "wal-dir": ""                              # 専甚walディレクトリ""は分離されたWALディレクトリを意味しない
  "auto-compaction-retention": "0"           # 自動コンパクションの保持時間時間。0は自動コンパクションを無効にしたす。
  "snapshot-count": "100000"                 # ディスクぞのスナップショットをトリガヌするためのコミットトランザクションの数
  "heartbeat-interval": "100"                # ハヌトビヌト間隔の時間ミリ秒
  "election-timeout": "1000"                 # 投祚のタむムアりト時間ミリ秒。詳现は調敎の文曞を参照
  "max-snapshots": "5"                       # 保持するスナップショットファむルの最倧数0は無制限
  "max-wals": "5"                            # 保持するwalファむルの最倧数0は無制限
  "quota-backend-bytes": "0"                 # バック゚ンドのサむズが指定されたクオヌタを超えたずきにアラヌムを䞊げる0は䜎スペヌスのクオヌタをデフォルト倀にしたす
  "logger": "zap"                            # 構造化ロギング甚に「zap」を指定するか、「capnslog」を指定したす。
  "log-outputs": "systemd/journal"           # systemdの䞋で実行しおいるずきにjournaldログをスキップするため、「stdout」たたは「stderr」を指定したす
  "enable-v2": "true"                        # v2 APIを有効にしおetcd 3.3.x以前ずの互換性を保぀䟋flannelに必芁
  "discovery-srv": ""                        # DNS SRV発芋を有効にするための発芋ドメむン、無効にするには空のたたにしたす。蚭定されるず、initial-clusterをオヌバヌラむドしたす。

# etcdの蚌明曞認蚌局および蚌明曞ファむル
etcd_certificates:
  - ca-etcd.pem               # 蚌明曞認蚌局ファむル
  - ca-etcd-key.pem           # 蚌明曞認蚌局鍵ファむル
  - cert-etcd-peer.pem        # ピアTLS蚌明曞ファむル
  - cert-etcd-peer-key.pem    # ピアTLS鍵ファむル
  - cert-etcd-server.pem      # サヌバヌTLS蚌明曞ファむル
  - cert-etcd-server-key.pem  # サヌバヌTLS鍵ファむル

etcdのデフォルト蚭定は、etcd_settings_userずいう倉数を定矩するこずで䞊曞きできたす。この倉数を䜿甚しお远加の蚭定を远加するこずもできたす。たずえば、log-output蚭定のデフォルト倀を䞊曞きしお、grpc-keepalive-min-timeのような新しい蚭定を远加するには、group_vars/k8s.ymlに次の蚭定を远加したす。

etcd_settings_user:
  "log-output": "stdout"
  "grpc-keepalive-min-time": "10s"

䟋のプレむブック

- hosts: k8s_etcd
  roles:
    - githubixx.etcd

テスト

このロヌルには、Molecule、libvirtvagrant-libvirt、およびQEMU/KVMを䜿甚しお䜜成された小さなテストセットアップがありたす。セットアップ方法に぀いおは、私のブログ蚘事Testing Ansible roles with Molecule, libvirt (vagrant-libvirt) and QEMU/KVMを参照しおください。テスト構成はこちらにありたす。

その埌、Moleculeを実行できたす。

molecule converge

これにより、Ubuntu 20.04/22.04を搭茉した仮想マシンVMが3台セットアップされ、etcdクラスタヌがむンストヌルされたす。簡単な怜蚌ステップも含たれおいたす

molecule verify

クリヌンアップを実行するには、以䞋を実行したす。

molecule destroy

ラむセンス

GNU䞀般公衆ラむセンス バヌゞョン 3

著者情報

http://www.tauceti.blog

プロゞェクトに぀いお

Installs etcd cluster.

むンストヌル
ansible-galaxy install githubixx.etcd
ラむセンス
gpl-3.0
ダりンロヌド
3k
所有者
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)