Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все руководства
    • Создание нового Kubernetes-проекта в Yandex Cloud
    • Создание кластера Kubernetes без доступа в интернет
    • Запуск рабочих нагрузок с GPU
    • Использование групп узлов c GPU без предустановленных драйверов
    • Установка Time-Slicing GPUs
    • Миграция ресурсов в другую зону доступности
      • Управление ресурсами Kubernetes с помощью провайдера Terraform
      • Использование модулей Yandex Cloud в Terraform
    • Шифрование секретов в Managed Service for Kubernetes
    • Создание кластера Kubernetes с помощью провайдера Yandex Cloud для Kubernetes Cluster API
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру для Managed Service for Kubernetes
  • Подключите провайдер kubernetes
  • Создайте ресурсы Kubernetes
  • Убедитесь, что приложение кластера доступно из интернета
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Создание проекта с помощью Terraform
  3. Управление ресурсами Kubernetes с помощью провайдера Terraform

Управление ресурсами Kubernetes в кластере Managed Service for Kubernetes с помощью провайдера Terraform

Статья создана
Yandex Cloud
Обновлена 21 мая 2025 г.
  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру для Managed Service for Kubernetes
  • Подключите провайдер kubernetes
  • Создайте ресурсы Kubernetes
  • Убедитесь, что приложение кластера доступно из интернета
  • Удалите созданные ресурсы

Вы можете создать ресурсы Kubernetes с помощью манифестов Terraform. Для этого подключите Terraform-провайдер kubernetes. Он поддерживает Terraform-ресурсы, которые соответствуют конфигурационным файлам YAML для различных Kubernetes-ресурсов.

Использовать Terraform для создания Kubernetes-ресурсов удобно, если через Terraform вы поддерживаете инфраструктуру для кластера Yandex Managed Service for Kubernetes. Так вы можете описывать все ресурсы на одном языке разметки.

Кроме того, Terraform отслеживает зависимости между ресурсами и предотвращает создание, изменение или удаление ресурса, если для него не готовы зависимости. Допустим, вы создаете ресурс PersistentVolumeClaim. Ему нужно определенное пространство в хранилище для ресурса PersistentVolume, но места не хватает. Terraform отследит нехватку места и не позволит создать ресурс PersistentVolumeClaim.

Ниже рассматривается пример, как создать стандартные ресурсы Kubernetes с помощью Terraform.

Чтобы с помощью Terraform создать ресурсы Kubernetes:

  1. Подготовьте инфраструктуру.
  2. Подключите провайдер kubernetes.
  3. Создайте ресурсы Kubernetes.
  4. Убедитесь, что приложение кластера доступно из интернета.

Если созданные ресурсы вам больше не нужны, удалите их.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за кластер Managed Service for Kubernetes: использование мастера и исходящий трафик (см. тарифы Managed Service for Kubernetes).
  • Плата за узлы кластера (ВМ): использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
  • Плата за сетевой балансировщик нагрузки (см. тарифы Network Load Balancer).
  • Плата за использование публичных IP-адресов для ВМ и сетевого балансировщика нагрузки (см. тарифы Virtual Private Cloud).

Подготовьте инфраструктуру для Managed Service for KubernetesПодготовьте инфраструктуру для Managed Service for Kubernetes

  1. Если у вас еще нет Terraform, установите его.

  2. Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.

  3. Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

    На этом шаге файл не должен содержать настройки провайдера kubernetes. Они будут добавлены позднее.

  4. Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.

  5. Скачайте в ту же рабочую директорию файл конфигурации managed-k8s-infrastructure.tf.

    В этом файле описаны:

    • сеть;
    • подсеть;
    • две группы безопасности — для кластера и группы узлов;
    • облачный сервисный аккаунт с ролями k8s.clusters.agent, vpc.publicAdmin, load-balancer.admin и container-registry.images.puller;
    • кластер Managed Service for Kubernetes;
    • группа узлов Kubernetes.
  6. Укажите значения переменных в файле managed-k8s-infrastructure.tf.

  7. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  8. Создайте инфраструктуру:

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

    В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

  9. Установите kubectl и настройте его на работу с созданным кластером.

Подключите провайдер kubernetesПодключите провайдер kubernetes

  1. В рабочей директории откройте файл с настройками провайдера yandex. У него должна быть следующая структура:

    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
      required_version = ">= 0.13"
    }
    
    provider "yandex" {
      token     = "<IAM-токен>"
      cloud_id  = "<идентификатор_облака>"
      folder_id = "<идентификатор_каталога>"
      zone      = "<зона_доступности_по_умолчанию>"
    }
    
  2. Укажите в файле параметры, необходимые для работы провайдера kubernetes:

    1. В блок required_providers добавьте:

      kubernetes = {
        source = "hashicorp/kubernetes"
      }
      
    2. В блоке required_providers измените значение required_version на ">= 0.14.8".

    3. В конце файла разместите новый блок:

      data "yandex_client_config" "client" {}
      
      provider "kubernetes" {
        host                   = yandex_kubernetes_cluster.k8s-cluster.master[0].external_v4_endpoint
        cluster_ca_certificate = yandex_kubernetes_cluster.k8s-cluster.master[0].cluster_ca_certificate
        token                  = data.yandex_client_config.client.iam_token
      }
      
  3. Убедитесь, что в результате файл выглядит так:

    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
        kubernetes = {
          source = "hashicorp/kubernetes"
        }
      }
      required_version = ">= 0.14.8"
    }
    
    provider "yandex" {
      token     = "<IAM-токен>"
      cloud_id  = "<идентификатор_облака>"
      folder_id = "<идентификатор_каталога>"
      zone      = "<зона_доступности_по_умолчанию>"
    }
    
    data "yandex_client_config" "client" {}
    
    provider "kubernetes" {
      host                   = yandex_kubernetes_cluster.k8s-cluster.master[0].external_v4_endpoint
      cluster_ca_certificate = yandex_kubernetes_cluster.k8s-cluster.master[0].cluster_ca_certificate
      token                  = data.yandex_client_config.client.iam_token
    }
    
  4. Инициализируйте провайдер kubernetes:

    terraform init
    

Создайте ресурсы KubernetesСоздайте ресурсы Kubernetes

Создайте тестовое приложение и сервис типа LoadBalancer:

  1. В рабочей директории создайте файл deployment.tf, описывающий ресурс Deployment:

    resource "kubernetes_deployment" "demo-app-deployment" {
      metadata {
        name = "hello"
        labels = {
          app = "hello"
          version = "v1"
        }
      }
      spec {
        replicas = 2
        selector {
          match_labels = {
            app = "hello"
          }
        }
        template {
          metadata {
            labels = {
              app = "hello"
              version = "v1"
            }
          }
          spec {
            container {
              name  = "hello-app"
              image = "cr.yandex/crpjd37scfv653nl11i9/hello:1.1"
            }
          }
        }
      }
    }
    
  2. В рабочей директории создайте файл service.tf, описывающий ресурс Service:

    resource "kubernetes_service" "demo-lb-service" {
      metadata {
        name = "hello"
      }
      spec {
        selector = {
          app = kubernetes_deployment.demo-app-deployment.spec.0.template.0.metadata[0].labels.app
        }
        type = "LoadBalancer"
        port {
          port = 80
          target_port = 8080
        }
      }
    }
    
  3. Создайте ресурсы Kubernetes:

    1. Посмотрите планируемые изменения:

      terraform plan
      
    2. Если изменения устраивают, примените их:

      terraform apply
      

    После команды terraform apply может возникнуть ошибка:

    Error: Waiting for rollout to finish: 2 replicas wanted; 0 replicas Ready
    │ 
    │   with kubernetes_deployment.demo-app-deployment,
    │   on deployment.tf line 1, in resource "kubernetes_deployment" "demo-app-deployment":
    │   1: resource "kubernetes_deployment" "demo-app-deployment" {
    │ 
    

    Она означает, что ресурсы Deployment еще не готовы. Проверьте их готовность с помощью команды kubectl get deployment, она вернет результат:

    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    hello        0/2     2            0           12m
    

    Когда в столбце READY будет указано значение 2/2, выполните команду terraform apply снова.

Вы также можете создавать другие стандартные ресурсы Kubernetes с помощью манифестов Terraform. В качестве основы используйте конфигурацию YAML для нужного ресурса (пример для пода). Из конфигурации заимствуйте структуру и параметры и примените разметку Terraform. Например, параметр containerPort в YAML замените на параметр container_port в Terraform. Полный список Terraform-ресурсов для Kubernetes приведен в документации провайдера.

О создании пользовательских ресурсов с помощью Terraform читайте в документации Terraform.

Убедитесь, что приложение кластера доступно из интернетаУбедитесь, что приложение кластера доступно из интернета

  1. Посмотрите информацию о созданном балансировщике нагрузки:

    kubectl describe service hello
    

    Результат:

     Name:                     hello
     Namespace:                default
     Labels:                   <none>
     Annotations:              <none>
     Selector:                 app=hello
     Type:                     LoadBalancer
     IP Family Policy:         SingleStack
     IP Families:              IPv4
     IP:                       10.96.228.81
     IPs:                      10.96.228.81
     LoadBalancer Ingress:     84.201.148.8
     Port:                     <unset>  80/TCP
     TargetPort:               8080/TCP
     NodePort:                 <unset>  32532/TCP
     Endpoints:                10.112.128.7:8080,10.112.128.8:8080
     Session Affinity:         None
     External Traffic Policy:  Cluster
     Internal Traffic Policy:  Cluster
     Events:
       Type    Reason                Age    From                Message
       ----    ------                ----   ----                -------
       Normal  EnsuringLoadBalancer  5m32s  service-controller  Ensuring load balancer
       Normal  EnsuredLoadBalancer   5m25s  service-controller  Ensured load balancer
    
  2. Скопируйте IP-адрес из поля LoadBalancer Ingress.

  3. Откройте в браузере URL приложения:

    http://<скопированный_IP_адрес>
    

    Результат:

    Hello, world!
    Running in 'hello-5c46b*****-nc**'
    

    Примечание

    Если ресурс недоступен по указанному URL, то убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.

Удалите созданные ресурсыУдалите созданные ресурсы

  1. В терминале перейдите в директорию с планом инфраструктуры.

  2. Выполните команду:

    terraform destroy
    

    Terraform удалит все ресурсы, созданные в текущей конфигурации.

См. такжеСм. также

  • Документация Terraform по созданию ресурсов Kubernetes
  • Документация провайдера

Была ли статья полезна?

Предыдущая
Миграция ресурсов в другую зону доступности
Следующая
Использование модулей Yandex Cloud в Terraform
Проект Яндекса
© 2025 ООО «Яндекс.Облако»