在云原生技术飞速发展的当下,将持续集成 / 持续部署(CI/CD)能力与 Kubernetes 集群结合,已成为企业实现应用高效交付的核心需求。
本文将以阿里云容器服务 Kubernetes 版(ACK)和微软 Azure DevOps 为技术底座,带您从零搭建一套完整的自动化部署流程,涵盖集群创建、流水线配置、服务连接、应用部署与公网暴露全环节,助力团队快速落地云原生时代的 DevOps 实践。
一、前置认知:ACK 与 Azure DevOps 的协同价值
在开始实操前,我们先明确两大核心工具的定位与协同逻辑:
阿里云 ACK:作为阿里云推出的企业级 Kubernetes 服务,它提供了托管式集群管理能力,支持自动运维节点、弹性扩缩容、内置网络与存储插件,能大幅降低 Kubernetes 部署与运维门槛,为应用提供稳定的容器运行环境。
Azure DevOps:微软推出的一站式 DevOps 平台,集成了代码仓库、构建流水线、发布管理、测试工具等功能,其灵活的任务配置与丰富的插件生态,可轻松对接各类云服务,实现从代码到生产环境的全流程自动化。
二者结合的核心优势在于:借助 Azure DevOps 的自动化能力,将应用无缝部署到 ACK 集群,同时利用 ACK 的云原生特性保障应用稳定性,形成 “代码提交 - 自动构建 - 自动部署 - 公网访问” 的闭环。
二、第一步:创建阿里云 ACK 集群
ACK 集群是应用运行的基础,需按照 “资源授权 - 集群配置 - 节点池设置 - 依赖检查” 四步完成搭建,以下为关键操作细节:
1、登录与资源授权
访问阿里云控制台,在顶部搜索栏输入 “Kubernetes”,选择 “容器服务 Kubernetes 版(ACK)” 进入服务页面。
首次创建集群时,系统会提示 “云资源访问授权”,需授予 ACK 访问 RAM 角色的权限(包括AliyunCSManagedVKRole、AliyunCSDefaultRole等核心角色),这些角色用于 ACK 自动管理 ECS、SLB、NAT 网关等底层资源,无需手动配置。
2、核心集群配置
进入 “创建 Kubernetes 集群” 页面,重点配置以下参数(根据业务需求调整):
3、节点池与操作系统设置
节点池是 Worker 节点的管理单元,关键配置如下:
节点池名称:例如 “worker-pool-1”,区分不同用途的节点(如 Web 节点、数据库节点)。
实例规格:根据应用资源需求选择,测试环境可选 2vCPU+8GiB(如 ecs.n1.large),生产环境需根据并发量扩容。
操作系统:默认 “阿里云 Linux 2”,基于 CentOS 优化,支持容器运行时(Docker/Containerd),无需额外配置。
登录方式:推荐 “SSH 密钥对”(比密码更安全),需提前在 ECS 控制台创建密钥对,创建后立即下载私钥(仅一次下载机会)。
- 组件与依赖检查
必装组件:勾选 “Nginx Ingress 控制器”(后续用于公网暴露应用)、“CloudMonitor Agent”(监控集群资源)。
依赖激活:创建集群前需激活 ACK、NAS(文件存储)等依赖服务,系统会自动检测,未激活时点击 “立即激活” 即可(无额外费用,按需计费)。
配置完成后提交订单,集群创建约需 5-10 分钟,待状态变为 “运行中”,表示 ACK 集群已就绪。
三、第二步:生成 ACK 临时 kubeconfig
kubeconfig 是连接 Kubernetes 集群的配置文件,为避免长期密钥泄露,推荐使用临时 kubeconfig(有效期可设置 1-7 天),操作步骤如下:
进入 ACK 集群详情页,点击 “连接信息” 标签页。
选择 “公网访问”,设置 “有效期”(如 3 天),点击 “生成临时 kubeconfig”。
复制生成的配置内容,保存到本地(后续在 Azure DevOps 中使用),注意:临时配置过期后需重新生成,生产环境建议使用 RAM 角色授权(更安全)。
此外,可通过阿里云 “云 Shell” 快速验证集群连接:点击集群详情页的 “更多 > 打开云 Shell”,执行kubectl get nodes,若返回节点列表,说明集群连接正常。
四、第三步:搭建 Azure DevOps 发布流水线
Azure DevOps 的发布流水线(Release Pipeline)负责将应用部署到 ACK 集群,核心步骤包括 “创建项目 - 选择模板 - 配置服务连接 - 定义部署任务”。
- 新建 Azure DevOps 项目与流水线
访问Azure DevOps 官网,登录后点击 “New project”,输入项目名称(如 “ack-cicd-project”),选择 “Private”(私有项目,保护代码与配置)。
进入项目后,左侧导航栏选择 “Pipelines>Releases”,点击 “New release pipeline”,在模板库中搜索 “Deploy to a Kubernetes cluster”(Kubernetes 部署模板),选择后点击 “Apply”。
- 配置 ACK 服务连接(关键步骤)
服务连接是 Azure DevOps 与 ACK 集群通信的桥梁,配置方式如下:
在流水线 “Stage 1” 任务中,点击 “Kubectl” 任务的 “Kubernetes service connection” 右侧 “Manage”。
新建服务连接,选择 “Kubernetes”,认证方式选 “KubeConfig”,粘贴第二步保存的临时 kubeconfig 内容。
勾选 “Accept untrusted certificates”(测试环境,生产环境需配置 CA 证书),点击 “Verify”,验证通过后命名服务连接(如 “ack-prod-connection”),完成创建。
- 定义应用部署任务
以部署 Nginx 示例应用为例,配置 “Kubectl” 任务参数:
命令(Command):选择 “apply”(用于创建 Kubernetes 资源)。
参数(Arguments):输入应用部署文件的 URL 或路径,示例使用 Kubernetes 官方 Nginx 部署文件:
-f https://k8s.io/examples/application/deployment.yaml
命名空间(Namespace):默认 “default”,生产环境建议创建专用命名空间(如 “nginx-prod”),需提前执行kubectl create ns nginx-prod。
配置完成后点击 “Save”,命名流水线(如 “ack-nginx-deploy”),保存时需填写修改说明(便于追溯版本)。
五、第四步:执行部署与验证集群状态
- 触发流水线部署
点击 “Create release”,选择流水线版本(默认最新版),点击 “Create” 生成发布实例。
在发布实例页面,点击 “Deploy” 触发 Stage 1 执行,可通过 “Logs” 查看部署日志:
若日志显示 “kubectl apply succeeded”,说明部署成功。
若失败(如 “无并行任务权限”),需在 Azure DevOps 中申请免费并行额度(个人测试环境足够使用)。
- 验证应用在 ACK 集群的状态
进入阿里云 ACK 控制台,在集群详情页点击 “工作负载> 部署(Deployments)”,若 “nginx-deployment” 的 “可用副本数” 为 1(与部署文件一致),表示应用已启动。
执行kubectl get pods(通过云 Shell 或本地 kubectl),输出如下信息即正常:
NAME READY STATUS RESTARTS AGE
nginx-deployment-76d6c9b8c4-xxxx 1/1 Running 0 5m
六、第五步:通过 Ingress 暴露应用到公网
应用部署到 ACK 后默认仅集群内部可访问,需通过 Nginx Ingress 控制器暴露到公网,操作分 “创建 Service” 与 “创建 Ingress 规则” 两步。
- 创建 Kubernetes Service(服务发现)
Service 用于将 Pod 封装为统一访问入口,步骤如下:
进入 ACK 集群详情页,点击 “服务与路由> 服务”,选择命名空间(如 “default”),点击 “创建”。
配置服务参数:
服务名称:例如 “nginx-service”。
服务类型:选择 “ClusterIP”(仅集群内部访问,后续通过 Ingress 暴露公网)。
端口映射:“服务端口” 80,“容器端口” 80(与 Nginx 容器端口一致),协议 TCP。
点击 “创建”,服务创建后获取 “集群 IP”(如 172.16.0.10),可通过kubectl get svc nginx-service验证。
- 创建 Ingress 规则(公网访问入口)
Ingress 通过域名路由请求到后端 Service,配置步骤如下:
点击 “服务与路由> Ingress”,点击 “创建”,配置关键参数:
Ingress 名称:例如 “nginx-ingress”。
域名:使用阿里云提供的临时域名(格式为[自定义名称].[集群ID].[区域].alicontainer.com),例如 “my-nginx.c622cf1704c034033919c7892b09f539c.eu-central-1.alicontainer.com”。
路由规则:路径 “/”(所有请求),后端服务选择 “nginx-service”,端口 80。
无需启用 TLS(测试环境),生产环境需绑定 SSL 证书(阿里云 SSL 控制台申请免费证书)。
创建完成后,等待 1-2 分钟(Ingress 规则生效),在浏览器输入配置的域名,若显示 “Welcome to nginx!”,说明应用已成功暴露到公网。
七、总结与最佳实践建议
本文通过实操演示了 “ACK 集群创建→Azure DevOps 流水线配置→应用部署→公网暴露” 的完整流程,实现了从代码到可用应用的自动化交付。为进一步优化该方案,提供以下最佳实践:
安全性增强:生产环境不使用临时 kubeconfig,改用阿里云 RAM 角色授权(Azure DevOps 配置 RAM 访问密钥,限制权限范围);Ingress 仅开放必要端口,通过 WAF 防护恶意请求。
流水线优化:添加 “构建任务”(在 Release 前增加 Build Pipeline,编译代码、构建 Docker 镜像并推送到阿里云容器镜像服务 ACR),实现 “代码提交→自动构建→自动部署” 全流程 CI/CD。
监控与运维:通过阿里云 CloudMonitor 配置集群告警(如 CPU 使用率超 80%),Azure DevOps 添加 “部署后测试任务”(如 HTTP 健康检查),确保应用部署后可用。
通过 Azure DevOps 与 ACK 的协同,企业可大幅缩短应用交付周期,同时借助阿里云的云原生能力保障应用稳定性,为业务快速迭代提供技术支撑。