Чтобы создать кластер Kubernetes, где будет создана нод-группа с включенным автомасштабированием, создайте файл kubernetes.tf, где будет описано создание кластера Kubernetes. Добавьте текст из примеров ниже, и исправьте значения настроек для вашего кластера.
Для создания кластера нам потребуются следующие объекты:
- Ресурсы (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 для создания кластера
- linxcs_kubernetes_clustertemplates — шаблоны/версии кластеров Kubernetes. Нужно указать версию кластера, которая будет создана.
Посмотреть список доступных версий можно:
- В визарде при создании кластера через личный кабинет.
- Используя данные из linxcs_kubernetes_clustertemplates. Подробнее на официальной странице.
- 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.
- 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