部署到 Kubernetes

Azure DevOps Services

Azure Pipelines 可用于部署到多个云提供商提供的 Kubernetes 群集。 本文档包含与为任何 Kubernetes 群集设置部署相关的概念。

虽然可以使用脚本从远程位置或安全文件将 kubeconfig 文件加载到代理上,然后使用 kubectl 执行部署,但建议使用 KubernetesManifest 任务Kubernetes 服务连接

KubernetesManifest 任务

KubernetesManifest 任务具有在将任务标记为成功/失败之前能够检查对象稳定性的附加优势。 该任务还可以执行项目替换,将管道可跟踪性注释添加到已部署的对象上,简化 imagePullSecrets 的创建和引用,使用 Helm 或 kustomization.yaml 或 Docker compose 文件制作清单,并协助部署策略推出。

环境中的 Kubernetes 资源

环境中的Kubernetes 资源提供了一种安全的方式,用于指定连接到用于执行部署的 Kubernetes 群集所需的凭据。

创建资源

Azure Kubernetes 服务提供程序选项中,提供订阅、群集和命名空间输入后,除了提取并安全地存储所需的凭据外,还会为启用了 RBAC 的群集 ServiceAccountRoleBinding 对象创建一次,以便 ServiceAccount 只能对所选命名空间执行操作。

泛型提供程序 (重用现有的 ServiceAccount) 选项可用于配置与任何云提供商群集的连接, (AKS/EKS/GKE/OpenShift/etc.) 。

示例


jobs:
- deployment:
  displayName: Deploy to AKS
  pool:
    vmImage: ubuntu-latest
  environment: contoso.aksnamespace
  strategy:
    runOnce:
      deploy:
        steps:
        - checkout: self
        - task: KubernetesManifest@0
          displayName: Create secret
          inputs: 
            action: createSecret
            namespace: aksnamespace
            secretType: dockerRegistry
            secretName: foo-acr-secret
            dockerRegistryEndpoint: fooACR
            
        - task: KubernetesManifest@0
          displayName: Create secret
          inputs: 
            action: createSecret
            namespace: aksnamespace
            secretType: dockerRegistry
            secretName: bar-acr-secret
            dockerRegistryEndpoint: barACR
            
        - task: KubernetesManifest@0
          displayName: Deploy
          inputs:
            action: deploy
            namespace: aksnamespace
            manifests: manifests/deployment.yml|manifests/service.yml
            containers: |
              foo.azurecr.io/demo:$(tagVariable1)
              bar.azurecr.io/demo:$(tagVariable2)
            imagePullSecrets: |
              foo-acr-secret
              bar-acr-secret

若要允许从专用注册表提取映像,在操作之前 deploy ,该 createSecret 操作与 Docker 注册表服务连接的 实例一起使用,以创建稍后在与 deploy 操作对应的步骤中引用的 imagePullSecrets。

提示

  • 如果从头开始为包含 Dockerfile 的存储库设置端到端 CI-CD 管道,请查看 “部署到 Azure Kubernetes”模板,该模板用于构造端到端 YAML 管道以及创建 环境和Kubernetes 资源 以帮助可视化这些部署。
  • 虽然基于 YAML 的管道目前支持单个 Git 存储库上的触发器,但如果其他 Git 存储库中存储的清单文件需要触发器,或者如果Azure 容器注册表或Docker Hub需要触发器,则建议使用基于 YAML 的管道而不是基于 YAML 的管道执行 Kubernetes 部署。

备选方法

除了使用 KubernetesManifest 任务进行部署,还可以使用以下替代方法:

  • Kubectl 任务
  • 脚本上的 kubectl 调用。 例如: script: kubectl apply -f manifest.yml