{"id":39016,"date":"2019-10-31T22:27:21","date_gmt":"2019-10-31T19:27:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/7-luchshih-praktik-po-ekspluatatsii-kontejnerov-po-versii-google\/"},"modified":"2019-10-31T22:27:21","modified_gmt":"2019-10-31T19:27:21","slug":"7-luchshih-praktik-po-ekspluatatsii-kontejnerov-po-versii-google","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/7-luchshih-praktik-po-ekspluatatsii-kontejnerov-po-versii-google","title":{"rendered":"7 best practices for operating containers according to Google","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Note: translation.<\/b>: The author of the original article is Th\u00e9o Chamley, a Google Cloud solutions architect. In this blog post for Google Cloud, he presented a brief summary of a more detailed guide by his company titled '<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/solutions\/best-practices-for-operating-containers\">Best Practices for Operating Containers<\/a><\/noindex>.' In it, Google professionals compiled the best practices for operating containers in the context of using Google Kubernetes Engine and beyond, covering a wide range of topics: from security to monitoring and logging. So, what practices are considered most important for working with containers according to Google?<\/i><\/p>\n<p><img decoding=\"async\" alt=\"7 best practices for operating containers according to Google\" src=\"\/wp-content\/uploads\/2019\/10\/43aaa13a0fae1564ffc7f0a1fe0020b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/kubernetes-engine\/\">Kubernetes Engine<\/a><\/noindex> <i>(a Kubernetes-based service for running containerized applications in Google Cloud \u2014 <b>translator's note.<\/b>)<\/i> \u2014 is one of the best ways to run workloads that require scaling. <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/kubernetes\/\">Kubernetes<\/a><\/noindex> It will ensure the smooth operation of most applications if they are containerized. However, if you want your application to be easy to manage, and if you want to take advantage of all the benefits of Kubernetes, it is essential to follow best practices. They will simplify application operation, monitoring, debugging, and enhance security.<\/p>\n<p>In this article, we will go over a list of what you should know and do for the effective functioning of containers in Kubernetes. Those wishing to delve deeper into the details should read the material <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/solutions\/best-practices-for-operating-containers\">Best Practices for Operating Containers<\/a><\/noindex>, as well as take a look at our <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/blog\/products\/gcp\/7-best-practices-for-building-containers\">earlier post<\/a><\/noindex> on building containers.<\/p>\n<h2>1. Use native container mechanisms for logging<\/h2>\n<p>\nIf the application is running in a Kubernetes cluster, not much is needed for logging. A centralized logging system is likely already built into the cluster used. In the case of using Kubernetes Engine, this is handled by <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/logging\/\">Stackdriver Logging<\/a><\/noindex>. <i>(<b>Note: translation.<\/b>: If you are using your own Kubernetes installation, we recommend checking out our Open Source solution \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/loghouse\">loghouse<\/a><\/noindex>.)<\/i> Don't complicate your life and use native container logging mechanisms. Write logs to stdout and stderr\u2014they will be automatically captured, stored, and indexed.<\/p>\n<p>If desired, you can also write logs to <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/logging\/docs\/structured-logging\">JSON format<\/a><\/noindex>. This approach will make it easy to add metadata to them. Along with this, the ability to search logs using this metadata will appear in Stackdriver Logging.<\/p>\n<h2>2. Ensure that containers are stateless and immutable<\/h2>\n<p>\nFor containers in a Kubernetes cluster to function correctly, they must be stateless and immutable. When these conditions are met, Kubernetes can perform its tasks by creating and destroying application entities as needed.<\/p>\n<p><i>Stateless<\/i> means that any state (persistent data of any kind) is stored outside the container. To this end, depending on requirements, various types of external storage may be used: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/storage\/docs\">Cloud Storage<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/kubernetes-engine\/docs\/how-to\/stateful-apps\">Persistent Disks<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/memorystore\/docs\/redis\/\">Redis<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/sql\/docs\/\">Cloud SQL<\/a><\/noindex> or other managed databases. <i>(<b>Note: translation.<\/b>: Read more about this in our article \u201c<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/326414\/\">Operators for Kubernetes: how to run stateful applications<\/a><\/noindex>\u00bb.)<\/i><\/p>\n<p><i>Immutable<\/i> means that the container will not be modified during its lifetime: no updates, patches, or configuration changes. If you need to update the application code or apply a patch, create a new image and deploy it. It is recommended to externalize container configuration (listening port, execution environment options, etc.) into <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/secret\/\">Secrets<\/a><\/noindex> and <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-pod-configmap\/\">ConfigMaps<\/a><\/noindex>. They can be updated without needing to build a new container image. For easy creation of image build pipelines, you can use <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/cloud-build\/\">Cloud Build<\/a><\/noindex>. <i>(<b>Note: translation.<\/b>: We use the Open Source tool <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/dapp\">dapp<\/a><\/noindex>.)<\/i><\/p>\n<p><img decoding=\"async\" alt=\"7 best practices for operating containers according to Google\" src=\"\/wp-content\/uploads\/2019\/10\/f13a83d22e7b8d7c1e8ac6a63c35646c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Example of updating Deployment configuration in Kubernetes using a ConfigMap mounted in pods as configuration<\/i><\/p>\n<h2>3. Avoid privileged containers<\/h2>\n<p>\nYou are not running applications under root on your servers, are you? If an attacker gains access to the application, they will have root privileges. The same considerations apply to not running privileged containers. If there is a need to change settings on the host, specific permissions can be granted to the container. <i>capabilities<\/i> using the option <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/security-context\/#set-capabilities-for-a-container\"><code>securityContext<\/code><\/a><\/noindex> in Kubernetes. If it is necessary to modify <i>sysctls<\/i>, Kubernetes has a <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/sysctl-cluster\/\">dedicated annotation<\/a><\/noindex> for this. Generally, try to utilize <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/init-containers\/\">init-<\/a><\/noindex> and sidecar containers for performing such privileged operations. They do not need to be reachable for internal or external traffic.<\/p>\n<p>If you administer a cluster, you can take advantage of <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/policy\/pod-security-policy\/#privileged\">Pod Security Policy<\/a><\/noindex> for limitations on using privileged containers.<\/p>\n<h2>4. Avoid running as root<\/h2>\n<p>\nWe've already discussed privileged containers, but it would be even better if, in addition to that, you do not run applications inside the container under root. If an attacker finds a remote vulnerability with code execution in an application running with root privileges, they could escape the container through an unknown vulnerability and gain root access on the host.<\/p>\n<p>The best way to avoid this is, first and foremost, not to run anything under root. You can achieve this by using the directive. <code>USER<\/code> downward API support (simultaneously with this in <code>Dockerfile<\/code> or <code>runAsUser<\/code> in Kubernetes. The cluster administrator can also enforce behavior using <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/kubernetes-engine\/docs\/how-to\/pod-security-policies\">Pod Security Policy<\/a><\/noindex>.<\/p>\n<h2>5. Make the application easy to monitor<\/h2>\n<p>\nLike logging, monitoring is an integral part of application management. A popular solution for monitoring in the Kubernetes community is <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex> \u2014 a system that automatically discovers pods and services that need monitoring. <i>(<b>Note: translation.<\/b>: See also our <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/412901\/\">detailed report<\/a><\/noindex> on monitoring with Prometheus and Kubernetes.)<\/i> <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/monitoring\/kubernetes-engine\/\">Stackdriver<\/a><\/noindex> can monitor Kubernetes clusters and includes its own version of Prometheus for monitoring applications.<\/p>\n<p><img decoding=\"async\" alt=\"7 best practices for operating containers according to Google\" src=\"\/wp-content\/uploads\/2019\/10\/642b9ccc4b7a789018a4aeeb62e7cae7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>The Kubernetes monitoring dashboard in Stackdriver<\/i><\/p>\n<p>expects the application to expose metrics at an HTTP endpoint. There are <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/docs\/instrumenting\/clientlibs\/\">Prometheus client libraries<\/a><\/noindex>. The same format is used by other tools such as <noindex><a rel=\"nofollow\" href=\"http:\/\/opencensus.io\/\">OpenCensus<\/a><\/noindex> and <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/\">Istio<\/a><\/noindex>.<\/p>\n<h2>6. Make the application's health status accessible<\/h2>\n<p>\nManaging an application in production is aided by its ability to report its status to the system. Is the application running? Is it healthy? Is it ready to accept traffic? How is it behaving? The most common approach to address this is to implement health checks <i>(health checks)<\/i>. Kubernetes has two types of them: <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-liveness-readiness-probes\/\">liveness and readiness probes<\/a><\/noindex>.<\/p>\n<p>For a liveness probe <i>(liveness check)<\/i> the application must have an HTTP endpoint that returns a \"200 OK\" response if it is functioning and its critical dependencies are met. For a readiness probe <i>(readiness check)<\/i> The application should have a separate HTTP endpoint that returns a \"200 OK\" response if the application is healthy, initialization steps are complete, and any valid request does not result in an error. Kubernetes will direct traffic to the container only when the application is ready according to these checks. Two endpoints can be combined if there is no difference between the liveness and readiness states.<\/p>\n<p>You can read more about this in the relevant article by Sandeep Dinesh, Developer Advocate at Google: \"<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/blog\/products\/gcp\/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes\">Kubernetes best practices: Setting up health checks with readiness and liveness probes<\/a><\/noindex>\u00bb.<\/p>\n<h2>7. Choose the image version carefully<\/h2>\n<p>\nMost public and private images use a tagging system similar to what is described in <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/solutions\/best-practices-for-building-containers#properly_tag_your_images\">Best Practices for Building Containers<\/a><\/noindex>. If the image uses a system similar to <noindex><a rel=\"nofollow\" href=\"https:\/\/semver.org\/lang\/ru\/\">semantic versioning<\/a><\/noindex>, the specifics of tagging should be considered. For example, a tag <code>latest<\/code> may frequently move from image to image \u2014 it cannot be relied upon if you need predictable and reproducible builds and installations.<\/p>\n<p>You can use the tag <code>X.Y.Z<\/code> (they are almost always unchanged); however, in this case, track all patches and updates to the image. If the image you\u2019re using has a tag <code>X.Y<\/code>, it is a good compromise. By choosing it, you automatically receive patches while relying on a stable version of the application.<\/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\/company\/flant\/blog\/422949\/\">New CNCF statistics on containers, cloud native, and Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/353272\/\">7 principles of container-based application design<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/417905\/\">11 Ways to (Not) Become a Victim of Hacking in Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/331188\/\">Our experience with Kubernetes in small projects<\/a><\/noindex>\u00bb <i>(overview and presentation video)<\/i>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/412901\/\">Monitoring and Kubernetes<\/a><\/noindex>\u00bb <i>(overview and presentation video)<\/i>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/324274\/\">We build Docker images for CI\/CD quickly and conveniently with dapp<\/a><\/noindex>\u00bb <i>(overview and presentation video)<\/i>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/322686\/\">Continuous Delivery Practices with Docker<\/a><\/noindex>\u00bb <i>(overview and presentation video)<\/i>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/347518\/\">The death of microservices madness in 2018<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/425085\/\">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.: \u0410\u0432\u0442\u043e\u0440 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 Th\u00e9o Chamley, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 Google. \u0412 \u044d\u0442\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0431\u043b\u043e\u0433\u0430 Google Cloud \u043e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u043a\u0440\u0430\u0442\u043a\u0443\u044e \u0432\u044b\u0436\u0438\u043c\u043a\u0443 \u0438\u0437 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u043d\u0430\u0437\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u00abBest Practices for Operating Containers\u00bb. \u0412 \u043d\u0451\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b Google \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u043b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u043f\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Google Kubernetes Engine \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e, \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29273,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-39016","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.: \u0410\u0432\u0442\u043e\u0440 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 Th\u00e9o Chamley, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 Google.\" \/>\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\/7-luchshih-praktik-po-ekspluatatsii-kontejnerov-po-versii-google\" \/>\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\udd477 \u043b\u0443\u0447\u0448\u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u043a \u043f\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043f\u043e \u0432\u0435\u0440\u0441\u0438\u0438 Google | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0410\u0432\u0442\u043e\u0440 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 Th\u00e9o Chamley, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 Google.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/7-luchshih-praktik-po-ekspluatatsii-kontejnerov-po-versii-google\" \/>\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:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:27:21+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\udd477 best practices for container operations according to Google | ProHoster","description":"Note: The author of the original article is Th\u00e9o Chamley, a cloud solutions architect at Google.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/7-luchshih-praktik-po-ekspluatatsii-kontejnerov-po-versii-google","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\udd477 \u043b\u0443\u0447\u0448\u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u043a \u043f\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043f\u043e \u0432\u0435\u0440\u0441\u0438\u0438 Google | ProHoster","og:description":"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0410\u0432\u0442\u043e\u0440 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 Th\u00e9o Chamley, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 Google.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/7-luchshih-praktik-po-ekspluatatsii-kontejnerov-po-versii-google","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:21+00:00","article:modified_time":"2019-10-31T19:27:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"39016","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:24:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:58:39","updated":"2026-01-24 00:24:24","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\/39016","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=39016"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/39016\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/29273"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=39016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=39016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=39016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}