从 GitLab 托管应用迁移到集群管理项目(已弃用)
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
GitLab 托管应用在 GitLab 14.0 版本中被弃用, 转而采用用户控制的集群管理项目。 通过项目管理集群应用相比之前的 GitLab 托管应用, 能让你获得更大的灵活性来管理集群。 要迁移到集群管理项目,你需要 可用的 GitLab Runners 并熟悉 Helm。
迁移到集群管理项目
要从 GitLab 托管应用迁移到集群管理项目, 请按照以下步骤操作。 另请参阅带有示例的 视频教程。
-
基于 集群管理项目模板 创建新项目。
-
在你的集群中为该项目 安装 agent。
-
按照项目模板中的
.gitlab-ci.yml说明,将KUBE_CONTEXTCI/CD 变量设置为刚安装的 agent 的上下文。 -
使用预配置的
.gitlab-ci.yml文件检测通过 Helm v2 版本部署的应用:-
如果你曾覆盖了默认的 GitLab 托管应用命名空间,请编辑
.gitlab-ci.yml, 并确保脚本接收到正确的命名空间作为参数:script: - gl-fail-if-helm2-releases-exist <your_custom_namespace> -
如果你保留了默认名称(
gitlab-managed-apps),则脚本已经 设置好了。
无论哪种情况,手动运行流水线 并阅读
detect-helm2-releases任务的日志,以了解你是否有任何 Helm v2 版本以及它们是什么。 -
-
如果没有 Helm v2 版本,请跳过此步骤。否则,请遵循官方 Helm 文档 如何从 Helm v2 迁移到 Helm v3, 并在确认它们已成功迁移后清理 Helm v2 版本。
-
在这一步中,你应该只有 Helm v3 版本了。 从主要的
./helmfile.yaml中取消注释你想要 用此项目管理的应用程序路径。虽然你可以一次性取消注释所有想要管理的应用, 但你应该为每个应用分别重复以下步骤,这样在过程中不会迷失方向。 -
编辑关联的
applications/{app}/helmfiles.yaml以匹配为你的应用部署的 chart 版本。 以 GitLab Runner Helm v3 版本为例:以下命令列出版本及其版本信息:
helm ls -n gitlab-managed-apps NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION runner gitlab-managed-apps 1 2021-06-09 19:36:55.739141644 +0000 UTC deployed gitlab-runner-0.28.0 13.11.0从
CHART列中获取版本,格式为{release}-v{chart_version}, 然后编辑./applications/gitlab-runner/helmfile.yaml中的version:属性, 使其与你部署的版本匹配。这是一个安全步骤,可以避免在此迁移过程中升级版本。 如果你的应用部署在不同的命名空间中,请确保替换前一个命令中的gitlab-managed-apps。 -
编辑与你的应用关联的
applications/{app}/values.yaml以匹配 部署的值。例如,对于 GitLab Runner:-
复制以下命令的输出(可能会很大):
helm get values runner -n gitlab-managed-apps -a --output yaml -
用上一个命令的输出覆盖
applications/gitlab-runner/values.yaml。
这个安全步骤确保没有意外的默认值覆盖你部署的值。 例如,你的 GitLab Runner 可能会被意外覆盖其
gitlabUrl或runnerRegistrationToken。 -
-
某些应用需要特别关注:
-
Ingress:由于现有的 chart 问题,在尝试运行
./gl-helmfile命令时,你可能会看到spec.clusterIP: Invalid value。为了解决这个问题,在覆盖applications/ingress/values.yaml中的发布值后, 你可能需要覆盖所有omitClusterIP: false的出现,将其设置为omitClusterIP: true。 另一种方法是运行kubectl get services -n gitlab-managed-apps收集这些 IP, 然后用你从该命令获得的值覆盖每个它抱怨的ClusterIP。 -
Vault:这个应用从 Helm v2 中使用的 chart 到 Helm v3 中使用的 chart 引入了破坏性更改。 因此,将其与此集群管理项目集成的唯一方法是实际卸载此应用并接受
applications/vault/values.yaml中建议的 chart 版本。 -
Cert-manager:
-
对于 Kubernetes 1.20 或更高版本的用户,已弃用的 cert-manager v0.10 不再有效, 并且升级包含破坏性更改。因此,我们建议你 备份并卸载 cert-manager v0.10, 并安装最新的 cert-manager。要安装此版本,请从
./helmfile.yaml中 取消注释applications/cert-manager/helmfile.yaml。 这将触发一个流水线来安装新版本。 -
对于 Kubernetes 版本低于 1.20 的用户,你可以通过取消注释 项目主 Helmfile (
./helmfile.yaml) 中的applications/cert-manager-legacy/helmfile.yaml来坚持使用 v0.10。当 Kubernetes 升级到 1.20 或更高版本时,cert-manager v0.10 会损坏。
-
-
-
完成所有前面的步骤后,手动运行流水线 并查看
apply任务的日志,以查看你的应用程序是否被成功检测、安装,以及是否有任何 意外的更新。预期一些注释校验和会被更新,以及这个属性:
--- heritage: Tiller +++ heritage: Tiller
获得成功的流水线后,对于任何其他想要用集群管理项目管理的已部署应用, 重复这些步骤。
备份并卸载 cert-manager v0.10
- 遵循 官方文档 了解如何 备份你的 cert-manager v0.10 数据。
- 通过编辑
applications/cert-manager/helmfile.yaml文件中所有installed: true出现的位置, 将其更改为installed: false来卸载 cert-manager。 - 通过执行以下命令搜索任何剩余的资源:
kubectl get Issuers,ClusterIssuers,Certificates,CertificateRequests,Orders,Challenges,Secrets,ConfigMaps -n gitlab-managed-apps | grep certmanager。 - 对于在上一步中找到的每个资源,使用
kubectl delete -n gitlab-managed-apps {ResourceType} {ResourceName}删除它们。 例如,如果你找到一个名为cert-manager-controller的ConfigMap类型的资源,通过执行以下命令删除它:kubectl delete configmap -n gitlab-managed-apps cert-manager-controller。
视频教程
你可以观看这些视频,了解如何从 GMA 迁移到集群管理项目的示例:
- 使用全新的集群管理项目从头开始迁移。还涵盖了 Helm v2 应用迁移。
- 从现有的 GitLab 托管应用 CI/CD 项目迁移。