部署到 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 的群集 ServiceAccount 和 RoleBinding 对象创建一次,以便 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