{"id":91199,"date":"2020-08-10T01:42:03","date_gmt":"2020-08-09T23:42:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov"},"modified":"2020-08-10T01:42:03","modified_gmt":"2020-08-09T23:42:03","slug":"kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","title":{"rendered":"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>My name is Viktor Yagofarov, and I am responsible for the development of the Kubernetes platform at Domklik, serving as the technical lead for the Ops team (operations). I would like to share the structure of our Dev  Ops processes, the specifics of operating one of the largest k8s clusters in Russia, as well as the DevOps\/SRE practices that our team applies.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices\" src=\"\/wp-content\/uploads\/2020\/08\/6c908104c734b36cc7a960fbe4d65e3f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Ops Team<\/h4>\n<p>\nCurrently, there are 15 people in the Ops team. Three of them are responsible for the office, while two work in another time zone and are available at night as well. Thus, there is always someone from Ops at the monitor, ready to respond to incidents of any complexity. We do not have night shifts, which preserves our mental health and allows everyone to rest and engage in leisure activities beyond the computer.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices\" src=\"\/wp-content\/uploads\/2020\/08\/47051db273f116df376e64bad67c6f37.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEveryone has different competencies: network engineers, DBAs, specialists in the ELK stack, Kubernetes admins\/developers, monitoring specialists, virtualization experts, hardware specialists, etc. What unites us is that each person can partially substitute any of us: for example, introducing new nodes into the k8s cluster, updating PostgreSQL, writing CI\/CD pipelines + Ansible, automating tasks using Python\/Bash\/Go, connecting hardware in the data center. Strong competencies in one area do not hinder the ability to shift focus and start developing in another field. For instance, I joined the company as a PostgreSQL specialist, and now my primary responsibility is Kubernetes clusters. In the team, any growth is welcomed, and there is a strong sense of support.<\/p>\n<p>By the way, we are hiring. The requirements for candidates are quite standard. Personally, I think it\u2019s important for a person to fit into the team, be non-conflicting, but also be able to stand their ground, have a desire to develop and not be afraid to try new things, and propose their own ideas. Additionally, skills in scripting languages, knowledge of the basics of Linux, and English language proficiency are mandatory. English is needed simply so that a person can quickly Google a solution to a problem in 10 seconds rather than 10 minutes in case something goes wrong. It's very hard to find specialists with deep knowledge of Linux nowadays: it's funny, but two out of three candidates cannot answer the question, 'What is Load Average? What does it consist of?' and they consider the question, 'How to gather a core dump from a C program' as something from the realm of superhumans... or dinosaurs. It\u2019s something we have to deal with since usually, people have strong competencies in other areas, and we can teach them 'Linux.' The answer to the question, 'Why is all this important for a DevOps engineer in today's cloud world?' will have to be left outside the scope of this article, but in three words: all of this is necessary.<\/p>\n<h4>Tools Team<\/h4>\n<p>\nThe Tools team plays a significant role in automation. Their main task is to create convenient graphical and CLI tools for developers. For example, our internal development tool Confer allows deploying an application into Kubernetes with just a few clicks, setting up resources, keys from the vault, etc. Previously, we used Jenkins + Helm 2, but we had to develop our own tool to eliminate copy-pasting and bring consistency to the software lifecycle.<\/p>\n<p>The Ops team does not write pipelines for developers, but they can advise on any questions regarding their writing (some still have Helm 3).<\/p>\n<h4>DevOps<\/h4>\n<p>\nAs for DevOps, we see it this way:<\/p>\n<p>Dev teams write code, deploy it through Confer from dev -&gt; qa\/stage -&gt; prod. The responsibility for ensuring that the code doesn\u2019t lag and doesn\u2019t throw errors lies with the Dev and Ops teams. During the day, the on-duty person from the Ops team should primarily respond to incidents with their application, while during the evening and night, the on-call admin (Ops) should wake up the on-call developer if they are sure that the problem does not lie within the infrastructure. All metrics and alerts in monitoring appear automatically or semi-automatically.<\/p>\n<p>The Ops responsibility zone begins when the application is deployed to production, but Dev's responsibility does not end there \u2014 we are working on the same project and are in the same boat.<\/p>\n<p>Developers consult with admins if help is needed in writing an admin microservice (for example, Go backend + HTML5), and admins provide advice to developers on any infrastructure issues or questions related to k8s.<\/p>\n<p>By the way, we do not have a monolith at all, only microservices. Their number currently fluctuates between 900 and 1000 in the production k8s cluster, if measured by the number of <i>deployments<\/i>. The number of pods varies between 1700 and 2000. Currently, there are about 2000 pods in the production cluster.<\/p>\n<p>I cannot specify the exact numbers, as we monitor unnecessary microservices and eliminate them in a semi-automated manner. Monitoring unnecessary entities in k8s is assisted by <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Nastradamus\/useless-operator\">useless-operator<\/a><\/noindex>, which greatly saves resources and money.<\/p>\n<h2> Resource Management <\/h2>\n<p><\/p>\n<h4> Monitoring <\/h4>\n<p>\nA well-organized and informative monitoring system becomes a cornerstone in the operation of a large cluster. We have not yet found a universal solution that covers 100% of all monitoring requirements, so we periodically create different custom solutions in this environment.<\/p>\n<ul>\n<li><b>Zabbix<\/b>. The good old monitoring system, which is primarily designed to track the overall state of the infrastructure. It tells us when a node fails due to CPU, memory, disks, network, and so on. Nothing extraordinary, but we also have a separate DaemonSet of agents through which we monitor the state of DNS in the cluster: we search for lagging pods of coredns and check the availability of external hosts. It may seem unnecessary, but with high traffic volumes, this component is a serious point of failure. Earlier, I already <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/495450\/\">described<\/a><\/noindex>how I dealt with DNS performance in the cluster.<\/li>\n<li><b>Prometheus Operator<\/b>. A set of various exporters provides a broad overview of all cluster components. We then visualize all this on large dashboards in Grafana, and for alerts, we use alertmanager.\n<\/li>\n<\/ul>\n<p>\nAnother useful tool for us has been <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Nastradamus\/list-ingress\">list-ingress<\/a><\/noindex>. We wrote it after encountering several situations where one team's Ingress paths would overlap with another team's, resulting in 50x errors. Now, before deploying to production, developers check that no one is affected, and for my team, it's a useful tool for initial diagnostics of Ingress issues. Interestingly, it was initially created for admins and looked quite 'rough', but after it became popular with dev teams, it significantly evolved to no longer resemble an 'admin-made web interface for admins'. Soon we will phase out this tool, and similar situations will be validated even before the pipeline is deployed.<\/p>\n<h4>Team Resources in Kubernetes<\/h4>\n<p>\nBefore diving into examples, it's important to explain how we allocate resources for <i>microservices<\/i>.<\/p>\n<p>To understand which teams and in what amounts use their <i>resources<\/i> (CPU, memory, local SSD), we assign each team its own <i>namespace<\/i> in 'Kube' and we limit its maximum capabilities regarding CPU, memory, and disk, having previously discussed the needs of the teams. Accordingly, one team generally won't block the entire cluster for deployment by reserving thousands of cores and terabytes of memory. Access to the namespace is granted through AD (we use RBAC). Namespaces and their limits are added through a pull request in the GIT repository, and then everything is automatically deployed through the Ansible pipeline.<\/p>\n<p>Example of resource allocation for a team:<\/p>\n<pre><code class=\"go\">namespaces:\n\n  chat-team:\n    pods: 23\n    limits:\n      cpu: 11\n      memory: 20Gi\n    requests:\n      cpu: 11\n      memory: 20Gi\n<\/code><\/pre>\n<p><\/p>\n<h4>Requests and Limits<\/h4>\n<p>\nIn Kubernetes <i>Request<\/i> \u2014 this is the amount of resources guaranteed to be reserved for <i>pod<\/i> (one or more Docker containers) in the cluster. Limit is an unguaranteed maximum. Often, you can see on graphs how some team has set too many requests for all their applications and cannot deploy an application in 'Kube', as all requests under their namespace have already been 'spent'.<\/p>\n<p>The correct way out of such a situation: monitor actual resource consumption and compare it with the requested amount (Request).<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices\" src=\"\/wp-content\/uploads\/2020\/08\/417373d4421064f28d57a03b6bb5bf94.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices\" src=\"\/wp-content\/uploads\/2020\/08\/3168ad6dc8b159059b21e1177e145376.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn the screenshots above, you can see that the 'requested' (Requested) CPUs align with the actual number of threads, and Limits can exceed the actual number of CPU threads =)<\/p>\n<p>Now let's take a closer look at a namespace (I chose the kube-system namespace \u2014 the system namespace for components of Kubernetes) and examine the ratio of actual CPU time and memory used to what has been requested:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices\" src=\"\/wp-content\/uploads\/2020\/08\/ed6160de5397b8cd39cbae172d4bb872.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt is obvious that significantly more memory and CPU is reserved for system services than is actually used. In the case of kube-system, this is justified: there have been times when the nginx ingress controller or nodelocaldns peaked in CPU usage and consumed a lot of RAM, so this cushion makes sense. Moreover, we cannot rely on graphs from the last 3 hours: it is preferable to see historical metrics over a longer period.<\/p>\n<p>A 'recommendations' system has been developed. For example, here you can see which resources would benefit from raising their 'limits' (the upper allowed threshold) to avoid 'throttling': the moment when CPU or memory has been exhausted within the allocated quantum of time and is waiting to be 'unthrottled':<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices\" src=\"\/wp-content\/uploads\/2020\/08\/f23aece10a585e6847bcacfe947031d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnd here are the pods that should moderate their appetites:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices\" src=\"\/wp-content\/uploads\/2020\/08\/1ec9996ce6355aeba603008d51aac209.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAbout <i>throttling<\/i> + resource monitoring could fill more than one article, so feel free to ask questions in the comments. In short, I can say that the task of automating such metrics is quite complex and requires a lot of time and acrobatics with window functions and CTE in Prometheus \/ VictoriaMetrics (these terms are put in quotes because there is almost nothing similar in PromQL, and you have to create lengthy queries that span multiple screens of text and then optimize them).<\/p>\n<p>As a result, developers have tools for monitoring their namespaces in Kubernetes, and they can decide where and when to 'trim' resources for certain applications, while allowing some pods to use all CPU overnight.<\/p>\n<h4>Methodologies<\/h4>\n<p>\nIn the company, as is currently fashionable, <i>we adhere to DevOps and<\/i>- practices. When a company has 1000 microservices, around 350 developers, and 15 admins managing the entire infrastructure, it is necessary to 'be trendy': behind all these 'buzzwords' lies an acute need for automation of everything, and admins should not be the bottleneck in the processes. <i>SRE<\/i>As Ops, we provide various metrics and dashboards for developers related to the response times of services and their errors.<\/p>\n<p>We use methodologies such as:<\/p>\n<p>RED <noindex><a rel=\"nofollow\" href=\"https:\/\/thenewstack.io\/monitoring-microservices-red-method\/\">USE<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/usemethod.html\">Golden Signals<\/a><\/noindex> and <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/forepaas\/distributed-monitoring-101-the-four-golden-signals-305bbbc33d35\">Golden Signals<\/a><\/noindex>, combining them together. We strive to minimize the number of dashboards so that at a glance, it's clear which service is currently degrading (for example, response codes per second, response time in the 99th percentile), and so on. As soon as new metrics are needed for the general dashboards, we immediately create and add them.<\/p>\n<p><i>I haven't drawn any graphs in a month. Probably a good sign: it means that most of the 'wish list' has already been implemented. There were times I would draw some new graph at least once a day during the week.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices\" src=\"\/wp-content\/uploads\/2020\/08\/574f1b4d2be78fb779f1771bffac51dd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices\" src=\"\/wp-content\/uploads\/2020\/08\/6ab2aa05f912839b14bdbcf84faaeb3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe resulting outcome is valuable in that developers rarely come to admins with questions of 'where to look for a certain metric.'<\/p>\n<p>Implementation <i>Service Mesh<\/i> is not far off and should greatly simplify life for everyone; colleagues from Tools are already close to implementing an abstract 'healthy person's Istio': the lifecycle of each HTTP(s) request will be visible in monitoring, and it will always be possible to understand 'at what stage everything broke' during inter-service (and not only) interactions. Subscribe to the company Hub news from DomClick. =)<\/p>\n<h2>Kubernetes Infrastructure Support<\/h2>\n<p>\nHistorically, we have been using a patched version <i>Kubespray<\/i> \u2014 Ansible role for deploying, scaling, and updating Kubernetes. At some point, support for non-kubeadm installations was removed from the main branch, and a transition process to kubeadm was not proposed. As a result, Southbridge created its fork (with kubeadm support and a quick fix for critical issues). <\/p>\n<p>The process of updating all k8s clusters looks like this:<\/p>\n<ul>\n<li>We take <i>Kubespray<\/i> from Southbridge, compare it with our branch, and merge.<\/li>\n<li>We roll out the update in <i>Stress<\/i>- 'Cube'.<\/li>\n<li>We roll out the update one node at a time (in Ansible this is 'serial: 1') in <i>Dev<\/i>- 'Cube'.<\/li>\n<li>Update <i>Prod<\/i> on Saturday evenings one node at a time.<\/li>\n<\/ul>\n<p>\nIn the future, there are plans to replace <i>Kubespray<\/i> with something faster and transition to <i>kubeadm<\/i>.<\/p>\n<p>We have three 'Cubes': Stress, Dev, and Prod. We plan to launch another one (<i>hot standby<\/i>) Prod 'Cube' in the second data center. <i>Stress<\/i> and <i>Dev<\/i> live in 'virtual machines' (oVirt for Stress and VMWare cloud for Dev). <i>Prod<\/i>- 'Cube' lives on 'bare metal': these are identical nodes with 32 CPU threads, 64-128 GB of memory, and 300 GB SSD RAID 10 \u2014 a total of 50 units. Three 'thin' nodes are allocated for the 'masters' of <i>Prod<\/i>- 'Cube': 16 GB of memory, 12 CPU threads.<\/p>\n<p>For production, we prefer to use 'bare metal' and avoid unnecessary layers like <i>OpenStack<\/i>: we don't need 'noisy neighbors' and CPU <i>steal time<\/i>The complexity of administration roughly doubles in the case of in-house OpenStack.<\/p>\n<p>For CI\/CD of 'Kubernetes' and other infrastructure components, we use a separate GIT server, Helm 3 (we transitioned quite painfully from Helm 2, but we are very pleased with the options, <i>atomic<\/i>), Jenkins, Ansible, and Docker. We love feature branches and deploying to different environments from a single repository.<\/p>\n<h3>Conclusion<\/h3>\n<p><img decoding=\"async\" alt=\"Kubernetes in DomClick: how to sleep soundly while managing a cluster of 1000 microservices\" src=\"\/wp-content\/uploads\/2020\/08\/34ddcd1f275c63c1ad821218d16b5abb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nThis, in general terms, outlines how the DevOps process looks from the perspective of an operations engineer at DomClick. The article turned out to be less technical than I expected: stay tuned for news from DomClick on Habr, as there will be more 'hardcore' articles about Kubernetes and more.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/501122\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f). \u042f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 Dev &lt;-&gt; Ops, \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 k8s-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e DevOps\/SRE-\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 Ops \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91200,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91199","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=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\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\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov\" \/>\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\udd47Kubernetes \u0432 \u0414\u043e\u043c\u041a\u043b\u0438\u043a: \u043a\u0430\u043a \u0441\u043f\u0430\u0442\u044c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u043d\u0430 1000 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov\" \/>\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=\"2020-08-09T23:42:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-09T23:42: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\udd47Kubernetes at DomClick: how to sleep peacefully while managing a cluster of 1000 microservices | ProHoster","description":"My name is Viktor Yagofarov, and I am developing the Kubernetes platform at DomClick as the technical lead for the Ops (Operations) team.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","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\udd47Kubernetes \u0432 \u0414\u043e\u043c\u041a\u043b\u0438\u043a: \u043a\u0430\u043a \u0441\u043f\u0430\u0442\u044c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u043d\u0430 1000 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 | ProHoster","og:description":"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","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":"2020-08-09T23:42:03+00:00","article:modified_time":"2020-08-09T23:42:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91199","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:32:23","updated":"2022-09-28 06:43:59","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\/91199","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=91199"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/91199\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/91200"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=91199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=91199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=91199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}