{"id":21115,"date":"2020-04-20T08:29:08","date_gmt":"2020-04-20T06:29:08","guid":{"rendered":"https:\/\/www.inovex.de\/blog\/?p=18549"},"modified":"2023-02-15T12:16:58","modified_gmt":"2023-02-15T11:16:58","slug":"etcd-v2-to-etcd-v3-api","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/","title":{"rendered":"Migrating etcd v2 to etcd v3 API"},"content":{"rendered":"<p>etcd <a href=\"#etcd-io\">[1]<\/a> is a consistent, distributed key-value store which uses the raft consensus algorithm <a href=\"#raft\">[2]<\/a>. etcd is used by many projects but it is probably best known for being the data store of Kubernetes. Most applications use etcd to store some key-value pairs and read consistently from it. There is also the possibility to watch for changes on a given key space (e.g. with prefix matching). Currently etcd supports 2 APIs for storing data, etcd v2 and etcd v3. These 2 are not compatible and data stored in v2 can\u2019t be accessed over v3 (since they changes the storage backend).<!--more--><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#Our-Scenario\" >Our Scenario<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#What-Happened\" >What Happened<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#How-We-Solved-It\" >How We Solved It<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#Outlook\" >Outlook<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Our-Scenario\"><\/span>Our Scenario<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>In our scenario we use etcd as a central configuration store (see image 1 below) for our bare-metal Kubernetes deployments. In etcd we store e.g. which nodes are part of which Kubernetes cluster (and the versions of the used components like the Kubernetes version). The actual configuration for systems like Matchbox <a href=\"#matchbox\">[3]<\/a> are rendered by confd <a href=\"#confd\">[4]<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18551 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/04\/1und1-k8s-1024x576.png\" alt=\"Our architecture using etcd as the central configuration store.\" width=\"1024\" height=\"576\" \/><\/p>\n<p>The system has been running for more than 2 years without any major issues (most of the issues we had were some bad configurations). One of the special use-cases is that we also manage the current deploy-state of a machine over etcd. We can set a machine to a \u201credeploy\u201c state which means the machine will be rebooted and redeployed with the config while also configuring our DHCP service to tell the machine it should fetch the config from Matchbox or if the machine should boot from disk. This mechanism gave us the required flexibility to maintain these clusters with a small team. In order to secure our etcd we use authentication and multiple different users and roles <a href=\"#etcd-auth\">[5]<\/a>. Many systems like a node, Matchbox and the DHCP server are reading from the same values, e.g. to trigger a reboot on a node and also set it to <em>new provisioning<\/em> in the DHCP.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"What-Happened\"><\/span>What Happened<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>For a long time we were using etcd v2 which was the default.\u00a0With etcd 3.4 v3 became the default and\u00a0 v2 was deprecated and will be removed in the future. As a small project we changed all our clients to use etcd v3, which is based on gRPC. The good thing was that the transition for us was pretty smooth. We didn\u2019t need to migrate any data (we just recreated all data stored in etcd). Currently we have multiple stages for testing our infrastructure and in our development state we noticed strange behavior after we switched to v3. Our deployments were pretty inconsistent, e.g. some nodes came up with an older configuration and some nodes didn\u2019t even reboot or were redeployed.<\/p>\n<p>When we dug into this issue we saw that etcd <a href=\"https:\/\/github.com\/etcd-io\/etcd\/issues\/11643\">returned different values<\/a> when we queried it\u00a0and recently even more issues were opened\u00a0which are all related to <a href=\"https:\/\/github.com\/etcd-io\/etcd\/issues\/11651\">data inconsistency when authentication is enabled<\/a>. The main issue seems to be fixed in 3.4.5 (but even now <a href=\"https:\/\/github.com\/etcd-io\/etcd\/issues\/11689\">other issues<\/a> are still open).<\/p>\n<h2><span class=\"ez-toc-section\" id=\"How-We-Solved-It\"><\/span>How We Solved It<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>etcd v3.4.5 was not yet released when we observed this, so we were left with three options:<\/p>\n<ul>\n<li>Revert the migration (very work intensive)<\/li>\n<li>Disable authentication (which was no option for us, since this would allow everybody to change the behaviour of our deployments)<\/li>\n<li>Reduce the number of etcd nodes to 1<\/li>\n<\/ul>\n<p>We choose option 3 since our etcd nodes are running on fairly reliable VMs and if the they were not available for a short period of time it wouldn&#8217;t be a major incident since the clusters would still be operating. During an incident the only blocker we have is that we can\u2019t deploy updates or new Kubernetes clusters. With a short Mean Time To Recover (MTTR) for our etcd VM we accepted this risk.<\/p>\n<blockquote class=\"twitter-tweet\">\n<p dir=\"ltr\" lang=\"en\">I wonder why there are not some failure stories with this nice little bug: <a href=\"https:\/\/t.co\/9GozCoctOY\">https:\/\/t.co\/9GozCoctOY<\/a> debugging this one was fun \ud83d\ude00<\/p>\n<p>\u2014 Johannes Scheuermann (@johscheuer) <a href=\"https:\/\/twitter.com\/johscheuer\/status\/1232016974814830594?ref_src=twsrc%5Etfw\">February 24, 2020<\/a><\/p><\/blockquote>\n<p><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Outlook\"><\/span>Outlook<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Even with a \u201cbattle-tested\u201c component such as etcd <a href=\"#jepsen\">[6]<\/a> which is used in nearly all Kubernetes deployments (except for k3s deployments) you can see strange behaviour. The good thing for us was that we could solve this issue with a pretty simple workaround.<\/p>\n<p>[<a id=\"etcd-io\"><\/a>1] <a href=\"https:\/\/etcd.io\">https:\/\/etcd.io<\/a><\/p>\n<p>[<a id=\"raft\"><\/a>2] <a href=\"https:\/\/raft.github.io\">https:\/\/raft.github.io<\/a><\/p>\n<p>[<a id=\"matchbox\"><\/a>3] <a href=\"https:\/\/github.com\/poseidon\/matchbox\">https:\/\/github.com\/poseidon\/matchbox<\/a><\/p>\n<p>[<a id=\"confd\"><\/a>4] <a href=\"http:\/\/www.confd.io\/\">http:\/\/www.confd.io\/<\/a><\/p>\n<p>[<a id=\"etcd-auth\"><\/a>5] <a href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/op-guide\/authentication.md\">https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/op-guide\/authentication.md<\/a><\/p>\n<p>[<a id=\"jepsen\"><\/a>6] <a href=\"https:\/\/jepsen.io\/analyses\/etcd-3.4.3\">https:\/\/jepsen.io\/analyses\/etcd-3.4.3<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>etcd [1] is a consistent, distributed key-value store which uses the raft consensus algorithm [2]. etcd is used by many projects but it is probably best known for being the data store of Kubernetes. Most applications use etcd to store some key-value pairs and read consistently from it. There is also the possibility to watch [&hellip;]<\/p>\n","protected":false},"author":22,"featured_media":18646,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[],"service":[414,423],"coauthors":[{"id":22,"display_name":"Johannes M. Scheuermann","user_nicename":"jscheuermann"}],"class_list":["post-21115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","service-cloud","service-kubernetes"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Migrating etcd v2 to etcd v3 API - inovex GmbH<\/title>\n<meta name=\"description\" content=\"When we upgraded from etcd v2 to etcd v3 we noticed that etcd returned different values when we queried it\u2014and recently even more issues were opened\u00a0which are all related to data inconsistency when authentication is enabled. This article explains how we solved this problem in our current project.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrating etcd v2 to etcd v3 API - inovex GmbH\" \/>\n<meta property=\"og:description\" content=\"When we upgraded from etcd v2 to etcd v3 we noticed that etcd returned different values when we queried it\u2014and recently even more issues were opened\u00a0which are all related to data inconsistency when authentication is enabled. This article explains how we solved this problem in our current project.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-20T06:29:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-15T11:16:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/04\/etcd-v3-confusion.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Johannes M. Scheuermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/04\/etcd-v3-confusion-1024x576.png\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Johannes M. Scheuermann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Johannes M. Scheuermann\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/\"},\"author\":{\"name\":\"Johannes M. Scheuermann\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/0bacb2c9ca9064212903a844e408fb12\"},\"headline\":\"Migrating etcd v2 to etcd v3 API\",\"datePublished\":\"2020-04-20T06:29:08+00:00\",\"dateModified\":\"2023-02-15T11:16:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/\"},\"wordCount\":724,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/etcd-v3-confusion.png\",\"articleSection\":[\"English Content\",\"General\",\"Infrastructure\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/\",\"name\":\"Migrating etcd v2 to etcd v3 API - inovex GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/etcd-v3-confusion.png\",\"datePublished\":\"2020-04-20T06:29:08+00:00\",\"dateModified\":\"2023-02-15T11:16:58+00:00\",\"description\":\"When we upgraded from etcd v2 to etcd v3 we noticed that etcd returned different values when we queried it\u2014and recently even more issues were opened\u00a0which are all related to data inconsistency when authentication is enabled. This article explains how we solved this problem in our current project.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/etcd-v3-confusion.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/etcd-v3-confusion.png\",\"width\":1920,\"height\":1080,\"caption\":\"The etcd logo with raised eyebrows\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/etcd-v2-to-etcd-v3-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migrating etcd v2 to etcd v3 API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/inovexde\",\"https:\\\/\\\/x.com\\\/inovexgmbh\",\"https:\\\/\\\/www.instagram.com\\\/inovexlife\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/inovex\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/0bacb2c9ca9064212903a844e408fb12\",\"name\":\"Johannes M. Scheuermann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d3df0e3e0fa19f031fc539be1bd60a808d56719e4f9d367bf9b116ef6d653b1b?s=96&d=retro&r=gf922827beb705676e2040c1ecc2b6370\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d3df0e3e0fa19f031fc539be1bd60a808d56719e4f9d367bf9b116ef6d653b1b?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d3df0e3e0fa19f031fc539be1bd60a808d56719e4f9d367bf9b116ef6d653b1b?s=96&d=retro&r=g\",\"caption\":\"Johannes M. Scheuermann\"},\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/author\\\/jscheuermann\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Migrating etcd v2 to etcd v3 API - inovex GmbH","description":"When we upgraded from etcd v2 to etcd v3 we noticed that etcd returned different values when we queried it\u2014and recently even more issues were opened\u00a0which are all related to data inconsistency when authentication is enabled. This article explains how we solved this problem in our current project.","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:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/","og_locale":"de_DE","og_type":"article","og_title":"Migrating etcd v2 to etcd v3 API - inovex GmbH","og_description":"When we upgraded from etcd v2 to etcd v3 we noticed that etcd returned different values when we queried it\u2014and recently even more issues were opened\u00a0which are all related to data inconsistency when authentication is enabled. This article explains how we solved this problem in our current project.","og_url":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2020-04-20T06:29:08+00:00","article_modified_time":"2023-02-15T11:16:58+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/04\/etcd-v3-confusion.png","type":"image\/png"}],"author":"Johannes M. Scheuermann","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/04\/etcd-v3-confusion-1024x576.png","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Johannes M. Scheuermann","Gesch\u00e4tzte Lesezeit":"4\u00a0Minuten","Written by":"Johannes M. Scheuermann"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/"},"author":{"name":"Johannes M. Scheuermann","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/0bacb2c9ca9064212903a844e408fb12"},"headline":"Migrating etcd v2 to etcd v3 API","datePublished":"2020-04-20T06:29:08+00:00","dateModified":"2023-02-15T11:16:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/"},"wordCount":724,"commentCount":0,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/04\/etcd-v3-confusion.png","articleSection":["English Content","General","Infrastructure"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/","url":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/","name":"Migrating etcd v2 to etcd v3 API - inovex GmbH","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/04\/etcd-v3-confusion.png","datePublished":"2020-04-20T06:29:08+00:00","dateModified":"2023-02-15T11:16:58+00:00","description":"When we upgraded from etcd v2 to etcd v3 we noticed that etcd returned different values when we queried it\u2014and recently even more issues were opened\u00a0which are all related to data inconsistency when authentication is enabled. This article explains how we solved this problem in our current project.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/04\/etcd-v3-confusion.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/04\/etcd-v3-confusion.png","width":1920,"height":1080,"caption":"The etcd logo with raised eyebrows"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/etcd-v2-to-etcd-v3-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Migrating etcd v2 to etcd v3 API"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/0bacb2c9ca9064212903a844e408fb12","name":"Johannes M. Scheuermann","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/d3df0e3e0fa19f031fc539be1bd60a808d56719e4f9d367bf9b116ef6d653b1b?s=96&d=retro&r=gf922827beb705676e2040c1ecc2b6370","url":"https:\/\/secure.gravatar.com\/avatar\/d3df0e3e0fa19f031fc539be1bd60a808d56719e4f9d367bf9b116ef6d653b1b?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d3df0e3e0fa19f031fc539be1bd60a808d56719e4f9d367bf9b116ef6d653b1b?s=96&d=retro&r=g","caption":"Johannes M. Scheuermann"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/jscheuermann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/21115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=21115"}],"version-history":[{"count":1,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/21115\/revisions"}],"predecessor-version":[{"id":39909,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/21115\/revisions\/39909"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/18646"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=21115"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=21115"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=21115"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=21115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}