gpt4 book ai didi

azure - 如何集成带有Azure Kubernetes + Kubectl + ACR的GitLab-Ci进行部署?

转载 作者:行者123 更新时间:2023-12-03 15:15:41 24 4
gpt4 key购买 nike

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博客)。现在,我们手动将更新后的容器推送到私有(private)ACR(Azure容器注册表),然后使用Kubectl从命令行进行更新。

话虽如此,我们以前使用Docker Cloud进行业务编排,并使用Gi​​tLab-Ci完全集成了重新部署生产/登台服务的过程。

GitLab-Ci集成是目标,也是此问题背后的“原因”。

我的问题

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

虽然我相信我们可以构建一个包含Kubectl和Azure CLI的容器(供我们的GitLab-Ci运行器使用),但我知道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重新部署服务,则您的想法特别有值(value)!

我正在审查的Kubernetes资源
  • How should I manage deployments with kubernetes
  • Kubernetes Deployments

  • 在我完成该过程时会更新。

    最佳答案

    创建整合

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

    如何整合它们:

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


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

  • 解码后,它必须是这样的:
    -----BEGIN CERTIFICATE-----
    ...
    some base64 strings here
    ...
    -----END CERTIFICATE-----
  • token :这是token文件的.kube/config字段中的十六进制字符的字符串(可能还需要以base 64解码吗?)。您需要使用属于具有 cluster-admin 特权的帐户的 token ,因此GitLab可以将其用于在群集上进行身份验证和安装。实现此目的最简单的方法是为GitLab创建一个新帐户:使用服务帐户定义创建一个YAML文件(可以在默认 namespace 中创建gitlab服务帐户下看到一个示例here),然后通过以下方式将其应用于您的集群的kubectl apply -f serviceaccount.yml
  • 项目 namespace (可选,唯一):我将其保留为空,尚不知道该 namespace 的用途或用途。

  • 单击“保存”,完成。您的GitLab项目必须现在已连接到Kubernetes集群。

    部署

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

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

    要在部署作业中注入(inject)这些变量,需要满足以下条件:
  • 您必须已将Kubernetes集群正确添加到GitLab项目,菜单“Operations”>“Kubernetes”以及我上面
  • 所述的这些步骤中
  • 在GitLab CI中,您的工作必须是“部署工作”,才能被视为部署工作,您的工作定义(在.gitlab-ci.yml中)必须具有environment键(请看此example中的第31行),并且环境名称必须与您在菜单“操作”>“环境”中使用的名称匹配。

  • 这是一个分三个阶段的 .gitlab-ci.yml的示例:
  • 构建:它构建一个docker镜像并将其推送到gitlab私有(private)注册表
  • 测试:它什么都没做,只需放置一个exit 0以后再更改它即可
  • 部署:下载稳定版本的kubectl,复制.kube/config文件以能够在集群中运行kubectl命令,并执行kubectl cluster-info以确保其正常工作。在我的项目中,我并未完成编写部署脚本以真正执行部署的工作。但是这个kubectl cluster-info命令执行得很好。

  • 提示:可以查看所有环境变量及其值(Jenkins的页面具有此 View ,而GitLab CI则没有),您可以在部署阶段的脚本中执行 env命令。调试工作很有帮助。

    关于azure - 如何集成带有Azure Kubernetes + Kubectl + ACR的GitLab-Ci进行部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50749095/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com