19

我们之前基于 GitLab 的 CI/CD 使用对特定 REST API 端点的经过身份验证的 curl 请求来触发将更新的容器重新部署到我们的服务,如果您对基于 Kubernetes 的部署使用类似的东西,这个问题适合您。

更多背景

我们在 Azure AKS 群集上运行生产站点/应用程序(基于 Ghost 博客)。现在,我们手动将更新的容器推送到私有 ACR(Azure 容器注册表),然后使用 Kubectl 从命令行进行更新。

话虽如此,我们之前使用 Docker Cloud 进行编排,并使用 GitLab-Ci 完全集成重新部署我们的生产/登台服务。

GitLab-Ci 集成是目标,也是这个问题背后的“为什么”。

我的问题

由于我们之前使用过 Docker Cloud(哦,应该从一开始就使用 K8s),我们应该如何处理 GitLab-Ci 能够利用 Secrets 创建 Docker Cloud CLI 然后使用 Docker Cloud API 进行身份验证以触发操作的事实在我们的节点上(即使用新容器重新部署等)。

虽然我相信我们可以构建一个包含 Kubectl 和 Azure CLI 的容器(供我们的 GitLab-Ci 运行程序使用),但我知道 Kubernetes 也有一个类似的(与 docker cloud)Rest API 可以在这里找到(https ://kubernetes.io/docs/tasks/access-application-cluster/access-cluster)——特别是关于在没有 Kubectl 的情况下进行连接的部分似乎是相关的(关于 HTTP REST API 的部分也是如此)。

我对连接到 Azure(或可能的其他托管 Kubernetes 服务)的任何人的问题:

您的 Ci/CD 服务器如何通过 Kubernetes 服务提供商的管理服务器进行身份验证,然后您当前如何触发更新/重新部署更新的容器/服务?

如果您使用 Kubernetes HTTP Rest API 重新部署服务,您的想法将特别有价值!

我正在审查的 Kubernetes 资源

  1. 我应该如何使用 Kubernetes 管理部署
  2. Kubernetes 部署

将在我完成整个过程时更新。

4

2 回答 2

52

创建集成

我在如何将 GitLab CI/CD 与我的 Azure AKS Kubernetes 集群集成时遇到了同样的问题。我创建了这个问题是因为我在尝试将 Kubernetes 线索信息添加到 GitLab 时遇到了一些错误。

如何整合它们:

  1. 在 GitLab 中,转到“操作”>“Kubernetes”菜单。
  2. 点击页面顶部的“添加 Kubernetes 集群”按钮
  3. 您必须填写一些表单字段,以获取必须放入这些字段的内容,使用az login命令从 CLI(您需要在 PC 上安装 Azure CLI)连接到您的 Azure 帐户,然后执行此其他命令获取 Kubernetes 集群凭据:az aks get-credentials --resource-group <resource-group-name> --name <kubernetes-cluster-name>
  4. 前面的命令会创建一个~/.kube/config文件,打开这个文件,GitLab“添加Kubernetes集群”表单中需要填写的字段内容都在这个.kube/config文件里面

这些是字段:

  1. Kubernetes 集群名称:它是您在 Azure 上的集群的名称,它也在.kube/config文件中。
  2. API URL:它是文件字段server中的URL。.kube/config
  3. CA 证书:certificate-authority-data这是文件的字段.kube/config,但您必须对其进行 base64 解码。

解码后,它必须是这样的:

-----BEGIN CERTIFICATE-----
...
some base64 strings here
...
-----END CERTIFICATE-----
  1. 令牌:token它是文件字段中的十六进制字符字符串.kube/config(它可能还需要进行 base 64 解码?)。您需要使用属于具有集群管理员权限的帐户的令牌,以便 GitLab 可以使用它在集群上进行身份验证和安装。实现这一点的最简单方法是为 GitLab 创建一个新帐户:使用服务帐户定义创建一个 YAML 文件(可以在此处默认命名空间中创建一个 gitlab 服务帐户下看到一个示例)并将其应用到您的集群中的kubectl apply -f serviceaccount.yml
  2. 项目命名空间(可选,唯一):我把它留空,还不知道这个命名空间可以用于什么或在哪里使用。

点击“保存”就完成了。您的 GitLab 项目现在必须连接到您的 Kubernetes 集群。

部署

在您的部署作业中(在管道中),您需要一些环境变量来使用kubectl命令访问您的集群,这里是所有可用变量的列表:

https://docs.gitlab.com/ee/user/project/clusters/index.html#deployment-variables

要在部署作业中注入这些变量,需要满足以下条件:

  • 您必须已将 Kubernetes 集群正确添加到您的 GitLab 项目中,菜单“操作”>“Kubernetes”以及我上面描述的这些步骤
  • 您的作业必须是“部署作业”,在 GitLab CI 中,才能被视为部署作业,您的作业定义(在您的 中.gitlab-ci.yml)必须有一个environment键(查看此示例中的第 31 行),并且环境名称必须匹配您在菜单“操作”>“环境”中使用的名称。

这是一个具有三个阶段的.gitlab-ci.yml示例:

  • 构建:它构建一个 docker 镜像并将其推送到 gitlab 私有注册表
  • 测试:它还没有做任何事情,只是放一个exit 0稍后改变它
  • 部署:下载稳定版本的kubectl,复制.kube/config文件以便能够kubectl在集群中运行命令并执行 akubectl cluster-info以确保其正常工作。在我的项目中,我没有完成编写部署脚本来真正执行部署。但是这个kubectl cluster-info命令执行得很好。

提示:要查看所有环境变量及其值(Jenkins 有一个带有此视图的页面,GitLab CI 没有),您可以env在部署阶段的脚本中执行命令。它对调试工作有很大帮助。

于 2018-06-09T20:35:36.513 回答
-2

我今天登录了我们的 GitLab-Ci 后端,看到了一个“Kubernetes”按钮——以及在 GCP 上节省 500 美元的提议。

使用 GitLab-Ci Kubernetes 在 GCP 上 500 美元

GitLab Kubernetes

点击你的 repo 的 Kubernetes GitLab 页面的 URL 是: https://gitlab.com/^your-repo^/clusters

在完成集成过程时,我将更新此答案(但也欢迎!)。

官方 GitLab Kubernetes 集成文档

https://docs.gitlab.com/ee/user/project/clusters/index.html

于 2018-06-07T20:17:48.403 回答