برنامه نویسی

ساخت یک خوشه EKS با Terraform: یک رویکرد مدولار و مقیاس پذیر

Summarize this content to 400 words in Persian Lang
در زیر یک است ساختار پوشه استاندارد تولید برای Terraform برای ارائه EKS در چندین محیط با استفاده از ماژول ها. این ساختار ماژولار بودن، جداسازی محیط و قابلیت استفاده مجدد را تضمین می کند. علاوه بر این، من مراحل و کد خط لوله را برای استقرار این زیرساخت با استفاده از GitHub Actions و Jenkins ارائه خواهم کرد.

تولید-ساختار پوشه Terraform استاندارد

terraform/
├── modules/ # Reusable modules
│ ├── eks/ # EKS module
│ │ ├── main.tf # EKS resource definitions
│ │ ├── variables.tf # Input variables
│ │ ├── outputs.tf # Output values
│ │ ├── versions.tf # Required providers and versions
│ └── vpc/ # VPC module
│ ├── main.tf # VPC resource definitions
│ ├── variables.tf # Input variables
│ ├── outputs.tf # Output values
│ ├── versions.tf # Required providers and versions
├── envs/ # Per-environment configurations
│ ├── dev/ # Development environment
│ │ ├── main.tf # Environment-specific resources
│ │ ├── variables.tf # Environment-specific variables
│ │ ├── backend.tf # S3/DynamoDB backend for Terraform state
│ │ └── tfvars.json # Environment-specific variable values
│ ├── staging/ # Staging environment
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── backend.tf
│ │ └── tfvars.json
│ └── prod/ # Production environment
│ ├── main.tf
│ ├── variables.tf
│ ├── backend.tf
│ └── tfvars.json
└── pipelines/ # CI/CD pipelines for Terraform
├── github-actions.yml # GitHub Actions workflow
└── jenkins-pipeline.groovy # Jenkins pipeline script

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

فایل های کلیدی

1. modules/eks/main.tf

خوشه EKS و منابع مرتبط را تعریف می کند:

resource “aws_eks_cluster” “this” {
name = var.cluster_name
role_arn = var.cluster_role_arn

vpc_config {
subnet_ids = var.subnet_ids
}
}

resource “aws_eks_node_group” “this” {
cluster_name = aws_eks_cluster.this.name
node_role_arn = var.node_role_arn
subnet_ids = var.subnet_ids
scaling_config {
desired_size = var.desired_size
max_size = var.max_size
min_size = var.min_size
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. envs/dev/main.tf

ماژول EKS و سایر ماژول های مورد نیاز (مانند VPC) را فراخوانی می کند:

module “vpc” {
source = “../../modules/vpc”
cidr_block = var.cidr_block
env = var.env
}

module “eks” {
source = “../../modules/eks”
cluster_name = var.cluster_name
cluster_role_arn = var.cluster_role_arn
node_role_arn = var.node_role_arn
subnet_ids = module.vpc.subnet_ids
desired_size = var.desired_size
max_size = var.max_size
min_size = var.min_size
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

3. envs/dev/backend.tf

پیکربندی باطن از راه دور را برای ذخیره سازی وضعیت تعریف می کند:

terraform {
backend “s3” {
bucket = “your-terraform-state-bucket”
key = “eks/dev/terraform.tfstate”
region = “us-east-1”
dynamodb_table = “terraform-lock-table”
encrypt = true
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

4. envs/dev/tfvars.json

ارزش های خاص محیطی:

{
“cluster_name”: “eks-dev”,
“cidr_block”: “10.0.0.0/16”,
“desired_size”: 2,
“max_size”: 5,
“min_size”: 1,
“env”: “dev”,
“cluster_role_arn”: “arn:aws:iam::123456789012:role/EKS-Cluster-Role”,
“node_role_arn”: “arn:aws:iam::123456789012:role/EKS-Node-Role”
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مراحل استقرار با استفاده از GitHub Actions

1. گردش کار GitHub Actions (pipelines/github-actions.yml)

name: Deploy Terraform

on:
push:
branches:
– main

jobs:
terraform:
runs-on: ubuntu-latest

steps:
– name: Checkout repository
uses: actions/checkout@v2

– name: Setup Terraform
uses: hashicorp/setup-terraform@v2
with:
terraform_version: 1.5.0

– name: Terraform Init
run: |
cd terraform/envs/dev
terraform init

– name: Terraform Plan
run: |
cd terraform/envs/dev
terraform plan -var-file=tfvars.json

– name: Terraform Apply
if: github.ref == ‘refs/heads/main’
run: |
cd terraform/envs/dev
terraform apply -auto-approve -var-file=tfvars.json

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مراحل استقرار با استفاده از جنکینز

2. فیلمنامه خط لوله جنکینز (pipelines/jenkins-pipeline.groovy)

pipeline {
agent any
environment {
TF_VAR_AWS_ACCESS_KEY = credentials(‘aws-access-key-id’)
TF_VAR_AWS_SECRET_KEY = credentials(‘aws-secret-access-key’)
}
stages {
stage(‘Checkout’) {
steps {
checkout scm
}
}
stage(‘Terraform Init’) {
steps {
sh ”’
cd terraform/envs/dev
terraform init
”’
}
}
stage(‘Terraform Plan’) {
steps {
sh ”’
cd terraform/envs/dev
terraform plan -var-file=tfvars.json
”’
}
}
stage(‘Terraform Apply’) {
steps {
input “Apply changes?”
sh ”’
cd terraform/envs/dev
terraform apply -auto-approve -var-file=tfvars.json
”’
}
}
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نحوه استفاده

با GitHub Actions:

فشار تغییرات به main شاخه برای راه اندازی گردش کار.
برای پیشرفت، گزارش‌های GitHub Actions را مرور کنید.

با جنکینز:

خط لوله را به صورت دستی یا روی commit های کد راه اندازی کنید.
تصویب کنید Terraform Apply مرحله در صورت نیاز

ملاحظات کلیدی

مدیریت دولتی:

اطمینان حاصل کنید که سطل S3 و جدول DynamoDB برای قفل حالت از قبل ایجاد شده اند.

متغیرهای محیطی:

از متغیرهای محیطی برای اطلاعات حساس مانند کلیدهای AWS استفاده کنید.

محیط های جداگانه:

متفاوت استفاده کنید backend.tf تنظیمات برای توسعه دهنده، مرحله بندی، و تولید.

نقش های IAM:

نقش های IAM با حداقل امتیاز را برای اجرای Terraform ضمیمه کنید.

این راه‌اندازی یک رویکرد قوی و مدولار را برای مدیریت زیرساخت‌ها در سراسر محیط‌ها تضمین می‌کند. در صورت نیاز به کمک بیشتر به من اطلاع دهید!

در زیر یک است ساختار پوشه استاندارد تولید برای Terraform برای ارائه EKS در چندین محیط با استفاده از ماژول ها. این ساختار ماژولار بودن، جداسازی محیط و قابلیت استفاده مجدد را تضمین می کند. علاوه بر این، من مراحل و کد خط لوله را برای استقرار این زیرساخت با استفاده از GitHub Actions و Jenkins ارائه خواهم کرد.

تولید-ساختار پوشه Terraform استاندارد

terraform/
├── modules/                     # Reusable modules
│   ├── eks/                     # EKS module
│   │   ├── main.tf              # EKS resource definitions
│   │   ├── variables.tf         # Input variables
│   │   ├── outputs.tf           # Output values
│   │   ├── versions.tf          # Required providers and versions
│   └── vpc/                     # VPC module
│       ├── main.tf              # VPC resource definitions
│       ├── variables.tf         # Input variables
│       ├── outputs.tf           # Output values
│       ├── versions.tf          # Required providers and versions
├── envs/                        # Per-environment configurations
│   ├── dev/                     # Development environment
│   │   ├── main.tf              # Environment-specific resources
│   │   ├── variables.tf         # Environment-specific variables
│   │   ├── backend.tf           # S3/DynamoDB backend for Terraform state
│   │   └── tfvars.json          # Environment-specific variable values
│   ├── staging/                 # Staging environment
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   ├── backend.tf
│   │   └── tfvars.json
│   └── prod/                    # Production environment
│       ├── main.tf
│       ├── variables.tf
│       ├── backend.tf
│       └── tfvars.json
└── pipelines/                   # CI/CD pipelines for Terraform
    ├── github-actions.yml       # GitHub Actions workflow
    └── jenkins-pipeline.groovy  # Jenkins pipeline script
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

فایل های کلیدی

1. modules/eks/main.tf

خوشه EKS و منابع مرتبط را تعریف می کند:

resource "aws_eks_cluster" "this" {
  name     = var.cluster_name
  role_arn = var.cluster_role_arn

  vpc_config {
    subnet_ids = var.subnet_ids
  }
}

resource "aws_eks_node_group" "this" {
  cluster_name    = aws_eks_cluster.this.name
  node_role_arn   = var.node_role_arn
  subnet_ids      = var.subnet_ids
  scaling_config {
    desired_size = var.desired_size
    max_size     = var.max_size
    min_size     = var.min_size
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. envs/dev/main.tf

ماژول EKS و سایر ماژول های مورد نیاز (مانند VPC) را فراخوانی می کند:

module "vpc" {
  source      = "../../modules/vpc"
  cidr_block  = var.cidr_block
  env         = var.env
}

module "eks" {
  source            = "../../modules/eks"
  cluster_name      = var.cluster_name
  cluster_role_arn  = var.cluster_role_arn
  node_role_arn     = var.node_role_arn
  subnet_ids        = module.vpc.subnet_ids
  desired_size      = var.desired_size
  max_size          = var.max_size
  min_size          = var.min_size
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

3. envs/dev/backend.tf

پیکربندی باطن از راه دور را برای ذخیره سازی وضعیت تعریف می کند:

terraform {
  backend "s3" {
    bucket         = "your-terraform-state-bucket"
    key            = "eks/dev/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "terraform-lock-table"
    encrypt        = true
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

4. envs/dev/tfvars.json

ارزش های خاص محیطی:

{
  "cluster_name": "eks-dev",
  "cidr_block": "10.0.0.0/16",
  "desired_size": 2,
  "max_size": 5,
  "min_size": 1,
  "env": "dev",
  "cluster_role_arn": "arn:aws:iam::123456789012:role/EKS-Cluster-Role",
  "node_role_arn": "arn:aws:iam::123456789012:role/EKS-Node-Role"
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مراحل استقرار با استفاده از GitHub Actions

1. گردش کار GitHub Actions (pipelines/github-actions.yml)

name: Deploy Terraform

on:
  push:
    branches:
      - main

jobs:
  terraform:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v2
      with:
        terraform_version: 1.5.0

    - name: Terraform Init
      run: |
        cd terraform/envs/dev
        terraform init

    - name: Terraform Plan
      run: |
        cd terraform/envs/dev
        terraform plan -var-file=tfvars.json

    - name: Terraform Apply
      if: github.ref == 'refs/heads/main'
      run: |
        cd terraform/envs/dev
        terraform apply -auto-approve -var-file=tfvars.json
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مراحل استقرار با استفاده از جنکینز

2. فیلمنامه خط لوله جنکینز (pipelines/jenkins-pipeline.groovy)

pipeline {
    agent any
    environment {
        TF_VAR_AWS_ACCESS_KEY = credentials('aws-access-key-id')
        TF_VAR_AWS_SECRET_KEY = credentials('aws-secret-access-key')
    }
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        stage('Terraform Init') {
            steps {
                sh '''
                cd terraform/envs/dev
                terraform init
                '''
            }
        }
        stage('Terraform Plan') {
            steps {
                sh '''
                cd terraform/envs/dev
                terraform plan -var-file=tfvars.json
                '''
            }
        }
        stage('Terraform Apply') {
            steps {
                input "Apply changes?"
                sh '''
                cd terraform/envs/dev
                terraform apply -auto-approve -var-file=tfvars.json
                '''
            }
        }
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نحوه استفاده

با GitHub Actions:

  1. فشار تغییرات به main شاخه برای راه اندازی گردش کار.
  2. برای پیشرفت، گزارش‌های GitHub Actions را مرور کنید.

با جنکینز:

  1. خط لوله را به صورت دستی یا روی commit های کد راه اندازی کنید.
  2. تصویب کنید Terraform Apply مرحله در صورت نیاز

ملاحظات کلیدی

  1. مدیریت دولتی:

    • اطمینان حاصل کنید که سطل S3 و جدول DynamoDB برای قفل حالت از قبل ایجاد شده اند.
  2. متغیرهای محیطی:

    • از متغیرهای محیطی برای اطلاعات حساس مانند کلیدهای AWS استفاده کنید.
  3. محیط های جداگانه:

    • متفاوت استفاده کنید backend.tf تنظیمات برای توسعه دهنده، مرحله بندی، و تولید.
  4. نقش های IAM:

    • نقش های IAM با حداقل امتیاز را برای اجرای Terraform ضمیمه کنید.

این راه‌اندازی یک رویکرد قوی و مدولار را برای مدیریت زیرساخت‌ها در سراسر محیط‌ها تضمین می‌کند. در صورت نیاز به کمک بیشتر به من اطلاع دهید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا