KubernetesManifest@1 - Eseguire la distribuzione nell'attività Kubernetes v1

Usare i file manifesto di Kubernetes per eseguire la distribuzione in cluster o anche creare il bake dei file manifesto da usare per le distribuzioni usando i grafici Helm.

Sintassi

# 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.

Input

action - Azione
string. Valori consentiti: bake, (crea segreto), delete, , deploypatch, promote, , scalereject. createSecret Valore predefinito: deploy.

Specifica l'azione da eseguire.


connectionType - Tipo di connessione del servizio
string. Obbligatorio quando action != bake. Valori consentiti: azureResourceManager (azure Resource Manager), kubernetesServiceConnection (connessione al servizio Kubernetes). Valore predefinito: kubernetesServiceConnection.

Selezionare un tipo di connessione al servizio Kubernetes.

  • kubernetesServiceConnection (Connessione al servizio Kubernetes): consente di fornire un file KubeConfig, specificare un account del servizio o importare un'istanza del servizio Azure Kubernetes con l'opzione Sottoscrizione di Azure. L'importazione di un'istanza del servizio Azure Kubernetes con l'opzione Sottoscrizione di Azure richiede l'accesso al cluster Kubernetes in fase di configurazione della connessione al servizio.
  • azureResourceManager(Azure Resource Manager): consente di selezionare un'istanza del servizio Azure Kubernetes. Non accede al cluster Kubernetes in fase di configurazione della connessione al servizio.

Per altre informazioni, vedere Osservazioni.


kubernetesServiceConnection - Connessione al servizio Kubernetes
Alias di input: kubernetesServiceEndpoint. string. Obbligatorio quando action != bake && connectionType = kubernetesServiceConnection.

Specifica una connessione al servizio Kubernetes.


azureSubscriptionConnection - Sottoscrizione di Azure
Alias di input: azureSubscriptionEndpoint. string. Obbligatorio quando action != bake && connectionType = azureResourceManager.

Selezionare la sottoscrizione di Azure Resource Manager, che contiene Registro Azure Container. Nota: per configurare la nuova connessione al servizio, selezionare la sottoscrizione di Azure dall'elenco e fare clic su "Autorizza". Se la sottoscrizione non è elencata o se si vuole usare un'entità servizio esistente, è possibile configurare una connessione al servizio di Azure usando il pulsante "Aggiungi" o "Gestisci".


azureResourceGroup - Gruppo di risorse
string. Obbligatorio quando action != bake && connectionType = azureResourceManager.

Selezionare un gruppo di risorse di Azure.


kubernetesCluster - Cluster Kubernetes
string. Obbligatorio quando action != bake && connectionType = azureResourceManager.

Selezionare un cluster gestito di Azure.


useClusterAdmin - Usare le credenziali di amministratore del cluster
boolean. facoltativo. Usare quando connectionType = azureResourceManager. Valore predefinito: false.

Usare le credenziali di amministratore del cluster anziché le credenziali utente del cluster predefinite.


namespace - Namespace
string.

Specifica lo spazio dei nomi per i comandi usando il –namespace flag . Se lo spazio dei nomi non viene specificato, i comandi verranno eseguiti nello spazio dei nomi predefinito.


strategy - Strategia
string. facoltativo. Usare quando action = deploy || action = promote || action = reject. Valori consentiti: canary, none. Valore predefinito: none.

Specifica la strategia di distribuzione utilizzata nell'azione deploy prima di un'azione o reject di un'azionepromote. Attualmente, canary è l'unica strategia di distribuzione accettabile.


trafficSplitMethod - Metodo di suddivisione del traffico
string. facoltativo. Usare quando strategy = canary. Valori consentiti: pod, smi. Valore predefinito: pod.

Per il valore smi, la divisione percentuale del traffico viene eseguita a livello di richiesta usando una mesh di servizi. Una mesh di servizi deve essere configurata da un amministratore del cluster. Questa attività gestisce l'orchestrazione di oggetti SMI TrafficSplit .

Per il valore pod, la divisione percentuale non è possibile a livello di richiesta in assenza di una mesh di servizio. Viene invece usato l'input percentuale per calcolare le repliche per baseline e canary. Il calcolo è una percentuale di repliche specificate nei manifesti di input per la variante stabile.


percentage - Percentuale
string. Obbligatorio quando strategy = Canary && action = deploy. Valore predefinito: 0.

Percentuale utilizzata per calcolare il numero di repliche di varianti di base e canary-variant dei carichi di lavoro contenuti nei file manifesto.

Per l'input percentuale specificato, calcolare:

(percentuale × numero di repliche) / 100

Se il risultato non è un numero intero, il piano matematico del risultato viene usato quando vengono create varianti di base e canary.

Si supponga, ad esempio, che la distribuzione hello-world si trovi nel file manifesto di input e che le righe seguenti si trovino nell'input dell'attività:

replicas: 4
strategy: canary
percentage: 25

In questo caso, le distribuzioni hello-world-baseline e hello-world-canary vengono create con una replica ciascuna. La variante di base viene creata con la stessa immagine e tag della versione stabile, ovvero la variante a quattro repliche prima della distribuzione. La variante canary viene creata con l'immagine e il tag corrispondenti alle modifiche appena distribuite.


baselineAndCanaryReplicas - Repliche di base e canary
string. Obbligatorio quando strategy = Canary && action = deploy && trafficSplitMethod = SMI. Valore predefinito: 1.

Quando si imposta su trafficSplitMethodsmi, la divisione percentuale del traffico viene controllata nel piano mesh di servizio. È possibile controllare il numero effettivo di repliche per le varianti canary e baseline indipendentemente dalla divisione del traffico.

Si supponga, ad esempio, che il manifesto della distribuzione di input specifichi 30 repliche per la variante stabile. Si supponga inoltre di specificare l'input seguente per l'attività:

strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1

In questo caso, la variante stabile riceve l'80% del traffico, mentre le varianti di base e canary ricevono ogni metà del 20%. Le varianti di base e canary non ricevono ognuna tre repliche. Ricevono invece il numero specificato di repliche, il che significa che ricevono ogni replica.


manifests - Manifesti
string. Obbligatorio quando action = deploy || action = promote || action = reject.

Specifica il percorso dei file manifesto da usare per la distribuzione. Ogni riga rappresenta un singolo percorso. Un criterio di corrispondenza di file è un valore accettabile per ogni riga.


containers - Contenitori
string. facoltativo. Usare quando action = deploy || action = promote || action = bake.

Specifica l'URL completo della risorsa dell'immagine da usare per le sostituzioni nei file manifesto. L'URL contosodemo.azurecr.io/helloworld:test è un esempio.


imagePullSecrets - ImagePullSecrets
string. facoltativo. Usare quando action = deploy || action = promote.

Specifica un input su più righe in cui ogni riga contiene il nome di un segreto del Registro di sistema Docker già configurato all'interno del cluster. Ogni nome segreto viene aggiunto in imagePullSecrets per i carichi di lavoro presenti nei file manifesto di input.


renderType - Motore di rendering
string. facoltativo. Usare quando action = bake. Valori consentiti: helm, kompose, kustomize. Valore predefinito: helm.

Specifica il tipo di rendering usato per produrre i file manifesto.


dockerComposeFile - Percorso del file di composizione docker
string. Obbligatorio quando action = bake && renderType = kompose.

Specifica un percorso di file docker-compose.


helmChart - Grafico Helm
string. Obbligatorio quando action = bake && renderType = helm.

Specifica il percorso del grafico Helm da bake.


releaseName - Nome versione Helm
string. facoltativo. Usare quando action = bake && renderType = helm.

Specifica il nome della versione Helm da usare.


overrideFiles - Eseguire l'override dei file
string. facoltativo. Usare quando action = bake && renderType = helm.

Specifica un input multilinea che accetta il percorso dei file di override. I file vengono usati quando vengono creati i file manifesto dei grafici Helm.


overrides - Esegue l' override
string. facoltativo. Usare quando action = bake && renderType = helm.

Specifica i valori di override da impostare.


kustomizationPath - Percorso di kustomizzazione
string. facoltativo. Usare quando action = bake && renderType = kustomize.

Specifica l'argomento che deve essere il percorso della directory contenente il file o un URL del repository Git con un suffisso percorso che specifica same rispetto alla radice del repository.


resourceToPatch - Risorsa da applicare alle patch
string. Obbligatorio quando action = patch. Valori consentiti: file, name. Valore predefinito: file.

Indica uno dei metodi di patch seguenti:

  • Un file manifesto identifica gli oggetti da applicare a patch.
  • Un singolo oggetto viene identificato da tipo e nome come destinazione della patch.

I valori accettabili sono file e nome.


resourceFileToPatch - Percorso file
string. Obbligatorio quando action = patch && resourceToPatch = file.

Specifica il percorso del file usato per una patch.


kind - Gentile
string. Obbligatorio quando action = scale || resourceToPatch = name. Valori consentiti: deployment, replicaset, statefulset.

Specifica il tipo di oggetto K8s, ad esempio deployment, replicaSet e altro ancora.


name - Nome
string. Obbligatorio quando action = scale || resourceToPatch = name.

Specifica il nome dell'oggetto K8s.


replicas - Numero di repliche
string. Obbligatorio quando action = scale.

Specifica il numero di repliche da ridimensionare.


replicas - Numero di repliche
string. Obbligatorio quando action = scale.

Specifica il nome dell'oggetto K8s.


mergeStrategy - Strategia di unione
string. Obbligatorio quando action = patch. Valori consentiti: json, merge, strategic. Valore predefinito: strategic.

Specifica il tipo di patch specificato.


arguments - Argomenti
string. facoltativo. Usare quando action = delete.

Specifica gli argomenti per il kubectl delete comando. Un esempio è: arguments: deployment hello-world foo-bar


patch - Benda
string. Obbligatorio quando action = patch.

Specifica il contenuto della patch.


secretType - Tipo di segreto
string. Obbligatorio quando action = createSecret. Valori consentiti: dockerRegistry, generic. Valore predefinito: dockerRegistry.

Crea o aggiorna un oggetto generico o docker imagepullsecret. Specificare per creare o aggiornare dockerRegistry l'oggetto imagepullsecret del Registro di sistema selezionato. Un imagePullSecret è un modo per passare un segreto che contiene una password del Registro contenitori a Kubelet, in modo che possa eseguire il pull di un'immagine privata per conto del pod.


secretName - Nome segreto
string. facoltativo. Usare quando action = createSecret.

Specifica il nome del segreto. È possibile usare questo nome segreto nel file di configurazione YAML kubernetes.


secretArguments - Argomenti
string. facoltativo. Usare quando action = createSecret && secretType = generic.

Specifica le chiavi e i valori letterali da inserire nel segreto. Ad esempio, --from-literal=key1=value1--from-literal=key2="top secret".


dockerRegistryEndpoint - Connessione del servizio del Registro di sistema Docker
string. facoltativo. Usare quando action = createSecret && secretType = dockerRegistry.

Specifica le credenziali della connessione del servizio specificata usata per creare un segreto del Registro Di sistema Docker all'interno del cluster. I file manifesto nel imagePullSecrets campo possono quindi fare riferimento al nome del segreto.


rolloutStatusTimeout - Timeout per lo stato di implementazione
string. facoltativo. Usare quando action = deploy || action = patch || action = scale || action = promote. Valore predefinito: 0.

Specifica il tempo di attesa (in secondi) prima di terminare watch on rollout lo stato.


Opzioni di controllo delle attività

Tutte le attività dispongono di opzioni di controllo oltre ai relativi input attività. Per altre informazioni, vedere Opzioni di controllo e proprietà comuni delle attività.

Variabili di output

Questa attività definisce le variabili di output seguenti, che è possibile usare nei passaggi, nei processi e nelle fasi downstream.

manifestsBundle
Posizione dei bundle manifesto creati dall'azione bake

Commenti

Considerazioni sulla connessione al servizio Kubernetes durante l'accesso al servizio Azure Kubernetes

È possibile creare una connessione al servizio Kubernetes con una delle opzioni seguenti.

  • KubeConfig
  • Account del servizio
  • Sottoscrizione di Azure

Screenshot della scelta di un metodo di autenticazione della connessione al servizio Kubernetes.

Quando si seleziona l'opzione Sottoscrizione di Azure , Kubernetes deve essere accessibile ad Azure DevOps in fase di configurazione della connessione al servizio. È possibile che non sia possibile creare una connessione al servizio, ad esempio è stato creato un cluster privato o che il cluster ha account locali disabilitati. In questi casi Azure DevOps non può connettersi al cluster in fase di configurazione della connessione al servizio e verrà visualizzata una schermata di caricamento bloccata degli spazi dei nomi .

Screenshot della scelta di una finestra di dialogo di autenticazione della connessione al servizio Kubernetes bloccata durante il caricamento degli spazi dei nomi.

A partire da Kubernetes 1.24, i token di lunga durata non vengono più creati per impostazione predefinita. Kubernetes consiglia di non usare token di lunga durata. Di conseguenza, le attività che usano una connessione al servizio Kubernetes creata con l'opzione Sottoscrizione di Azure non hanno accesso al token permanente necessario per l'autenticazione e non possono accedere al cluster Kubernetes. Ciò comporta anche la finestra di dialogo Carica spazi dei nomi bloccati.

Usare la connessione al servizio azure Resource Manager per accedere al servizio Azure Kubernetes

Per i clienti del servizio Azure Kubernetes, il tipo di connessione del servizio Resource Manager di Azure offre il metodo migliore per connettersi a un cluster privato o a un cluster con account locali disabilitati. Questo metodo non dipende dalla connettività del cluster al momento della creazione di una connessione al servizio. L'accesso al servizio Azure Kubernetes viene posticipato al runtime della pipeline, con i vantaggi seguenti:

  • L'accesso a un cluster del servizio Azure Kubernetes (privato) può essere eseguito da un agente del set di scalabilità o self-hosted con vista linea al cluster.
  • Viene creato un token per ogni attività che usa una connessione al servizio di Resource Manager di Azure. Ciò garantisce la connessione a Kubernetes con un token di breve durata, ovvero la raccomandazione Kubernetes.
  • È possibile accedere al servizio Azure Kubernetes anche quando gli account locali sono disabilitati.

Domande frequenti sulla connessione al servizio

Viene visualizzato il messaggio di errore seguente: impossibile trovare alcun segreto associato all'account del servizio. Cosa sta succedendo?

Si usa la connessione al servizio Kubernetes con l'opzione Sottoscrizione di Azure. Questo metodo viene aggiornato per creare token di lunga durata. Questa operazione dovrebbe essere disponibile a metà maggio. È tuttavia consigliabile iniziare a usare il tipo di connessione del servizio di Azure e non usare token di lunga durata in base alle indicazioni di Kubernetes.

Si usa il servizio Azure Kubernetes e non si vuole modificare nulla, è possibile continuare a usare le attività con la connessione al servizio Kubernetes?

Questo metodo viene aggiornato per creare token di lunga durata. Questa operazione dovrebbe essere disponibile a metà maggio. Tuttavia, tenere presente che questo approccio è contro le indicazioni di Kubernetes.

Si usano le attività Kubernetes e la connessione al servizio Kubernetes, ma non il servizio Azure Kubernetes. Dovrei essere preoccupato?

Le attività continueranno a funzionare come prima.

Il tipo di connessione del servizio Kubernetes verrà rimosso?

Le attività Kubernetes funzionano con qualsiasi cluster Kubernetes, indipendentemente dalla posizione in cui vengono eseguite. La connessione al servizio Kubernetes continuerà a esistere.

Io sono un cliente del servizio Azure Kubernetes e tutto è in esecuzione, dovrei agire?

Non c'è bisogno di cambiare nulla. Se si usa la connessione al servizio Kubernetes e la sottoscrizione di Azure selezionata durante la creazione, è necessario tenere presente le indicazioni su Kubernetes sull'uso di token di lunga durata.

Si sta creando un ambiente Kubernetes e non è possibile usare le connessioni al servizio

Nel caso in cui non sia possibile accedere al servizio Azure Kubernetes durante l'ora di creazione dell'ambiente, è possibile usare un ambiente vuoto e impostare l'input connectionType su una connessione del servizio di Resource Manager di Azure.

Il servizio Azure Kubernetes è configurato con il controllo degli accessi in base al ruolo di Azure Active Directory e la pipeline non funziona. Questi aggiornamenti verranno risolti?

L'accesso a Kubernetes quando il controllo degli accessi in base al ruolo di AAD non è correlato alla creazione di token. Per evitare un prompt interattivo, verrà supportato kubelogin in un aggiornamento futuro.

Usare un'attività manifesto Kubernetes in una pipeline di compilazione o versione per creare e distribuire manifesti nei cluster Kubernetes.

Questa attività supporta quanto segue:

  • Sostituzione degli artefatti: l'azione di distribuzione accetta come input un elenco di immagini del contenitore che è possibile specificare insieme ai tag e ai digest. Lo stesso input viene sostituito nei file manifesto non con estensionemplatized prima dell'applicazione nel cluster. Questa sostituzione garantisce che i nodi del cluster estraggono la versione corretta dell'immagine.

  • Stabilità manifesto: viene controllato lo stato di implementazione degli oggetti Kubernetes distribuiti. I controlli di stabilità vengono incorporati per determinare se lo stato dell'attività è un esito positivo o un errore.

  • Annotazioni di tracciabilità: le annotazioni vengono aggiunte agli oggetti Kubernetes distribuiti per sovrapporre informazioni sulla tracciabilità. Sono supportate le annotazioni seguenti:

    • azure-pipelines/org
    • azure-pipelines/project
    • azure-pipelines/pipeline
    • azure-pipelines/pipelineId
    • azure-pipelines/execution
    • azure-pipelines/executionuri
    • azure-pipelines/jobName
  • Gestione dei segreti: l'azione createSecret consente di creare segreti del Registro Di sistema Docker usando le connessioni del servizio del Registro di sistema Docker. Consente inoltre di creare segreti generici usando variabili di testo normale o variabili segrete. Prima della distribuzione nel cluster, è possibile usare l'input secrets insieme all'azione deploy per aumentare i file manifesto di input con il valore appropriato imagePullSecrets .

  • Manifesto bake: l'azione bake dell'attività consente di creare modelli in file manifesto Kubernetes. L'azione usa strumenti come Helm, Compose e Kustomize. Con la cottura, questi file manifesto kubernetes sono utilizzabili per le distribuzioni nel cluster.

  • Strategia di distribuzione: la scelta della strategia con l'azione canarydeploy comporta la creazione di nomi di carico di lavoro suffisso con -baseline e .-canary L'attività supporta due metodi di suddivisione del traffico:

    • Interfaccia mesh del servizio: l'astrazione di Service Mesh Interface (SMI) consente la configurazione con provider di mesh di servizio come Linkerd e Istio. L'attività Manifesto Kubernetes esegue il mapping degli oggetti SMI TrafficSplit ai servizi stabili, baseline e canary durante il ciclo di vita della strategia di distribuzione.

      Le distribuzioni Canary basate su una mesh di servizio e usano questa attività sono più accurate. Questa accuratezza è dovuta al modo in cui i provider di mesh di servizio consentono la suddivisione granulare in base alla percentuale di traffico. La mesh del servizio usa il Registro di sistema del servizio e i contenitori sidecar inseriti nei pod. Questo inserimento si verifica insieme ai contenitori dell'applicazione per ottenere la suddivisione granulare del traffico.

    • Kubernetes senza mesh di servizio: in assenza di una mesh di servizio, potrebbe non essere possibile ottenere la percentuale esatta di divisione desiderata a livello di richiesta. È tuttavia possibile eseguire distribuzioni canary usando varianti di base e canary accanto alla variante stabile.

      Il servizio invia richieste ai pod di tutte e tre le varianti del carico di lavoro perché vengono soddisfatti i vincoli di etichetta del selettore. Il manifesto kubernetes rispetta queste richieste durante la creazione di varianti baseline e canary. Questo comportamento di routing ottiene l'effetto previsto del routing solo una parte delle richieste totali al canary.

    Confrontare i carichi di lavoro baseline e canary usando un'attività Intervento manuale nelle pipeline di rilascio o un'attività Ritardo nelle pipeline YAML. Eseguire il confronto prima di usare l'azione di promozione o rifiuto dell'attività.

Distribuire l'azione

Il codice YAML seguente è un esempio di distribuzione in uno spazio dei nomi Kubernetes usando file manifesto:

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

Nell'esempio precedente, l'attività tenta di trovare corrispondenze per le immagini foo/demo e bar/demo nei campi immagine dei file manifesto. Per ogni corrispondenza trovata, il valore di tagVariable1 o tagVariable2 viene aggiunto come tag al nome dell'immagine. È anche possibile specificare i digest nell'input dei contenitori per la sostituzione degli artefatti.

Nota

Anche se è possibile creare deploy, promotee reject azioni con l'input YAML correlato alla strategia di distribuzione, il supporto per un'attività Di intervento manuale non è attualmente disponibile per le pipeline di compilazione.

Per le pipeline di rilascio, è consigliabile usare azioni e input correlati alla strategia di distribuzione nella sequenza seguente:

  1. Azione di distribuzione specificata con strategy: canary e percentage: $(someValue).
  2. Attività Intervento manuale in modo che sia possibile sospendere la pipeline e confrontare la variante di base con la variante canary.
  3. Un'azione di promozione eseguita se viene ripresa un'attività Di intervento manuale e un'azione di rifiuto eseguita se viene rifiutata un'attività Di intervento manuale.

Creare un'azione privata

Il codice YAML seguente mostra una creazione di esempio dei segreti del Registro Di sistema Docker usando la connessione del servizio Registro Di sistema Docker:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: dockerRegistry
    secretName: foobar
    dockerRegistryEndpoint: demoACR
    kubernetesServiceConnection: someK8sSC
    namespace: default

Questo codice YAML mostra una creazione di esempio di segreti generici:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: generic
    secretName: some-secret
    secretArguments: --from-literal=key1=value1
    kubernetesServiceConnection: someK8sSC
    namespace: default

Azione bake

Il codice YAML seguente è un esempio di file manifesto di cottura dai grafici Helm. Si noti l'utilizzo di un input di nome nella prima attività. Questo nome viene fatto riferimento successivamente dal passaggio di distribuzione per specificare il percorso dei manifesti generati dal passaggio bake.

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

Nota

Per usare Helm direttamente per la gestione delle versioni e dei rollback, vedere l'attività Pacchetto e distribuzione dei grafici Helm.

Esempio di Kustomize

Il codice YAML seguente è un esempio di file manifesto di cottura generati con Kustomize che contengono un kustomization.yaml file.

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)

Esempio di Kompose

Il codice YAML seguente è un esempio di file manifesto di cottura generati con Kompose, uno strumento di conversione per 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)

Ridimensionare l'azione

Il codice YAML seguente illustra un esempio di ridimensionamento degli oggetti:

steps:
- task: KubernetesManifest@0
  displayName: Scale
  inputs: 
    action: scale
    kind: deployment
    name: bootcamp-demo
    replicas: 5
    kubernetesServiceConnection: someK8sSC
    namespace: default

Azione patch

Il codice YAML seguente illustra un esempio di applicazione di patch agli oggetti:

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

Elimina azione

Questo codice YAML mostra un'eliminazione di oggetto di esempio:

steps:
- task: KubernetesManifest@0
  displayName: Delete
  inputs:
    action: delete
    arguments: deployment expressapp
    kubernetesServiceConnection: someK8sSC
    namespace: default

Risoluzione dei problemi

Il cluster Kubernetes si trova dietro un firewall e si stanno usando gli agenti ospitati. Come si esegue la distribuzione in questo cluster?

È possibile concedere l'accesso agli agenti ospitati tramite il firewall, consentendo gli indirizzi IP per gli agenti ospitati. Per altre informazioni dettagliate, vedere Intervalli IP dell'agente.

Come funzionano le richieste alle route dei servizi stabili e varianti con distribuzioni canary?

La relazione del selettore etichette tra pod e servizi in Kubernetes consente di configurare le distribuzioni in modo che un singolo servizio esegua il route delle richieste alle varianti sia stabili che canary. L'attività manifesto di Kubernetes usa tale relazione per le distribuzioni canary.

Se l'attività include gli input di action: deploy e strategy: canary, per ogni carico di lavoro (Distribuzione, ReplicaSet, Pod, ...) definito nei file manifesto di input, viene creata una -baseline variante e -canary della distribuzione. In questo esempio è presente una distribuzione sampleapp nel file manifesto di input e che dopo il completamento del numero di esecuzione 22 della pipeline, la variante stabile di questa distribuzione denominata sampleapp viene distribuita nel cluster. Nell'esecuzione successiva (in questo caso numero di esecuzione 23), l'attività manifesto di Kubernetes con action: deploy e strategy: canary comporterà la creazione di distribuzioni sampleapp-baseline e sampleapp-canary il cui numero di repliche è determinato dal prodotto dell'input dell'attività percentage con il valore del numero desiderato di repliche per la variante stabile finale di sampleapp in base ai file manifesto di input.

Escludendo il numero di repliche, la versione di base ha la stessa configurazione della variante stabile, mentre la versione canary include le nuove modifiche introdotte dall'esecuzione corrente (in questo caso, numero di esecuzione 23). Se nella pipeline viene configurato un intervento manuale dopo il passaggio precedente, è possibile sospendere la pipeline in modo che l'amministratore della pipeline possa valutare le metriche chiave per le versioni baseline e canary e prendere la decisione su se le modifiche canary sono sicure e sufficienti per un'implementazione completa.

Gliaction: promote input e o strategy: canaryaction: reject e strategy: canary delle attività manifesto kubernetes possono essere usati rispettivamente per alzare di livello o rifiutare le modifiche canary. Si noti che in entrambi i casi, alla fine di questo passaggio, solo la variante stabile dei carichi di lavoro dichiarati nei file manifesto di input rimarrà distribuita nel cluster, mentre la baseline temporanea e le versioni canary vengono ripulite.

Requisiti

Requisito Descrizione
Tipi di pipeline YAML, build classica, versione classica
Viene eseguito in Agente, DeploymentGroup
Richieste Nessuno
Capabilities Questa attività non soddisfa le richieste per le attività successive nel processo.
Restrizioni dei comandi Qualsiasi
Variabili impostabili Qualsiasi
Versione agente Tutte le versioni dell'agente supportate.
Categoria attività Distribuire