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
èè æ å ±
ansible-galaxy install githubixx.etcd