Prostředí – Prostředek Kubernetes
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Zobrazení prostředků Kubernetes zobrazuje stav objektů v rámci oboru názvů mapovaného na prostředek. Zobrazení prostředků také překrývá sledovatelnost kanálu, abyste mohli trasovat zpět z objektu Kubernetes do kanálu a pak zpátky k potvrzení.
Prostředky Kubernetes použijte k cílení clusterů Kubernetes v prostředí pro nasazení. Kanály můžete použít k nasazení do služby Azure Kubernetes Service (AKS) a clusterů od jakéhokoli jiného poskytovatele cloudu.
Prostředky Kubernetes můžete používat s veřejnými nebo privátními clustery. Další informace o tom, jak prostředky fungují, najdete v yaML a zabezpečení prostředků.
Přehled
Podívejte se na následující výhody používání zobrazení prostředků Kubernetes v prostředích:
Sledovatelnost kanálu – Úloha manifestu Kubernetes, která se používá pro nasazení, přidává další poznámky k zobrazení sledovatelnosti kanálu v zobrazeních prostředků. Sledovatelnost kanálu pomáhá identifikovat původní organizaci, projekt a kanál Azure DevOps zodpovědné za aktualizace provedené v objektu v rámci oboru názvů.
Diagnostika stavu prostředků – Stav úlohy může být užitečný pro rychlé ladění chyb nebo regresí zavedených novým nasazením. Například pro nekonfigurované imagePullSecrets , což vede k chybám ImagePullBackOff, vám informace o stavu podu můžou pomoct identifikovat původní příčinu problému.
Kontrola aplikace – Kontrola aplikace funguje nasazením všech žádostí o přijetí změn z úložiště Git do dynamického prostředku Kubernetes v rámci prostředí. Revidujícím se dozvíte, jak tyto změny vypadají a fungují s dalšími závislými službami, než se sloučí do cílové větve a nasadí do produkčního prostředí.
Použití služby Azure Kubernetes Service
ServiceAccount se vytvoří ve zvoleném clusteru a oboru názvů při použití služby Azure Kubernetes Service (AKS). V případě clusteru s podporou RBAC Kubernetes se vytvoří také RoleBinding, který omezí rozsah vytvořeného účtu služby na zvolený obor názvů. Pro cluster s podporou RBAC Kubernetes má vytvořený účet ServiceAccount oprávnění pro celý cluster (napříč obory názvů).
Přidání prostředku AKS Kubernetes
Na stránce podrobností o prostředí vyberte Přidat prostředek a zvolte Kubernetes.
V rozevíracím seznamu zprostředkovatele vyberte Službu Azure Kubernetes Service .
Zvolte předplatné Azure, cluster a obor názvů (nový nebo existující).
Vyberte Ověřit a vytvořit prostředek Kubernetes.
Ověřte, že se pro vaše prostředí zobrazí cluster. Pokud jste ještě nenasadili kód do clusteru, zobrazí se text Nikdy nasazený.
Použít existující účet služby
Azure Kubernetes Service mapuje prostředek Kubernetes ve vašem prostředí na obor názvů.
Další informace o nastavení připojení služby Kubernetes mimo prostředí najdete v části Připojení ke službě Kubernetes v části Připojení ke službě.
Tip
Pomocí obecného poskytovatele (existujícího účtu služby) namapujte prostředek Kubernetes na obor názvů z clusteru mimo AKS.
Přidání prostředku Kubernetes jiného typu než AKS
Na stránce podrobností o prostředí vyberte Přidat prostředek a zvolte Kubernetes.
Pro svého poskytovatele vyberte obecného poskytovatele (existující účet služby).
Přidejte název clusteru a hodnoty oboru názvů.
Přidejte adresu URL serveru. Adresu URL můžete získat pomocí následujícího příkazu:
kubectl config view --minify -o 'jsonpath={.clusters[0].cluster.server}'
Získání tajného objektu
Kubernetes 1.22 nebo novější
Nahraďte
service-account-name
názvem svého účtu.kubectl get secret -n <namespace> -o jsonpath='{.items[?(@.metadata.annotations.kubernetes\.io/service-account\.name==\"service-account-name\")]}'
Pokud nic nezískáte, přečtěte si téma Ruční vytvoření dlouhodobého tokenu rozhraní API pro ServiceAccount.
Kubernetes 1.22 a níže:
- Vyhledání názvu tajného kódu účtu služby
kubectl get serviceAccounts <service-account-name> -n <namespace> -o 'jsonpath={.secrets[*].name}'
- Nahradit
<service-account-secret-name>
hodnotou v předchozím příkazu v tomto příkazu
kubectl get secret <service-account-secret-name> -n <namespace> -o json
Získejte tajný objekt pomocí výstupu předchozího kroku.
kubectl get secret <service-account-secret-name> -n <namespace> -o json
Zkopírujte a vložte tajný objekt načtený ve formuláři JSON do pole Tajný kód.
Vyberte Ověřit a vytvořit prostředek Kubernetes.
Odkazování na prostředky Kubernetes v kanálu
Pokud používáte Azure Kubernetes Service a vytváříte kanál YAML, nejjednodušší způsob, jak kanál nakonfigurovat, je použít šablonu. Připojte se k úložišti a vyberte jednu z následujících dvou možností služby Kubernetes Service:
- Nasazení do šablony Azure Kubernetes Services
- Nasazení do Kubernetes – Kontrola aplikace pomocí Azure DevSpaces
Šablony umožňují nastavit aplikaci Review App, aniž byste museli psát kód YAML od začátku nebo ručně vytvářet explicitní vazby rolí.
Nastavení aplikace Pro kontrolu
V následujícím příkladu se první úloha nasazení spustí pro větve, které nejsou pr, a provádí nasazení proti běžnému prostředku Kubernetes v prostředích. Druhá úloha se spouští jenom pro větve pr a nasazuje se proti kontrole prostředků aplikace (oborů názvů uvnitř clusteru Kubernetes) vygenerovaných na vyžádání. Prostředky se v zobrazení výpisu prostředků prostředí označí popiskem Revize. Definujte proměnné, které se mají použít v kanálu. Pokud použijete šablonu Deploy to Azure Kubernetes Services, tyto proměnné se pro vás definují.
# 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: Production
displayName: Deploy stage
dependsOn: Build
jobs:
- deployment: Production
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
displayName: Production
pool:
vmImage: $(vmImageName)
environment:
name: $(envName).$(resourceName)
resourceType: Kubernetes
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:
name: $(envName).$(resourceName)
resourceType: Kubernetes
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 posting 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"
Pokud chcete tuto úlohu použít v existujícím kanálu, musí být připojení služby, které zálohuje běžný prostředek prostředí Kubernetes, změněno na Použití přihlašovacích údajů správce clusteru. V opačném případě je nutné vytvořit vazby rolí pro příslušný účet služby do oboru názvů Zkontrolovat aplikaci.