Ortam - Kubernetes kaynağı
Azure Pipelines
Kubernetes kaynak görünümü, ad alanı içinde kaynağa eşlenen nesnelerin durumuna bir bakış sağlar. Bu görünüm ayrıca bir Kubernetes nesnesinden işlem hattına ve sonra işlemeye geri dönebilirsiniz.
Dağıtım için bir ortamdaki Kubernetes kümelerini hedeflemek için Kubernetes kaynaklarını kullanın. İşlem hatlarını kullanarak diğer Azure Kubernetes Service (AKS) ve kümelere dağıtın.
Kaynakların çalışma hakkında daha fazla bilgi edinmek için YAML'de kaynaklara ve kaynaklarlagüvenlike bakın.
Genel Bakış
Ortamlar içinde Kubernetes kaynak görünümlerini kullanmanın aşağıdaki avantajlarına bakın:
İşlem hattı izlenebilirliği - Dağıtımlar için kullanılan Kubernetesbildirim görevi, kaynak görünümlerde işlem hattı izlenebilirliğini göstermek için daha fazla ek açıklama ekler. İşlem hattı izlenebilirliği, ad alanı içindeki bir Azure DevOps güncelleştirmelerden sorumlu olan kuruluş, proje ve işlem hattının kaynağını belirlemeye yardımcı olur.

Kaynak durumunu tanılama - İş yükü durumu, yeni bir dağıtım tarafından ortaya çıkmış olan hatalarda veya regresyonlarda hızla hata ayıklamak için yararlı olabilir. Örneğin, ImagePullBackOff hatalarına neden olan yapılandırılmamış imagePullSecrets için pod durum bilgileri sorunun kök nedenini tanımlamanıza yardımcı olabilir.

Uygulamayı Gözden Geçirme - Uygulamayı Gözden Geçirme, Git depodan gelen her çekme isteğini ortam altındaki dinamik kubernetes kaynağına dağıtarak çalışır. Gözden geçirenler, hedef dalla birleştirilen ve üretime dağıtılana kadar bu değişikliklerin diğer bağımlı hizmetlerle nasıl birleşişini görebilir.
Use Azure Kubernetes Service
ServiceAccount, Azure Kubernetes Service (AKS) kullanarak seçtiğiniz kümede ve ad Azure Kubernetes Service oluşturulur. Kubernetes RBACözellikli bir küme için RoleBinding, oluşturulan hizmet hesabının kapsamını seçilen ad alanıyla sınırlamak için de oluşturulur. Kubernetes RBAC devre dışı bırakılmış bir küme için, oluşturulan ServiceAccount küme genelinde ayrıcalıklara (ad alanları arasında) sahiptir.
AKS Kubernetes kaynağı ekleme
Ortam ayrıntıları sayfasında Kaynak ekle'yi ve ardındanKubernetes'i seçin.
Sağlayıcı Azure Kubernetes Service Açılan Listesinden Seç'i seçin.
Azure aboneliğini, kümeyi ve ad alanını (yeni/var olan) seçin.
Kubernetes kaynağını oluşturmak için Doğrula ve oluştur'a seçin.
Ortamınız için bir küme gördüğünüzden emin olun. Kümenize henüz kod dağıtamadıysanız "Hiçbir zaman dağıtlanmadı" metninin yer alan metniyle karşınıza çıktı.
Mevcut bir hizmet hesabını kullanma
Yeni Azure Kubernetes Service ServiceAccount oluşturur, ancak genel sağlayıcı seçeneği var olan bir ServiceAccount'i kullanmanızı sağlar. Mevcut ServiceAccount, ortamınız içindeki bir Kubernetes kaynağıyla bir ad alanına eşlenmiş olabilir.
Bir ortamın dışında Kubernetes hizmet bağlantısı ayarlama hakkında daha fazla bilgi için Hizmet bağlantıları'nın Kubernetes hizmetbağlantısı bölümüne bakın.
İpucu
Kubernetes kaynağını AKS olmayan bir kümeden bir ad alanına eşlemek için genel sağlayıcıyı (mevcut hizmet hesabı) kullanın.
AKS olmayan bir Kubernetes kaynağı ekleme
Ortam ayrıntıları sayfasında Kaynak ekle'yi ve ardındanKubernetes'i seçin.
Sağlayıcınız için Genel sağlayıcı (mevcut hizmet hesabı) öğesini seçin.
Küme adını ve ad alanı değerlerini ekleyin.
Sunucu URL'sini ekleyin. URL'yi aşağıdaki komutla edinebilirsiniz:
kubectl config view --minify -o 'jsonpath={.clusters[0].cluster.server}'Gizli nesnenizi almak için hizmet hesabı gizli adını bulun.
kubectl get serviceAccounts <service-account-name> -n <namespace> -o 'jsonpath={.secrets[*].name}'Önceki adımın çıkışını kullanarak gizli nesneyi elde edin.
kubectl get secret <service-account-secret-name> -n <namespace> -o jsonJSON formunda getiriken Secret nesnesini kopyalayıp Gizli'ye yapıştırın.
Kubernetes kaynağını oluşturmak için Doğrula ve oluştur'a seçin.
İşlem hattında Kubernetes kaynaklarınıza başvuru
Azure Kubernetes Service veya YAML işlem hattı kullanıyorsanız, işlem hattınızı yapılandırmanın en kolay yolu bir şablon kullanmaktır. Bağlan ve aşağıdaki iki Kubernetes Hizmeti seçeneğinden birini seçin:
- Azure Kubernetes Services şablonuna dağıtma
- Kubernetes'e dağıtma - Azure DevSpaces ile Uygulamayı Gözden Geçirme
Şablonlar, YAML kodunu sıfırdan yazmak veya açık rol bağlamalarını el ile oluşturmak zorunda kalmadan Gözden Geçirme Uygulamasını ayarlamanızı sağlar.
Gözden Geçirme Uygulamasını Ayarlama
Aşağıdaki örnekte, ilk dağıtım işi PR olmayan dallar için çalışır ve ortamlar altındaki normal bir Kubernetes kaynağına yönelik dağıtımlar yapar. İkinci iş yalnızca PR dalları için çalışır ve isteğe bağlı olarak oluşturulan Uygulama kaynaklarını gözden geçirme (Kubernetes kümesi içindeki ad alanları) için dağıtır. Kaynaklar, ortamın kaynak listesi görünümünde "Gözden Geçir" ile etiketlenmiş olur. İşlem hattında kullanmak üzere değişkenleri tanımlayın. Azure Kubernetes Services'e Dağıt şablonunu kullanırsanız,bu değişkenler sizin için tanımlanır.
# Build and push image to Azure Container Registry; Deploy to Azure Kubernetes Service
trigger:
- main
resources:
- repo: self
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: '12345' # Docker service connection identifier
envName: 'myEnv' # name of your environment
imageRepository: 'name-of-image-repository' # name of image repository
containerRegistry: 'mycontainer.azurecr.io' # path to container registry
dockerfilePath: '**/Dockerfile'
tag: '$(Build.BuildId)'
imagePullSecret: 'my-app-secret' # image pull secret
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Name of the new namespace being created to deploy the PR changes.
k8sNamespaceForPR: 'review-app-$(System.PullRequest.PullRequestId)'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- upload: manifests
artifact: manifests
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
jobs:
- deployment: Deploy
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
displayName: Deploy
pool:
vmImage: $(vmImageName)
environment: $(envName).$(resourceName)
strategy:
runOnce:
deploy:
steps:
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: createSecret
secretName: $(imagePullSecret)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
- deployment: DeployPullRequest
displayName: Deploy Pull request
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/pull/'))
pool:
vmImage: $(vmImageName)
environment: $(envName).$(resourceName)
strategy:
runOnce:
deploy:
steps:
- reviewApp: default
- task: Kubernetes@1
displayName: 'Create a new namespace for the pull request'
inputs:
command: apply
useConfigurationFile: true
inline: '{ "kind": "Namespace", "apiVersion": "v1", "metadata": { "name": "$(k8sNamespaceForPR)" }}'
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: createSecret
secretName: $(imagePullSecret)
namespace: $(k8sNamespaceForPR)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to the new namespace in the Kubernetes cluster
inputs:
action: deploy
namespace: $(k8sNamespaceForPR)
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
- task: Kubernetes@1
name: get
displayName: 'Get services in the new namespace'
continueOnError: true
inputs:
command: get
namespace: $(k8sNamespaceForPR)
arguments: svc
outputFormat: jsonpath='http://{.items[0].status.loadBalancer.ingress[0].ip}:{.items[0].spec.ports[0].port}'
# Getting the IP of the deployed service and writing it to a variable for posing comment
- script: |
url="$(get.KubectlOutput)"
message="Your review app has been deployed"
if [ ! -z "$url" -a "$url" != "http://:" ]
then
message="${message} and is available at $url.<br><br>[Learn More](https://aka.ms/testwithreviewapps) about how to test and provide feedback for the app."
fi
echo "##vso[task.setvariable variable=GITHUB_COMMENT]$message"
Bu işi mevcut bir işlem hattında kullanmak için, normal Kubernetes ortam kaynağının desteklene hizmet bağlantısı "Küme yöneticisi kimlik bilgilerini kullan" olarak değiştirilmelidir. Aksi takdirde, temel alınan hizmet hesabı için Uygulamayı Gözden Geçir ad alanına rol bağlamaları oluşturulacaktır.