Környezet – Kubernetes-erőforrás
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
A Kubernetes-erőforrásnézet az erőforráshoz hozzárendelt névtérben lévő objektumok állapotát jeleníti meg. Az erőforrásnézet a folyamat nyomon követhetőségét is átfedi, így visszakövethető egy Kubernetes-objektumból a folyamatba, majd vissza a véglegesítéshez.
Kubernetes-erőforrások használata a Kubernetes-fürtök üzembe helyezéshez való megcélzásához. Folyamatok használatával üzembe helyezheti az Azure Kubernetes Service-ben (AKS) és fürtökben bármely más felhőszolgáltatótól.
A Kubernetes-erőforrásokat nyilvános vagy privát fürtökkel is használhatja. Az erőforrások működésével kapcsolatos további információkért tekintse meg a YAML erőforrásait és az erőforrásokkal való biztonságot.
Áttekintés
Tekintse meg a Kubernetes-erőforrásnézetek környezeteken belüli használatának alábbi előnyeit:
Folyamatkövethetőség – Az üzembe helyezésekhez használt Kubernetes-jegyzékfeladat további széljegyzeteket ad hozzá a folyamat nyomon követhetőségének az erőforrásnézetekben való megjelenítéséhez. A folyamat nyomon követhetősége segít azonosítani a névtérben lévő objektumon végrehajtott frissítésekért felelős, eredeti Azure DevOps-szervezetet, projektet és folyamatot.
Erőforrás állapotának diagnosztizálása – A számítási feladatok állapota hasznos lehet az új üzembe helyezés által bevezetett hibák vagy regressziók gyors hibakereséséhez. Az ImagePullBackOff-hibákat eredményező nem konfigurált imagePullSecret-fájlok esetében például a pod állapotadatai segíthetnek azonosítani a probléma kiváltó okát.
Alkalmazás áttekintése – Az alkalmazás áttekintése úgy működik, hogy a Git-adattár minden lekéréses kérését üzembe helyezi egy dinamikus Kubernetes-erőforráson a környezet alatt. A véleményezők láthatják, hogy ezek a módosítások hogyan néznek ki és működnek más függő szolgáltatásokkal, mielőtt egyesítenék őket a célágba, és üzembe helyezték őket az éles környezetben.
Az Azure Kubernetes Service használata
Az Azure Kubernetes Service (AKS) használatakor létrejön egy ServiceAccount a kiválasztott fürtben és névtérben. Kubernetes RBAC-kompatibilis fürt esetén a RoleBinding is létrejön, hogy a létrehozott szolgáltatásfiók hatókörét a kiválasztott névtérre korlátozza. A Kubernetes RBAC által letiltott fürtök esetében a létrehozott ServiceAccount fürtszintű jogosultságokkal rendelkezik (a névterek között).
AKS Kubernetes-erőforrás hozzáadása
A környezet részletei lapon válassza az Erőforrás hozzáadása, majd a Kubernetes lehetőséget.
Válassza az Azure Kubernetes Service lehetőséget a Szolgáltató legördülő listában.
Válassza ki az Azure-előfizetést, a fürtöt és a névteret (új/meglévő).
Válassza az Ellenőrzés és létrehozás lehetőséget a Kubernetes-erőforrás létrehozásához.
Ellenőrizze, hogy lát-e egy fürtöt a környezetében. Ha még nem telepített kódot a fürtön, a "Soha ne legyen üzembe helyezve" szöveg jelenik meg.
Meglévő szolgáltatásfiók használata
Az Azure Kubernetes Service egy Kubernetes-erőforrást képez le a környezetében egy névtérbe.
A Kubernetes szolgáltatás kapcsolatának környezeten kívüli beállításáról a Kubernetes szolgáltatás kapcsolati szakaszában talál további információt.
Tipp.
Az általános szolgáltató (meglévő szolgáltatásfiók) használatával leképezhet egy Kubernetes-erőforrást egy névtérre egy nem AKS-fürtből.
Nem AKS Kubernetes-erőforrás hozzáadása
A környezet részletei lapon válassza az Erőforrás hozzáadása, majd a Kubernetes lehetőséget.
Válassza az Általános szolgáltató (meglévő szolgáltatásfiók) lehetőséget a szolgáltatóhoz.
Adja hozzá a fürt nevét és névterét.
Adja hozzá a kiszolgáló URL-címét. Az URL-címet a következő paranccsal szerezheti be:
kubectl config view --minify -o 'jsonpath={.clusters[0].cluster.server}'
A titkos objektum lekérése.
Kubernetes 1.22+
Cserélje le
service-account-name
a fiók nevére.kubectl get secret -n <namespace> -o jsonpath='{.items[?(@.metadata.annotations.kubernetes\.io/service-account\.name==\"service-account-name\")]}'
Ha semmit sem kap, tekintse meg a ServiceAccount hosszú élettartamú API-jogkivonatának manuális létrehozását.
Kubernetes 1.22 és újabb:
- A szolgáltatásfiók titkos kódjának nevének megkeresése
kubectl get serviceAccounts <service-account-name> -n <namespace> -o 'jsonpath={.secrets[*].name}'
- cserélje le
<service-account-secret-name>
az előző parancs értékét ebben a parancsban
kubectl get secret <service-account-secret-name> -n <namespace> -o json
Kérje le a titkos objektumot az előző lépés kimenetével.
kubectl get secret <service-account-secret-name> -n <namespace> -o json
Másolja és illessze be a JSON-űrlapon beolvasott Titkos objektumot a Titkos mezőbe.
Válassza az Ellenőrzés és létrehozás lehetőséget a Kubernetes-erőforrás létrehozásához.
Kubernetes-erőforrások hivatkozása folyamatban
Ha az Azure Kubernetes Service-t használja, és YAML-folyamatot hoz létre, a folyamat konfigurálásának legegyszerűbb módja egy sablon használata. Csatlakozzon az adattárhoz, és válasszon az alábbi két Kubernetes Service-lehetőség közül:
- Üzembe helyezés az Azure Kubernetes Services-sablonban
- Üzembe helyezés a Kubernetesben – Alkalmazás áttekintése az Azure DevSpaces használatával
A sablonok lehetővé teszik a Felülvizsgálati alkalmazás beállítását anélkül, hogy yaML-kódot kellene írnia az alapoktól, vagy manuálisan kell létrehoznia explicit szerepkör-kötéseket.
A Felülvizsgálati alkalmazás beállítása
Az alábbi példában az első üzembehelyezési feladat nem pr-alapú ágakon fut, és a környezetek alatti normál Kubernetes-erőforráson végzi az üzembe helyezéseket. A második feladat csak pr-ágakhoz fut, és igény szerint létrehozott felülvizsgálati alkalmazáserőforrásokon (a Kubernetes-fürtön belüli névtereken) fut. Az erőforrások a környezet erőforrás-listanézetében "Véleményezés" címkével jelennek meg. Definiálja a folyamatban használandó változókat. Ha az Üzembe helyezés az Azure Kubernetes Servicesben sablont használja, ezek a változók definiálva lesznek Önnek.
# 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"
Ha ezt a feladatot egy meglévő folyamatban szeretné használni, a normál Kubernetes-környezeti erőforrást tartalmazó szolgáltatáskapcsolatot módosítani kell a "Fürt rendszergazdai hitelesítő adatainak használata" értékre. Ellenkező esetben a mögöttes szolgáltatásfiókhoz szerepkör-kötéseket kell létrehozni az Alkalmazás áttekintése névtérhez.