{"id":38965,"date":"2019-10-31T22:27:03","date_gmt":"2019-10-31T19:27:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/liveness-probes-v-kubernetes-mogut-byt-opasny\/"},"modified":"2019-10-31T22:27:03","modified_gmt":"2019-10-31T19:27:03","slug":"liveness-probes-v-kubernetes-mogut-byt-opasny","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/liveness-probes-v-kubernetes-mogut-byt-opasny","title":{"rendered":"Liveness probes in Kubernetes can be dangerous","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Note: translation.<\/b>Henning Jacobs, lead engineer at Zalando, has often noticed that users of Kubernetes struggle to understand the purpose of liveness (and readiness) probes and their correct application. Therefore, he compiled his thoughts into this concise note, which will eventually become part of the K8s documentation.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Liveness probes in Kubernetes can be dangerous\" src=\"\/wp-content\/uploads\/2019\/10\/b246e18dadd582889382f306508135a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHealth checks, known in Kubernetes as <i>liveness probes<\/i> <i>(i.e., literally, \"viability tests\" \u2014 ed.)<\/i>, can be quite dangerous. I recommend avoiding them wherever possible; exceptions are only when they are truly necessary and you fully understand the specifics and consequences of their use. This publication will discuss both liveness and readiness checks, as well as explain when <i>is located<\/i> and when not to apply them.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>My colleague Sandor recently shared on Twitter the most common mistakes he encounters, including those related to the use of readiness\/liveness probes:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/sszuecs\/status\/1175377157343907840\"><img decoding=\"async\" alt=\"Liveness probes in Kubernetes can be dangerous\" src=\"\/wp-content\/uploads\/2019\/10\/8bc2e834e77e2b51baf06d2465a97b4f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>A misconfigured <code>livenessProbe<\/code> can exacerbate high-load situations (cascading failures + potentially long startup of the container\/application) and lead to other negative consequences, such as dependency crashes <i>(see also <noindex><a rel=\"nofollow\" href=\"https:\/\/srcco.de\/posts\/k3s-outage-traefik-acme-lets-encrypt-local-path.html\">my recent article<\/a><\/noindex> on limiting the number of requests in conjunction with K3s+ACME)<\/i>. Even worse is when the liveness probe is combined with a health check that relies on an external database: <b>a single database failure will restart all your containers.<\/b>!<\/p>\n<p>The general message <i>\"Do not use liveness probes\"<\/i> is of little help in this case, so let\u2019s examine the intended purposes of readiness and liveness checks. <\/p>\n<p><i>Note: Most of the test provided below was originally included in the internal documentation for Zalando developers.<\/i><\/p>\n<h2>Readiness and Liveness Checks<\/h2>\n<p>\nKubernetes provides two important mechanisms, called <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-liveness-readiness-probes\/\">liveness probes and readiness probes<\/a><\/noindex>. They periodically perform some action \u2014 such as sending an HTTP request, opening a TCP connection, or executing a command in the container \u2014 to confirm that the application is functioning properly.<\/p>\n<p>Kubernetes uses <b>readiness probes<\/b>, to understand when the container is ready to accept traffic. A pod is considered ready when all of its containers are ready. One application of this mechanism is to monitor which pods are used as backends for Kubernetes services (particularly Ingress).<\/p>\n<p><b>Liveness probes<\/b> help Kubernetes understand when it's time to restart a container. For example, such a check can catch a deadlock when an application gets 'stuck' in one place. Restarting the container in such a state helps move the application off the dead point, despite errors, but it can also lead to cascading failures (see below).<\/p>\n<p>If you try to deploy an application update that fails liveness\/readiness checks, its rollout will be stalled as Kubernetes waits for the status <code>Ready<\/code> from all pods.<\/p>\n<h2>Example<\/h2>\n<p>\nHere\u2019s an example of a readiness probe that checks the path <code>\/health<\/code> via HTTP with default settings (<i>interval<\/i>: 10 seconds, <i>timeout<\/i>: 1 second, <i>success threshold<\/i>: 1, <i>failure threshold<\/i>: 3):<\/p>\n<pre><code class=\"plaintext\"># \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u0449\u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f deployment'\u0430\/\u0441\u0442\u0435\u043a\u0430\npodTemplate:\n  spec:\n    containers:\n    - name: my-container\n      # ...\n      readinessProbe:\n        httpGet:\n          path: \/health\n          port: 8080<\/code><\/pre>\n<p><\/p>\n<h2>Recommendations<\/h2>\n<p><\/p>\n<ol>\n<li> For microservices with HTTP endpoints (REST, etc.), <b>always define a readiness probe<\/b>, which checks if the application (pod) is ready to accept traffic.<\/li>\n<li> Ensure that the readiness probe <b>covers the readiness of the actual web server port<\/b>:\n<ul>\n<li> using ports for administrative needs called 'admin' or 'management' (e.g., 9090), for <code>readinessProbe<\/code>, ensure that the endpoint returns OK only if the main HTTP port (like 8080) is ready to accept traffic*;\n<p><i>* I know of at least one case in Zalando where this did not happen, that is, <code>readinessProbe<\/code> it checked the 'management' port, but the server itself did not start due to cache loading issues.<\/i><\/li>\n<li> attaching a readiness probe to a separate port can lead to scenarios where the overload on the primary port is not reflected in the health check (i.e., the thread pool on the server is full, yet the health check still shows everything is fine).<\/li>\n<\/ul>\n<\/li>\n<li> Ensure that <b>the readiness probe includes database initialization\/migration<\/b>;\n<ul>\n<li> the simplest way to achieve this is to call the HTTP server only after initialization is complete (e.g., database migration with <noindex><a rel=\"nofollow\" href=\"https:\/\/flywaydb.org\/\">Flyway<\/a><\/noindex> and so on); that is, instead of changing the health check status, simply do not start the web server until the DB migration is complete*.\n<p><i>* You can also run DB migrations from init containers outside the pod. I am still a fan of self-contained applications, meaning those in which the application container, without external coordination, knows how to bring the DB to the desired state.<\/i><\/li>\n<\/ul>\n<\/li>\n<li> Use <code>httpGet<\/code> for readiness checks through typical health check endpoints (e.g., <code>\/health<\/code>).<\/li>\n<li> <b>Familiarize yourself with the default check parameters.<\/b> (<code>interval: 10s<\/code>, <code>timeout: 1s<\/code>, <code>successThreshold: 1<\/code>, <code>failureThreshold: 3<\/code>):\n<ul>\n<li> the default parameters mean that the pod will become <i>not-ready<\/i> in about 30 seconds (3 failed health checks).<\/li>\n<\/ul>\n<\/li>\n<li> Use a separate port for \u2018admin\u2019 or \u2018management\u2019 if the tech stack (for example, Java\/Spring) allows it, to separate \u2018health\u2019 management and metrics from regular traffic:\n<ul>\n<li> but don\u2019t forget about point 2.<\/li>\n<\/ul>\n<\/li>\n<li> If necessary, the readiness probe can be used for warming\/loading the cache and return a 503 status code until the container is \u2018warmed up\u2019:\n<ul>\n<li> I also recommend checking out the new probe <code>startupProbe<\/code>, <noindex><a rel=\"nofollow\" href=\"https:\/\/sysdig.com\/blog\/whats-new-kubernetes-1-16\/\">introduced in version 1.16,<\/a><\/noindex> <i>(we wrote about it in Russian. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/467477\/\">here<\/a><\/noindex> - translator's note)<\/i>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h2>Warnings<\/h2>\n<p><\/p>\n<ol>\n<li> <b>Do not rely on external dependencies<\/b> (such as data stores) when conducting readiness\/liveness tests \u2014 this can lead to cascading failures:\n<ul>\n<li> as an example, let's take a stateful REST service with 10 pods depending on a single Postgres database: when the check relies on an active DB connection, all 10 pods can fail if there is a delay on the network\/database side \u2014 usually, this ends worse than it could've;<\/li>\n<li> note that Spring Data checks the database connection by default*;\n<p><i>* This is the default behavior of Spring Data Redis (at least it was when I last checked), which led to a \"catastrophic\" failure: when Redis was briefly unavailable, all pods \"crashed.\"<\/i><\/li>\n<li> \"external\" in this sense can also mean other pods of the same application, meaning ideally the check should not depend on the state of other pods in the same cluster to prevent cascading failures:\n<ul>\n<li> results may vary for applications with distributed state (e.g., in-memory caching in pods).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li> <b>Do not use the liveness probe<\/b> for pods (exceptions are cases where they are truly necessary and you fully understand the specifics and implications of their use):\n<ul>\n<li> a liveness probe can help recover 'stuck' containers; however, since you have full control over your application, situations like 'hanging' processes and deadlocks ideally should not occur: a better alternative is to intentionally crash the application and return it to a previous stable state;<\/li>\n<li> A failed liveness probe will lead to the container being restarted, potentially exacerbating the consequences of loading errors: restarting the container will result in downtime (at least for the time it takes to launch the application, say, for over 30 seconds), causing new errors, increasing the load on other containers, and raising the likelihood of their failure, etc.;<\/li>\n<li> Liveness checks combined with an external dependency are the worst possible combination, threatening cascading failures: a minor delay on the database side will result in the restart of all your containers!<\/li>\n<\/ul>\n<\/li>\n<li> Liveness and readiness probe parameters <b>should be different<\/b>:\n<ul>\n<li> you can use a liveness probe with the same health check but with a higher firing threshold (<code>failureThreshold<\/code>), for example, assign a status <i>not-ready<\/i> after 3 attempts and consider the liveness probe failed after 10 attempts;<\/li>\n<\/ul>\n<\/li>\n<li> <b>Do not use exec checks<\/b>, as they have known issues that lead to zombie processes:\n<ul>\n<li> details: see <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=QKI-JRs2RIE\">the presentation by Datadog experts<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h2>Summary<\/h2>\n<p><\/p>\n<ul>\n<li> Use readiness probes to determine when a pod is ready to accept traffic.<\/li>\n<li> Use liveness probes only when absolutely necessary.<\/li>\n<li> Incorrect use of readiness\/liveness probes can lead to reduced availability and cascading failures.<\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/sszuecs\/status\/1175655221382529025\"><img decoding=\"async\" alt=\"Liveness probes in Kubernetes can be dangerous\" src=\"\/wp-content\/uploads\/2019\/10\/8c212c41d6e69cd515a85d2b6100aaed.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<h2>Additional resources on the topic<\/h2>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-liveness-readiness-probes\/\">Kubernetes docs: Configure Liveness and Readiness Probes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.colinbreck.com\/kubernetes-liveness-and-readiness-probes-revisited-how-to-avoid-shooting-yourself-in-the-other-foot\/\">Kubernetes Liveness and Readiness Probes Revisited: How to Avoid Shooting Yourself in the Other Foot<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/keepingitclassless.net\/2018\/12\/december-4-nre-labs-outage-post-mortem\/\">NRE Labs Outage Post-Mortem<\/a><\/noindex> (also discusses livenessProbe).<\/li>\n<\/ul>\n<p><\/p>\n<h2>Update #1 from 2019-09-29<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/BarrWill1\/status\/1178144162526453760\">About init-containers for database migration<\/a><\/noindex>: a footnote has been added.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/ejc3\/status\/1178077779293683713\">EJ reminded me<\/a><\/noindex> about PDB: one of the issues with liveness checks is the lack of coordination between pods. In Kubernetes, there are <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/run-application\/configure-pdb\/\">Pod Disruption Budgets (PDB)<\/a><\/noindex> to limit the number of concurrent failures that an application can experience; however, checks do not account for PDB. Ideally, we could instruct K8s: 'Restart one pod if its check fails, but do not restart them all to avoid making it worse.'<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/bboreham\/status\/1178083887991398400\">Bryan put it very well<\/a><\/noindex>: 'Use liveness probing when you are certain that <b>the best course of action is to 'kill' the application<\/b>' (again, don't get carried away).<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/bboreham\/status\/1178207929540972544\"><img decoding=\"async\" alt=\"Liveness probes in Kubernetes can be dangerous\" src=\"\/wp-content\/uploads\/2019\/10\/524122a63bd4acd950bf9fc8aeeb45be.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<h2>Update No. 2 from 2019-09-29<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/Guillaume_Swiss\/status\/1178258781152563200\">Regarding reading the documentation before use<\/a><\/noindex>: I created a corresponding request (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/website\/issues\/16607\">feature request<\/a><\/noindex>) to supplement the documentation about liveness probes.<\/p>\n<h2>P.S. from the translator<\/h2>\n<p>\nAlso read in our blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/415393\/\">Kubernetes: pod lifecycle<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/425085\/\">7 best practices for operating containers according to Google<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/353272\/\">7 principles of container-based application design<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/470958\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0412\u0435\u0434\u0443\u0449\u0438\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Zalando \u2014 Henning Jacobs \u2014 \u043d\u0435 \u0440\u0430\u0437 \u0437\u0430\u043c\u0435\u0447\u0430\u043b \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Kubernetes \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f liveness (\u0438 readiness) probes \u0438 \u0438\u0445 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u0441\u0435\u043c\u0443 \u043e\u043d \u0441\u043e\u0431\u0440\u0430\u043b \u0441\u0432\u043e\u0438 \u043c\u044b\u0441\u043b\u0438 \u0432 \u044d\u0442\u0443 \u0451\u043c\u043a\u0443\u044e \u0437\u0430\u043c\u0435\u0442\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0441\u0442\u0430\u043d\u0435\u0442 \u0447\u0430\u0441\u0442\u044c\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 K8s. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0432 Kubernetes \u043a\u0430\u043a liveness probes (\u0442.\u0435., \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29232,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0412\u0435\u0434\u0443\u0449\u0438\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Zalando \u2014 Henning Jacobs \u2014 \u043d\u0435 \u0440\u0430\u0437 \u0437\u0430\u043c\u0435\u0447\u0430\u043b \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Kubernetes \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f liveness (\u0438 readiness) probes \u0438 \u0438\u0445 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/liveness-probes-v-kubernetes-mogut-byt-opasny\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Liveness probes \u0432 Kubernetes \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0430\u0441\u043d\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0412\u0435\u0434\u0443\u0449\u0438\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Zalando \u2014 Henning Jacobs \u2014 \u043d\u0435 \u0440\u0430\u0437 \u0437\u0430\u043c\u0435\u0447\u0430\u043b \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Kubernetes \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f liveness (\u0438 readiness) probes \u0438 \u0438\u0445 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/liveness-probes-v-kubernetes-mogut-byt-opasny\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:27:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:27:03+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Liveness probes in Kubernetes can be dangerous | ProHoster","description":"Note: Senior Engineer from Zalando \u2014 Henning Jacobs \u2014 has repeatedly observed users of Kubernetes struggling with understanding the purpose of liveness (and readiness) probes and their proper application.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/liveness-probes-v-kubernetes-mogut-byt-opasny","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Liveness probes \u0432 Kubernetes \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0430\u0441\u043d\u044b | ProHoster","og:description":"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0412\u0435\u0434\u0443\u0449\u0438\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Zalando \u2014 Henning Jacobs \u2014 \u043d\u0435 \u0440\u0430\u0437 \u0437\u0430\u043c\u0435\u0447\u0430\u043b \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Kubernetes \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f liveness (\u0438 readiness) probes \u0438 \u0438\u0445 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/liveness-probes-v-kubernetes-mogut-byt-opasny","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:27:03+00:00","article:modified_time":"2019-10-31T19:27:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38965","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 00:10:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:59:27","updated":"2026-01-24 00:10:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/38965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=38965"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/38965\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/29232"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=38965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=38965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=38965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}