База знаний LinxCloud Services

Создание кластера в Terraform

Чтобы создать кластер Kubernetes, где будет создана нод-группа с включенным автомасштабированием, создайте файл kubernetes.tf, где будет описано создание кластера Kubernetes. Добавьте текст из примеров ниже, и исправьте значения настроек для вашего кластера.

Для создания кластера нам потребуются следующие объекты:

  1. Ресурсы (resource)
    • linxcs_networking_network — сеть, в которой будет создан кластер и его ноды. В примере ниже сеть создается с именем «k8s-net».
    • linxcs_networking_subnet — подсеть из сети, для нод кластера. В примере: k8s-subnet.
    • linxcs_networking_router — роутер для внешней сети и взаимодействия с внешним миром.
    • linxcs_networking_router_interface — подключить роутер к внутренней сети.
    • linxcs_compute_keypair — ключевая пара для ВМ нод кластера. Эта ключевая пара позволяет подключаться к ВМ по ssh при необходимости. Можно не указывать, если не требуется доступ на ноды.
    • Источники данных (data source):
    • linxcs_networking_network – внешняя сеть для получения публичного IP (Floating IP).
    • linxcs_compute_flavor – флейвор (CPU, RAM, Disk) нод кластера. В примере создается два объекта типа linxcs_compute_flavor с именами k8s_master и k8s_worker, для использования при создании кластера и его нод-групп.

 

1resource "linxcs_networking_network" "k8s" {

2    name           = "k8s-net"
3    admin_state_up = true
4}
5
6resource "linxcs_networking_subnet" "k8s-subnetwork" {
7    name            = "k8s-subnet"
8    network_id      = linxcs_networking_network.k8s.id
9    cidr            = "10.110.0.0/16"
10    ip_version      = 4
11    dns_nameservers = ["8.8.8.8", "8.8.4.4"]
12}
13
14data "linxcs_networking_network" "extnet" {
15    name = "ext-net"
16}
17
18resource "linxcs_networking_router" "k8s" {
19    name                = "k8s-router"
20    admin_state_up      = true
21    external_network_id = data.linxcs_networking_network.extnet.id
22}
23
24resource "linxcs_networking_router_interface" "k8s" {
25    router_id = linxcs_networking_router.k8s.id
26    subnet_id = linxcs_networking_subnet.k8s-subnetwork.id
27}
28
29resource "linxcs_compute_keypair" "keypair" {
30    name = "default"
31}
32
33data "linxcs_compute_flavor" "k8s_master" {
34    name = "Standard-2-4-40"
35}
36
37data "linxcs_compute_flavor" "k8s_worker" {
38    name = "Basic-1-2-20"
39}

 

Ресурсы провайдера Linx Cloud для создания кластера

  1. linxcs_kubernetes_clustertemplates — шаблоны/версии кластеров Kubernetes. Нужно указать версию кластера, которая будет создана.

Посмотреть список доступных версий можно:

  • В визарде при создании кластера через личный кабинет.
  • Используя данные из linxcs_kubernetes_clustertemplates. Подробнее на официальной странице.
  1. linxcs_kubernetes_cluster — кластер Kubernetes. В этом ресурсе мы описываем кластер и используем ранее описанные ресурсы.
  • depends_on – terraform будет ждать завершения создания linxcs_networking_router_interface, прежде чем начать создавать кластер.
  • name – имя кластера.
  • cluster_template_id – шаблон/версия кластера указанная ранее в linxcs_kubernetes_clustertemplate.cluster_template
  • master_count — количество мастер нод. Поддерживаются нечетные числа 1, 3, 5, 7.
  • master_flavor — флейвор мастер нод.
  • availability_zone — зона доступности.
  • ingress_controller — аддон балансировщика ingress controller, который устанавливается при создании кластера. Аддоны описываются в блоке labels.
  • keypair — ключевая пара для доступа на ноды кластера. Может быть пропущена, если не требуется доступ на ноды.
  • network_id — сеть кластера Kubernetes.
  • subnet_id — подсеть для кластера.
  • floating_ip_enabled — назначение публичного IP для API сервера Kubernetes. Поддерживает значение true | false.
  1. linxcs_kubernetes_node_group — нод-группа кластера, в которой будет располагаться рабочая нагрузка.
  • depends_on — создание нод-группы начнется после создания кластера.
  • cluster_id — идентификатор кластера, в котором создается нод-группа.
  • name — имя нод-группы.
  • node_count — начальное количество нод в группе.
  • autoscaling_enabled — включаем автомасштабирование кластера. Поддерживает значение true | false.
  • max_nodes — максимальное количество нод, до которого кластер автоматически масштабируется при повышении нагрузки. Максимальное значение 100.
  • min_nodes — минимальное количество нод в нод-группе.
  • flavor_id — флейвор нод в нод-группе.
1data "linxcs_kubernetes_clustertemplate" "cluster_template"{
2    version = "1.22.6" 
3}
4
5resource "linxcs_kubernetes_cluster" "k8s-cluster" {
6    depends_on = [
7        linxcs_networking_router_interface.k8s,
8]
9
10    name = "k8s-cluster"
11    cluster_template_id = data.linxcs_kubernetes_clustertemplate.cluster_template.id
12    master_flavor = data.linxcs_compute_flavor.k8s_master.id
13    master_count = 1
14    availability_zone = "MS1"
15    labels ={ 
16        ingress_controller = "nginx" 
17    }
18    keypair = linxcs_compute_keypair.keypair.id
19    network_id = linxcs_networking_network.k8s.id
20    subnet_id = linxcs_networking_subnet.k8s-subnetwork.id
21    floating_ip_enabled = true
22}
23
24resource "linxcs_kubernetes_node_group" "default_ng"{
25    depends_on = [
26        linxcs_kubernetes_cluster.k8s-cluster, 
27    ] 
28    cluster_id = linxcs_kubernetes_cluster.k8s-cluster.id 
29    name = "default" 
30    node_count = 1 
31    autoscaling_enabled = true 
32    max_nodes = 2 
33    min_nodes = 1 
34    flavor_id = data.linxcs_compute_flavor.k8s_worker.id 
35}

 

Добавьте обе части примера в файл kubernetes.tf и выполните следующие команды:

terraform init

 

terraform apply
Что вас интересует?
Получить демо-доступ

Спасибо за ваш запрос, мы свяжемся с вами в ближайшее время!