برنامه نویسی

ایجاد یک محیط آزمایشگاه خدمات Azure Kubernetes با BICEP

در این مقاله ، من قصد دارم به شما نشان دهم که چگونه یک محیط آزمایشگاه خدمات Azure Kubernetes را با BICEP بسازید. این نمونه از این آزمایشگاه AKS تهیه شده توسط تیم AKS الهام گرفته شده است!

https://www.youtube.com/watch؟v=ihi2m-tjefk

ما قصد داریم با استفاده از BICEP ، محیط آزمایشگاه را به صورت گام به گام بسازیم. هر کجا ممکن باشد ، ما از ایجاد منابع با استفاده از AZ CLI خودداری خواهیم کرد، و در عوض برای تعریف زیرساخت های ما یک رویکرد افکار انجام دهید اعلان در عوض با BICEP. ما هنوز نیاز به استفاده از AZ CLI برای انجام برخی کارها ، مانند استفاده از منابع خود داریم.

اگر می خواهید به همراه این نمونه دنبال کنید ، به ابزارها و خدمات زیر نیاز دارید:

  • اشتراک لاجورد
  • یک ویرایشگر کد – من از کد استودیو ویژوال استفاده می کنم!
  • CLI
  • به berctl
  • Bash Shell (VS Code دارای یک ترمینال یکپارچه است ، ترمینال ویندوز نیز بسیار مرتب است)

پس از داشتن این ابزارها ، یا اگر قبلاً آنها را نصب کرده اید ، بیایید شروع به ساخت محیط آزمایشگاه AKS خود با BICEP کنیم!

ایجاد منابع ما

قبل از انجام هر کاری ، از AZ CLI برای ورود به اشتراک Azure خود استفاده کنید. برای انجام این کار ، باز کردن bash ترمینال و موارد زیر را اجرا کنید:

$ az login --use-device-code
حالت تمام صفحه را وارد کنید

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

برای آزمایشگاه AKS ما ، منابع زیر را ایجاد خواهیم کرد:

  • خوشه خدمات Azure Kubernetes (امیدوارم که آشکار باشد ….)
  • تجزیه و تحلیل ورود به سیستم لاجورد
  • Azure Prometheus را مدیریت کرد
  • لاجورد گرافانا را مدیریت کرد
  • طاق کلید لاجورد
  • رجیستری کانتینر لاجورد

ما همچنین برای استقرار منابع خود به یک گروه منابع نیاز داریم. برای این کار ، ما از AZ CLI استفاده خواهیم کرد:

$ export RG_NAME=''
$ export LOCATION=''
حالت تمام صفحه را وارد کنید

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

برای RG_NAME، به گروه منابع خود یک نام و برای LOCATION یک منطقه لاجورد را انتخاب کنید که از مناطق در دسترس بودن پشتیبانی کند. از آنجا که من در یک زمین پایین زندگی می کنم ، من انتخاب کردم australiaeastبشر منطقه ای را انتخاب کنید که به شما نزدیک باشد.

پس از تنظیم این متغیر ، از AZ CLI برای ایجاد گروه منابع خود استفاده کنید:

$ az group create --name $RG_NAME --location $LOCATION
حالت تمام صفحه را وارد کنید

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

خروجی شما باید به این شکل باشد:

{
  "id": "/subscriptions//resourceGroups/",
  "location": "",
  "managedBy": null,
  "name": "",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}
حالت تمام صفحه را وارد کنید

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

من جزئیات خود را برای وضوح حذف کردم.

با ایجاد گروه منابع ما ، بیایید با استفاده از BICEP منابع خود را تعریف کنیم. برای ساده نگه داشتن کارها ، ما یک main.bicep پرونده (جایی که ما الگوی خود را تعریف خواهیم کرد) و main.bicepparam پرونده (جایی که پارامترهای خود را که به الگوی خود منتقل می کنیم تعریف خواهیم کرد).

ما در مورد پارامترهای BICEP یا BICEP جزئیات زیادی نخواهیم داشت ، اما اگر می خواهید اطلاعات بیشتری در مورد نحوه کار همه چیز اگر از قبل نمی دانید ، روی آن دو پیوند کلیک کنید.

گزینه های طراحی

هنگام استقرار سرویس Azure Kubernetes در دنیای واقعی ، یک مجموعه کامل از سناریو ها و موارد مختلف وجود خواهد داشت که باید در نظر بگیرید.

برای اهداف محیط آزمایشگاه ما ، من تصمیمات طراحی زیر را گرفته ام:

  1. نظارت و ورود به سیستم AK را فعال کنید

مانند همه سیستم عامل های محاسباتی ، بسیار مهم است که ورود به سیستم و نظارت را روشن کنید تا اطمینان حاصل کنید که می توانید سلامت و عملکرد خوشه AKS خود را حفظ کنید. AKS دارای یک مجموعه ادغام با مانیتور لاجورد است که می توانیم برای سیاهههای مربوط و معیارها مانند:

  • Container Insights ، که سیاهههای مربوط به کانتینر را برای ورود به سیستم های کاری تجزیه و تحلیل ارسال می کند.
  • خدمات مدیریت شده Azure Monitor ، که معیارهای عملکرد را از گره ها و استخرها ارسال می کند.
  • Azure Grafana را مدیریت کرد ، که به ما امکان می دهد معیارهای عملکردی را که توسط پرومتئوس ارسال شده است تجسم کنیم.

برای آزمایشگاه ما ، ما فقط می خواهیم اجزای را به هم وصل کنیم. ایجاد داشبوردهای مختلف در BICEP فرایندی است که فقط پیچیدگی های زیادی را به آنچه در اینجا می خواهیم انجام دهیم اضافه می کند. اما ارزش آن را دارد که حداقل برای محیط آزمایشگاه ما ادغام را تنظیم کنید.

  1. هویت های مدیریت شده و RBAC را برای تأیید اعتبار بیش از کلیدها و SSH فعال کنید

حتی اگر ما این خوشه AKS را برای محیط آزمایشگاه شخصی خودمان تنظیم می کنیم ، استفاده از RBAC از طریق کلیدها و SSH برای دسترسی به خوشه AKS و منابع مختلف لاجورد دیگر عادت خوبی است.

ایجاد تکالیف نقش در BICEP بسیار ساده است ، و ما باید هویت خود را در Azure برخی نقش های خاص بر منابع خود اختصاص دهیم ، و همچنین هویت مدیریت شده خود را ارائه دهیم که ما نقش هایی را بر روی منابع دیگر ارائه می دهیم.

غیرفعال کردن دسترسی SSH به گره های AKS ما همچنین به جلوگیری از دسترسی غیرمجاز به خوشه های ما کمک می کند.

  1. از Azure CNI Overlay با شبکه کیلیوم استفاده کنید

درست مانند آزمایشگاه AKS ، من قصد دارم از پوشش Azure CNI با کیلیوم برای شبکه خود استفاده کنم. این کار پیشرفته ترین ویژگی های شبکه موجود در AK را به ما می دهد ، و همچنین انعطاف پذیری را در مورد نحوه اختصاص آدرس های IP به POD ها به ما می دهد.

شبکه های زیادی در AK ها وجود دارد ، و من قصد دارم در آینده برخی از مطالب شبکه AK را ایجاد کنم تا این موضوع را پوشش دهم. اگر علاقه مند به کسب اطلاعات بیشتر در مورد شبکه سازی در AK توسط خودتان هستید ، مفاهیم شبکه را برای برنامه های کاربردی در سرویس Azure Kubernetes (AKS) بررسی کنید

به خاطر داشته باشید ، تمام “بهترین روشها” وجود دارد که ما در اینجا اجرا نمی کنیم. مانند آزمایشگاه ، این خوشه از اینترنت عمومی قابل دسترسی خواهد بود. در سناریوهای تولید ، بهتر است یک خوشه خصوصی ایجاد کنید. هدف از این کار ساده نگه داشتن کارها برای محیط آزمایشگاه شخصی خودمان است.

با توجه به همه این موارد ، بیایید نوشتن برخی از کد های BICEP را شروع کنیم!

فضای کاری تجزیه و تحلیل ورود به سیستم

بیایید با ایجاد یک فضای کاری Log Analytics شروع کنیم! برای انجام این کار ، ما می توانیم با استفاده از کد BICEP زیر ، منبع فضای کاری Analytics Log خود را تعریف کنیم:

@description('The name given to the Log Analytics workspace')
param logAnalyticsName string

resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
  name: logAnalyticsName
  location: location
  tags: tags
  properties: {
    sku: {
      name: 'PerGB2018'
    }
  }
  identity: {
    type: 'SystemAssigned'
  }
}
حالت تمام صفحه را وارد کنید

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

این بلوک یک فضای کاری Analytics Log را تعریف می کند که به همان منطقه گروه منابع ما مستقر خواهد شد. ما از param logAnalytics برای ارائه نام منبع ما (بعداً پرونده پارامترها را پوشش خواهم داد). ما همچنین به آن SKU می دهیم PerGB2018 و یک را فعال کرد SystemAssigned هویت

Azure Prometheus را مدیریت کرد

ما می توانیم یک منبع پرومتئوس مدیریت شده لاجورد را فقط با چند خط BICEP با استفاده از یک تعریف کنیم Microsoft.Monitor/account منبع ما همچنین یک پارامتر را برای prometheusName بنابراین ما می توانیم یک نام به منبع بدهیم.

@description('The name given to the Azure Managed Prometheus workspace')
param prometheusName string

resource prometheusWorkspace 'Microsoft.Monitor/accounts@2023-04-03' = {
  name: prometheusName
  location: location
  tags: tags
}
حالت تمام صفحه را وارد کنید

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

لاجورد گرافانا را مدیریت کرد

ایجاد یک منبع گرافانا مدیریت شده کمی بیشتر درگیر است. ما می خواهیم ادغام بین منابع گرافانا خود را با منبع مدیریت شده Prometheus خود پیکربندی کنیم تا بتوانیم معیارهای عملکرد ساطع شده توسط پرومتئوس را تجسم کنیم.

این در properties.grafanaIntegrations.azureMonitorWorkspaceIntegrations بلوک در این بلوک ، ما از Id از بلوک منابع پرومتئوس ما می توانیم آن را با داشبورد گرافانا ادغام کنیم:

@description('The name given to the Grafana Dashboard')
param grafanaName string

resource grafanaDashboard 'Microsoft.Dashboard/grafana@2023-09-01' = {
  name: grafanaName
  location: location
  tags: tags
  sku: {
    name: 'Standard'
  }
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    grafanaIntegrations: {
      azureMonitorWorkspaceIntegrations: [
        {
          azureMonitorWorkspaceResourceId: prometheusWorkspace.id
        }
      ]
    }
  }
}

resource grafanaAdminRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(subscription().id, resourceGroup().id, userObjectId, 'Grafana Admin')
  scope: grafanaDashboard
  properties: {
    principalId: userObjectId
    principalType: 'User'
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '22926164-76b3-42b3-bc55-97df8dab3e41')
  }
}
حالت تمام صفحه را وارد کنید

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

ما همچنین یک وظیفه نقش ایجاد می کنیم و به خودمان اعطا می کنیم Grafana Admin نقش ، از طریق userObjectId پارامتر من به شما نشان خواهم داد که چگونه می توانیم مقدار این پارامتر را با استفاده از AZ CLI بعداً بازیابی کنیم.

هویت مدیریت شده توسط کاربر

صحبت از هویت ، ما باید هویتی را برای تأیید اعتبار رمز عبور به خدمات لاجورد ایجاد کنیم. برای این کار ، ما یک منبع هویت مدیریت شده توسط کاربر ایجاد خواهیم کرد و از آن برای اختصاص مجوزها استفاده می کنیم.

تنها چیزی که ما نیاز داریم تعریف یک پارامتر برای managedIdentityName (که نام هویت مدیریت شده خواهد بود) و یک منبع از نوع از نوع Microsoft.ManagedIdentity/userAssignedIdentities:

@description('The name given to the User-Assigned Managed Identity')
param managedIdentityName string

resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: managedIdentityName
  location: location
}
حالت تمام صفحه را وارد کنید

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

طاق کلید لاجورد

به عنوان بخشی از محیط آزمایشگاه AKS ، ما باید یک طاق کلیدی لاجورد را برای مدیریت اسرار مستقر کنیم. ما همچنین باید برخی از نقش ها را به خودمان و هویت مدیریت شده خود اختصاص دهیم.

برای طاق اصلی ، می توانیم مجوز RBAC را با استفاده از enableRbacAuthorization خاصیت

برای تکالیف نقش ، ما خودمان را اختصاص می دهیم Key Vault Administrator نقش با عبور در ما userObjectId و ایجاد تکلیف نقش از User نوع اصلی ما هویت مدیریت شده خود را به دو نقش اختصاص می دهیم. در Key Vault Secrets User وت Key Vault Certificate User نقش ها

@description('The name given to the Key Vault')
param keyVaultName string

resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' = {
  name: keyVaultName
  location: location
  tags: tags
  properties: {
    sku: {
      name: 'standard'
      family: 'A'
    }
    tenantId: subscription().tenantId
    enableRbacAuthorization: true
  }
}

resource keyVaultSecretUserRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(subscription().id, resourceGroup().id, managedIdentity.id, 'Key Vault Secrets User')
  scope: keyVault
  properties: {
    principalId: managedIdentity.properties.principalId
    principalType: 'ServicePrincipal'
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '4633458b-17de-408a-b874-0445c86b69e6')
  }
}

resource keyVaultCertificateUserRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(subscription().id, resourceGroup().id, managedIdentity.id, 'Key Vault Certificate User')
  scope: keyVault
  properties: {
    principalId: managedIdentity.properties.principalId
    principalType: 'ServicePrincipal'
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', 'db79e9a7-68ee-4b58-9aeb-b90e7c24fcba')
  }
}

resource keyVaultAdminRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(subscription().id, resourceGroup().id, userObjectId, 'Key Vault Administrator')
  scope: keyVault
  properties: {
    principalId: userObjectId
    principalType: 'User'
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '00482a5a-887f-4fb3-b363-3b7fe8e74483')
  }
}
حالت تمام صفحه را وارد کنید

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

رجیستری کانتینر لاجورد

همچنین داشتن رجیستری کانتینر خصوصی خود به عنوان بخشی از محیط آزمایشگاه ما مفید است تا بتوانیم در یک رجیستری خصوصی به عادت ساخت ، ذخیره و مدیریت تصاویر کانتینر خود بپردازیم.

رجیستری کانتینر Azure به ما امکان می دهد تصاویر و مصنوعات کانتینر و آثار باستانی را در یک رجیستری خصوصی برای انواع استقرار کانتینرها بسازیم ، ذخیره کنیم و مدیریت کنیم.

برای ایجاد یکی در BICEP ، می توانیم یک منبع از نوع را تعریف کنیم Microsoft.ContainerRegistry/registries، با آن نام بگذارید acrName پارامتر ، و آن را اختصاص دهید SystemAssigned هویت

من همچنین دو نقش را برای هویت خود اختصاص می دهم. AcrPull وت AcrPushبشر این به من امکان می دهد تصاویر را از رجیستری کانتینر خصوصی خود فشار دهم و بکشم:

@description('The name given to the Azure Container Registry')
param acrName string

resource acr 'Microsoft.ContainerRegistry/registries@2023-07-01' = {
  name: acrName
  location: location
  tags: tags
  sku: {
    name: 'Standard'
  }
  identity: {
    type: 'SystemAssigned'
  }
}

resource acrPullRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(subscription().id, resourceGroup().id, userObjectId, 'AcrPull')
  scope: acr
  properties: {
    principalId: userObjectId
    principalType: 'User' 
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d')
  }
}

resource acrPushRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(subscription().id, resourceGroup().id, userObjectId, 'AcrPush')
  scope: acr
  properties: {
    principalId: userObjectId
    principalType: 'User'
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '8311e382-0749-4cb8-b61a-304f252e45ec')
  }
}
حالت تمام صفحه را وارد کنید

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

و سرانجام ، خوشه لاجورد Kubernetes ما!

اکنون زمان آن رسیده است که خوشه AKS خود را ایجاد کنیم! هنگامی که ما یک خوشه AKS را مستقر می کنیم ، قبل از انجام این کار باید چند مورد وجود داشته باشد.

  1. خوشه ما چقدر بزرگ است؟

اندازه خوشه شما به آنچه می خواهید روی AK ها اجرا کنید بستگی دارد. این شامل تعداد غلافهایی است که شما قصد اجرا دارید ، که میزان گره های مورد نیاز برای اجرا را تعیین می کند (همراه با میزان CPU و حافظه مورد نیاز برای هر غلاف). با گذشت زمان ، می توانید تعداد گره های خوشه خود را به همراه اندازه آنها تنظیم کنید.

گره ها برای AK ها در اصل ماشین های مجازی هستند ، بنابراین ایده خوبی است که خود را با چه نوع ماشین های مجازی در دسترس شما قرار دهید.

  1. استخرهای گره کاربر

بهتر است هنگام ایجاد یک خوشه AKS ، استخرهای جداگانه سیستم و گره کاربر ایجاد کنید. این به ما اجازه می دهد تا سیستم و بارهای کار کاربر را به طور مستقل مدیریت کنیم.

استخرهای گره سیستم غلاف میزبان که هواپیمای کنترل Kubernetes را پیاده سازی می کنند (مانند به apiseverبا کله و غیره).

استخرهای گره کاربر استخرهای محاسباتی هستند که می توانیم برای میزبانی بارهای کاری خود ایجاد کنیم. استخرهای گره کاربر را می توان با تنظیمات مختلف (مواردی مانند اندازه VM ، تعداد گره و غیره) نسبت به استخرهای گره سیستم ایجاد کرد.

  1. مناطق در دسترس بودن!

ما می توانیم با استفاده از مناطق در دسترس بودن ، صفحه کنترل خوشه AKS خود را توزیع کنیم. انجام این کار در دسترس بودن بالایی برای هواپیمای کنترل ما است.

در اینجا BICEP است که ما باید خوشه AKS خود را تعریف کنیم:

@description('The name given to the AKS Cluster')
param aksName string

resource aks 'Microsoft.ContainerService/managedClusters@2024-09-01' = {
  name: aksName
  location: location
  tags: tags
  identity: {
    type: 'SystemAssigned'
  }
  sku: {
    name: 'Base'
    tier: 'Standard'
  }
  properties: {
    dnsPrefix: 'aksdns'
    agentPoolProfiles: [
      {
        name: 'systempool'
        count: 3
        vmSize: 'Standard_DS2_v2'
        osType: 'Linux'
        osSKU: 'AzureLinux'
        mode: 'System'
        availabilityZones: [
          '1'
          '2'
          '3'
        ]
        nodeTaints: [
          'CriticalAddonsOnly=true:NoSchedule'
        ]
      }
      {
        name: 'userpool'
        count: 1
        vmSize: 'Standard_DS2_v2'
        availabilityZones: [
          '1'
          '2'
          '3'
        ]
        mode: 'User'
      }
    ]
    networkProfile: {
      networkPlugin: 'azure'
      networkPluginMode: 'overlay'
      networkDataplane: 'cilium'
      loadBalancerSku: 'standard'
    }
    enableRBAC: true
    addonProfiles: {
      azureKeyvaultSecretsProvider: {
        enabled: true
      }
      omsAgent: {
        enabled: true
        config: {
          logAnalyticsWorkspaceResourceID: logAnalytics.id
        }
      }
    }
    azureMonitorProfile: {
      metrics: {
        enabled: true
        kubeStateMetrics: {
          metricAnnotationsAllowList: '*'
          metricLabelsAllowlist: '*'
        }
      }     
    }
  }
}
حالت تمام صفحه را وارد کنید

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

در اینجا اتفاقات زیادی رخ می دهد ، بنابراین بیایید آن را تجزیه کنیم:

  • ما پارامتر دیگری را برای نامگذاری خوشه خود تعریف می کنیم: aksName
  • ما خوشه را به همان منطقه لاجورد به عنوان گروه منابع خود مستقر می کنیم.
  • ما هر دو را ایجاد می کنیم systempool و الف userpoolبشر ما 3 گره را به خود اختصاص می دهیم systempool و 1 گره به ما userpoolبشر
  • ما یک رنگ به خود اضافه می کنیم systempool برای جلوگیری از تهیه بار کار کاربر با استفاده از آن nodeTaints خاصیت ما می توانیم استفاده کنیم kubectl taint دستور انجام این کار ، اما از آنجا که AK ها می توانند استخرهای گره را مقیاس کنند ، ما باید از این کار استفاده کنیم تا اطمینان حاصل شود که رنگ آن برای همه گره های موجود در استخر اعمال می شود.
  • ما با استفاده از پوشش Azure CNI را برای سیایم پیکربندی می کنیم networkProfileبشر cilium به گونه ای تعریف شده است که ما می توانیم از آن به عنوان Dataplane شبکه استفاده کنیم ، و ما همچنین یک standard بالانسر بار.
  • enableRBAC روی درست تنظیم شده است و RBAC را برای خوشه فعال می کند.
  • ما دو افزودنی را برای خوشه خود پیکربندی می کنیم. azureKeyVaultSecretsProvider وت omsAgentبشر برای ما omsAgent، ما از id خاصیت فضای کاری ما برای پیکربندی omsAgent برای استفاده از آن فضای کاری.
  • بالاخره ، azureMonitorProfile بخش نظارت بر معیارها با kubeStateMetrics پیکربندی شده برای اجازه دادن به همه حاشیه نویسی ها و برچسب ها.

تهیه مقادیر پارامترهای ما در ما main.bicepparam پرونده

ما یک دسته از پارامترها داریم که باید مقادیر خود را تهیه کنیم. شما می توانید این کار را با استفاده از AZ CLI انجام دهید (که در برخی از سناریوها مفید است و ما بعداً این کار را انجام خواهیم داد) ، اما بهتر است از یک فایل پارامترها استفاده کنید.

برای الگوهای BICEP ، می توانید از یک فایل پارامترهای JSON استفاده کنید (که یک روش بسیار خسته کننده برای انجام آن است) یا استفاده از یک فایل پارامترهای BICEP با یک .bicepparam پسوند پرونده استفاده از فایل های پارامتر به ما این امکان را می دهد تا با آنچه که ما به عنوان پارامترها تهیه می کنیم انعطاف پذیر باشیم ، زیرا مقادیر می توانند در محیط های مختلف یا کاربران مختلف تغییر کنند.

در اینجا مطالب من است main.bicepparam پرونده (اگر دنبال می کنید ، مقادیر استقرار خود را تغییر دهید):

using 'main.bicep'

param logAnalyticsName="law-wv-prod-001"
param prometheusName="prom-wv-prod-001"
param grafanaName="graf-wv-prod-001"
param keyVaultName="kv-wv-prod-001"
param managedIdentityName="uai-wv-prod-001"
param acrName="acrwvprod001"
param aksName="aks-wv-prod-001"
param userObjectId = ''
حالت تمام صفحه را وارد کنید

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

ما اعمال می کنیم using بیانیه ای برای اینکه پارامترهای ما را بدانیم که پارامترهای لازم را برای تأمین مقادیر لازم داریم. می توانید از الگوی BICEP ، الگوهای JSON و مشخصات الگو استفاده کنید. از آنجا که ما فقط یکی داریم bicep پرونده برای ساده نگه داشتن چیزها ، ما فقط عبارت استفاده را برای استفاده از الگوی BICEP خود تنظیم می کنیم.

برای به دست آوردن ارزش خود userObjectId، ما می توانیم دستور AZ CLI زیر را اجرا کنیم:

$ export USER_ID="$(az ad signed-in-user show --query id -o tsv)"
حالت تمام صفحه را وارد کنید

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

ما این کار را در یک متغیر در ترمینال Bash خود ذخیره می کنیم تا بتوانیم هنگام استفاده از الگوی ، از آن استفاده کنیم ، که اکنون انجام خواهیم داد.

استقرار محیط آزمایشگاه ما

برای استقرار منابع ما به گروه منابع ما ، دستور AZ CLI زیر را اجرا کنید:

$ az deployment group create --resource-group $RG_NAME --template-file main.bicep --parameters main.bicepparam userObjectId=$USER_ID
حالت تمام صفحه را وارد کنید

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

استقرار برنامه نسخه ی نمایشی فروشگاه AKS به محیط آزمایشگاه ما

اکنون که محیط آزمایشگاه خود را تنظیم کرده ایم ، بیایید یک برنامه را برای آن مستقر کنیم. برای این کار ، من قصد دارم از برنامه نمایشی فروشگاه AKS که توسط تیم AKS ارائه شده است ، استفاده کنم (یا بسته به دیدگاه شما).

این معماری سطح بالا آن برنامه است:

تصویر یک نمودار معماری سیستم برای یک برنامه تجارت الکترونیکی مبتنی بر میکروسرویس است. این نشان می دهد مشتریان در تعامل با یک فروشگاه Vue.js مبتنی بر فروشگاه ، که به عنوان رابط اصلی عمل می کند. این فروشگاه با دو سرویس با پس زمینه ارتباط برقرار می کند: یک سرویس سفارش ساخته شده با node.js و یک سرویس محصول ساخته شده با زنگ زدگی. سرویس سفارش سفارشات مشتری را پردازش می کند و آنها را به صف سفارش می فرستد که توسط RabbitMQ برای کار با ناهمزمان تهیه شده است. فلش های موجود در نمودار ، جریان داده ها را بین این مؤلفه ها نشان می دهد و تعامل بین قسمت جلویی ، خدمات پس زمینه و صف پیام را برجسته می کند.

اول ، بیایید استفاده کنیم kubectl برای ایجاد فضای نام برای برنامه فروشگاه:

$ kubectl create namespace pets
حالت تمام صفحه را وارد کنید

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

در مخزن نمونه ، یک پرونده YAML وجود دارد که تمام منابع Kubernetes مورد نیاز ما را برای برنامه ما ایجاد می کند. ما می توانیم این کار را با استفاده از آن اعمال کنیم kubectl apply

$ kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/refs/heads/main/aks-store-quickstart.yaml -n pets
حالت تمام صفحه را وارد کنید

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

لحظه ای به آن بدهید و تمام منابع مورد نیاز باید روی خوشه ما نصب شود. برای تأیید این موضوع ، دستور زیر را اجرا کنید:

$ kubectl get all -n pets
حالت تمام صفحه را وارد کنید

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

این برنامه از یک سرویس LoadBalancer استفاده می کند تا امکان دسترسی به UI برنامه را فراهم کند. پس از استقرار همه چیز ، می توانیم آدرس IP سرویس فروشگاه خود را با دستور زیر بازیابی کنیم:

$ kubectl get svc store-front -n pets
حالت تمام صفحه را وارد کنید

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

به بیرونی IP آدرس سرویس جبهه فروشگاه ، و باید بتوانید به برنامه دسترسی پیدا کنید:

https%3A%2F%2Fdev to uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flr4g23g1blnc52y8qwqc

پایان

تبریک می گویم! شما با استفاده از کد BICEP ، محیط آزمایشگاه AKS خود را با موفقیت مستقر کرده اید و یک نمونه نمونه را برای آن مستقر کرده اید. شما اکنون یک محیط آزمایشگاهی ساده دارید که می توانید برای یادگیری در مورد سرویس Azure Kubernetes استفاده کنید.

ما همچنین یک الگوی BICEP را برای آن ایجاد کرده ایم ، به این معنی که در صورت انتخاب ، می توانیم آن را به روشی قابل تکرار مستقر کنیم.

اگر در این باره سؤالی دارید ، لطفاً به هر یک از آنها احساس راحتی کنید نظر زیر یا در بلوزکی به من دسترسی پیدا کنید! اگر فقط می خواهید کد این پست وبلاگ را جستجو کنید ، این در GitHub من است!

تا دفعه بعد ، برنامه نویسی مبارک! 🤓🖥

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

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

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

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