Self-Hosted 的 GitLab 中可以集成 Kubernetes,但是官方只提供了 Amazon AWS 和 Google Cloud 的一键部署按钮,没有提供 Microsoft Azure 的一键集成。

因为正好 Azure 还有一些额度,所以研究了一下怎么把 GitLab 连接到 Azure Kubernetes Serveice (AKS) 上。

首先登录 Azure 控制台,确保自己有一个有效的资源组,例如我这里创建了一个名字叫 gitlab-k8s 的资源组,这一步也可以在命令行完成,只不过因为我已经提前创建过了,所以这里补一张图。

接下来进入 Azure Cloud Shell。如果是在非网页版终端上的话就先用 az login 登录,你可能需要先安装 Azure Cloud Shell 的相关工具。

第一步要创建的是基于角色的访问控制(RBAC),启用这个选项可以使 GitLab 在启用 RBAC 的群集上安装应用程序,执行:

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

这个命令会创建一些配置,并允许访问 Azure 的资源。

然后创建 Kubernetes 集群,命令是:

az aks create --resource-group <资源组的名字> --name <集群的名字> --node-count <结点的数量> --generate-ssh-keys

这里资源组的名字换成刚才创建的资源组的名字,集群的名字自己取一个,结点的数量根据自己的情况(以及费用)决定。我把名字命名成 `gitlab-k8s 并决定使用 3 个结点,那么这个命令就是:

az aks create --resource-group gitlab-k8s --name gitlab-k8s --node-count 3 --generate-ssh-keys

这个命令很花时间,耐心等待。

然后执行下面这个命令,集群和资源组的名字同上。

az aks get-credentials -n <集群的名字> -g <资源组的名字>

这时候基本上已经完成了 Azure 上 Kubernetes 的配置了,要把这个服务集成到 GitLab 中。

首先在 GitLab 中填写集群名称,集群名称就是上面 <集群的名字>

环境范围默认是 *,可以根据自己需要修改。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fb6ofFvg-1615627035654)(https://img.jxtxzzw.com/2021/03/13/r1472j.png)]

通过 kubectl 查看 secret 是什么,运行:

kubectl get secrets

记下形如 default-token-<随机字符串> 的内容,然后运行:

kubectl get secrets default-token-<随机字符串> -o jsonpath="{['data']['ca\.crt']}" | base64 --decode

运行之后会输出一段 CA 证书,复制全部,保存到一边,后面会需要填写到 GitLab 的 CA 证书中,以便 GitLab 能够连接到 Kubernetes 集群。这段 CA 证书类似于:

-----BEGIN CERTIFICATE-----
MIIE6DCCAtCgAwIBAgIQLYDJG1C9ElHhMT43OppC/DANBgkqhkiG9w0BAQsFADAN
.......
.......
-----END CERTIFICATE-----

填写到 GitLab 配置中的这个位置:

然后创建一个名为 gitlab-admin-service-account.yaml 的文件,内容是:

apiVersion: v1
kind: ServiceAccount
metadata:name: gitlab-adminnamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: gitlab-admin
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:- kind: ServiceAccountname: gitlab-adminnamespace: kube-system

以及一个 gitlab-admin-cluster-role-binding.yaml 的文件,内容是:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: gitlab-admin
subjects:- kind: ServiceAccountname: gitlab-adminnamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: gitlab-managed-apps-admin
subjects:- kind: ServiceAccountname: defaultnamespace: gitlab-managed-apps
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin

运行这两个服务,以确保 GitLab 能够获得访问集群的权限。

kubectl apply -f ./gitlab-admin-service-account.yaml
kubectl apply -f ./gitlab-admin-cluster-role-binding.yaml

等待服务运行,然后为 GitLab 生成服务令牌:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g94bMpsX-1615627035662)(https://img.jxtxzzw.com/2021/03/13/r52prw.png)]

复制 token: 后面这一段文本,即 eyJh 开头的那一段,填写到 GitLab 配置中的服务令牌处。

最后,让我们测试一下集群,并从仪表盘访问这个集群。首先我们需要创建一个角色。

kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

然后可以在 Azure 控制台选择 Kubernetes 进入仪表盘进行一些测试,顺便复制 API 地址。

你可以在网页版登录 Azure 控制台选择 Kubernetes。

也可以在命令行输入下面这个命令,在完成身份校验后,控制台会输出一个访问地址,点击地址也可以访问仪表盘(你可能需要登录)。

az aks browse --resource-group <资源组的名字> --name <集群的名字>

进入仪表盘之后你可以检查一些设置项,然后记录下 API 地址,填写到 GitLab 的配置中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WNyu7z2Y-1615627035673)(https://img.jxtxzzw.com/2021/03/13/rael59.png)]

其余选项保留默认就好,你可以根据自己的需要修改。我们需要打开 RBAC。

这里还有一个大坑。

有时候 GitLab 会遇到权限问题 (Permission Errors),为了修复这些权限问题,在 Azure 控制台执行:

kubectl create clusterrolebinding permissive-binding \--clusterrole=cluster-admin \--user=admin \--user=kubelet \--group=system:serviceaccounts

大功告成,点击添加 Kubernetes 集群。

添加集群之后就可以在 GitLab 中管理。

进入集群,选择“应用”选项卡,安装一些你需要的应用。

例如 Ingress 和 Cert-Manager 可以自动处理路由和 SSL 证书,推荐安装,但个人使用的话,不要也可以。

Prometheus 监控服务也可以装,不过 GitLab 私有化部署的实例默认有单机 Prometheus 来监控 GitLab 的运行情况,所以不安装问题也不大。

GitLab Runner 是铁定要安装的了,不然费这么大劲来玩 Kubernetes 是为了啥。

JupyterHub 也是一键安装的,像这里的 Jupyter Notebook 这些应用都是使用 GitLab 统一身份认证的。

那么,使用愉快。

参考文献:

https://kubernetes.io/docs/reference/access-authn-authz/rbac/

https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/

https://stackoverflow.com/questions/50749095/how-to-integrate-gitlab-ci-w-azure-kubernetes-kubectl-acr-for-deployments

https://medium.com/@jonathanjfshaw/connecting-gitlab-to-your-azure-kubernetes-cluster-cefcaeb54c1f

https://makinhs.medium.com/azure-kubernetes-aks-gitlab-ci-a-short-guide-to-integrate-it-e62a4df5c86a

https://docs.gitlab.com/ee/user/project/clusters/#adding-an-existing-kubernetes-cluster

在GitLab中集成Azure Kubernetes相关推荐

  1. 【GitLab和Jira集成】GitLab中集成Jira

    GitLab和Jira集成 Gitlab官方文档 起因 GitLab配置 前提要求 配置过程 使用测试 提交代码自动在对应jira issue下评论 通过Gitlab查看Jira相关issue Git ...

  2. 使用Docker和Azure Kubernetes服务将ASP.NET核心应用程序容器化

    目录 介绍 应用概述 容器化ASP.NET核心应用程序 部署在本地Kubernetes集群上 Docker镜像和Azure容器注册表(ACR) 部署Azure Kubernetes服务(AKS)群集 ...

  3. ASP.NET Core在Azure Kubernetes Service中的部署和管理

    目标 部署:掌握将aspnetcore程序成功发布到Azure Kubernetes Service(AKS)上 管理:掌握将AKS上的aspnetcore程序扩容.更新版本 准备工作 注册 Azur ...

  4. 如何在Intellij IDEA中集成Gitlab

    如何在Intellij IDEA中集成Gitlab 2018年06月11日 16:05:14 葬月魔帝 阅读数:9747 据说在微软收购github当天,一大批用户纷纷转向了gitlab和bitbuc ...

  5. GitLab持续集成在商用项目中的应用实践

    两年前在开始一个新的商业项目时我花了两个星期时间在项目开发流程中应用上了持续集成,随后一年又随着项目的发展和商用化做了很多改进.所以掌握了GitLab 持续集成这套方案在商业软件中完整的落地实践经验. ...

  6. 微软发布多项Azure Kubernetes服务更新,增加GPU支持

    微软宣布对他们托管的Azure Kubernetes服务进行多项更新.更新公告中包括AKS虚拟节点的特性更新.对Azure容器实例的GPU支持以及将Virtual Kubelet项目捐赠给原生云计算基 ...

  7. 从零入门 Serverless | 教你 7 步快速构建 GitLab 持续集成环境

    作者 | 存诚 阿里云弹性计算团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...

  8. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(三

    在上文ASP.NET Core应用程序容器化.持续集成与Kubernetes集群部署(二)中,我介绍了如何使用Azure DevOps为ASP.NET Core应用程序案例:tasklist搭建持续集 ...

  9. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)

    在上文中我介绍了ASP.NET Core应用程序容器化时需要注意的几个问题,并给出了一个案例应用程序:tasklist.今天接着上文的内容,继续了解一下如何使用Azure DevOps进行ASP.NE ...

最新文章

  1. 发改委:互联网企业没有出现大规模裁员现象
  2. 添加本地图层出现要求cross domain policy的错误
  3. python手机版安卓-当python遇到Android手机 那么,万物皆可盘
  4. JQuery中each()的使用方法说明
  5. 1491. [NOI2007]社交网络【最短路计数】
  6. 数据库中敏感字段的标记、标示
  7. error loading python dll_Error loading Python DLL python36.dll 的解决办法 及其他pyinstaller问题...
  8. c# 全局钩子实现扫码枪获取信息。
  9. Go基础-Go中的import
  10. T3M1手持宽带自组网电台室内TCP灌包测试
  11. libusb读取鼠标数据
  12. SEO优化怎么做,怎么做SEO优化
  13. 安卓开发中的一些经验总结
  14. python用于cad_使用Python读取AutoCAD DXF文档
  15. Nature子刊:灵活的语音皮质编码可增强与任务相关的声学信息的神经处理
  16. vue改变class内的属性_vue绑定html的class属性的方法
  17. Spring boot——Actuator 详解
  18. Phython做小鸟飞行游戏
  19. jquery 关于checked属性的添加与移除(解决.attr('checked',true)失效问题)
  20. cad转化为jpg图片,教大家几个转换方法

热门文章

  1. 涂子沛:数据正在引领高清晰社会,重塑文明
  2. Wpf应用程序进入全屏和退出全屏
  3. Android开发之语音识别,Android开发知识体系
  4. 你真的熟悉8051单片机的引脚功能及其使用吗?
  5. 台州银行信息科技部笔试与面试经验总结
  6. 铁电存储器 - Ferroelectric Random Access Memory(FRAM)
  7. 分类Classification:决策树Decision Tree
  8. matlab如何与ccs关联,CCS与Matlab
  9. 深度强化学习面试问题集锦
  10. java爬虫框架哪个好_java爬虫框架的使用