217 lines
8.8 KiB
Plaintext
217 lines
8.8 KiB
Plaintext
![]() |
# This is the configuration file for the etcd server.
|
||
|
|
||
|
# Human-readable name for this member.
|
||
|
{% if taskserv.etcd_name == "$hostname" %}
|
||
|
name: '{{server.hostname}}'
|
||
|
{%- else %}
|
||
|
name: '{{taskserv.etcd_name}}'
|
||
|
{%- endif %}
|
||
|
|
||
|
# Path to the data directory.
|
||
|
data-dir: {{taskserv.data_dir}}
|
||
|
#/var/lib/etcd
|
||
|
|
||
|
# Path to the dedicated wal directory.
|
||
|
wal-dir:
|
||
|
|
||
|
# Number of committed transactions to trigger a snapshot to disk.
|
||
|
snapshot-count: 10000
|
||
|
|
||
|
# Time (in milliseconds) of a heartbeat interval.
|
||
|
heartbeat-interval: 100
|
||
|
|
||
|
# Time (in milliseconds) for an election to timeout.
|
||
|
election-timeout: 1000
|
||
|
|
||
|
# Raise alarms when backend size exceeds the given quota. 0 means use the
|
||
|
# default quota.
|
||
|
quota-backend-bytes: 0
|
||
|
|
||
|
{% set str_peer_port = "" ~ taskserv.peer_port %}
|
||
|
{% set str_cli_port = "" ~ taskserv.cli_port %}
|
||
|
# List of comma separated URLs to listen on for peer traffic.
|
||
|
listen-peer-urls: "{%- if taskserv.listen_peers is containing("$network_private_ip") -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.listen_peers | replace(from="$servers:$network_private_ip",to=server.network_private_ip) | replace(from="$peer_port", to=str_peer_port)}}
|
||
|
{%- elif taskserv.listen_peers is containing("$network_public_ip") -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.listen_peers | replace(from="$servers:$network_public_ip",to=server.ip_addresses.pub) | replace(from="$peer_port", to=str_peer_port)}}
|
||
|
{%- else -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.listen_peers | replace(from="$servers",to=server.hostname) | replace(from="$peer_port", to=str_peer_port)}}
|
||
|
{%- endif %}"
|
||
|
|
||
|
# List of comma separated URLs to listen on for client traffic.
|
||
|
|
||
|
listen-client-urls: "{%- if taskserv.listen_clients is containing("$network_private_ip") -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.listen_clients | replace(from="$servers:$network_private_ip",to=server.network_private_ip) | replace(from="$cli_port", to=str_cli_port)}}
|
||
|
{%- elif taskserv.listen_clients is containing("$network_public_ip") -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.listen_clients | replace(from="$servers:$network_public_ip",to=server.ip_addresses.pub) | replace(from="$cli_port", to=str_cli_port)}}
|
||
|
{%- else -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.listen_clients | replace(from="$servers",to=server.hostname) | replace(from="$cli_port", to=str_cli_port)}}
|
||
|
{%- endif %}"
|
||
|
|
||
|
# Maximum number of snapshot files to retain (0 is unlimited).
|
||
|
max-snapshots: 5
|
||
|
|
||
|
# Maximum number of wal files to retain (0 is unlimited).
|
||
|
max-wals: 5
|
||
|
|
||
|
# Comma-separated white list of origins for CORS (cross-origin resource sharing).
|
||
|
cors:
|
||
|
|
||
|
# List of this member's peer URLs to advertise to the rest of the cluster.
|
||
|
# The URLs needed to be a comma-separated list.
|
||
|
|
||
|
initial-advertise-peer-urls: "{%- if taskserv.adv_listen_peers is containing("$network_private_ip") -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.adv_listen_peers | replace(from="$servers:$network_private_ip",to=server.network_private_ip) | replace(from="$peer_port", to=str_peer_port)}}
|
||
|
{%- elif taskserv.adv_listen_peers is containing("$network_public_ip") -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.adv_listen_peers | replace(from="$servers:$network_public_ip",to=server.ip_addresses.pub) | replace(from="$peer_port", to=str_peer_port)}}
|
||
|
{%- else -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.adv_listen_peers | replace(from="$servers",to=server.hostname) | replace(from="$peer_port", to=str_peer_port)}}
|
||
|
{%- endif %}"
|
||
|
|
||
|
# List of this member's client URLs to advertise to the public.
|
||
|
# The URLs needed to be a comma-separated list.
|
||
|
advertise-client-urls: "{%- if taskserv.adv_listen_clients is containing("$network_private_ip") -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.adv_listen_clients | replace(from="$servers:$network_private_ip",to=server.network_private_ip) | replace(from="$cli_port", to=str_cli_port)}}
|
||
|
{%- elif taskserv.adv_listen_clients is containing("$network_public_ip") -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.adv_listen_clients | replace(from="$servers:$network_public_ip",to=settings[loop.index0].ip_addresses.pub) | replace(from="$cli_port", to=str_cli_port)}}
|
||
|
{%- else -%}
|
||
|
{{taskserv.etcd_protocol}}://{{ taskserv.adv_listen_clients | replace(from="$servers",to=server.hostname) | replace(from="$cli_port", to=str_cli_port)}}
|
||
|
{%- endif %}"
|
||
|
|
||
|
# Discovery URL used to bootstrap the cluster.
|
||
|
discovery: {{discovery_url | default(value="")}}
|
||
|
|
||
|
# Valid values include 'exit', 'proxy'
|
||
|
discovery-fallback: 'proxy'
|
||
|
|
||
|
# HTTP proxy to use for traffic to discovery service.
|
||
|
discovery-proxy:
|
||
|
|
||
|
# DNS domain used to bootstrap initial cluster.
|
||
|
discovery-srv: {{taskserv.discovery_srv | default(value="")}}
|
||
|
|
||
|
# Initial cluster configuration for bootstrapping.
|
||
|
initial-cluster: "{%- if taskserv.initial_peers is starting_with("$servers") -%}
|
||
|
{%- for srv in defs.servers %}
|
||
|
{%- set srv_index = loop.index -%}
|
||
|
{%- for task in srv.taskservs -%}
|
||
|
{%- if task.name != "etcd" -%}{% continue %}{% endif %}
|
||
|
{%- if srv_index > 1 -%},{%- endif -%}
|
||
|
{%- if taskserv.initial_peers is containing("$network_private_ip") -%}
|
||
|
{{ srv.hostname }}={{taskserv.etcd_protocol}}://{{ taskserv.initial_peers | replace(from="$servers:$network_private_ip",to=srv.network_private_ip) | replace(from="$peer_port", to=str_peer_port)}}
|
||
|
{%- elif task.initial_peers is containing("$network_public_ip") -%}
|
||
|
{{ srv.hostname }}={{taskserv.etcd_protocol}}://{{ taskserv.initial_peers | replace(from="$servers:$network_public_ip",to=settings[loop.index0].ip_addresses.pub) | replace(from="$peer_port", to=str_peer_port)}}
|
||
|
{%- else -%}
|
||
|
{%- set full_hostname = srv.hostname ~ "." ~ taskserv.domain_name -%}
|
||
|
{{ srv.hostname }}={{taskserv.etcd_protocol}}://{{ taskserv.initial_peers | replace(from="$servers",to=full_hostname) | replace(from="$peer_port", to=str_peer_port)}}
|
||
|
{%- endif -%}
|
||
|
{% break %}
|
||
|
{%- endfor -%}
|
||
|
{%- endfor -%}
|
||
|
{%- else -%}
|
||
|
{{taskserv.cluster_list}}
|
||
|
{%- endif -%}"
|
||
|
{# {%- endif %} #}
|
||
|
|
||
|
# Initial cluster token for the etcd cluster during bootstrap.
|
||
|
initial-cluster-token: 'etcd-{{taskserv.cluster_name}}-cluster'
|
||
|
|
||
|
# Initial cluster state ('new' or 'existing').
|
||
|
#initial-cluster-state: {% if pos.server == 0 %} 'new' {% else %} 'existing'{% endif %}
|
||
|
initial-cluster-state: new
|
||
|
|
||
|
# Reject reconfiguration requests that would cause quorum loss.
|
||
|
strict-reconfig-check: false
|
||
|
|
||
|
# Enable runtime profiling data via HTTP server
|
||
|
enable-pprof: true
|
||
|
|
||
|
# Valid values include 'on', 'readonly', 'off'
|
||
|
proxy: 'off'
|
||
|
|
||
|
# Time (in milliseconds) an endpoint will be held in a failed state.
|
||
|
proxy-failure-wait: 5000
|
||
|
|
||
|
# Time (in milliseconds) of the endpoints refresh interval.
|
||
|
proxy-refresh-interval: 30000
|
||
|
|
||
|
# Time (in milliseconds) for a dial to timeout.
|
||
|
proxy-dial-timeout: 1000
|
||
|
|
||
|
# Time (in milliseconds) for a write to timeout.
|
||
|
proxy-write-timeout: 5000
|
||
|
|
||
|
# Time (in milliseconds) for a read to timeout.
|
||
|
proxy-read-timeout: 0
|
||
|
|
||
|
{% if taskserv.ssl_mode != "" -%}
|
||
|
client-transport-security:
|
||
|
# Path to the client server TLS cert file.
|
||
|
cert-file: {{taskserv.certs_path}}/{{taskserv.cluster_name}}.crt
|
||
|
|
||
|
# Path to the client server TLS key file.
|
||
|
key-file: {{taskserv.certs_path}}/{{taskserv.cluster_name}}.key
|
||
|
|
||
|
# Enable client cert authentication.
|
||
|
client-cert-auth: false
|
||
|
|
||
|
# Path to the client server TLS trusted CA cert file.
|
||
|
trusted-ca-file: {{taskserv.certs_path}}/ca.crt
|
||
|
|
||
|
# Client TLS using generated certificates
|
||
|
auto-tls: false
|
||
|
|
||
|
peer-transport-security:
|
||
|
{% if taskserv.hostname == "$hostname" %}
|
||
|
# Path to the peer server TLS cert file.
|
||
|
cert-file: {{taskserv.certs_path}}/{{server.hostname}}.crt
|
||
|
# Path to the peer server TLS key file.
|
||
|
key-file: {{taskserv.certs_path}}/{{server.hostname}}.key
|
||
|
{%- else %}
|
||
|
name: '{{taskserv.hostname}}'
|
||
|
# Path to the peer server TLS cert file.
|
||
|
cert-file: {{taskserv.certs_path}}/{{hostname}}.crt
|
||
|
# Path to the peer server TLS key file.
|
||
|
key-file: {{taskserv.certs_path}}/{{hostname}}.key
|
||
|
{%- endif %}
|
||
|
|
||
|
# Enable peer client cert authentication.
|
||
|
client-cert-auth: false
|
||
|
|
||
|
# Path to the peer server TLS trusted CA cert file.
|
||
|
trusted-ca-file: {{taskserv.certs_path}}/ca.crt
|
||
|
|
||
|
# Peer TLS using generated certificates.
|
||
|
auto-tls: false
|
||
|
|
||
|
# Allowed CN for inter peer authentication.
|
||
|
allowed-cn:
|
||
|
|
||
|
# Allowed TLS hostname for inter peer authentication.
|
||
|
allowed-hostname:
|
||
|
|
||
|
# The validity period of the self-signed certificate, the unit is year.
|
||
|
self-signed-cert-validity: 1
|
||
|
|
||
|
{%- endif %}
|
||
|
|
||
|
# Enable debug-level logging for etcd.
|
||
|
debug: false
|
||
|
|
||
|
logger: zap
|
||
|
|
||
|
# Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd.
|
||
|
log-outputs: ['{{taskserv.log_out| default(value="stdout")}}']
|
||
|
log-level: '{{taskserv.log_level | default(value="warn")}}'
|
||
|
|
||
|
# Force to create a new one member cluster.
|
||
|
force-new-cluster: false
|
||
|
|
||
|
auto-compaction-mode: periodic
|
||
|
auto-compaction-retention: "1"
|
||
|
|
||
|
# Limit etcd to a specific set of tls cipher suites
|
||
|
cipher-suites: [
|
||
|
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
|
||
|
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
|
||
|
]
|