KubernetesManifest@1 - Implementeren naar Kubernetes v1-taak
Gebruik Kubernetes-manifestbestanden om te implementeren in clusters of zelfs de manifestbestanden te maken die moeten worden gebruikt voor implementaties met behulp van Helm-grafieken.
Syntax
# Deploy to Kubernetes v1
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@1
inputs:
#action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
#connectionType: 'kubernetesServiceConnection' # 'azureResourceManager' | 'kubernetesServiceConnection'. Required when action != bake. Service connection type. Default: kubernetesServiceConnection.
#kubernetesServiceConnection: # string. Alias: kubernetesServiceEndpoint. Required when action != bake && connectionType = kubernetesServiceConnection. Kubernetes service connection.
#azureSubscriptionConnection: # string. Alias: azureSubscriptionEndpoint. Required when action != bake && connectionType = azureResourceManager. Azure subscription.
#azureResourceGroup: # string. Required when action != bake && connectionType = azureResourceManager. Resource group.
#kubernetesCluster: # string. Required when action != bake && connectionType = azureResourceManager. Kubernetes cluster.
#useClusterAdmin: false # boolean. Optional. Use when connectionType = azureResourceManager. Use cluster admin credentials. Default: false.
#namespace: # string. Namespace.
#strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
#trafficSplitMethod: 'pod' # 'pod' | 'smi'. Optional. Use when strategy = canary. Traffic split method. Default: pod.
#percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
#baselineAndCanaryReplicas: '1' # string. Required when strategy = Canary && action = deploy && trafficSplitMethod = SMI. Baseline and canary replicas. Default: 1.
#manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests.
#containers: # string. Optional. Use when action = deploy || action = promote || action = bake. Containers.
#imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets.
#renderType: 'helm' # 'helm' | 'kompose' | 'kustomize'. Optional. Use when action = bake. Render Engine. Default: helm.
#dockerComposeFile: # string. Required when action = bake && renderType = kompose. Path to docker compose file.
#helmChart: # string. Required when action = bake && renderType = helm. Helm Chart.
#releaseName: # string. Optional. Use when action = bake && renderType = helm. Helm Release Name.
#overrideFiles: # string. Optional. Use when action = bake && renderType = helm. Override Files.
#overrides: # string. Optional. Use when action = bake && renderType = helm. Overrides.
#kustomizationPath: # string. Optional. Use when action = bake && renderType = kustomize. Kustomization Path.
#resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
#resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path.
#kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind.
#name: # string. Required when action = scale || resourceToPatch = name. Name.
#replicas: # string. Required when action = scale. Replica count.
#mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
#arguments: # string. Optional. Use when action = delete. Arguments.
#patch: # string. Required when action = patch. Patch.
#secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
#secretName: # string. Optional. Use when action = createSecret. Secret name.
#secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments.
#dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection.
#rolloutStatusTimeout: '0' # string. Optional. Use when action = deploy || action = patch || action = scale || action = promote. Timeout for rollout status. Default: 0.
Invoerwaarden
action
- Actie
string
. Toegestane waarden: bake
, createSecret
(geheim maken), delete
, deploy
, patch
, promote
, scale
, , reject
. Standaardwaarde: deploy
.
Hiermee geeft u de actie moet worden uitgevoerd.
connectionType
- Serviceverbindingstype
string
. Vereist wanneer action != bake
. Toegestane waarden: azureResourceManager
(Azure Resource Manager), kubernetesServiceConnection
(Kubernetes Service Connection). Standaardwaarde: kubernetesServiceConnection
.
Selecteer een verbindingstype voor de Kubernetes-service.
kubernetesServiceConnection
(Kubernetes-serviceverbinding): hiermee kunt u een KubeConfig-bestand opgeven, een serviceaccount opgeven of een AKS-exemplaar importeren met de optie Azure-abonnement . Voor het importeren van een AKS-exemplaar met de optie Azure-abonnement is toegang tot het Kubernetes-cluster vereist tijdens de configuratie van de serviceverbinding.azureResourceManager
(Azure Resource Manager): hiermee kunt u een AKS-exemplaar selecteren. Heeft geen toegang tot het Kubernetes-cluster tijdens de configuratie van de serviceverbinding.
Zie Opmerkingen voor meer informatie.
kubernetesServiceConnection
- Kubernetes-serviceverbinding
Invoeralias: kubernetesServiceEndpoint
. string
. Vereist wanneer action != bake && connectionType = kubernetesServiceConnection
.
Hiermee geeft u een Kubernetes-serviceverbinding op.
azureSubscriptionConnection
- Azure-abonnement
Invoeralias: azureSubscriptionEndpoint
. string
. Vereist wanneer action != bake && connectionType = azureResourceManager
.
Selecteer het Azure Resource Manager-abonnement dat Azure Container Registry bevat. Opmerking: als u een nieuwe serviceverbinding wilt configureren, selecteert u het Azure-abonnement in de lijst en klikt u op Autoriseren. Als uw abonnement niet wordt vermeld of als u een bestaande service-principal wilt gebruiken, kunt u een Azure-serviceverbinding instellen met de knop Toevoegen of Beheren.
azureResourceGroup
- Resourcegroep
string
. Vereist wanneer action != bake && connectionType = azureResourceManager
.
Selecteer een Azure-resourcegroep.
kubernetesCluster
- Kubernetes-cluster
string
. Vereist wanneer action != bake && connectionType = azureResourceManager
.
Selecteer een beheerd Azure-cluster.
useClusterAdmin
- Referenties van clusterbeheerder gebruiken
boolean
. Optioneel. Gebruik wanneer connectionType = azureResourceManager
. Standaardwaarde: false
.
Gebruik referenties voor clusterbeheerder in plaats van standaardgebruikersreferenties voor het cluster.
namespace
- Naamruimte
string
.
Hiermee geeft u de naamruimte voor de opdrachten met behulp van de –namespace
vlag. Als de naamruimte niet is opgegeven, worden de opdrachten uitgevoerd in de standaardnaamruimte.
strategy
- Strategie
string
. Optioneel. Gebruik wanneer action = deploy || action = promote || action = reject
. Toegestane waarden: canary
, none
. Standaardwaarde: none
.
Hiermee geeft u de implementatiestrategie op die wordt gebruikt in de deploy
actie vóór een promote
actie of reject
actie. canary
Momenteel is de enige acceptabele implementatiestrategie.
trafficSplitMethod
- Methode voor het splitsen van verkeer
string
. Optioneel. Gebruik wanneer strategy = canary
. Toegestane waarden: pod
, smi
. Standaardwaarde: pod
.
Voor de waarde smi
wordt het percentage verkeer gesplitst op aanvraagniveau met behulp van een service-mesh. Een service-mesh moet worden ingesteld door een clusterbeheerder. Deze taak verwerkt de indeling van SMI TrafficSplit-objecten .
Voor de waarde pod
is de percentagesplitsing niet mogelijk op aanvraagniveau als er geen service-mesh is. In plaats daarvan wordt het invoerpercentage gebruikt om de replica's voor basislijn en canary te berekenen. De berekening is een percentage replica's dat is opgegeven in de invoermanifesten voor de stabiele variant.
percentage
- Percentage
string
. Vereist wanneer strategy = Canary && action = deploy
. Standaardwaarde: 0
.
Het percentage dat wordt gebruikt voor het berekenen van het aantal replica's van de basislijnvarianten en kanarievarianten van de werkbelastingen die zijn opgenomen in manifestbestanden.
Voor het opgegeven invoerpercentage berekent u het volgende:
(percentage × aantal replica's) / 100
Als het resultaat geen geheel getal is, wordt de wiskundige basis van het resultaat gebruikt wanneer basislijn- en kanarievarianten worden gemaakt.
Stel dat de implementatie hello-world
zich in het manifestbestand van de invoer bevindt en dat de volgende regels zich in de taakinvoer bevinden:
replicas: 4
strategy: canary
percentage: 25
In dit geval worden de implementaties hello-world-baseline
en hello-world-canary
gemaakt met elk één replica. De basislijnvariant wordt gemaakt met dezelfde installatiekopieën en tags als de stabiele versie, de variant met vier replica's vóór de implementatie. De canary-variant wordt gemaakt met de installatiekopie en tag die overeenkomen met de zojuist geïmplementeerde wijzigingen.
baselineAndCanaryReplicas
- Basislijn- en canary-replica's
string
. Vereist wanneer strategy = Canary && action = deploy && trafficSplitMethod = SMI
. Standaardwaarde: 1
.
Wanneer u instelt trafficSplitMethod
op smi
, wordt het percentage verkeerssplitsing beheerd in het service mesh-vlak. U kunt het werkelijke aantal replica's voor kanarie- en basislijnvarianten onafhankelijk van de verkeerssplitsing beheren.
Stel dat in het manifest voor de invoerimplementatie 30 replica's voor de stabiele variant worden opgegeven. Ga er ook van uit dat u de volgende invoer voor de taak opgeeft:
strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1
In dit geval ontvangt de stabiele variant 80% van het verkeer, terwijl de basislijn- en canary-varianten elk de helft van de opgegeven 20% ontvangen. Basislijn- en canary-varianten ontvangen niet elk drie replica's. In plaats daarvan ontvangen ze het opgegeven aantal replica's, wat betekent dat ze elk één replica ontvangen.
manifests
- Manifesteert
string
. Vereist wanneer action = deploy || action = promote || action = reject
.
Hiermee geeft u het pad naar de manifestbestanden die moeten worden gebruikt voor implementatie. Elke regel vertegenwoordigt één pad. Een patroon voor bestandsvergelijking is een acceptabele waarde voor elke regel.
containers
- Containers
string
. Optioneel. Gebruik wanneer action = deploy || action = promote || action = bake
.
Hiermee geeft u de volledig gekwalificeerde resource-URL van de installatiekopie die moet worden gebruikt voor vervangingen in de manifestbestanden. De URL contosodemo.azurecr.io/helloworld:test
is een voorbeeld.
imagePullSecrets
- ImagePullSecrets
string
. Optioneel. Gebruik wanneer action = deploy || action = promote
.
Hiermee geeft u een invoer met meerdere regels op waarbij elke regel de naam bevat van een Docker-registergeheim dat al is ingesteld binnen het cluster. Elke geheime naam wordt toegevoegd onder imagePullSecrets
voor de workloads die worden gevonden in de invoermanifestbestanden.
renderType
- Render-engine
string
. Optioneel. Gebruik wanneer action = bake
. Toegestane waarden: helm
, kompose
, kustomize
. Standaardwaarde: helm
.
Hiermee geeft u het weergavetype op dat wordt gebruikt om de manifestbestanden te produceren.
dockerComposeFile
- Pad naar docker compose-bestand
string
. Vereist wanneer action = bake && renderType = kompose
.
Hiermee geeft u een pad naar een docker-compose-bestand op.
helmChart
- Helm-grafiek
string
. Vereist wanneer action = bake && renderType = helm
.
Hiermee geeft u het Helm-diagrampad op dat moet worden gebakken.
releaseName
- Helm-releasenaam
string
. Optioneel. Gebruik wanneer action = bake && renderType = helm
.
Hiermee geeft u de naam van de Helm-release te gebruiken.
overrideFiles
- Bestanden overschrijven
string
. Optioneel. Gebruik wanneer action = bake && renderType = helm
.
Hiermee geeft u een invoer met meerdere regels op die het pad naar de onderdrukkingsbestanden accepteert. De bestanden worden gebruikt wanneer manifestbestanden uit Helm-grafieken worden gebakken.
overrides
- Overschrijft
string
. Optioneel. Gebruik wanneer action = bake && renderType = helm
.
Hiermee geeft u de onderdrukkingswaarden die moeten worden ingesteld.
kustomizationPath
- Kustomization-pad
string
. Optioneel. Gebruik wanneer action = bake && renderType = kustomize
.
Hiermee geeft u het argument op dat het pad naar de map met het bestand moet zijn, of een GIT-opslagplaats-URL met een padachtervoegsel dat aangeeft same
met betrekking tot de hoofdmap van de opslagplaats.
resourceToPatch
- Resource om te patchen
string
. Vereist wanneer action = patch
. Toegestane waarden: file
, name
. Standaardwaarde: file
.
Geeft een van de volgende patchmethoden aan:
- Een manifestbestand identificeert de objecten die moeten worden gepatcht.
- Een afzonderlijk object wordt geïdentificeerd op soort en naam als het patchdoel.
Acceptabele waarden zijn bestand en naam.
resourceFileToPatch
- Bestandspad
string
. Vereist wanneer action = patch && resourceToPatch = file
.
Hiermee geeft u het pad naar het bestand dat wordt gebruikt voor een patch.
kind
- Soort
string
. Vereist wanneer action = scale || resourceToPatch = name
. Toegestane waarden: deployment
, replicaset
, statefulset
.
Hiermee geeft u het type K8s-object op, zoals deployment
, replicaSet
en meer.
name
- Naam
string
. Vereist wanneer action = scale || resourceToPatch = name
.
Hiermee geeft u de naam van het K8s-object.
replicas
- Aantal replica's
string
. Vereist wanneer action = scale
.
Hiermee geeft u het aantal replica's om naar te schalen.
replicas
- Aantal replica's
string
. Vereist wanneer action = scale
.
Hiermee geeft u de naam van het K8s-object.
mergeStrategy
- Samenvoegstrategie
string
. Vereist wanneer action = patch
. Toegestane waarden: json
, merge
, strategic
. Standaardwaarde: strategic
.
Hiermee geeft u het type patch dat wordt opgegeven.
arguments
- Argumenten
string
. Optioneel. Gebruik wanneer action = delete
.
Hiermee geeft u de argumenten voor de kubectl delete
opdracht. Een voorbeeld is: arguments: deployment hello-world foo-bar
patch
- Patch
string
. Vereist wanneer action = patch
.
Hiermee geeft u de inhoud van de patch op.
secretType
- Type geheim
string
. Vereist wanneer action = createSecret
. Toegestane waarden: dockerRegistry
, generic
. Standaardwaarde: dockerRegistry
.
Hiermee maakt of werkt u een algemene of docker imagepullsecret
bij. Geef op dockerRegistry
om het imagepullsecret
geselecteerde register te maken of bij te werken. Een imagePullSecret
is een manier om een geheim met een containerregisterwachtwoord door te geven aan de Kubelet, zodat deze een persoonlijke installatiekopie namens uw Pod kan ophalen.
secretName
- Geheime naam
string
. Optioneel. Gebruik wanneer action = createSecret
.
Hiermee geeft u de naam van het geheim. U kunt deze geheime naam gebruiken in het Kubernetes YAML-configuratiebestand.
secretArguments
- Argumenten
string
. Optioneel. Gebruik wanneer action = createSecret && secretType = generic
.
Hiermee geeft u sleutels en letterlijke waarden die in het geheim moeten worden ingevoegd. Bijvoorbeeld --from-literal=key1=value1
--from-literal=key2="top secret"
.
dockerRegistryEndpoint
- Verbinding met docker-registerservice
string
. Optioneel. Gebruik wanneer action = createSecret && secretType = dockerRegistry
.
Hiermee geeft u de referenties van de opgegeven serviceverbinding die worden gebruikt voor het maken van een Docker-registergeheim binnen het cluster. Manifestbestanden onder het imagePullSecrets
veld kunnen vervolgens verwijzen naar de naam van dit geheim.
rolloutStatusTimeout
- Time-out voor implementatiestatus
string
. Optioneel. Gebruik wanneer action = deploy || action = patch || action = scale || action = promote
. Standaardwaarde: 0
.
Hiermee geeft u de tijdsduur (in seconden) op die moet worden gewacht voordat de status wordt beëindigd watch on rollout
.
Opties voor taakbeheer
Alle taken hebben besturingsopties naast hun taakinvoer. Zie Opties voor besturingselementen en algemene taakeigenschappen voor meer informatie.
Uitvoervariabelen
Deze taak definieert de volgende uitvoervariabelen, die u kunt gebruiken in downstreamstappen, taken en fasen.
manifestsBundle
De locatie van de manifestbundels die zijn gemaakt door de bak-actie
Opmerkingen
Aandachtspunten voor kubernetes-serviceverbindingen bij het openen van AKS
U kunt een Kubernetes-serviceverbinding maken met een van de volgende opties.
- KubeConfig
- Serviceaccount
- Azure-abonnement
Wanneer u de optie Azure-abonnement selecteert, moet Kubernetes tijdens de configuratietijd van de serviceverbinding toegankelijk zijn voor Azure DevOps. Er kunnen verschillende redenen zijn waarom een serviceverbinding niet kan worden gemaakt, bijvoorbeeld omdat u een privécluster hebt gemaakt of dat lokale accounts voor het cluster zijn uitgeschakeld. In deze gevallen kan Azure DevOps geen verbinding maken met uw cluster tijdens de configuratietijd van de serviceverbinding en ziet u een vastgelopen scherm Naamruimten laden .
Vanaf Kubernetes 1.24 worden tokens met een lange levensduur niet meer standaard gemaakt. Kubernetes raadt aan geen tokens met een lange levensduur te gebruiken. Als gevolg hiervan hebben taken die gebruikmaken van een Kubernetes-serviceverbinding die is gemaakt met de optie Azure-abonnement geen toegang tot het permanente token dat is vereist voor verificatie en hebben ze geen toegang tot uw Kubernetes-cluster. Dit resulteert ook in het geblokkeerde dialoogvenster Naamruimten laden .
Azure Resource Manager Service Connection gebruiken om toegang te krijgen tot AKS
Voor AKS-klanten biedt het verbindingstype Azure Resource Manager-service de beste methode om verbinding te maken met een privécluster of een cluster waarvoor lokale accounts zijn uitgeschakeld. Deze methode is niet afhankelijk van de clusterconnectiviteit op het moment dat u een serviceverbinding maakt. Toegang tot AKS wordt uitgesteld tot pijplijnruntime, wat de volgende voordelen heeft:
- Toegang tot een (privé) AKS-cluster kan worden uitgevoerd vanuit een zelf-hostende of schaalsetagent met zichtlijn naar het cluster.
- Er wordt een token gemaakt voor elke taak die gebruikmaakt van een Azure Resource Manager serviceverbinding. Dit zorgt ervoor dat u verbinding maakt met Kubernetes met een token met een korte levensduur. Dit is de Kubernetes-aanbeveling.
- AKS is toegankelijk, zelfs wanneer lokale accounts zijn uitgeschakeld.
Veelgestelde vragen over serviceverbindingen
Ik krijg het volgende foutbericht: Kan geen geheim vinden dat is gekoppeld aan het serviceaccount. Wat gebeurt er?
U gebruikt de kubernetes-serviceverbinding met de optie Azure-abonnement. Deze methode wordt bijgewerkt om tokens met een lange levensduur te maken. Dit is naar verwachting halverwege mei beschikbaar. Het wordt echter aanbevolen om te beginnen met het azure-serviceverbindingstype en niet om tokens met een lange levensduur te gebruiken volgens de Richtlijnen van Kubernetes.
Ik gebruik AKS en wil niets wijzigen. Kan ik taken blijven gebruiken met de Kubernetes-serviceverbinding?
Deze methode wordt bijgewerkt om tokens met een lange levensduur te maken. Dit is naar verwachting halverwege mei beschikbaar. Houd er echter rekening mee dat deze benadering in strijd is met kubernetes-richtlijnen.
Ik gebruik de Kubernetes-taken en kubernetes-serviceverbinding, maar niet AKS. Moet ik me zorgen maken?
Uw taken blijven werken zoals voorheen.
Wordt het verbindingstype van de Kubernetes-service verwijderd?
Onze Kubernetes-taken werken met elk Kubernetes-cluster, ongeacht waar ze worden uitgevoerd. De Kubernetes-serviceverbinding blijft bestaan.
Ik ben een AKS-klant en alles loopt goed, moet ik actie ondernemen?
U hoeft niets te wijzigen. Als u de Kubernetes-serviceverbinding en het geselecteerde Azure-abonnement gebruikt tijdens het maken, moet u rekening houden met de Kubernetes-richtlijnen voor het gebruik van tokens met een lange levensduur.
Ik maak een Kubernetes-omgeving en ik heb geen optie om serviceverbindingen te gebruiken
Als u geen toegang hebt tot uw AKS tijdens het maken van de omgeving, kunt u een lege omgeving gebruiken en de connectionType
invoer instellen op een Azure Resource Manager-serviceverbinding.
Ik heb AKS geconfigureerd met Azure Active Directory RBAC en mijn pijplijn werkt niet. Lossen deze updates dit op?
Toegang tot Kubernetes wanneer AAD RBAC is ingeschakeld, is niet gerelateerd aan het maken van tokens. Om een interactieve prompt te voorkomen, ondersteunen we kubelogin in een toekomstige update.
Gebruik een Kubernetes-manifesttaak in een build- of release-pijplijn om manifesten te bakken en te implementeren in Kubernetes-clusters.
Deze taak ondersteunt het volgende:
Vervanging van artefacten: de implementatieactie voert een lijst met containerinstallatiekopieën in die u kunt opgeven, samen met hun tags en digests. Dezelfde invoer wordt vervangen door de niet-getemplatiseerde manifestbestanden voordat deze worden toegepast op het cluster. Deze vervanging zorgt ervoor dat de clusterknooppunten de juiste versie van de installatiekopie ophalen.
Manifeststabiliteit: de implementatiestatus van de geïmplementeerde Kubernetes-objecten wordt gecontroleerd. De stabiliteitscontroles worden opgenomen om te bepalen of de taakstatus geslaagd of mislukt is.
Aantekeningen bij traceerbaarheid: aantekeningen worden toegevoegd aan de geïmplementeerde Kubernetes-objecten om traceringsinformatie over elkaar te plaatsen. De volgende aantekeningen worden ondersteund:
- azure-pipelines/org
- azure-pipelines/project
- azure-pipelines/pipeline
- azure-pipelines/pipelineId
- azure-pipelines/execution
- azure-pipelines/executionuri
- azure-pipelines/jobName
Geheime verwerking: Met deze
createSecret
actie kunnen Docker-registergeheimen worden gemaakt met behulp van Docker-registerserviceverbindingen. Hiermee kunnen ook algemene geheimen worden gemaakt met behulp van variabelen voor tekst zonder opmaak of met geheime variabelen. Voordat u naar het cluster gaat implementeren, kunt u desecrets
invoer samen met dedeploy
actie gebruiken om de invoermanifestbestanden uit te voeren met de juisteimagePullSecrets
waarde.Manifest bakken: Met de
bake
actie van de taak kunnen sjablonen in Kubernetes-manifestbestanden worden gebakken. De actie maakt gebruik van hulpprogramma's zoals Helm, Compose en Kustomize. Met bakken zijn deze Kubernetes-manifestbestanden bruikbaar voor implementaties in het cluster.Implementatiestrategie: Als u de
canary
strategie kiest met dedeploy
actie, worden workloadnamen gemaakt met-baseline
het achtervoegsel en-canary
. De taak ondersteunt twee methoden voor het splitsen van verkeer:Service Mesh Interface: SMI-abstractie ( Service Mesh Interface ) maakt configuratie mogelijk met service mesh-providers zoals
Linkerd
enIstio
. De Kubernetes Manifest-taak wijst SMI-objectenTrafficSplit
toe aan de stabiele, basislijn- en canary-services tijdens de levenscyclus van de implementatiestrategie.Canary-implementaties die zijn gebaseerd op een service-mesh en deze taak gebruiken, zijn nauwkeuriger. Deze nauwkeurigheid wordt veroorzaakt door de manier waarop service mesh-providers de gedetailleerde verdeling van verkeer op basis van percentages mogelijk maken. De service-mesh maakt gebruik van het serviceregister en sidecar-containers die in pods worden geïnjecteerd. Deze injectie vindt plaats naast toepassingscontainers om de gedetailleerde verkeerssplitsing te bereiken.
Kubernetes zonder service-mesh: als er geen service-mesh is, krijgt u mogelijk niet het exacte percentagesplitsing dat u wilt op aanvraagniveau. U kunt echter kanarie-implementaties uitvoeren met behulp van basislijn- en kanarievarianten naast de stabiele variant.
De service verzendt aanvragen naar pods van alle drie de workloadvarianten als aan de beperkingen van selectorlabels wordt voldaan. Het Kubernetes-manifest honoreert deze aanvragen bij het maken van basislijn- en canary-varianten. Dit routeringsgedrag bereikt het beoogde effect van het routeren van slechts een deel van het totale aantal aanvragen naar de kanarie.
Vergelijk de basis- en canary-workloads met behulp van een handmatige interventietaak in release-pijplijnen of een vertragingstaak in YAML-pijplijnen. Voer de vergelijking uit voordat u de actie verhogen of negeren van de taak gebruikt.
Actie implementeren
De volgende YAML-code is een voorbeeld van implementatie in een Kubernetes-naamruimte met behulp van manifestbestanden:
steps:
- task: KubernetesManifest@0
displayName: Deploy
inputs:
kubernetesServiceConnection: someK8sSC1
namespace: default
manifests: |
manifests/deployment.yml
manifests/service.yml
containers: |
foo/demo:$(tagVariable1)
bar/demo:$(tagVariable2)
imagePullSecrets: |
some-secret
some-other-secret
In het bovenstaande voorbeeld probeert de taak overeenkomsten te vinden voor de afbeeldingen foo/demo
en bar/demo
in de afbeeldingsvelden van manifestbestanden. Voor elke gevonden overeenkomst wordt de waarde van of tagVariable1
tagVariable2
als tag toegevoegd aan de naam van de afbeelding. U kunt ook digests opgeven in de containerinvoer voor het vervangen van artefacten.
Notitie
Hoewel u acties , en reject
kunt maken deploy
promote
met YAML-invoer met betrekking tot de implementatiestrategie, is ondersteuning voor een handmatige interventietaak momenteel niet beschikbaar voor build-pijplijnen.
Voor release-pijplijnen raden we u aan om acties en invoer met betrekking tot de implementatiestrategie in de volgende volgorde te gebruiken:
- Een implementatieactie die is opgegeven met
strategy: canary
enpercentage: $(someValue)
. - Een handmatige interventietaak, zodat u de pijplijn kunt onderbreken en de basislijnvariant kunt vergelijken met de canary-variant.
- Een promotieactie die wordt uitgevoerd als een handmatige interventietaak wordt hervat en een weigeringsactie die wordt uitgevoerd als een handmatige interventietaak wordt geweigerd.
Geheime actie maken
De volgende YAML-code toont een voorbeeld van het maken van Docker-registergeheimen met behulp van een verbinding met de Docker Registry-service:
steps:
- task: KubernetesManifest@0
displayName: Create secret
inputs:
action: createSecret
secretType: dockerRegistry
secretName: foobar
dockerRegistryEndpoint: demoACR
kubernetesServiceConnection: someK8sSC
namespace: default
Deze YAML-code toont een voorbeeld van het maken van algemene geheimen:
steps:
- task: KubernetesManifest@0
displayName: Create secret
inputs:
action: createSecret
secretType: generic
secretName: some-secret
secretArguments: --from-literal=key1=value1
kubernetesServiceConnection: someK8sSC
namespace: default
Actie Bakken
De volgende YAML-code is een voorbeeld van het bakken van manifestbestanden uit Helm-grafieken. Let op het gebruik van een naaminvoer in de eerste taak. Naar deze naam wordt later verwezen vanuit de implementatiestap voor het opgeven van het pad naar de manifesten die zijn geproduceerd door de bake-stap.
steps:
- task: KubernetesManifest@0
name: bake
displayName: Bake K8s manifests from Helm chart
inputs:
action: bake
helmChart: charts/sample
overrides: 'image.repository:nginx'
- task: KubernetesManifest@0
displayName: Deploy K8s manifests
inputs:
kubernetesServiceConnection: someK8sSC
namespace: default
manifests: $(bake.manifestsBundle)
containers: |
nginx: 1.7.9
Notitie
Als u Helm rechtstreeks wilt gebruiken voor het beheren van releases en terugdraaiacties, raadpleegt u de taak Helm-grafieken verpakken en implementeren.
Kustomize-voorbeeld
De volgende YAML-code is een voorbeeld van het bakken van manifestbestanden die zijn gegenereerd met Kustomize die een kustomization.yaml
bestand bevatten.
steps:
- task: KubernetesManifest@0
name: bake
displayName: Bake K8s manifests from kustomization path
inputs:
action: bake
renderType: kustomize
kustomizationPath: folderContainingKustomizationFile
- task: KubernetesManifest@0
displayName: Deploy K8s manifests
inputs:
kubernetesServiceConnection: k8sSC1
manifests: $(bake.manifestsBundle)
Kompose-voorbeeld
De volgende YAML-code is een voorbeeld van het bakken van manifestbestanden die zijn gegenereerd met Kompose, een conversieprogramma voor Docker Compose.
steps:
- task: KubernetesManifest@0
name: bake
displayName: Bake K8s manifests from Docker Compose
inputs:
action: bake
renderType: kompose
dockerComposeFile: docker-compose.yaml
- task: KubernetesManifest@0
displayName: Deploy K8s manifests
inputs:
kubernetesServiceConnection: k8sSC1
manifests: $(bake.manifestsBundle)
Schaalactie
In de volgende YAML-code ziet u een voorbeeld van het schalen van objecten:
steps:
- task: KubernetesManifest@0
displayName: Scale
inputs:
action: scale
kind: deployment
name: bootcamp-demo
replicas: 5
kubernetesServiceConnection: someK8sSC
namespace: default
Patchactie
De volgende YAML-code toont een voorbeeld van het patchen van objecten:
steps:
- task: KubernetesManifest@0
displayName: Patch
inputs:
action: patch
kind: pod
name: demo-5fbc4d6cd9-pgxn4
mergeStrategy: strategic
patch: '{"spec":{"containers":[{"name":"demo","image":"foobar/demo:2239"}]}}'
kubernetesServiceConnection: someK8sSC
namespace: default
Actie Verwijderen
Deze YAML-code toont een voorbeeld van het verwijderen van een object:
steps:
- task: KubernetesManifest@0
displayName: Delete
inputs:
action: delete
arguments: deployment expressapp
kubernetesServiceConnection: someK8sSC
namespace: default
Problemen oplossen
Mijn Kubernetes-cluster bevindt zich achter een firewall en ik gebruik gehoste agents. Hoe kan ik op dit cluster implementeren?
U kunt gehoste agents toegang verlenen via uw firewall door de IP-adressen voor de gehoste agents toe te staan. Zie IP-bereiken van agent voor meer details.
Hoe werken aanvragen voor stabiele en variante serviceroutes met canary-implementaties?
De labelselectorrelatie tussen pods en services in Kubernetes maakt het mogelijk implementaties in te stellen, zodat één service aanvragen naar zowel de stabiele als de canary-variant routeert. De Kubernetes-manifesttaak gebruikt deze voor canary-implementaties.
Als de taak de invoer van action: deploy
en strategy: canary
bevat voor elke workload (Implementatie, ReplicaSet, Pod, ...) die is gedefinieerd in de invoermanifestbestanden, worden een -baseline
en -canary
variant van de implementatie gemaakt. In dit voorbeeld is er een implementatie sampleapp
in het invoermanifestbestand en wordt na voltooiing van uitvoering nummer 22 van de pijplijn de stabiele variant van deze implementatie met de naam sampleapp
geïmplementeerd in het cluster. In de volgende uitvoering (in dit geval run number 23) zou de Kubernetes-manifesttaak met action: deploy
en strategy: canary
resulteren in het maken van sampleapp-baseline- en sampleapp-canary-implementaties waarvan het aantal replica's wordt bepaald door het product van percentage
de taakinvoer met de waarde van het gewenste aantal replica's voor de laatste stabiele variant van sampleapp
volgens de invoermanifestbestanden.
Met uitzondering van het aantal replica's heeft de basislijnversie dezelfde configuratie als de stabiele variant, terwijl de canary-versie de nieuwe wijzigingen bevat die worden geïntroduceerd door de huidige uitvoering (in dit geval run number 23). Als er na de bovenstaande stap een handmatige interventie in de pijplijn wordt ingesteld, kan de pijplijn worden onderbroken, zodat de pijplijnbeheerder belangrijke metrische gegevens voor de basislijn- en canary-versies kan evalueren en de beslissing kan nemen of de kanariewijzigingen veilig en goed genoeg zijn voor een volledige implementatie.
Deaction: promote
invoer en strategy: canary
of action: reject
en strategy: canary
van de Kubernetes-manifesttaken kunnen worden gebruikt om respectievelijk de canary-wijzigingen te promoten of te negeren. Houd er rekening mee dat in beide gevallen aan het einde van deze stap alleen de stabiele variant van de werkbelastingen die zijn gedeclareerd in de invoermanifestbestanden in het cluster wordt geïmplementeerd, terwijl de tijdelijke basislijn en canary-versies worden opgeschoond.
Vereisten
Vereiste | Beschrijving |
---|---|
Pijplijntypen | YAML, klassieke build, klassieke release |
Wordt uitgevoerd op | Agent, DeploymentGroup |
Eisen | Geen |
Functies | Deze taak voldoet niet aan eventuele vereisten voor volgende taken in de taak. |
Opdrachtbeperkingen | Alle |
Instelbare variabelen | Alle |
Agentversie | Alle ondersteunde agentversies. |
Taakcategorie | Implementeren |