Nutzung des Terraform EKS-Moduls zur Erstellung eines EKS-Clusters

Wenn Sie einen AWS Elastic Kubernetes Service (Amazon EKS)-Cluster mit Terraform einrichten müssen, haben Sie Glück. Mit dem Terraform EKS-Modul und allen anderen erforderlichen Ressourcen können Sie eine Terraform-Konfiguration erstellen und einen AKS-Cluster mit Code erstellen.

Amazon EKS ist ein verwalteter Dienst zum Ausführen von Kubernetes auf AWS, ohne Ihren eigenen Kubernetes-Cluster zu installieren, zu betreiben und zu warten. Das Erstellen eines EKS-Clusters mit Terraform ermöglicht es Ihnen, Ressourcen schnell, effizient und mit einem automatisierten Ansatz zu erstellen.

In diesem Tutorial erfahren Sie, wie Sie schrittweise eine Terraform-Konfiguration erstellen, um einen EKS-Cluster mit Terraform zu erstellen. Fangen wir an!

Voraussetzungen

Dieser Beitrag wird ein schrittweises Tutorial sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes bereit haben:

  • Ein Amazon Web Service (AWS) Konto.
  • 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 – Dieses Tutorial verwendet Terraform v0.14.9 unter Ubuntu 18.04.5 LTS, aber jedes Betriebssystem mit Terraform sollte funktionieren.

Erstellen der Terraform-Konfiguration für einen AWS EKS-Cluster

Terraform ist ein Infrastruktur als Code-Werkzeug, das es Ihnen ermöglicht, Infrastruktur sicher und effizient zu erstellen, zu ändern und zu versionieren. Terraform verwendet verschiedene Arten von Konfigurationsdateien. Jede Datei ist entweder im PlainText-Format (.tf) oder im JSON-Format (.tfjson) geschrieben.

Lassen Sie uns zunächst eine Terraform-Konfiguration erstellen, die bei Anwendung einen AKS-Cluster von Grund auf erstellt.

1. Öffnen Sie ein Terminal.

2. Erstellen Sie einen Ordner namens ~/terraform-eks-cluster-demo, und ändern Sie dann (cd) das Arbeitsverzeichnis zu diesem Ordner. Dieser Ordner wird alle Konfigurationsdateien enthalten, mit denen Sie arbeiten werden.

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

3. Öffnen Sie als Nächstes Ihren bevorzugten Code-Editor und kopieren Sie/Fügen Sie die folgende Konfiguration ein und speichern Sie sie in einer Datei main.tf innerhalb von ~/terraform-eks-cluster-demo. Diese main.tf Datei ist die Terraform-Konfiguration für den AKS-Cluster.

Die main.tf Datei enthält alle erforderlichen Ressourcen zum Bereitstellen eines EKS-Clusters:

  • Eine AWS Identity and Access Management (IAM)-Rolle (`terraformekscluster`) – Diese Ressource wird von Amazon EKS verwaltet und ruft im Auftrag von Ihnen andere AWS-Dienste wie AWS S3, CloudWatch usw. auf, um die von Ihnen mit dem Dienst verwendeten Ressourcen zu verwalten.
  • Eine AWS EC2-Sicherheitsgruppe (`resource „aws_security_group“ „eks-cluster“`) – Ermöglicht den eingehenden und ausgehenden Netzwerkverkehr vom AWS EKS-Cluster. Sie werden eine Sicherheitsgruppe namens `SG-eks-cluster` starten, die über eine VPC-ID angehängt ist und es allen Verkehr erlaubt, in/out vom Cluster zu fließen. `0.0.0.0/0` ist die IP-Adresse des Internets.
  • EKS-Cluster (`terraformEKScluster`) – Dieser EKS-Cluster wird `Version 1.19` sein.
  • Eine IAM-Rolle für EKS-Knoten, um Anrufe an andere AWS-Dienste zu tätigen (`eks-node-group`). Diese Rolle ist mit einer Richtlinie verbunden, die das Übernehmen der temporären Sicherheitsanmeldeinformationen auf der Instanz ermöglicht, um auf andere AWS-Ressourcen zuzugreifen.
  • EKS-Cluster-Knotengruppe (`node_group1`) – Diese Ressource definiert die Anzahl der Knoten, die ein Cluster über das Attribut `scaling_config` haben wird.
# Erstellen einer IAM-Rolle für Kubernetes-Cluster, um im Namen anderer AWS-Dienste Anfragen zu stellen, um die Ressourcen zu verwalten, die Sie mit dem Dienst verwenden.

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
}

# Anfügen der EKS-Cluster-Richtlinien an die terraformekscluster-Rolle.

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}"
}


# Sicherheitsgruppe für Netzwerkverkehr zu und von AWS EKS-Cluster.

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

# Egress ermöglicht ausgehenden Datenverkehr vom EKS-Cluster ins Internet.

  egress {                   # Ausgehende Regel
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
# Ingress ermöglicht eingehenden Datenverkehr zum EKS-Cluster aus dem Internet.

  ingress {                  # Eingehende Regel
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

}

# Erstellen des EKS-Clusters

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

# Hinzufügen der VPC-Konfiguration

  vpc_config {             # Konfigurieren von EKS mit VPC- und Netzwerkeinstellungen
   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",
   ]
}

# Erstellen einer IAM-Rolle für EKS-Knoten, um mit anderen AWS-Diensten zu arbeiten.


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
}

# Anfügen der verschiedenen Richtlinien an Knotenmitglieder.

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
}

# Erstellen der EKS-Cluster-Knotengruppe

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. Erstellen Sie eine weitere Datei unter ~/terraform-eks-cluster-demo und nennen Sie sie provider.tf und fügen Sie den folgenden Inhalt ein. Die Anbieterdatei definiert Anbieter wie AWS, Oracle oder Azure usw., damit Terraform eine Verbindung mit den richtigen Cloud-Diensten herstellen kann.

Das Tutorial wird Ressourcen in der Region us-east-2 erstellen.

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

5. Überprüfen Sie, ob alle erforderlichen Dateien unten im Ordner vorhanden sind, indem Sie den Befehl tree ausführen.

The folder structure of Terraform files

Erstellen des AWS EKS-Clusters mit einem Terraform EKS-Modul

Jetzt, da Sie die Terraform-Konfigurationsdatei und die Variablendateien bereit haben, ist es an der Zeit, Terraform zu initiieren und den Cluster zu erstellen. Um den AKS-Cluster bereitzustellen, verwendet Terraform wie alle anderen Terraform-Konfigurationen drei Befehle (terraform initterraform planterraform apply).

Lassen Sie uns jetzt jeden Schritt durchgehen.

1. Öffnen Sie ein Terminal und navigieren Sie zum Verzeichnis ~/terraform-eks-cluster-demo. cd ~/terraform-eks-cluster-demo

cd ~/terraform-eks-cluster-demo

2. Führen Sie den Befehl terraform init im selben Verzeichnis aus. Der Befehl terraform init initialisiert die Plugins und Anbieter, die zum Arbeiten mit Ressourcen erforderlich sind.

terraform init

Wenn alles gut läuft, sollten Sie die Nachricht Terraform wurde erfolgreich initialisiert in der Ausgabe sehen, wie unten gezeigt.

Initializing the terraform

3. Führen Sie nun den Befehl terraform plan aus. Das Ausführen von terraform plan ist nicht erforderlich, wird jedoch empfohlen, um sicherzustellen, dass die Syntax Ihrer Konfigurationsdateien korrekt ist und Ihnen eine Blaupause der Ressourcen gibt, die in Ihrer Infrastruktur bereitgestellt werden.

terraform plan

Bei erfolgreichem Abschluss sollten Sie eine Nachricht wie Plan: „X“ hinzuzufügen, „Y“ zu ändern oder „Z“ zu zerstören in der Ausgabe sehen.

Running the plan command in Terraform

4. Führen Sie als nächstes terraform apply aus, um die Trainingsräder zu entfernen und Terraform aufzurufen, um den AKS-Cluster zu erstellen. Das Aufrufen von terraform apply liest jede Konfiguration (*.tf) im aktuellen Verzeichnis ein, um eine Zustandsdatei zu kompilieren, die an AWS gesendet wird, um den EKS-Cluster und andere Komponenten zu erstellen.

AWS berechnet $0.10 pro Stunde für jeden EKS-Cluster. Stellen Sie sicher, dass Sie alle Testcluster, die Sie erstellt haben, löschen!

terraform apply
Running the Terraform apply command

Überprüfung des AWS EKS-Clusters

Zu diesem Zeitpunkt sollte ein funktionierender AKS-Cluster erstellt worden sein, aber lassen Sie uns zur Sicherheit in der AWS Management Console überprüfen.

1. Öffnen Sie Ihren bevorzugten Webbrowser, navigieren Sie zur AWS Management Console und melden Sie sich an.

2. Klicken Sie oben auf die Suchleiste, suchen Sie nach EKS und klicken Sie auf den Menüpunkt Elastic Kubernetes Service. Sie sollten den terraformEKScluster EKS-Cluster sehen.

Navigating to the EKS service
Checking the terraformEKS Cluster

3. Klicken Sie auf Konfiguration, und Sie sollten jeden erfolgreich erstellten Bestandteil sehen, den Sie in der Terraform-Konfiguration definiert haben, wie unten gezeigt.

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

Abschluss

In diesem Tutorial haben Sie gelernt, wie Sie Terraform verwenden, um einen AWS EKS-Cluster und seine Komponenten bereitzustellen. Sie sind nun bereit, diesen EKS-Cluster zu nutzen und Anwendungen zu deployen!

Welche Anwendungen planen Sie auf Ihrem neuen Cluster zu deployen?

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