עיבוד מודול Terraform EKS כדי ליצור אשכול EKS

אם אתה צריך להקים את האשכול של שירות Amazon EKS (Amazon Elastic Kubernetes Service) עם Terraform, אתה במזל. באמצעות מודול Terraform EKS וכל המשאבים הנדרשים האחרים, אתה יכול ליצור תצורת Terraform אחת וליצור אשכול AKS עם קוד.

שירות Amazon EKS הוא שירות ניהולי להרצת Kubernetes על AWS מבלי להתקין, להפעיל ולתחזק את האשכול שלך. בניית אשכול 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 Identity and Access Management (IAM) (terraformekscluster) – משאב זה ינוהל על ידי Amazon EKS ויעשה קריאות לשירותים אחרים של AWS כגון AWS S3, CloudWatch, וכו', מבעד לך לנהל את המשאבים שאתה משתמש בהם עם השירות.
  • קבוצת אבטחת EC2 של AWS (resource "aws_security_group" "eks-cluster") – מאפשר תנועה נכנסת ויוצאת של רשת מהערכת AWS EKS. תפתח קבוצת אבטחה בשם SG-eks-cluster מצורפת באמצעות מזהה VPC, מאפשרת לכל התנועה לזרום החוצה או הפנימה מהאשכול. 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}"
}


# קבוצת אבטחה לתנועת תעבורה הלוך ושוב לו וממשק ה-EKS Cluster של AWS.

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

# Egress מאפשר תעבורה יוצאת מה-Cluster של EKS אל האינטרנט

  egress {                   # כלל יוצא
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
# Ingress מאפשר תעבורה נכנסת ל-Cluster של 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 Cluster

בנקודה זו, אתה אמור לקבל אשף AKS בתפקוד, אבל נוודא לוודא שזה נכון בAWS Management Console.

1. פתח את דפדפן האינטרנט האהוב עליך, נווט ל- AWS Management Console והתחבר.

2. לחץ על סרגל החיפוש בחלק העליון, חפש EKS, ולחץ על פריט תפריט של Elastic Kubernetes Service. אתה אמור לראות את האשף 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/