如何集成 GitLab-Ci w/Azure Kubernetes + Kubectl + ACR 进行部署?
How to Integrate GitLab-Ci w/ Azure Kubernetes + Kubectl + ACR for Deployments?
Our previous GitLab based CI/CD utilized an Authenticated curl request to a specific REST API endpoint to trigger the redeployment of an updated container to our service, if you use something similar for your Kubernetes based deployment this Question is for you.
更多背景
我们 运行 Azure AKS 集群上的生产站点/应用程序(基于 Ghost 博客)。现在我们手动将更新的容器推送到私有 ACR(Azure 容器注册表),然后使用 Kubectl 从命令行更新。
话虽如此,我们之前使用 Docker Cloud 进行编排,并使用 GitLab-Ci.
完全集成重新部署我们的生产/暂存服务
GitLab-Ci 集成是目标,'Why' 这个问题背后的问题。
我的问题
由于我们之前使用了 Docker Cloud(doh,应该从一开始就使用 K8s)我们应该如何处理 GitLab-Ci 能够利用 Secrets 创建 Docker Cloud CLI,然后使用 Docker Cloud API 进行身份验证以触发我们节点上的操作(即重新部署新容器等)。
虽然我相信我们可以构建一个包含 Kubectl 和 Azure CLI 的容器(供我们的 GitLab-Ci 运行ner 使用),但我知道 Kubernetes 也有类似的(到 docker 云)Rest API 可以在这里找到(https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster)——特别是关于不使用 Kubectl 连接的部分似乎是相关的(关于 HTTP REST 的部分也是如此) API).
我对连接到 Azure(或可能其他托管的 Kubernetes 服务)的任何人的问题:
How does your Ci/CD server authenticate with your Kubernetes service provider's Management Server, and then how do you currently trigger an update / redeployment of an updated container / service?
如果您使用 Kubernetes HTTP Rest API 重新部署服务,您的想法将特别有价值!
我正在查看的 Kubernetes 资源
- Kubernetes Deployments
将在我完成该过程时进行更新。
我今天登录了我们的 GitLab-Ci 后端,看到了一个 'Kubernetes' 按钮——以及在 GCP 上节省 500 美元的优惠。
GitLab Kubernetes
URL 访问你的 repo 的 Kubernetes GitLab 页面是:
https://gitlab.com/^your-repo^/clusters
在完成集成过程时,我将更新此答案(但也欢迎!)。
官方 GitLab Kubernetes 集成文档
创建集成
我遇到了如何将 GitLab CI/CD 与我的 Azure AKS Kubernetes 集群集成的相同问题。我创建这个 是因为当我尝试将我的 Kubernetes 线索信息添加到 GitLab 时遇到了一些错误。
如何整合它们:
- 在 GitLab 中,转到 "Operations" > "Kubernetes" 菜单。
- 点击页面顶部的 "Add Kubernetes cluster" 按钮
- 您将必须填写一些表单字段,以获取必须放入这些字段的内容,使用 [=11= 从 CLI 连接到您的 Azure 帐户(您需要在您的 PC 上安装 Azure CLI) ] 命令,然后执行其他命令以获取 Kubernetes 集群凭据:
az aks get-credentials --resource-group <resource-group-name> --name <kubernetes-cluster-name>
- 前面的命令会创建一个
~/.kube/config
文件,打开这个文件,你在GitLab"Add Kubernetes cluster"表单中要填写的字段内容都在这个.kube/config
里面文件
这些是字段:
- Kubernetes 集群名称: 这是您在 Azure 上的集群的名称,它也在
.kube/config
文件中。
- API URL: 就是
.kube/config
文件的server
字段中的URL。
- CA Certificate:是
.kube/config
文件的certificate-authority-data
字段,但是你需要进行base64解码。
解码后应该是这样的:
-----BEGIN CERTIFICATE-----
...
some base64 strings here
...
-----END CERTIFICATE-----
- Token:是
.kube/config
文件token
字段中的十六进制字符串(可能还需要base 64解码? ).您需要使用属于具有 cluster-admin 权限的帐户的令牌,因此 GitLab 可以使用它在集群上进行身份验证和安装。实现这一点的最简单方法是为 GitLab 创建一个新帐户:创建一个带有服务帐户定义的 YAML 文件(可以在 下的 here 中看到一个示例在默认命名空间中创建一个 gitlab 服务帐户) 并通过 kubectl apply -f serviceaccount.yml
. 将其应用于您的集群
- 项目命名空间(可选,唯一):我把它留空,还不知道这个命名空间可以用于什么地方。
点击"Save"就完成了。您的 GitLab 项目现在必须连接到您的 Kubernetes 集群。
部署
在您的部署作业中(在管道中),您需要一些环境变量来使用 kubectl
命令访问您的集群,这里是所有可用变量的列表:
https://docs.gitlab.com/ee/user/project/clusters/index.html#deployment-variables
要在您的部署作业中注入这些变量,需要满足一些条件:
- 您必须已将 Kubernetes 集群正确添加到您的 GitLab 项目中,菜单 "Operations" > "Kubernetes" 以及我上面描述的这些步骤
- 您的作业必须是 "deployment job",在 GitLab CI 中,要被视为部署作业,您的作业定义(在您的
.gitlab-ci.yml
中)必须具有 environment
键(看看这个 example 中的第 31 行),环境名称必须与您在菜单中使用的名称匹配 "Operations" > "Environments".
这里有一个 .gitlab-ci.yml 三个阶段的例子:
- 构建: 它构建一个 docker 图像并将其推送到 gitlab 私有注册表
- 测试:还没有做任何事情,只是放一个
exit 0
稍后更改
- 部署:下载稳定版
kubectl
,复制.kube/config
文件即可运行kubectl
命令并执行 kubectl cluster-info
以确保其正常工作。在我的项目中,我没有完成编写部署脚本来真正执行部署。但是这个 kubectl cluster-info
命令执行得很好。
提示:查看所有环境变量及其值(Jenkins 有一个包含此视图的页面,GitLab CI 没有)你可以在部署阶段的脚本中执行命令 env
。对调试工作有很大帮助。
Our previous GitLab based CI/CD utilized an Authenticated curl request to a specific REST API endpoint to trigger the redeployment of an updated container to our service, if you use something similar for your Kubernetes based deployment this Question is for you.
更多背景
我们 运行 Azure AKS 集群上的生产站点/应用程序(基于 Ghost 博客)。现在我们手动将更新的容器推送到私有 ACR(Azure 容器注册表),然后使用 Kubectl 从命令行更新。
话虽如此,我们之前使用 Docker Cloud 进行编排,并使用 GitLab-Ci.
完全集成重新部署我们的生产/暂存服务GitLab-Ci 集成是目标,'Why' 这个问题背后的问题。
我的问题
由于我们之前使用了 Docker Cloud(doh,应该从一开始就使用 K8s)我们应该如何处理 GitLab-Ci 能够利用 Secrets 创建 Docker Cloud CLI,然后使用 Docker Cloud API 进行身份验证以触发我们节点上的操作(即重新部署新容器等)。
虽然我相信我们可以构建一个包含 Kubectl 和 Azure CLI 的容器(供我们的 GitLab-Ci 运行ner 使用),但我知道 Kubernetes 也有类似的(到 docker 云)Rest API 可以在这里找到(https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster)——特别是关于不使用 Kubectl 连接的部分似乎是相关的(关于 HTTP REST 的部分也是如此) API).
我对连接到 Azure(或可能其他托管的 Kubernetes 服务)的任何人的问题:
How does your Ci/CD server authenticate with your Kubernetes service provider's Management Server, and then how do you currently trigger an update / redeployment of an updated container / service?
如果您使用 Kubernetes HTTP Rest API 重新部署服务,您的想法将特别有价值!
我正在查看的 Kubernetes 资源
- Kubernetes Deployments
将在我完成该过程时进行更新。
我今天登录了我们的 GitLab-Ci 后端,看到了一个 'Kubernetes' 按钮——以及在 GCP 上节省 500 美元的优惠。
GitLab Kubernetes
URL 访问你的 repo 的 Kubernetes GitLab 页面是:
https://gitlab.com/^your-repo^/clusters
在完成集成过程时,我将更新此答案(但也欢迎!)。
官方 GitLab Kubernetes 集成文档
创建集成
我遇到了如何将 GitLab CI/CD 与我的 Azure AKS Kubernetes 集群集成的相同问题。我创建这个
如何整合它们:
- 在 GitLab 中,转到 "Operations" > "Kubernetes" 菜单。
- 点击页面顶部的 "Add Kubernetes cluster" 按钮
- 您将必须填写一些表单字段,以获取必须放入这些字段的内容,使用 [=11= 从 CLI 连接到您的 Azure 帐户(您需要在您的 PC 上安装 Azure CLI) ] 命令,然后执行其他命令以获取 Kubernetes 集群凭据:
az aks get-credentials --resource-group <resource-group-name> --name <kubernetes-cluster-name>
- 前面的命令会创建一个
~/.kube/config
文件,打开这个文件,你在GitLab"Add Kubernetes cluster"表单中要填写的字段内容都在这个.kube/config
里面文件
这些是字段:
- Kubernetes 集群名称: 这是您在 Azure 上的集群的名称,它也在
.kube/config
文件中。 - API URL: 就是
.kube/config
文件的server
字段中的URL。 - CA Certificate:是
.kube/config
文件的certificate-authority-data
字段,但是你需要进行base64解码。
解码后应该是这样的:
-----BEGIN CERTIFICATE-----
...
some base64 strings here
...
-----END CERTIFICATE-----
- Token:是
.kube/config
文件token
字段中的十六进制字符串(可能还需要base 64解码? ).您需要使用属于具有 cluster-admin 权限的帐户的令牌,因此 GitLab 可以使用它在集群上进行身份验证和安装。实现这一点的最简单方法是为 GitLab 创建一个新帐户:创建一个带有服务帐户定义的 YAML 文件(可以在 下的 here 中看到一个示例在默认命名空间中创建一个 gitlab 服务帐户) 并通过kubectl apply -f serviceaccount.yml
. 将其应用于您的集群
- 项目命名空间(可选,唯一):我把它留空,还不知道这个命名空间可以用于什么地方。
点击"Save"就完成了。您的 GitLab 项目现在必须连接到您的 Kubernetes 集群。
部署
在您的部署作业中(在管道中),您需要一些环境变量来使用 kubectl
命令访问您的集群,这里是所有可用变量的列表:
https://docs.gitlab.com/ee/user/project/clusters/index.html#deployment-variables
要在您的部署作业中注入这些变量,需要满足一些条件:
- 您必须已将 Kubernetes 集群正确添加到您的 GitLab 项目中,菜单 "Operations" > "Kubernetes" 以及我上面描述的这些步骤
- 您的作业必须是 "deployment job",在 GitLab CI 中,要被视为部署作业,您的作业定义(在您的
.gitlab-ci.yml
中)必须具有environment
键(看看这个 example 中的第 31 行),环境名称必须与您在菜单中使用的名称匹配 "Operations" > "Environments".
这里有一个 .gitlab-ci.yml 三个阶段的例子:
- 构建: 它构建一个 docker 图像并将其推送到 gitlab 私有注册表
- 测试:还没有做任何事情,只是放一个
exit 0
稍后更改 - 部署:下载稳定版
kubectl
,复制.kube/config
文件即可运行kubectl
命令并执行kubectl cluster-info
以确保其正常工作。在我的项目中,我没有完成编写部署脚本来真正执行部署。但是这个kubectl cluster-info
命令执行得很好。
提示:查看所有环境变量及其值(Jenkins 有一个包含此视图的页面,GitLab CI 没有)你可以在部署阶段的脚本中执行命令 env
。对调试工作有很大帮助。