{"id":10410,"date":"2019-08-30T19:00:04","date_gmt":"2019-08-30T19:00:04","guid":{"rendered":"http:\/\/howk.de\/w1\/blog-announcing-etcd-3-4\/"},"modified":"2019-08-30T19:00:04","modified_gmt":"2019-08-30T19:00:04","slug":"blog-announcing-etcd-3-4","status":"publish","type":"post","link":"https:\/\/howk.de\/?p=10410","title":{"rendered":"Blog: Announcing etcd 3.4"},"content":{"rendered":"<p><strong>Authors:<\/strong> Gyuho Lee (Amazon Web Services, @<a href=\"https:\/\/github.com\/gyuho\" target=\"_blank\" rel=\"noopener noreferrer\">gyuho<\/a>), Jingyi Hu (Google, @<a href=\"https:\/\/github.com\/jingyih\" target=\"_blank\" rel=\"noopener noreferrer\">jingyih<\/a>)<\/p>\n<p>etcd 3.4 focuses on stability, performance and ease of operation, with features like pre-vote and non-voting member and improvements to storage backend and client balancer.<\/p>\n<p>Please see <a href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/CHANGELOG-3.4.md\" target=\"_blank\" rel=\"noopener noreferrer\">CHANGELOG<\/a> for full lists of changes.<\/p>\n<h2 id=\"better-storage-backend\">Better Storage Backend<\/h2>\n<p>etcd v3.4 includes a number of performance improvements for large scale Kubernetes workloads.<\/p>\n<p>In particular, etcd experienced performance issues with a large number of concurrent read transactions even when there is no write (e.g. <code>\u201cread-only range request ... took too long to execute\u201d<\/code>). Previously, the storage backend commit operation on pending writes blocks incoming read transactions, even when there was no pending write. Now, the commit <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/9296\" target=\"_blank\" rel=\"noopener noreferrer\">does not block reads<\/a> which improve long-running read transaction performance.<\/p>\n<p>We further made <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/10523\" target=\"_blank\" rel=\"noopener noreferrer\">backend read transactions fully concurrent<\/a>. Previously, ongoing long-running read transactions block writes and upcoming reads. With this change, write throughput is increased by 70% and P99 write latency is reduced by 90% in the presence of long-running reads. We also ran <a href=\"https:\/\/prow.k8s.io\/view\/gcs\/kubernetes-jenkins\/logs\/ci-kubernetes-e2e-gce-scale-performance\/1130745634945503235\" target=\"_blank\" rel=\"noopener noreferrer\">Kubernetes 5000-node scalability test on GCE<\/a> with this change and observed similar improvements. For example, in the very beginning of the test where there are a lot of long-running \u201cLIST pods\u201d, the P99 latency of \u201cPOST clusterrolebindings\u201d is <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/10523#issuecomment-499262001\" target=\"_blank\" rel=\"noopener noreferrer\">reduced by 97.4%<\/a>. This non-blocking read transaction is now <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/11034\" target=\"_blank\" rel=\"noopener noreferrer\">used for compaction<\/a>, which, combined with the reduced compaction batch size, reduces the P99 server request latency during compaction.<\/p>\n<p>More improvements have been made to lease storage. We enhanced <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/9418\" target=\"_blank\" rel=\"noopener noreferrer\">lease expire\/revoke performance<\/a> by storing lease objects more efficiently, and made <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/9229\" target=\"_blank\" rel=\"noopener noreferrer\">lease look-up operation non-blocking<\/a> with current lease grant\/revoke operation. And etcd v3.4 introduces <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/9924\" target=\"_blank\" rel=\"noopener noreferrer\">lease checkpoint<\/a> as an experimental feature to persist remaining time-to-live values through consensus. This ensures short-lived lease objects are not auto-renewed after leadership election. This also prevents lease object pile-up when the time-to-live value is relatively large (e.g. <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/65497\" target=\"_blank\" rel=\"noopener noreferrer\">1-hour TTL never expired in Kubernetes use case<\/a>).<\/p>\n<h2 id=\"improved-raft-voting-process\">Improved Raft Voting Process<\/h2>\n<p>etcd server implements <a href=\"https:\/\/raft.github.io\" target=\"_blank\" rel=\"noopener noreferrer\">Raft consensus algorithm<\/a> for data replication. Raft is a leader-based protocol. Data is replicated from leader to follower; a follower forwards proposals to a leader, and the leader decides what to commit or not. Leader persists and replicates an entry, once it has been agreed by the quorum of cluster. The cluster members elect a single leader, and all other members become followers. The elected leader periodically sends heartbeats to its followers to maintain its leadership, and expects responses from each follower to keep track of its progress.<\/p>\n<p>In its simplest form, a Raft leader steps down to a follower when it receives a message with higher terms without any further cluster-wide health checks. This behavior can affect the overall cluster availability.<\/p>\n<p>For instance, a flaky (or rejoining) member drops in and out, and starts campaign. This member ends up with higher terms, ignores all incoming messages with lower terms, and sends out messages with higher terms. When the leader receives this message of a higher term, it reverts back to follower.<\/p>\n<p>This becomes more disruptive when there\u2019s a network partition. Whenever the partitioned node regains its connectivity, it can possibly trigger the leader re-election. To address this issue, etcd Raft introduces a new node state pre-candidate with the <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/9352\" target=\"_blank\" rel=\"noopener noreferrer\">pre-vote feature<\/a>. The pre-candidate first asks other servers whether it&rsquo;s up-to-date enough to get votes. Only if it can get votes from the majority, it increments its term and starts an election. This extra phase improves the robustness of leader election in general. And helps the leader remain stable as long as it maintains its connectivity with the quorum of its peers.<\/p>\n<p>Similarly, etcd availability can be affected when a restarting node has not received the leader heartbeats in time (e.g. due to slow network), which triggers the leader election. Previously, etcd fast-forwards election ticks on server start, with only one tick left for leader election. For example, when the election timeout is 1-second, the follower only waits 100ms for leader contacts before starting an election. This speeds up initial server start, by not having to wait for the election timeouts (e.g. election is triggered in 100ms instead of 1-second). Advancing election ticks is also useful for cross datacenter deployments with larger election timeouts. However, in many cases, the availability is more critical than the speed of initial leader election. To ensure better availability with rejoining nodes, etcd now <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/9415\" target=\"_blank\" rel=\"noopener noreferrer\">adjusts election ticks<\/a> with more than one tick left, thus more time for the leader to prevent a disruptive restart.<\/p>\n<h2 id=\"raft-non-voting-member-learner\">Raft Non-Voting Member, Learner<\/h2>\n<p>The challenge with membership reconfiguration is that it often leads to quorum size changes, which are prone to cluster unavailabilities. Even if it does not alter the quorum, clusters with membership change are more likely to experience other underlying problems. To improve the reliability and confidence of reconfiguration, a new role &#8211; learner is introduced in etcd 3.4 release.<\/p>\n<p>A new etcd member joins the cluster with no initial data, requesting all historical updates from the leader until it catches up to the leader\u2019s logs. This means the leader\u2019s network is more likely to be overloaded, blocking or dropping leader heartbeats to followers. In such cases, a follower may experience election-timeout and start a new leader election. That is, a cluster with a new member is more vulnerable to leader election. Both leader election and the subsequent update propagation to the new member are prone to causing periods of cluster unavailability (see <em>Figure 1<\/em>).<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/kubernetes.io\/images\/blog\/2019-08-30-announcing-etcd-3.4\/figure-1.png\" alt=\"learner-figure-1\" \/><\/p>\n<p>The worst case is a misconfigured membership add. Membership reconfiguration in etcd is a two-step process: <code>etcdctl member add<\/code> with peer URLs, and starting a new etcd to join the cluster. That is, <code>member add<\/code> command is applied whether the peer URL value is invalid or not. If the first step is to apply the invalid URLs and change the quorum size, it is possible that the cluster already loses the quorum until the new node connects. Since the node with invalid URLs will never become online and there\u2019s no leader, it is impossible to revert the membership change (see <em>Figure 2<\/em>).<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/kubernetes.io\/images\/blog\/2019-08-30-announcing-etcd-3.4\/figure-2.png\" alt=\"learner-figure-2\" \/><\/p>\n<p>This becomes more complicated when there are partitioned nodes (see the <a href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/learning\/design-learner.md\" target=\"_blank\" rel=\"noopener noreferrer\">design document<\/a> for more).<\/p>\n<p>In order to address such failure modes, etcd introduces a <a href=\"https:\/\/github.com\/etcd-io\/etcd\/issues\/10537\" target=\"_blank\" rel=\"noopener noreferrer\">new node state \u201cLearner\u201d<\/a>, which joins the cluster as a non-voting member until it catches up to leader\u2019s logs. This means the learner still receives all updates from leader, while it does not count towards the quorum, which is used by the leader to evaluate peer activeness. The learner only serves as a standby node until promoted. This relaxed requirements for quorum provides the better availability during membership reconfiguration and operational safety (see <em>Figure 3<\/em>).<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/kubernetes.io\/images\/blog\/2019-08-30-announcing-etcd-3.4\/figure-3.png\" alt=\"learner-figure-3\" \/><\/p>\n<p>We will further improve learner robustness, and explore auto-promote mechanisms for easier and more reliable operation. Please read our <a href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/learning\/design-learner.md\" target=\"_blank\" rel=\"noopener noreferrer\">learner design documentation<\/a> and <a href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/op-guide\/runtime-configuration.md#add-a-new-member-as-learner\" target=\"_blank\" rel=\"noopener noreferrer\">runtime-configuration document<\/a> for user guides.<\/p>\n<h2 id=\"new-client-balancer\">New Client Balancer<\/h2>\n<p>etcd is designed to tolerate various system and network faults. By design, even if one node goes down, the cluster \u201cappears\u201d to be working normally, by providing one logical cluster view of multiple servers. But, this does not guarantee the liveness of the client. Thus, etcd client has implemented a different set of intricate protocols to guarantee its correctness and high availability under faulty conditions.<\/p>\n<p>Historically, etcd client balancer heavily relied on old gRPC interface: every gRPC dependency upgrade broke client behavior. A majority of development and debugging efforts were devoted to fixing those client behavior changes. As a result, its implementation has become overly complicated with bad assumptions on server connectivity. The primary goal was to <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/9860\" target=\"_blank\" rel=\"noopener noreferrer\">simplify balancer failover logic in etcd v3.4 client<\/a>; instead of maintaining a list of unhealthy endpoints, which may be stale, simply roundrobin to the next endpoint whenever client gets disconnected from the current endpoint. It does not assume endpoint status. Thus, no more complicated status tracking is needed.<\/p>\n<p>Furthermore, the new client now creates its own credential bundle to <a href=\"https:\/\/github.com\/etcd-io\/etcd\/pull\/10911\" target=\"_blank\" rel=\"noopener noreferrer\">fix balancer failover against secure endpoints<\/a>. This resolves the <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/72102\" target=\"_blank\" rel=\"noopener noreferrer\">year-long bug<\/a>, where kube-apiserver loses its connectivity to etcd cluster when the first etcd server becomes unavailable.<\/p>\n<p>Please see <a href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/learning\/design-client.md\" target=\"_blank\" rel=\"noopener noreferrer\">client balancer design documentation<\/a> for more.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Authors: Gyuho Lee (Amazon Web Services, @gyuho), Jingyi Hu (Google, @jingyih) etcd 3.4 focuses on stability, performance and ease of operation, with features like pre-vote and non-voting member and improvements to storage backend and client balancer. Please see CHANGELOG for full lists of changes. Better Storage Backend etcd v3.4 includes a number of performance improvements [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Blog: Announcing etcd 3.4 - Howk IT-Dienstleistungen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/howk.de\/?p=10410\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Blog: Announcing etcd 3.4 - Howk IT-Dienstleistungen\" \/>\n<meta property=\"og:description\" content=\"Authors: Gyuho Lee (Amazon Web Services, @gyuho), Jingyi Hu (Google, @jingyih) etcd 3.4 focuses on stability, performance and ease of operation, with features like pre-vote and non-voting member and improvements to storage backend and client balancer. Please see CHANGELOG for full lists of changes. Better Storage Backend etcd v3.4 includes a number of performance improvements [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/howk.de\/?p=10410\" \/>\n<meta property=\"og:site_name\" content=\"Howk IT-Dienstleistungen\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/howk.de\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-30T19:00:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kubernetes.io\/images\/blog\/2019-08-30-announcing-etcd-3.4\/figure-1.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/howk.de\/?p=10410#article\",\"isPartOf\":{\"@id\":\"https:\/\/howk.de\/?p=10410\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/howk.de\/#\/schema\/person\/b029bd02d4f35dce869ef54c81a100c5\"},\"headline\":\"Blog: Announcing etcd 3.4\",\"datePublished\":\"2019-08-30T19:00:04+00:00\",\"dateModified\":\"2019-08-30T19:00:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/howk.de\/?p=10410\"},\"wordCount\":1333,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/howk.de\/#organization\"},\"articleSection\":[\"Hi Tech\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/howk.de\/?p=10410#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/howk.de\/?p=10410\",\"url\":\"https:\/\/howk.de\/?p=10410\",\"name\":\"Blog: Announcing etcd 3.4 - Howk IT-Dienstleistungen\",\"isPartOf\":{\"@id\":\"https:\/\/howk.de\/#website\"},\"datePublished\":\"2019-08-30T19:00:04+00:00\",\"dateModified\":\"2019-08-30T19:00:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/howk.de\/?p=10410#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/howk.de\/?p=10410\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/howk.de\/?p=10410#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/howk.de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog: Announcing etcd 3.4\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/howk.de\/#website\",\"url\":\"https:\/\/howk.de\/\",\"name\":\"Howk IT-Dienstleistungen\",\"description\":\"Howk IT Services - Howk IT-Dienstleistungen\",\"publisher\":{\"@id\":\"https:\/\/howk.de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/howk.de\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/howk.de\/#organization\",\"name\":\"HowK\",\"url\":\"https:\/\/howk.de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/howk.de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/howk.de\/w1\/wp-content\/uploads\/2013\/12\/howk-logo.png\",\"contentUrl\":\"https:\/\/howk.de\/w1\/wp-content\/uploads\/2013\/12\/howk-logo.png\",\"width\":170,\"height\":170,\"caption\":\"HowK\"},\"image\":{\"@id\":\"https:\/\/howk.de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/howk.de\",\"http:\/\/de.linkedin.com\/in\/howkde\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/howk.de\/#\/schema\/person\/b029bd02d4f35dce869ef54c81a100c5\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/howk.de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b5a20f4d07bca1b73f25cff58a1116c4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b5a20f4d07bca1b73f25cff58a1116c4?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"url\":\"https:\/\/howk.de\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Blog: Announcing etcd 3.4 - Howk IT-Dienstleistungen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/howk.de\/?p=10410","og_locale":"en_US","og_type":"article","og_title":"Blog: Announcing etcd 3.4 - Howk IT-Dienstleistungen","og_description":"Authors: Gyuho Lee (Amazon Web Services, @gyuho), Jingyi Hu (Google, @jingyih) etcd 3.4 focuses on stability, performance and ease of operation, with features like pre-vote and non-voting member and improvements to storage backend and client balancer. Please see CHANGELOG for full lists of changes. Better Storage Backend etcd v3.4 includes a number of performance improvements [&hellip;]","og_url":"https:\/\/howk.de\/?p=10410","og_site_name":"Howk IT-Dienstleistungen","article_publisher":"https:\/\/www.facebook.com\/howk.de","article_published_time":"2019-08-30T19:00:04+00:00","og_image":[{"url":"https:\/\/kubernetes.io\/images\/blog\/2019-08-30-announcing-etcd-3.4\/figure-1.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/howk.de\/?p=10410#article","isPartOf":{"@id":"https:\/\/howk.de\/?p=10410"},"author":{"name":"admin","@id":"https:\/\/howk.de\/#\/schema\/person\/b029bd02d4f35dce869ef54c81a100c5"},"headline":"Blog: Announcing etcd 3.4","datePublished":"2019-08-30T19:00:04+00:00","dateModified":"2019-08-30T19:00:04+00:00","mainEntityOfPage":{"@id":"https:\/\/howk.de\/?p=10410"},"wordCount":1333,"commentCount":0,"publisher":{"@id":"https:\/\/howk.de\/#organization"},"articleSection":["Hi Tech"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/howk.de\/?p=10410#respond"]}]},{"@type":"WebPage","@id":"https:\/\/howk.de\/?p=10410","url":"https:\/\/howk.de\/?p=10410","name":"Blog: Announcing etcd 3.4 - Howk IT-Dienstleistungen","isPartOf":{"@id":"https:\/\/howk.de\/#website"},"datePublished":"2019-08-30T19:00:04+00:00","dateModified":"2019-08-30T19:00:04+00:00","breadcrumb":{"@id":"https:\/\/howk.de\/?p=10410#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/howk.de\/?p=10410"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/howk.de\/?p=10410#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/howk.de\/"},{"@type":"ListItem","position":2,"name":"Blog: Announcing etcd 3.4"}]},{"@type":"WebSite","@id":"https:\/\/howk.de\/#website","url":"https:\/\/howk.de\/","name":"Howk IT-Dienstleistungen","description":"Howk IT Services - Howk IT-Dienstleistungen","publisher":{"@id":"https:\/\/howk.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/howk.de\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/howk.de\/#organization","name":"HowK","url":"https:\/\/howk.de\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/howk.de\/#\/schema\/logo\/image\/","url":"https:\/\/howk.de\/w1\/wp-content\/uploads\/2013\/12\/howk-logo.png","contentUrl":"https:\/\/howk.de\/w1\/wp-content\/uploads\/2013\/12\/howk-logo.png","width":170,"height":170,"caption":"HowK"},"image":{"@id":"https:\/\/howk.de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/howk.de","http:\/\/de.linkedin.com\/in\/howkde"]},{"@type":"Person","@id":"https:\/\/howk.de\/#\/schema\/person\/b029bd02d4f35dce869ef54c81a100c5","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/howk.de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b5a20f4d07bca1b73f25cff58a1116c4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b5a20f4d07bca1b73f25cff58a1116c4?s=96&d=mm&r=g","caption":"admin"},"url":"https:\/\/howk.de\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/howk.de\/index.php?rest_route=\/wp\/v2\/posts\/10410"}],"collection":[{"href":"https:\/\/howk.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/howk.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/howk.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/howk.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10410"}],"version-history":[{"count":0,"href":"https:\/\/howk.de\/index.php?rest_route=\/wp\/v2\/posts\/10410\/revisions"}],"wp:attachment":[{"href":"https:\/\/howk.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/howk.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/howk.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}