Использование модуля Terraform EKS для создания кластера EKS

Если вам нужно настроить кластер AWS Elastic Kubernetes Service (Amazon EKS) с использованием Terraform, то у вас повезло. Используя модуль Terraform EKS и все необходимые ресурсы, вы можете создать одну конфигурацию Terraform и создать кластер AKS с помощью кода.

Amazon EKS – это управляемая служба для запуска Kubernetes на AWS без установки, управления и поддержки собственного кластера Kubernetes. Создание кластера EKS с помощью Terraform позволяет создавать ресурсы быстро, эффективно и с автоматизированным подходом.

В этом руководстве вы узнаете, как создать и запустить конфигурацию Terraform для создания кластера EKS с помощью Terraform пошагово. Давайте начнем!

Предварительные требования

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

  • Учетная запись Amazon Web Service (AWS).
  • A code editor – Even though you can use any text editor to work with Terraform configuration files, you should consider Visual Studio (VS) Code as it understands the HCL Terraform language well.
  • Terraform – В этом руководстве будет использоваться Terraform v0.14.9, работающий на Ubuntu 18.04.5 LTS, но любая операционная система с Terraform должна подойти.

Создание конфигурации Terraform для кластера AWS EKS

Terraform – это инструмент инфраструктуры в виде кода, который позволяет создавать, изменять и версионировать инфраструктуру безопасно и эффективно. Terraform использует различные типы файлов конфигурации. Каждый файл написан либо в обычном текстовом формате (.tf), либо в формате JSON (.tfjson).

Давайте сначала создадим конфигурацию Terraform, которая создаст кластер AKS с нуля при применении.

1. Откройте терминал.

2. Создайте папку с именем ~/terraform-eks-cluster-demo, затем измените (cd) рабочий каталог на эту папку. В этой папке будут содержаться все файлы конфигурации, с которыми вы будете работать.

mkdir ~/terraform-eks-cluster-demo
cd ~/terraform-eks-cluster-demo

3. Затем откройте ваш любимый редактор кода, скопируйте/вставьте следующую конфигурацию и сохраните ее в файле main.tf в ~/terraform-eks-cluster-demo. Этот файл main.tf – это конфигурация Terraform для кластера AKS.

Файл main.tf содержит все ресурсы, необходимые для развертывания кластера EKS:

  • Роль управления идентификацией и доступом AWS (IAM) (terraformekscluster) – Этот ресурс будет управляться Amazon EKS и вызывать другие службы AWS, такие как AWS S3, CloudWatch и т. д., от вашего имени для управления ресурсами, которые вы используете с этой службой.
  • Группа безопасности AWS EC2 (resource "aws_security_group" "eks-cluster") – Позволяет входящему и исходящему сетевому трафику от кластера AWS EKS. Вы будете запускать группу безопасности с именем SG-eks-cluster, привязанную к VPC ID, разрешая весь трафик в/из кластера. 0.0.0.0/0 – это IP-адрес Интернета.
  • Кластер EKS (terraformEKScluster) – Этот кластер EKS будет иметь версию 1.19.
  • Роль IAM для узлов EKS для вызова других служб AWS (eks-node-group). Эта роль привязана к политике, которая позволяет предполагать временные учетные данные безопасности на экземпляре для доступа к другим ресурсам AWS.
  • Группа узлов кластера EKS (node_group1) – Этот ресурс определяет количество узлов в кластере через атрибут scaling_config.
# Создание роли IAM для кластеров Kubernetes для осуществления вызовов других служб AWS от вашего имени для управления ресурсами, которые вы используете с помощью службы.

resource "aws_iam_role" "iam-role-eks-cluster" {
  name = "terraformekscluster"
  assume_role_policy = <<POLICY
{
 "Version": "2012-10-17",
 "Statement": [
   {
   "Effect": "Allow",
   "Principal": {
    "Service": "eks.amazonaws.com"
   },
   "Action": "sts:AssumeRole"
   }
  ]
 }
POLICY
}

# Прикрепление политик EKS-Cluster к роли terraformekscluster.

resource "aws_iam_role_policy_attachment" "eks-cluster-AmazonEKSClusterPolicy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
  role       = "${aws_iam_role.iam-role-eks-cluster.name}"
}


# Группа безопасности для сетевого трафика в и из кластера AWS EKS.

resource "aws_security_group" "eks-cluster" {
  name        = "SG-eks-cluster"
  vpc_id      = "vpc-123456789"  

# Egress позволяет исходящий трафик из кластера EKS в Интернет 

  egress {                   # Исходное правило
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
# Вход разрешает входящий трафик в кластер EKS из Интернета 

  ingress {                  # Входное правило
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

}

# Создание кластера EKS

resource "aws_eks_cluster" "eks_cluster" {
  name     = "terraformEKScluster"
  role_arn =  "${aws_iam_role.iam-role-eks-cluster.arn}"
  version  = "1.19"

# Добавление конфигурации VPC

  vpc_config {             # Настройка EKS с vpc и настройками сети 
   security_group_ids = ["${aws_security_group.eks-cluster.id}"]
   subnet_ids         = ["subnet-1312586","subnet-8126352"] 
    }

  depends_on = [
    "aws_iam_role_policy_attachment.eks-cluster-AmazonEKSClusterPolicy",
    "aws_iam_role_policy_attachment.eks-cluster-AmazonEKSServicePolicy",
   ]
}

# Создание роли IAM для узлов EKS для работы с другими службами AWS. 


resource "aws_iam_role" "eks_nodes" {
  name = "eks-node-group"

  assume_role_policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
POLICY
}

# Прикрепление различных политик к узловым членам.

resource "aws_iam_role_policy_attachment" "AmazonEKSWorkerNodePolicy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy"
  role       = aws_iam_role.eks_nodes.name
}

resource "aws_iam_role_policy_attachment" "AmazonEKS_CNI_Policy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"
  role       = aws_iam_role.eks_nodes.name
}

resource "aws_iam_role_policy_attachment" "AmazonEC2ContainerRegistryReadOnly" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
  role       = aws_iam_role.eks_nodes.name
}

# Создание группы узлов кластера EKS

resource "aws_eks_node_group" "node" {
  cluster_name    = aws_eks_cluster.eks_cluster.name
  node_group_name = "node_group1"
  node_role_arn   = aws_iam_role.eks_nodes.arn
  subnet_ids      = ["subnet-","subnet-"]

  scaling_config {
    desired_size = 1
    max_size     = 1
    min_size     = 1
  }

  depends_on = [
    aws_iam_role_policy_attachment.AmazonEKSWorkerNodePolicy,
    aws_iam_role_policy_attachment.AmazonEKS_CNI_Policy,
    aws_iam_role_policy_attachment.AmazonEC2ContainerRegistryReadOnly,
  ]
}

4. Создайте еще один файл в ~/terraform-eks-cluster-demo, назовите его provider.tf и вставьте содержимое ниже. Файл поставщика определяет поставщиков, таких как AWS, Oracle или Azure и т. д., чтобы Terraform мог подключаться к правильным облачным службам.

Руководство будет создавать ресурсы в регионе us-east-2.

provider "aws" {
   region = "us-east-2"
 }

5. Убедитесь, что все необходимые файлы ниже присутствуют в папке, запустив команду tree.

The folder structure of Terraform files

Создание кластера AWS EKS с помощью модуля Terraform EKS

Теперь, когда у вас есть файл конфигурации Terraform и файлы переменных готовы к использованию, пришло время инициировать Terraform и создать кластер. Для создания кластера AKS, как и для всех других конфигураций Terraform, Terraform использует три команды (terraform initterraform planterraform apply).

Давайте пройдемся по каждому этапу сейчас.

1. Откройте терминал и перейдите в каталог ~/terraform-eks-cluster-demo. cd ~/terraform-eks-cluster-demo

cd ~/terraform-eks-cluster-demo

2. Запустите команду terraform init в том же каталоге. Команда terraform init инициализирует плагины и провайдеры, которые необходимы для работы с ресурсами.

terraform init

Если все пойдет хорошо, вы увидите сообщение Terraform был успешно инициализирован в выводе, как показано ниже.

Initializing the terraform

3. Теперь выполните команду terraform plan. Запуск terraform plan необязателен, но рекомендуется для проверки синтаксиса файлов конфигурации и получения чертежа ресурсов, которые будут развернуты в вашей инфраструктуре.

terraform plan

При успешном выполнении вы увидите сообщение вроде План: “X” для добавления, “Y” для изменения или “Z” для уничтожения в выводе.

Running the plan command in Terraform

4. Затем выполните terraform apply, чтобы удалить обучающие колесики и вызвать Terraform для создания кластера AKS. Вызов terraform apply считывает каждую конфигурацию (*.tf) в текущем каталоге для компиляции файла состояния, отправляемого в AWS для создания кластера EKS и других компонентов.

AWS взимает плату в размере $0,10 за каждый час использования кластера EKS. Обязательно уничтожьте любые тестовые кластеры, которые вы создали!

terraform apply
Running the Terraform apply command

Проверка кластера AWS EKS

На этом этапе у вас должен быть работающий кластер AKS, но давайте проверим, чтобы убедиться в этом в AWS Management Console.

1. Откройте свой любимый веб-браузер, перейдите в Консоль управления AWS и войдите в систему.

2. Нажмите на строку поиска в верхней части, найдите EKS и выберите пункт меню Упругий сервис Kubernetes. Вы должны увидеть кластер EKS с названием terraformEKScluster.

Navigating to the EKS service
Checking the terraformEKS Cluster

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

Node Role and EKS cluster role.
Security group applied on EKS Cluster.
Node group node_group1

Вывод

В этом учебнике вы узнали, как использовать Terraform для развертывания кластера AWS EKS и его компонентов. Теперь вы готовы использовать этот кластер EKS и разворачивать приложения!

Какие приложения вы планируете развернуть на вашем вновь созданном кластере?

Source:
https://adamtheautomator.com/terraform-eks-module/