<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Operations guide on etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/</link><description>Recent content in Operations guide on etcd</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/index.xml" rel="self" type="application/rss+xml"/><item><title>Configuration options</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/configuration/</guid><description>&lt;p&gt;You can configure etcd through the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#command-line-flags"&gt;Command-line flags&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment variables&lt;/strong&gt;: every flag has a corresponding environment variable
that has the same name but is prefixed with&lt;code&gt;ETCD_&lt;/code&gt; and formatted in all caps and
&lt;a href="https://en.wikipedia.org/wiki/Snake_case" target="_blank" rel="noopener"&gt;snake case&lt;/a&gt;. For example, &lt;code&gt;--some-flag&lt;/code&gt; would be &lt;code&gt;ETCD_SOME_FLAG&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#configuration-file"&gt;Configuration file&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
&lt;p&gt;&lt;i class="fas fa-exclamation-triangle mr-1"&gt;&lt;/i&gt; &lt;strong&gt;Caution&lt;/strong&gt;: If you mix-and-match configuration options, then the following
rules apply.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Command-line flags take precedence over environment variables.&lt;/li&gt;
&lt;li&gt;If you provide a &lt;em&gt;configuration file&lt;/em&gt; all command-line flags and environment variables are &lt;strong&gt;ignored&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id="command-line-flags"&gt;Command-line flags&lt;/h2&gt;
&lt;p&gt;Flags are presented below using the format &lt;code&gt;--flag-name DEFAULT_VALUE&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Transport security model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/security/</guid><description>&lt;p&gt;etcd supports automatic TLS as well as authentication through client certificates for both clients to server as well as peer (server to server / cluster) communication.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Warning&lt;/div&gt;
&lt;p&gt;etcd doesn&amp;rsquo;t enable &lt;a href="../authentication"&gt;RBAC based authentication&lt;/a&gt; or the authentication feature in the transport layer by default to reduce friction for users getting started with the database. Further, changing this default would be a breaking change for the project which was established since 2013. An etcd cluster which doesn&amp;rsquo;t enable security features can expose its data to any clients.&lt;/p&gt;</description></item><item><title>Clustering Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/clustering/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Starting an etcd cluster statically requires that each member knows another in the cluster. In a number of cases, the IPs of the cluster members may be unknown ahead of time. In these cases, the etcd cluster can be bootstrapped with the help of a discovery service.&lt;/p&gt;
&lt;p&gt;Once an etcd cluster is up and running, adding or removing members is done via &lt;a href="../runtime-configuration/"&gt;runtime reconfiguration&lt;/a&gt;. To better understand the design behind runtime reconfiguration, we suggest reading &lt;a href="../runtime-reconf-design/"&gt;the runtime configuration design document&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Run etcd clusters as a Kubernetes StatefulSet</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/kubernetes/</guid><description>&lt;p&gt;Below demonstrates how to perform the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt; as a Kubernetes StatefulSet.&lt;/p&gt;
&lt;h2 id="example-manifest"&gt;Example Manifest&lt;/h2&gt;
&lt;p&gt;This manifest contains a service and statefulset for deploying a static etcd cluster in kubernetes.&lt;/p&gt;
&lt;p&gt;If you copy the contents of the manifest into a file named &lt;code&gt;etcd.yaml&lt;/code&gt;, it can be applied to a cluster with this command.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl apply --filename etcd.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Upon being applied, wait for the pods to become ready.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl get pods
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NAME READY STATUS RESTARTS AGE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-0 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-1 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-2 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The container used in the example includes etcdctl and can be called directly inside the pods.&lt;/p&gt;</description></item><item><title>Run etcd clusters inside containers</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/container/</guid><description>&lt;p&gt;The following guide shows how to run etcd with Docker using the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="docker"&gt;Docker&lt;/h2&gt;
&lt;p&gt;In order to expose the etcd API to clients outside of Docker host, use the host IP address of the container. Please see &lt;a href="https://docs.docker.com/engine/reference/commandline/inspect" target="_blank" rel="noopener"&gt;&lt;code&gt;docker inspect&lt;/code&gt;&lt;/a&gt; for more detail on how to get the IP address. Alternatively, specify &lt;code&gt;--net=host&lt;/code&gt; flag to &lt;code&gt;docker run&lt;/code&gt; command to skip placing the container inside of a separate network stack.&lt;/p&gt;
&lt;h3 id="running-a-single-node-etcd"&gt;Running a single node etcd&lt;/h3&gt;
&lt;p&gt;Use the host IP address when configuring etcd:&lt;/p&gt;</description></item><item><title>Failure modes</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/failures/</guid><description>&lt;p&gt;Failures are common in a large deployment of machines. A machine fails when its hardware or software malfunctions. Multiple machines fail together when there are power failures or network issues. Multiple kinds of failures can also happen at once; it is almost impossible to enumerate all possible failure cases.&lt;/p&gt;
&lt;p&gt;In this section, we catalog kinds of failures and discuss how etcd is designed to tolerate these failures. Most users, if not all, can map a particular failure into one kind of failure. To prepare for rare or &lt;a href="../recovery/"&gt;unrecoverable failures&lt;/a&gt;, always &lt;a href="../maintenance/#snapshot-backup"&gt;back up&lt;/a&gt; the etcd cluster.&lt;/p&gt;</description></item><item><title>Disaster recovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/recovery/</guid><description>&lt;p&gt;etcd is designed to withstand machine failures. An etcd cluster automatically recovers from temporary failures (e.g., machine reboots) and tolerates up to &lt;em&gt;(N-1)/2&lt;/em&gt; permanent failures for a cluster of N members. When a member permanently fails, whether due to hardware failure or disk corruption, it loses access to the cluster. If the cluster permanently loses more than &lt;em&gt;(N-1)/2&lt;/em&gt; members then it disastrously fails, irrevocably losing quorum. Once quorum is lost, the cluster cannot reach consensus and therefore cannot continue accepting updates.&lt;/p&gt;</description></item><item><title>etcd gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/gateway/</guid><description>&lt;h2 id="what-is-etcd-gateway"&gt;What is etcd gateway&lt;/h2&gt;
&lt;p&gt;etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. The gateway is stateless and transparent; it neither inspects client requests nor interferes with cluster responses. It does not terminate TLS connections, do TLS handshakes on behalf of its clients, or verify if the connection is secured.&lt;/p&gt;
&lt;p&gt;The gateway supports multiple etcd server endpoints and works on a simple round-robin policy. It only routes to available endpoints and hides failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>gRPC proxy</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/grpc_proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/grpc_proxy/</guid><description>&lt;p&gt;The gRPC proxy is a stateless etcd reverse proxy operating at the gRPC layer (L7). The proxy is designed to reduce the total processing load on the core etcd cluster. For horizontal scalability, it coalesces watch and lease API requests. To protect the cluster against abusive clients, it caches key range requests.&lt;/p&gt;
&lt;p&gt;The gRPC proxy supports multiple etcd server endpoints. When the proxy starts, it randomly picks one etcd server endpoint to use. This endpoint serves all requests until the proxy detects an endpoint failure. If the gRPC proxy detects an endpoint failure, it switches to a different endpoint, if available, to hide failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>Hardware recommendations</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/hardware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/hardware/</guid><description>&lt;p&gt;etcd usually runs well with limited resources for development or testing purposes; it’s common to develop with etcd on a laptop or a cheap cloud machine. However, when running etcd clusters in production, some hardware guidelines are useful for proper administration. These suggestions are not hard rules; they serve as a good starting point for a robust production deployment. As always, deployments should be tested with simulated workloads before running in production.&lt;/p&gt;</description></item><item><title>Maintenance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/maintenance/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;An etcd cluster needs periodic maintenance to remain reliable. Depending on an etcd application&amp;rsquo;s needs, this maintenance can usually be automated and performed without downtime or significantly degraded performance.&lt;/p&gt;
&lt;p&gt;All etcd maintenance manages storage resources consumed by the etcd keyspace. Failure to adequately control the keyspace size is guarded by storage space quotas; if an etcd member runs low on space, a quota will trigger cluster-wide alarms which will put the system into a limited-operation maintenance mode. To avoid running out of space for writes to the keyspace, the etcd keyspace history must be compacted. Storage space itself may be reclaimed by defragmenting etcd members. Finally, periodic snapshot backups of etcd member state makes it possible to recover any unintended logical data loss or corruption caused by operational error.&lt;/p&gt;</description></item><item><title>Monitoring etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/monitoring/</guid><description>&lt;p&gt;Each etcd server provides local monitoring information on its client port through http endpoints. The monitoring data is useful for both system health checking and cluster debugging.&lt;/p&gt;
&lt;h2 id="debug-endpoint"&gt;Debug endpoint&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;--log-level=debug&lt;/code&gt; is set, the etcd server exports debugging information on its client port under the &lt;code&gt;/debug&lt;/code&gt; path. Take care when setting &lt;code&gt;--log-level=debug&lt;/code&gt;, since there will be degraded performance and verbose logging.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/debug/pprof&lt;/code&gt; endpoint is the standard go runtime profiling endpoint. This can be used to profile CPU, heap, mutex, and goroutine utilization. For example, here &lt;code&gt;go tool pprof&lt;/code&gt; gets the top 10 functions where etcd spends its time:&lt;/p&gt;</description></item><item><title>Performance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;Understanding performance&lt;/h2&gt;
&lt;p&gt;etcd provides stable, sustained high performance. Two factors define performance: latency and throughput. Latency is the time taken to complete an operation. Throughput is the total operations completed within some time period. Usually average latency increases as the overall throughput increases when etcd accepts concurrent client requests. In common cloud environments, like a standard &lt;code&gt;n-4&lt;/code&gt; on Google Compute Engine (GCE) or a comparable machine type on AWS, a three member etcd cluster finishes a request in less than one millisecond under light load, and can complete more than 30,000 requests per second under heavy load.&lt;/p&gt;</description></item><item><title>Design of runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;Runtime reconfiguration is one of the hardest and most error prone features in a distributed system, especially in a consensus based system like etcd.&lt;/p&gt;
&lt;p&gt;Read on to learn about the design of etcd&amp;rsquo;s runtime reconfiguration commands and how we tackled these problems.&lt;/p&gt;
&lt;h2 id="two-phase-config-changes-keep-the-cluster-safe"&gt;Two phase config changes keep the cluster safe&lt;/h2&gt;
&lt;p&gt;In etcd, every runtime reconfiguration has to go through &lt;a href="../runtime-configuration/#add-a-new-member"&gt;two phases&lt;/a&gt; for safety reasons. For example, to add a member, first inform the cluster of the new configuration and then start the new member.&lt;/p&gt;</description></item><item><title>Runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/runtime-configuration/</guid><description>&lt;p&gt;etcd comes with support for incremental runtime reconfiguration, which allows users to update the membership of the cluster at run time.&lt;/p&gt;
&lt;p&gt;Reconfiguration requests can only be processed when a majority of cluster members are functioning. It is &lt;strong&gt;highly recommended&lt;/strong&gt; to always have a cluster size greater than two in production. It is unsafe to remove a member from a two member cluster. The majority of a two member cluster is also two. If there is a failure during the removal process, the cluster might not be able to make progress and need to &lt;a href="#restart-cluster-from-majority-failure"&gt;restart from majority failure&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Supported platforms</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/supported-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/supported-platform/</guid><description>&lt;h2 id="support-tiers"&gt;Support tiers&lt;/h2&gt;
&lt;p&gt;etcd runs on different platforms, but the guarantees it provides depends on a
platform&amp;rsquo;s support tier:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tier 1&lt;/strong&gt;: fully supported by &lt;a href="https://github.com/etcd-io/etcd/blob/main/OWNERS" target="_blank" rel="noopener"&gt;etcd maintainers&lt;/a&gt;; etcd is guaranteed to
pass all tests including functional and robustness tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tier 2&lt;/strong&gt;: etcd is guaranteed to pass integration and end-to-end tests but
not necessarily functional or robustness tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tier 3&lt;/strong&gt;: etcd is guaranteed to build, may be lightly tested (or not), and
so it should be considered &lt;em&gt;unstable&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="current-support"&gt;Current support&lt;/h2&gt;
&lt;p&gt;The following table lists currently supported platforms and their corresponding
etcd support tier:&lt;/p&gt;</description></item><item><title>Versioning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/versioning/</guid><description>&lt;p&gt;This document describes the versions supported by the etcd project.&lt;/p&gt;
&lt;h2 id="service-versioning-and-supported-versions"&gt;Service versioning and supported versions&lt;/h2&gt;
&lt;p&gt;etcd versions are expressed as &lt;strong&gt;x.y.z&lt;/strong&gt;, where &lt;strong&gt;x&lt;/strong&gt; is the major version, &lt;strong&gt;y&lt;/strong&gt; is the minor version, and &lt;strong&gt;z&lt;/strong&gt; is the patch version, following &lt;a href="https://semver.org/" target="_blank" rel="noopener"&gt;Semantic Versioning&lt;/a&gt; terminology.
New minor versions may add additional features to the API.&lt;/p&gt;
&lt;p&gt;The etcd project maintains release branches for the current version and previous release. For example, when v3.5 is the current version, v3.4 is supported. When v3.6 is released, v3.4 goes out of support.&lt;/p&gt;</description></item><item><title>Data Corruption</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/data_corruption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/data_corruption/</guid><description>&lt;p&gt;etcd has built in automated data corruption detection to prevent member state from diverging.&lt;/p&gt;
&lt;h2 id="enabling-data-corruption-detection"&gt;Enabling data corruption detection&lt;/h2&gt;
&lt;p&gt;Data corruption detection can be done using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initial check, enabled with &lt;code&gt;--experimental-initial-corrupt-check&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;Periodic check of:
&lt;ul&gt;
&lt;li&gt;Compacted revision hash, enabled with &lt;code&gt;--experimental-compact-hash-check-enabled&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;Latest revision hash, enabled with &lt;code&gt;--experimental-corrupt-check-time&lt;/code&gt; flag.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Initial check will be executed during bootstrap of etcd member.
Member will compare its persistent state vs other members and exit if there is a mismatch.&lt;/p&gt;</description></item></channel></rss>