阅读本文的其他语言版本:English。
本项目展示,如何将一个常见的多组件工作负载(在本例中是 GitLab)部署到 Kubernetes 集群上。GitLab 因其基于 Git 的代码跟踪工具而流行。GitLab 代表着一种典型的多层应用程序,每个组件都拥有自己的容器。微服务容器将用于 Web 层,状态/作业数据库使用 Redis 和 PostgreSQL 作为数据库。
通过使用不同的 GitLab 组件(NGINX、Ruby on Rails、Redis、PostgreSQL 等),可以将它部署到 Kubernetes 上。也可以使用 Bluemix 中的 Compose for PostgreSQL 作为数据库来部署这个示例。
1.用户通过 Web 接口或通过将代码推送到 GitHub 存储库来与 GitLab 交互。GitLab 容器运行 NGINX 和 gitlab-workhorse 背后的主要 Ruby on Rails 应用程序,gitlab-workhorse 是一个针对大型 HTTP 请求的逆向代理,比如文件下载和 Git 推送/拉取请求。在通过 HTTP/HTTPS 提供存储库时,GitLab 利用 GitLab API 来解决授权和访问,并提供 Git 对象。
2.经过身份验证和授权后,GitLab Rails 应用程序将传入的作业、作业信息和元数据放在 Redis 作业队列上,该作业队列充当着一个非持久数据库。
3.存储库创建于本地文件系统中。
4.用户创建用户、角色、合并请求、组等信息 - 所有这些信息然后存储在 PostgreSQL 中。
5.用户运行 Git shell 来访问存储库。
- GitLab
- PostgreSQL
- Redis
- Kubernetes Clusters
- IBM Cloud Container Service
- IBM Cloud Compose for PostgreSQL
这个场景提供以下任务的操作说明和经验:
- 构建容器并将它们存储在容器注册表中
- 使用 Kubernetes 创建本地持久卷来定义持久磁盘
- 使用 Kubernetes pod 和服务部署容器
- 在 Kubernetes 应用程序中使用 IBM Cloud 服务
- 将一个分布式 GitLab 部署到 Kubernetes 上
如果希望将此 Gitlab 安装在 IBM Cloud Private 上,使用 Deploying Gitlab to IBM Cloud Private ,否则按照以下说明执行。
使用 Minikube 创建一个 Kubernetes 集群用于测试,或者使用 IBM Cloud Container Service 创建一个 Kubernetes 集群以部署到云中。这里的代码会定期使用 Travis 针对来自 IBM Cloud Container Service 的 Kubernetes 集群 进行测试。
如果想使用 IBM Cloud Container Registry,首先需要将映像上传 到 IBM Cloud Container Registry。
如果想将 Gitlab 直接部署到 IBM Cloud,可单击下面的 Deploy to IBM Cloud 按钮,创建一个 IBM Cloud DevOps 服务工具链和管道 来部署 Gitlab 示例,否则可跳到步骤
请按照工具链操作说明 完成您的工具链和管道。
-
1.1 在容器中使用 PostgreSQL 或
3.GitLab 已准备就绪!使用 GitLab 托管您的存储库
运行 kubectl
命令确保您的 Kubernetes 集群可供访问。
$ kubectl get nodes
NAME STATUS AGE VERSION
x.x.x.x Ready 17h v1.5.3-2+be7137fd3ad68f
备注:如果这一步失败,请参阅 Minikube 或 IBM Cloud Container Service 上的故障排除文档。
如果使用容器映像来运行 PostgreSQL,可对您的 Kubernetes 集群运行以下命令或运行快速入门脚本 bash quickstart.sh
。
$ kubectl create -f kubernetes/local-volumes.yaml
$ kubectl create -f kubernetes/postgres.yaml
$ kubectl create -f kubernetes/redis.yaml
$ kubectl create -f kubernetes/gitlab.yaml
创建所有这些服务和部署后,等待 3 到 5 分钟。可以在 Kubernetes UI 上检查部署状态。运行 kubectl proxy 并访问 URL 'http://127.0.0.1:8001/ui ',以检查 GitLab 容器何时准备就绪。
使用 IBM Cloud 目录或 bx 命令创建 Compose for PostgreSQL 的一个服务实例,并添加一组凭证。
$ bx service create compose-for-postgresql Standard "Compose for PostgreSQL-GL"
$ bx service key-create "Compose for PostgreSQL-GL" Credentials-1
从 IBM Cloud 上的该服务的凭证对象获取连接字符串。
$ bx service key-show "Compose for PostgreSQL-GL" "Credentials-1" | grep "postgres:"
修改您的 kubernetes/gitlab-postgres-svc.yaml
文件,将 COMPOSE_PG_PASSWORD 替换为密码,COMPOSE_PG_HOST 替换为主机名,COMPOSE_PG_PORT 替换为端口。
使用上面的示例后,env:
节将类似于下面的清单。
env:
- name: GITLAB_OMNIBUS_CONFIG
value: |
postgresql['enable'] = false
gitlab_rails['db_username'] = "admin"
gitlab_rails['db_password'] = "ETIDRKCGOEIGBMZA"
gitlab_rails['db_host'] = "bluemix-sandbox-dal-9-portal.6.dblayer.com"
gitlab_rails['db_port'] = "26576"
gitlab_rails['db_database'] = "compose"
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
redis['enable'] = false
gitlab_rails['redis_host'] = 'redis'
gitlab_rails['redis_port'] = '6379'
gitlab_rails['gitlab_shell_ssh_port'] = 30022
external_url 'http://gitlab.example.com:30080'
对您的 Kubernetes 集群运行以下命令或运行快速入门脚本 bash quickstart-postgres-svc.sh
。
$ kubectl create -f kubernetes/local-volumes.yaml
$ kubectl create -f kubernetes/redis.yaml
$ kubectl create -f kubernetes/gitlab-postgres-svc.yaml
创建所有这些服务和部署后,等待 3 到 5 分钟。可以在 Kubernetes UI 上检查部署状态。运行 kubectl proxy 并访问 URL 'http://127.0.0.1:8001/ui ',以检查 GitLab 容器何时准备就绪。
几分钟后,运行以下命令来获取您的公共 IP 和 NodePort 编号。
$ $ bx cs workers <cluster_name>
OK
ID Public IP Private IP Machine Type State Status
kube-hou02-pa817264f1244245d38c4de72fffd527ca-w1 169.47.241.22 10.10.10.148 free normal Ready
$ kubectl get svc gitlab
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gitlab 10.10.10.148 <nodes> 80:30080/TCP,22:30022/TCP 2s
备注:30080 端口用于 gitlab UI,30022 端口用于 ssh。
备注:gitlab 外部 URL 设置为
gitlab.example.com
,将此 URL 添加到指向上面的 IP 地址的 hosts 文件中,以便使用 gitlab 期望的 URL。如果不能这么做,使用该 IP(在本例中为 169.47.241.22)应该没问题。
备注:如果使用 Minikube 执行本地 Kubernetes 部署,可以使用
minikube service list
命令访问服务 IP 列表。
恭喜您。现在可以从 Web 浏览器使用链接 http://gitlab.example.com:30080 或 http://<node_ip>:30080 访问您的 gitlab 服务了。
Gitlab 运行后,您可以注册为新用户并创建一个项目。
如果一个 pod 未启动,请检查日志。
kubectl get pods
kubectl logs <pod name>
要删除所有服务、部署和持久卷声明,可运行
kubectl delete deployment,service,pvc -l app=gitlab
要删除持久卷,可运行
kubectl delete pv local-volume-1 local-volume-2 local-volume-3
要删除您的 PostgreSQL 凭证并从 IBM Cloud 删除服务实例,可运行
bx service key-delete "Compose for PostgreSQL-GL" Credentials-1
bx service delete "Compose for PostgreSQL-GL"