{"id":91054,"date":"2020-08-08T01:42:11","date_gmt":"2020-08-07T23:42:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kuricza-ili-yajczo-raskalyvaem-iac"},"modified":"2020-08-08T01:42:11","modified_gmt":"2020-08-07T23:42:11","slug":"kuricza-ili-yajczo-raskalyvaem-iac","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kuricza-ili-yajczo-raskalyvaem-iac","title":{"rendered":"Kana v\u00f5i muna: purustame IaC","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC\" src=\"\/wp-content\/uploads\/2020\/08\/9c5ca7cbd6e44c916da1784a7e728289.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u0427\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u044c\u0448\u0435 \u2014 \u043a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e? \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e Infrastructure-as-Code, \u043d\u0435 \u0442\u0430\u043a \u043b\u0438?<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u044f\u0439\u0446\u043e?<\/h2>\n<p>\n\u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e Infrastructure-as-Code (IaC) \u2014 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0412 \u043d\u0435\u043c \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u041f\u041e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 IaC \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f:<\/p>\n<ol>\n<li><b>Resource Provision.<\/b> \u042d\u0442\u043e VMs, S3, VPC \u0438 \u0442.\u0434. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b: <noindex><a rel=\"nofollow\" href=\"https:\/\/terraform.io\">Terraform<\/a><\/noindex> \u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/cloudformation\/\">CloudFormation<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/System_Center_Configuration_Manager\"><b>Software Configuration<\/b><\/a><\/noindex>. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\">Ansible<\/a><\/noindex>, Chef \u0438 \u0442.\u0434.<\/li>\n<\/ol>\n<p>\n \u041b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434 \u043b\u0435\u0436\u0438\u0442 \u0432 git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445. \u0418 \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u0442\u0438\u043c\u043b\u0438\u0434 \u0440\u0435\u0448\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0431\u044b \u043d\u0430\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432 \u043d\u0438\u0445. \u0418 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c \u043e\u043d. \u0418 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0418 \u0443\u0432\u0438\u0434\u0438\u0442 \u043e\u043d, \u0447\u0442\u043e \u044d\u0442\u043e \u0435\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/providers\/gitlab\/index.html\">GitLab<\/a><\/noindex> \u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/providers\/github\/index.html\">GitHub<\/a><\/noindex>-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f Terraform (\u0438 \u044d\u0442\u043e Software Configuration). \u0421 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c: \u0447\u043b\u0435\u043d\u0430\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, CI\/CD, git-flow \u0438 \u0442.\u0434.<\/p>\n<h2>\u041e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u043e\u0441\u044c \u044f\u0439\u0446\u043e?<\/h2>\n<p>\n\u0412\u043e\u0442 \u043c\u044b \u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043c \u043a \u0433\u043b\u0430\u0432\u043d\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0443.<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0434\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u0435\u0431\u044f. \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 GitOps \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c CI, \u0447\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c.<\/p>\n<p>\u0415\u0441\u043b\u0438 Git \u0435\u0449\u0435 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d?<\/p>\n<ol>\n<li>\u041a\u0430\u043a \u0435\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 Git?<\/li>\n<li>\u041a\u0430\u043a \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c CI?<\/li>\n<li>\u0415\u0441\u043b\u0438 Gitlab \u043c\u044b \u0442\u043e\u0436\u0435 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e IaC, \u0434\u0430 \u0435\u0449\u0435 \u0438 \u0432 Kubernetes?<\/li>\n<li>\u0418 GitLab Runner \u0442\u043e\u0436\u0435 \u0432 Kubernetes?<\/li>\n<li>\u0410 Kubernetes \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0435?<\/li>\n<\/ol>\n<p><\/p>\n<blockquote><p><b><i>\u0427\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u044c\u0448\u0435: GitLab, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0443 \u0441\u0432\u043e\u0439 \u043a\u043e\u0434, \u0438\u043b\u0438 \u043a\u043e\u0434, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0442\u043e, \u043a\u0430\u043a\u043e\u0439 GitLab \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d?<\/i><\/b><\/p><\/blockquote>\n<p><\/p>\n<h2>\u041a\u0443\u0440\u0438\u0446\u0430 \u0441 \u044f\u0439\u0446\u0430\u043c\u0438<\/h2>\n<p><\/p>\n<h3>\u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Oyakodon\">\u041e\u044f\u043a\u043e\u0434\u043e\u043d<\/a><\/noindex>3 \u0441 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u043e\u043c\u00bb [<noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/chicken-or-egg\/mks\">src<\/a><\/noindex>]<\/h3>\n<p>\n\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0431\u043b\u044e\u0434\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 <noindex><a rel=\"nofollow\" href=\"http:\/\/slc.tl\/UgP-9\">Managed Kubernetes Selectel<\/a><\/noindex>.<\/p>\n<h3>TL;DR<\/h3>\n<p>\n\u0410 \u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0430\u0437\u0443 \u0438 \u0432 \u043e\u0434\u043d\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443?<\/p>\n<pre><code class=\"plaintext\">$ export MY_SELECTEL_TOKEN=&lt;token&gt;\n$ curl https:\/\/gitlab.com\/chicken-or-egg\/mks\/make\/-\/snippets\/2002106\/raw | bash<\/code><\/pre>\n<h3>\u0418\u043d\u0433\u0440\u0435\u0434\u0438\u0435\u043d\u0442\u044b:<\/h3>\n<p><\/p>\n<ul>\n<li>\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u043e\u0442 my.selectel.ru;<\/li>\n<li>\u0422\u043e\u043a\u0435\u043d \u043e\u0442 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430;<\/li>\n<li>\u041d\u0430\u0432\u044b\u043a\u0438 Kubernetes;<\/li>\n<li>\u041d\u0430\u0432\u044b\u043a\u0438 Helm;<\/li>\n<li>\u041d\u0430\u0432\u044b\u043a\u0438 Terraform;<\/li>\n<li>Helm chart GitLab;<\/li>\n<li>Helm chart GitLab Runner.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u0420\u0435\u0446\u0435\u043f\u0442:<\/h3>\n<p><\/p>\n<ol>\n<li>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c MY_SELECTEL_TOKEN \u0438\u0437 \u043f\u0430\u043d\u0435\u043b\u0438 <b>my.selectel.ru<\/b>.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0432 \u043d\u0435\u0433\u043e \u0442\u043e\u043a\u0435\u043d \u043e\u0442 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430.<\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c KUBECONFIG \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c GitLab \u0432 Kubernetes.<\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c GitLab-token \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e GitLab \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f <i>root<\/i>.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 GitLab, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f GitLab-token.<\/li>\n<li>\u0417\u0430\u043f\u0443\u0448\u0438\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u043a\u043e\u0434 \u0432 GitLab.<\/li>\n<li>???<\/li>\n<li>Profit!<\/li>\n<\/ol>\n<p>\n<b>\u0428\u0430\u0433 1<\/b>. \u0422\u043e\u043a\u0435\u043d \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/my.selectel.ru\/profile\/apikeys\">\u041a\u043b\u044e\u0447\u0438 API<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC\" src=\"\/wp-content\/uploads\/2020\/08\/791c353e2ba7e33285d4e8672b8cd8f8.png\" style=\"display:block;margin: 0 auto;\" \/><b>\u0428\u0430\u0433 2<\/b>. \u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448 Terraform \u0434\u043b\u044f \u00ab\u0437\u0430\u043f\u0435\u043a\u0430\u043d\u0438\u044f\u00bb \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438\u0437 2 \u043d\u043e\u0434. \u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0445\u0432\u0430\u0442\u0438\u0442 \u043d\u0430 \u0432\u0441\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043a\u0432\u043e\u0442\u044b:<\/p>\n<pre><code class=\"plaintext\">provider &quot;selectel&quot; {\n token = var.my_selectel_token\n}\n\nvariable &quot;my_selectel_token&quot; {}\nvariable &quot;username&quot; {}\nvariable &quot;region&quot; {}\n\n\nresource &quot;selectel_vpc_project_v2&quot; &quot;my-k8s&quot; {\n name = &quot;my-k8s-cluster&quot;\n theme = {\n   color = &quot;269926&quot;\n }\n quotas {\n   resource_name = &quot;compute_cores&quot;\n   resource_quotas {\n     region = var.region\n     zone = &quot;${var.region}a&quot;\n     value = 16\n   }\n }\n quotas {\n   resource_name = &quot;network_floatingips&quot;\n   resource_quotas {\n     region = var.region\n     value = 1\n   }\n }\n quotas {\n   resource_name = &quot;load_balancers&quot;\n   resource_quotas {\n     region = var.region\n     value = 1\n   }\n }\n quotas {\n   resource_name = &quot;compute_ram&quot;\n   resource_quotas {\n     region = var.region\n     zone = &quot;${var.region}a&quot;\n     value = 32768\n   }\n }\n quotas {\n   resource_name = &quot;volume_gigabytes_fast&quot;\n   resource_quotas {\n     region = var.region\n     zone = &quot;${var.region}a&quot;\n     # (20 * 2) + 50 + (8 * 3 + 10)\n     value = 130\n   }\n }\n}\n\nresource &quot;selectel_mks_cluster_v1&quot; &quot;k8s-cluster&quot; {\n name         = &quot;k8s-cluster&quot;\n project_id   = selectel_vpc_project_v2.my-k8s.id\n region       = var.region\n kube_version = &quot;1.17.9&quot;\n}\n\nresource &quot;selectel_mks_nodegroup_v1&quot; &quot;nodegroup_1&quot; {\n cluster_id        = selectel_mks_cluster_v1.k8s-cluster.id\n project_id        = selectel_mks_cluster_v1.k8s-cluster.project_id\n region            = selectel_mks_cluster_v1.k8s-cluster.region\n availability_zone = &quot;${var.region}a&quot;\n nodes_count       = 2\n cpus              = 8\n ram_mb            = 16384\n volume_gb         = 15\n volume_type       = &quot;fast.${var.region}a&quot;\n labels            = {\n   &quot;project&quot;: &quot;my&quot;,\n }\n}<\/code><\/pre>\n<p>\n\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442:<\/p>\n<pre><code class=\"plaintext\">resource &quot;random_password&quot; &quot;my-k8s-user-pass&quot; {\n length = 16\n special = true\n override_special = &quot;_%@&quot;\n}\n\nresource &quot;selectel_vpc_user_v2&quot; &quot;my-k8s-user&quot; {\n password = random_password.my-k8s-user-pass.result\n name = var.username\n enabled  = true\n}\n\nresource &quot;selectel_vpc_keypair_v2&quot; &quot;my-k8s-user-ssh&quot; {\n public_key = file(&quot;~\/.ssh\/id_rsa.pub&quot;)\n user_id    = selectel_vpc_user_v2.my-k8s-user.id\n name = var.username\n}\n\nresource &quot;selectel_vpc_role_v2&quot; &quot;my-k8s-role&quot; {\n project_id = selectel_vpc_project_v2.my-k8s.id\n user_id    = selectel_vpc_user_v2.my-k8s-user.id\n}<\/code><\/pre>\n<p>\n\u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"plaintext\">output &quot;project_id&quot; {\n value = selectel_vpc_project_v2.my-k8s.id\n}\n\noutput &quot;k8s_id&quot; {\n value = selectel_mks_cluster_v1.k8s-cluster.id\n}\n\noutput &quot;user_name&quot; {\n value = selectel_vpc_user_v2.my-k8s-user.name\n}\n\noutput &quot;user_pass&quot; {\n value = selectel_vpc_user_v2.my-k8s-user.password\n}<\/code><\/pre>\n<p>\n\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c:<\/p>\n<pre><code class=\"plaintext\">$ env \nTF_VAR_region=ru-3 \nTF_VAR_username=diamon \nTF_VAR_my_selectel_token=&lt;token&gt; \nterraform plan -out planfile\n\n$ terraform apply -input=false -auto-approve planfile<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC\" src=\"\/wp-content\/uploads\/2020\/08\/4d32973294bfb0656e8f64cfef45c254.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>\u0428\u0430\u0433 3<\/b>. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u0443\u0431\u043a\u043e\u043d\u0444\u0438\u0433.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c KUBECONFIG, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u043e\u0442 OpenStack:<\/p>\n<pre><code class=\"plaintext\">openstack token issue -c id -f value &gt; token<\/code><\/pre>\n<p>\n\u0418 \u0443\u0436\u0435 \u0441 \u044d\u0442\u0438\u043c \u0442\u043e\u043a\u0435\u043d\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 Managed Kubernetes Selectel API. <i>k8s_id<\/i> \u0432\u044b\u0434\u0430\u0435\u0442 <i>terraform<\/i>:<\/p>\n<pre><code class=\"plaintext\">curl -XGET -H &quot;x-auth-token: $(cat token)&quot; &quot;https:\/\/ru-3.mks.selcloud.ru\/v1\/clusters\/$(cat k8s_id)\/kubeconfig&quot; -o kubeConfig.yaml<\/code><\/pre>\n<p>\n\u041a\u0443\u0431\u043a\u043e\u043d\u0444\u0438\u0433 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043d\u0435\u043b\u044c.<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC\" src=\"\/wp-content\/uploads\/2020\/08\/ebed7ad0a9988b3837472ac8f298279f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>\u0428\u0430\u0433 4<\/b>. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0437\u0430\u043f\u0435\u043a\u0441\u044f \u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u0435\u0440\u0445\u0443 yaml \u043f\u043e \u0432\u043a\u0443\u0441\u0443.<\/p>\n<p>\u042f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c:<\/p>\n<ul>\n<li>namespace,<\/li>\n<li>storage class,<\/li>\n<li>pod security policy \u0438 \u043f\u0440\u043e\u0447\u0435\u0435.<\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/storage-classes\/\">Storage Class<\/a><\/noindex> \u0434\u043b\u044f Selectel \u043c\u043e\u0436\u043d\u043e \u0431\u0440\u0430\u0442\u044c \u0438\u0437 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/selectel\/kubernetes-examples\/blob\/master\/storageclasses\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/a><\/noindex>.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432 \u0437\u043e\u043d\u0435 <b>ru-3a<\/b>, \u0442\u043e \u0438 Storage Class \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0438\u0437 \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b.<\/p>\n<pre><code class=\"plaintext\">kind: StorageClass\napiVersion: storage.k8s.io\/v1\nmetadata:\n name: fast.ru-3a\n annotations:\n   storageclass.kubernetes.io\/is-default-class: &quot;true&quot;\nprovisioner: cinder.csi.openstack.org\nparameters:\n type: fast.ru-3a\n availability: ru-3a\nallowVolumeExpansion: true<\/code><\/pre>\n<p>\n<b>\u0428\u0430\u0433 5<\/b>. \u0421\u0442\u0430\u0432\u0438\u043c \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<p>\u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 <b>nginx-ingress<\/b>. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u043e \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0443\u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<pre><code class=\"plaintext\">$ helm repo add nginx-stable https:\/\/helm.nginx.com\/stable\n$ helm upgrade nginx-ingress nginx-stable\/nginx-ingress -n ingress --install -f ..\/internal\/K8S-cluster\/ingress\/values.yml<\/code><\/pre>\n<p>\n\u0416\u0434\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 IP \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 3-4 \u043c\u0438\u043d\u0443\u0442\u044b:<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC\" src=\"\/wp-content\/uploads\/2020\/08\/467c97db5cab408f850d6de6880987e3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 IP:<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC\" src=\"\/wp-content\/uploads\/2020\/08\/6ebc4241ded4711db0a8401b96b597ab.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>\u0428\u0430\u0433 6<\/b>. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c GitLab.<\/p>\n<pre><code class=\"plaintext\">$ helm repo add gitlab https:\/\/charts.gitlab.io\n$ helm upgrade gitlab gitlab\/gitlab -n gitlab  --install -f gitlab\/values.yml --set &quot;global.hosts.domain=gitlab.$EXTERNAL_IP.nip.io&quot;<\/code><\/pre>\n<p>\n\u0421\u043d\u043e\u0432\u0430 \u0436\u0434\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u043e\u0434\u044b \u043f\u043e\u0434\u043d\u0438\u043c\u0443\u0442\u0441\u044f.<\/p>\n<pre><code class=\"plaintext\">kubectl get po -n gitlab\nNAME                                      \tREADY   STATUS  \tRESTARTS   AGE\ngitlab-gitaly-0                           \t0\/1 \tPending \t0      \t0s\ngitlab-gitlab-exporter-88f6cc8c4-fl52d    \t0\/1 \tPending \t0      \t0s\ngitlab-gitlab-runner-6b6867c5cf-hd9dp     \t0\/1 \tPending \t0      \t0s\ngitlab-gitlab-shell-55cb6ccdb-h5g8x       \t0\/1 \tInit:0\/2\t0      \t0s\ngitlab-migrations.1-2cg6n                 \t0\/1 \tPending \t0      \t0s\ngitlab-minio-6dd7d96ddb-zd9j6             \t0\/1 \tPending \t0      \t0s\ngitlab-minio-create-buckets.1-bncdp       \t0\/1 \tPending \t0      \t0s\ngitlab-postgresql-0                       \t0\/2 \tPending \t0      \t0s\ngitlab-prometheus-server-6cfb57f575-v8k6j \t0\/2 \tPending \t0      \t0s\ngitlab-redis-master-0                     \t0\/2 \tPending \t0      \t0s\ngitlab-registry-6bd77b4b8c-pb9v9          \t0\/1 \tPending \t0      \t0s\ngitlab-registry-6bd77b4b8c-zgb6r          \t0\/1 \tInit:0\/2\t0      \t0s\ngitlab-shared-secrets.1-pc7-5jgq4         \t0\/1 \tCompleted   0      \t20s\ngitlab-sidekiq-all-in-1-v1-54dbcf7f5f-qbq67   0\/1 \tPending \t0      \t0s\ngitlab-task-runner-6fd6857db7-9x567       \t0\/1 \tPending \t0      \t0s\ngitlab-webservice-d9d4fcff8-hp8wl         \t0\/2 \tPending \t0      \t0s\nWaiting gitlab\n.\/wait_gitlab.sh ..\/internal\/gitlab\/gitlab\/.pods\nwaiting for pod...\nwaiting for pod...\nwaiting for pod...<\/code><\/pre>\n<p>\n\u041f\u043e\u0434\u044b \u043f\u043e\u0434\u043d\u044f\u043b\u0438\u0441\u044c:<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC\" src=\"\/wp-content\/uploads\/2020\/08\/98c6c2973bbc594eee285b4789677a13.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>\u0428\u0430\u0433 7<\/b>. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c GitLab-token.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0437\u043d\u0430\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430:<\/p>\n<pre><code class=\"plaintext\">kubectl get secret -n gitlab gitlab-gitlab-initial-root-password -o jsonpath='{.data.password}' | base64 --decode<\/code><\/pre>\n<p>\n\u0422\u0435\u043f\u0435\u0440\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u043c\u0441\u044f \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u043e\u043a\u0435\u043d:<\/p>\n<pre><code class=\"plaintext\">python3 get_gitlab_token.py root $GITLAB_PASSWORD http:\/\/gitlab.gitlab.$EXTERNAL_IP.nip.io<\/code><\/pre>\n<p>\n<b>\u0428\u0430\u0433 8<\/b>. \u041f\u0440\u0438\u0432\u043e\u0434\u0438\u043c Git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Gitlab Provider.<\/p>\n<pre><code class=\"plaintext\">cd ..\/internal\/gitlab\/hierarchy &amp;&amp; terraform apply -input=false -auto-approve planfile<\/code><\/pre>\n<p><\/p>\n<blockquote><p><i>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432 terraform GitLab provider \u0435\u0441\u0442\u044c \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u0439 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/terraform-providers\/terraform-provider-gitlab\/issues\/109\">\u0431\u0430\u0433<\/a><\/noindex>. \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0440\u0443\u043a\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b tf.state \u043f\u043e\u0447\u0438\u043d\u0438\u043b\u0441\u044f. \u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 `$ make all`<\/i><\/p><\/blockquote>\n<p>\n<b>\u0428\u0430\u0433 9<\/b>. \u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<pre><code class=\"plaintext\">$ make push\n\n[master (root-commit) b61d977]  Initial commit\n 3 files changed, 46 insertions(+)\n create mode 100644 .gitignore\n create mode 100644 values.yml\nEnumerating objects: 5, done.\nCounting objects: 100% (5\/5), done.\nDelta compression using up to 8 threads\nCompressing objects: 100% (5\/5), done.\nWriting objects: 100% (5\/5), 770 bytes | 770.00 KiB\/s, done.\nTotal 5 (delta 0), reused 0 (delta 0)<\/code><\/pre>\n<p>\n\u0413\u043e\u0442\u043e\u0432\u043e:<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC\" src=\"\/wp-content\/uploads\/2020\/08\/6c2e1625290c416d48afac16b61461aa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC\" src=\"\/wp-content\/uploads\/2020\/08\/9fc74e6bf5c5433ae50f693df5848601.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/asciinema.org\/a\/351942\" rel=\"noopener noreferrer\"><img decoding=\"async\" alt=\"\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC\" src=\"\/wp-content\/uploads\/2020\/08\/fb04e1084ef241f526fb111433c6245f.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\n\u041c\u044b \u0434\u043e\u0431\u0438\u043b\u0438\u0441\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441 \u043d\u0430\u0448\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 CI \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (Terraform state) \u0432 CI. \u041e \u0442\u043e\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<blockquote><p><b><i>\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043d\u0430\u0448 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/selectel\/\">\u0431\u043b\u043e\u0433<\/a><\/noindex>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u044b \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439!<\/i><\/b><\/p><\/blockquote>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/selectel\/blog\/514060\/\">habr.com<\/a> <\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0427\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u044c\u0448\u0435 \u2014 \u043a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e? \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e Infrastructure-as-Code, \u043d\u0435 \u0442\u0430\u043a \u043b\u0438? \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u044f\u0439\u0446\u043e? \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e Infrastructure-as-Code (IaC) \u2014 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0412 \u043d\u0435\u043c \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u041f\u041e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 IaC \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f: Resource Provision. \u042d\u0442\u043e VMs, S3, VPC \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91055,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91054","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0427\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u044c\u0448\u0435 \u2014 \u043a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e? \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e Infrastructure-as-Code, \u043d\u0435 \u0442\u0430\u043a \u043b\u0438? \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u044f\u0439\u0446\u043e? \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e Infrastructure-as-Code (IaC) \u2014 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0412 \u043d\u0435\u043c \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u041f\u041e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 IaC \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f: Resource Provision. \u042d\u0442\u043e VMs, S3, VPC \u0438\" \/>\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\/et\/blog\/administrirovanie\/kuricza-ili-yajczo-raskalyvaem-iac\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\udd47\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0427\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u044c\u0448\u0435 \u2014 \u043a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e? \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e Infrastructure-as-Code, \u043d\u0435 \u0442\u0430\u043a \u043b\u0438? \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u044f\u0439\u0446\u043e? \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e Infrastructure-as-Code (IaC) \u2014 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0412 \u043d\u0435\u043c \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u041f\u041e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 IaC \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f: Resource Provision. \u042d\u0442\u043e VMs, S3, VPC \u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kuricza-ili-yajczo-raskalyvaem-iac\" \/>\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-07T23:42:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-07T23:42:11+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\udd47Kana v\u00f5i muna: lammutame IaC | ProHoster","description":"Mida tuli varem \u2014 kana v\u00f5i muna? Pigem kummaline algus artiklile Infrastructure-as-Code'ist, eks? Mis on muna? K\u00f5ige sagedamini on Infrastructure-as-Code (IaC) deklaratiivne l\u00e4henemine infrastruktuuri kujutamiseks. Selles kirjeldame olekut, mida soovime saavutada, alates riistvarast kuni tarkvara seadistamiseni. Seet\u00f5ttu kasutatakse IaC-d j\u00e4rgmiseks: Ressursside pakkumine. Need on VM-id, S3, VPC ja","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kuricza-ili-yajczo-raskalyvaem-iac","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\udd47\u041a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e: \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c IaC | ProHoster","og:description":"\u0427\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u044c\u0448\u0435 \u2014 \u043a\u0443\u0440\u0438\u0446\u0430 \u0438\u043b\u0438 \u044f\u0439\u0446\u043e? \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e Infrastructure-as-Code, \u043d\u0435 \u0442\u0430\u043a \u043b\u0438? \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u044f\u0439\u0446\u043e? \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e Infrastructure-as-Code (IaC) \u2014 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0412 \u043d\u0435\u043c \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u041f\u041e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 IaC \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f: Resource Provision. \u042d\u0442\u043e VMs, S3, VPC \u0438","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kuricza-ili-yajczo-raskalyvaem-iac","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-07T23:42:11+00:00","article:modified_time":"2020-08-07T23:42:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91054","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:35:24","updated":"2022-09-30 12:48:00"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/91054","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=91054"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/91054\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/91055"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=91054"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=91054"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=91054"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}