CDC

Place to Be & Show Yourself

AKS 实现 CI/CD 自动部署

继续前一篇文章《使用azure cli 部署 AKS》
我们可以实现自动化的jenkins 到 aks 的 ci/cd. 下面是步骤:

Azure Container Registry介绍

Azure Container Registry(ACR)是可以用来储存所有容器部署类型的镜像,使用Docker Registry兼容的命令管理与建立Container Registry,用以储存管理私人的docker container image.
主要提供整合的协调机制来集中管理容器化的应用程序,包括Kubernetes,Docker Swarm.一方面透过Azure服务,可以自动化建置,执行与扩充应用程序.
此外,透过Jenkins或Azure DevOps服务可以做为发布到ACR的持续整合的部署流程的一部分
ACR包括几个主要的概念:

  • Registry – Azure订阅可以建立多个Container registries.可以透过Webhook与Azure AD登入管理images.根据不同的Registry类型,提供本机储存或异地复写的使用情境.每个Registry名称是以FQDN的命名呈现,例如myregistry.azurecr.io
  • Repository -每个Registry包含一个以上的Repository,以群组的方式进行储存管理,并且支持多层的命名空间(namespace)
  • Image -储存于Respository中,当有需要使用时,可以用docker命令将image从repository取出
  • Container -容器是定义应用程序与应用程序相依的档案系统,执行环境相关的资源
    ACR与ACI在Azure Kubernetes Service(AKS)的有密切的合作关系,Container Registry提供Images Repository,Pod所执行的个体便是ACI.

发布 Image 到 Azure Container Registry

2.1. 创建ACR
Azure 容器注册表 (ACR) 是容器映像的专用注册表。 可以通过专用容器注册表安全地生成和部署应用程序和自定义代码。

继续前文, aks 已经创建成功。

ACR有多种类型,具体可以在azure网站上看,根据容量的不同,每天的收费也不同。

在RainKCS资源组里面创建ACR, 选择Basic类型。

az acr create –resource-group RainKCS -n RainACR –sku Basic

创建成功后,登录:

az acr login –name RainACR

2.2. 发布image
Image的上传分成两个部分:

先 tag 要上传的 Image, 加上 前缀
使用 docker push 上传
先查看login server名字, 如下看到 login server 名字是rainacr.azurecr.io, 所以下一步需要在要上传的image 添加rainacr.azurecr.io/ 标签:

打标签, 这里是要上传 edge:1082, 如下操作后上传成功,并且确认image 和 tag 是我们要上传的。

设置RBAC

基于角色的访问控制 (RBAC) 可帮助你管理谁有权访问 Azure 资源、他们可以对这些资源执行哪些操作以及他们有权访问哪些区域。

RBAC 是在 Azure 资源管理器基础上构建的授权系统,针对 Azure 资源提供精细的访问权限管理。

3.1. 建立应用程序服务账户

为了允许AKS丛集与其他Azure资源互动,则会使用Azure Active Directory服务主体。使用az ad sp create-for-rbac命令建立服务主体。–skip-assignment参数会限制指派任何其他权限。根据预设,此服务主体的有效期限为一年。

az ad sp create-for-rbac –skip-assignment

输出类似于下列示例:

记下appId和密码。下列步骤中会使用这些值。

3.2. 设定 AKS 可以存取 ACR images
先获取 ACR Id, 利用下面命令获取(指定ACR 名字和资源组名字):

给服务主体分配角色:

关联到 AKS,关联的方法有两种,一种是创建时关联,另外一种是修改已有权限,这里是修改权限方法:

创建时关联命令:

修改权限方法:

Jenkins集成CI/CD

https://docs.microsoft.com/zh-cn/azure/aks/jenkins-continuous-deployment

4.1. 实现流程

其中,我们需要做AZure赋权保证jenkins 有权限把编译出来的Image上传到ACR, 同时在Jenkins 中实现Image 上传和 触发kubernetes 更新Image。

4.2. azure赋权
主要内容是通过 ABAC 设置 jenkins 有权限上传 docker image 到 ACR,使用的是AD服务的方式。

具体步骤:

获取 login server

创建 ACR 的 Jenkins 凭据

4.3. jenkins配置
在“全局属性”下,选择“环境变量”。
添加变量 ACR_LOGINSERVER = rainacr.azurecr.io ( ACR 登录服务器值)。

添加 azure凭据到 jenkins.
Jenkins: “凭据” > “Jenkins” > “全局凭据(无限制)” > “添加凭据”
用户名 -上面” az ad sp create-for-rbac –skip-assignment :输出的 appId。
密码 – 上面” az ad sp create-for-rbac –skip-assignment :输出的 password

在“生成触发器”部分下面,选择“用于 GITscm 轮询的 GitHub 挂钩触发器”

在“生成环境”下,选择“使用机密文本或文件”
在“绑定”下,依次选择“添加” > “用户名和密码(已分隔)”
在“用户名变量”中输入 ACR_ID,并在“密码变量”中输入 ACR_PASSWORD

选择添加类型为“执行 shell”的“生成步骤”,并使用以下文本。此脚本将生成新的容器映像,并将其推送到 ACR 注册表。

添加另一个“执行 shell”类型的“生成步骤”并使用以下文本。此脚本使用 ACR 中的新容器映像来更新 AKS 中的应用程序部署。

点赞

发表评论

电子邮件地址不会被公开。