استغلال وحدة 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

تيرافورم هو أداة للبنية التحتية كشفرة تسمح لك ببناء وتغيير وإصدار البنية التحتية بأمان وبكفاءة. يستخدم تيرافورم أنواعًا مختلفة من ملفات التكوين. يتم كتابة كل ملف إما بتنسيق نص عادي (.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، إلخ، نيابةً عنك لإدارة الموارد التي تستخدمها مع الخدمة.
  • مجموعة أمان EC2 في AWS (resource "aws_security_group" "eks-cluster") – تسمح بحركة المرور الشبكية الواردة والصادرة من مجموعة AWS EKS cluster. ستقوم بإطلاق مجموعة أمان تسمى SG-eks-cluster مرفقة عبر معرف VPC، مما يسمح بتدفق جميع حركة المرور داخل/خارج العقدة. 0.0.0.0/0 هو عنوان IP للإنترنت.
  • عقدة EKS (terraformEKScluster) – سيكون هذا العقدة EKS بـ الإصدار 1.19.
  • دور إدارة الهوية والوصول لعقدات EKS لإجراء المكالمات إلى خدمات AWS الأخرى (eks-node-group). يتم ربط هذا الدور بسياسة تسمح بتولي أوراق أمان مؤقتة على العقدة للوصول إلى موارد AWS الأخرى.
  • مجموعة عقدات EKS (node_group1) – يحدد هذا المورد عدد العقدات التي ستكون للعقدة عبر السمة scaling_config.
# إنشاء دور IAM لعناق Kubernetes clusters للقيام بالمكالمات إلى خدمات 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 Cluster.

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"]
  }
# يسمح Ingress بحركة المرور الواردة إلى مجموعة 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 nodes للعمل مع خدمات 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.

1. افتح متصفح الويب المفضل لديك، انتقل إلى وحدة التحكم الإدارية لـ AWS وسجل الدخول.

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 ومكوناتها. أنت الآن جاهز لاستخدام هذه المجموعة ونشر التطبيقات!

ما هي التطبيقات التي تخطط لنشرها على مجموعتك الجديدة؟

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