{"id":14483485,"url":"https://github.com/IBM/Kubernetes-container-service-GitLab-sample","last_synced_at":"2025-08-30T04:30:58.469Z","repository":{"id":66065030,"uuid":"86095045","full_name":"IBM/Kubernetes-container-service-GitLab-sample","owner":"IBM","description":"This code shows how a common multi-component GitLab can be deployed on Kubernetes cluster. Each component (NGINX, Ruby on Rails, Redis, PostgreSQL, and more) runs in a separate container or group of containers.","archived":true,"fork":false,"pushed_at":"2019-05-14T13:16:53.000Z","size":1896,"stargazers_count":245,"open_issues_count":6,"forks_count":162,"subscribers_count":40,"default_branch":"master","last_synced_at":"2024-07-29T15:37:48.647Z","etag":null,"topics":["bluemix","containers","gitlab","ibm-developer-technology-cloud","ibmcode","kubernetes"],"latest_commit_sha":null,"homepage":"https://developer.ibm.com/code/patterns/run-gitlab-kubernetes","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IBM.png","metadata":{"files":{"readme":"README-cn.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-03-24T17:40:15.000Z","updated_at":"2024-07-18T20:02:43.000Z","dependencies_parsed_at":"2023-02-20T19:00:58.671Z","dependency_job_id":null,"html_url":"https://github.com/IBM/Kubernetes-container-service-GitLab-sample","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2FKubernetes-container-service-GitLab-sample","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2FKubernetes-container-service-GitLab-sample/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2FKubernetes-container-service-GitLab-sample/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2FKubernetes-container-service-GitLab-sample/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IBM","download_url":"https://codeload.github.com/IBM/Kubernetes-container-service-GitLab-sample/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":217593012,"owners_count":16201561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bluemix","containers","gitlab","ibm-developer-technology-cloud","ibmcode","kubernetes"],"created_at":"2024-09-03T00:01:48.309Z","updated_at":"2024-09-03T00:05:58.696Z","avatar_url":"https://github.com/IBM.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"[![构建状态](https://travis-ci.org/IBM/Kubernetes-container-service-GitLab-sample.svg?branch=master)](https://travis-ci.org/IBM/Kubernetes-container-service-GitLab-sample)\r\n\r\n# 将 GitLab 部署到 Kubernetes 集群上\r\n\r\n*阅读本文的其他语言版本：[English](README.md)。*\r\n\r\n本项目展示，如何将一个常见的多组件工作负载（在本例中是 GitLab）部署到 Kubernetes 集群上。GitLab 因其基于 Git 的代码跟踪工具而流行。GitLab 代表着一种典型的多层应用程序，每个组件都拥有自己的容器。微服务容器将用于 Web 层，状态/作业数据库使用 Redis 和 PostgreSQL 作为数据库。\r\n\r\n通过使用不同的 GitLab 组件（NGINX、Ruby on Rails、Redis、PostgreSQL 等），可以将它部署到 Kubernetes 上。也可以使用 Bluemix 中的 Compose for PostgreSQL 作为数据库来部署这个示例。\r\n\r\n![流](images/gitlab_container_2.png)\r\n\r\n1.用户通过 Web 接口或通过将代码推送到 GitHub 存储库来与 GitLab 交互。GitLab 容器运行 NGINX 和 gitlab-workhorse 背后的主要 Ruby on Rails 应用程序，gitlab-workhorse 是一个针对大型 HTTP 请求的逆向代理，比如文件下载和 Git 推送/拉取请求。在通过 HTTP/HTTPS 提供存储库时，GitLab 利用 GitLab API 来解决授权和访问，并提供 Git 对象。\r\n\r\n2.经过身份验证和授权后，GitLab Rails 应用程序将传入的作业、作业信息和元数据放在 Redis 作业队列上，该作业队列充当着一个非持久数据库。\r\n\r\n3.存储库创建于本地文件系统中。\r\n\r\n4.用户创建用户、角色、合并请求、组等信息 - 所有这些信息然后存储在 PostgreSQL 中。\r\n\r\n5.用户运行 Git shell 来访问存储库。\r\n\r\n## 包含的组件\r\n- [GitLab](https://about.gitlab.com/)\r\n- [PostgreSQL](https://www.postgresql.org/)\r\n- [Redis](https://redis.io/)\r\n- [Kubernetes Clusters](https://console.ng.bluemix.net/docs/containers/cs_ov.html#cs_ov)\r\n- [IBM Cloud Container Service](https://console.ng.bluemix.net/catalog/?taxonomyNavigation=apps\u0026category=containers)\r\n- [IBM Cloud Compose for PostgreSQL](https://console.ng.bluemix.net/catalog/services/compose-for-postgresql)\r\n\r\n## 目标\r\n这个场景提供以下任务的操作说明和经验：\r\n\r\n- 构建容器并将它们存储在容器注册表中\r\n- 使用 Kubernetes 创建本地持久卷来定义持久磁盘\r\n- 使用 Kubernetes pod 和服务部署容器\r\n- 在 Kubernetes 应用程序中使用 IBM Cloud 服务\r\n- 将一个分布式 GitLab 部署到 Kubernetes 上\r\n\r\n## 部署场景\r\n\r\n### 使用 Docker 部署\r\n\r\n参阅[使用 Docker 部署 Gitlab](docs/deploy-with-docker.md)\r\n\r\n### 部署到 Kubernetes\r\n\r\n如果希望将此 Gitlab 安装在 IBM Cloud Private 上，使用 [Deploying Gitlab to IBM Cloud Private](docs/deploy-with-ICP.md) ，否则按照以下说明执行。\r\n\r\n使用 [Minikube](https://kubernetes.io/docs/getting-started-guides/minikube) 创建一个 Kubernetes 集群用于测试，或者使用 [IBM Cloud Container Service](https://github.com/IBM/container-journey-template#container-journey-template---creating-a-kubernetes-cluster) 创建一个 Kubernetes 集群以部署到云中。这里的代码会定期使用 Travis 针对[来自 IBM Cloud Container Service 的 Kubernetes 集群](https://console.ng.bluemix.net/docs/containers/cs_ov.html#cs_ov) 进行测试。\r\n\r\n如果想使用 IBM Cloud Container Registry，首先需要[将映像上传](docs/use-bluemix-container-registry) 到 IBM Cloud Container Registry。\r\n\r\n### 使用 DevOps Toolchain 从 IBM Cloud Container Service 部署到 Kubernetes 集群\r\n如果想将 Gitlab 直接部署到 IBM Cloud，可单击下面的 Deploy to IBM Cloud 按钮，创建一个 [IBM Cloud DevOps 服务工具链和管道](https://console.ng.bluemix.net/docs/services/ContinuousDelivery/toolchains_about.html#toolchains_about) 来部署 Gitlab 示例，否则可跳到[步骤](#steps)\r\n\r\n[![创建工具链](https://github.com/IBM/container-journey-template/blob/master/images/button.png)](https://console.ng.bluemix.net/devops/setup/deploy/)\r\n\r\n请按照[工具链操作说明](https://github.com/IBM/container-journey-template/blob/master/Toolchain_Instructions_new.md) 完成您的工具链和管道。\r\n\r\n#### 步骤\r\n\r\n1.[使用 Kubernetes 创建服务和部署](#1-use-kubernetes-to-create-services-and-deployments-for-gitlab-redis-and-postgresql)\r\n\r\n  - 1.1 [在容器中使用 PostgreSQL](#11-use-postgresql-in-container) 或\r\n  \r\n  - 1.2 [使用来自 IBM Cloud 的 PostgreSQL](#12-use-postgresql-from-bluemix)\r\n  \r\n2.[获取用于 GitLab 的外部 IP 和端口](#2-retrieve-external-ip-and-port-for-gitlab)\r\n\r\n3.[GitLab 已准备就绪！使用 GitLab 托管您的存储库](#3-gitlab-is-ready-use-gitlab-to-host-your-repositories)\r\n\r\n\r\n#### 1.使用 Kubernetes 为 GitLab、Redis 和 PostgreSQL 创建服务并执行部署\r\n\r\n运行 `kubectl` 命令确保您的 Kubernetes 集群可供访问。  \r\n\r\n```bash\r\n$ kubectl get nodes\r\nNAME             STATUS    AGE       VERSION\r\nx.x.x.x          Ready     17h       v1.5.3-2+be7137fd3ad68f\r\n```\r\n\r\n\u003e 备注：如果这一步失败，请参阅 [Minikube](https://kubernetes.io/docs/getting-started-guides/minikube) 或 [IBM Cloud Container Service](https://console.ng.bluemix.net/docs/containers/cs_troubleshoot.html#cs_troubleshoot) 上的故障排除文档。\r\n\r\n##### 1.1 在容器中使用 PostgreSQL\r\n\r\n如果使用容器映像来运行 PostgreSQL，可对您的 Kubernetes 集群运行以下命令或运行快速入门脚本 `bash quickstart.sh`。\r\n\r\n```bash\r\n$ kubectl create -f kubernetes/local-volumes.yaml\r\n$ kubectl create -f kubernetes/postgres.yaml\r\n$ kubectl create -f kubernetes/redis.yaml\r\n$ kubectl create -f kubernetes/gitlab.yaml\r\n```\r\n\r\n创建所有这些服务和部署后，等待 3 到 5 分钟。可以在 Kubernetes UI 上检查部署状态。运行 kubectl proxy 并访问 URL 'http://127.0.0.1:8001/ui  '，以检查 GitLab 容器何时准备就绪。\r\n\r\n![Kubernetes 状态页面](images/kube_ui.png)\r\n\r\n接下来[获取用于 GitLab 的外部 IP 和端口](#2-retrieve-external-ip-and-port-for-GitLab)\r\n\r\n##### 1.2 使用来自 IBM Cloud 的 PostgreSQL\r\n\r\n使用 IBM Cloud 目录或 bx 命令创建 Compose for PostgreSQL 的一个服务实例，并添加一组凭证。\r\n\r\n```bash\r\n$ bx service create compose-for-postgresql Standard \"Compose for PostgreSQL-GL\"\r\n$ bx service key-create \"Compose for PostgreSQL-GL\" Credentials-1\r\n```\r\n\r\n从 IBM Cloud 上的该服务的凭证对象获取连接字符串。\r\n\r\n```bash\r\n$ bx service key-show \"Compose for PostgreSQL-GL\" \"Credentials-1\" | grep \"postgres:\"\r\n```\r\n\r\n![Postgres 连接字符串示例](images/pg_credentials.png)\r\n\r\n修改您的 ```kubernetes/gitlab-postgres-svc.yaml ``` 文件，将 COMPOSE_PG_PASSWORD 替换为密码，COMPOSE_PG_HOST 替换为主机名，COMPOSE_PG_PORT 替换为端口。 \r\n\r\n使用上面的示例后，```env:``` 节将类似于下面的清单。\r\n\r\n```yaml\r\n  env:\r\n  - name: GITLAB_OMNIBUS_CONFIG\r\n  value: |\r\n      postgresql['enable'] = false\r\n      gitlab_rails['db_username'] = \"admin\"\r\n      gitlab_rails['db_password'] = \"ETIDRKCGOEIGBMZA\"\r\n      gitlab_rails['db_host'] = \"bluemix-sandbox-dal-9-portal.6.dblayer.com\"\r\n      gitlab_rails['db_port'] = \"26576\"\r\n      gitlab_rails['db_database'] = \"compose\"\r\n      gitlab_rails['db_adapter'] = 'postgresql'\r\n      gitlab_rails['db_encoding'] = 'utf8'\r\n      redis['enable'] = false\r\n      gitlab_rails['redis_host'] = 'redis'\r\n      gitlab_rails['redis_port'] = '6379'\r\n      gitlab_rails['gitlab_shell_ssh_port'] = 30022\r\n      external_url 'http://gitlab.example.com:30080'\r\n\r\n```\r\n\r\n\r\n对您的 Kubernetes 集群运行以下命令或运行快速入门脚本 `bash quickstart-postgres-svc.sh`。\r\n\r\n```bash\r\n$ kubectl create -f kubernetes/local-volumes.yaml\r\n$ kubectl create -f kubernetes/redis.yaml\r\n$ kubectl create -f kubernetes/gitlab-postgres-svc.yaml\r\n```\r\n\r\n创建所有这些服务和部署后，等待 3 到 5 分钟。可以在 Kubernetes UI 上检查部署状态。运行 kubectl proxy 并访问 URL 'http://127.0.0.1:8001/ui '，以检查 GitLab 容器何时准备就绪。\r\n\r\n![Kubernetes 状态页面](images/kube_ui_gr.png)\r\n\r\n### 2.获取用于 GitLab 的外部 IP 和端口\r\n\r\n几分钟后，运行以下命令来获取您的公共 IP 和 NodePort 编号。\r\n\r\n```bash\r\n$ $ bx cs workers \u003ccluster_name\u003e\r\nOK\r\nID                                                 Public IP       Private IP     Machine Type   State    Status   \r\nkube-hou02-pa817264f1244245d38c4de72fffd527ca-w1   169.47.241.22   10.10.10.148   free           normal   Ready \r\n$ kubectl get svc gitlab\r\nNAME      CLUSTER-IP     EXTERNAL-IP   PORT(S)                     AGE\r\ngitlab    10.10.10.148   \u003cnodes\u003e       80:30080/TCP,22:30022/TCP   2s\r\n```\r\n\r\n\u003e 备注：30080 端口用于 gitlab UI，30022 端口用于 ssh。\r\n\r\n\u003e 备注：gitlab 外部 URL 设置为 `gitlab.example.com`，将此 URL 添加到指向上面的 IP 地址的 hosts 文件中，以便使用 gitlab 期望的 URL。如果不能这么做，使用该 IP（在本例中为 169.47.241.22）应该没问题。\r\n\r\n\u003e 备注：如果使用 Minikube 执行本地 Kubernetes 部署，可以使用 `minikube service list` 命令访问服务 IP 列表。\r\n\r\n恭喜您。现在可以从 Web 浏览器使用链接 [http://gitlab.example.com:30080](http://gitlab.example.com:30080) 或 http://\u003cnode_ip\u003e:30080 访问您的 gitlab 服务了。\r\n\r\n### 3.GitLab 已准备就绪！使用 GitLab 托管您的存储库\r\n\r\nGitlab 运行后，您可以[注册为新用户并创建一个项目](docs/using-gitlab.md)。\r\n\r\n### 故障排除\r\n\r\n如果一个 pod 未启动，请检查日志。\r\n```bash\r\nkubectl get pods\r\nkubectl logs \u003cpod name\u003e\r\n```\r\n\r\n### 清理\r\n\r\n要删除所有服务、部署和持久卷声明，可运行\r\n\r\n```bash\r\nkubectl delete deployment,service,pvc -l app=gitlab\r\n```\r\n\r\n要删除持久卷，可运行\r\n\r\n```bash\r\nkubectl delete pv local-volume-1 local-volume-2 local-volume-3\r\n```\r\n\r\n要删除您的 PostgreSQL 凭证并从 IBM Cloud 删除服务实例，可运行\r\n\r\n```bash\r\nbx service key-delete \"Compose for PostgreSQL-GL\" Credentials-1\r\nbx service delete \"Compose for PostgreSQL-GL\"\r\n```\r\n\r\n# 许可证\r\n[Apache 2.0](LICENSE)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIBM%2FKubernetes-container-service-GitLab-sample","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FIBM%2FKubernetes-container-service-GitLab-sample","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIBM%2FKubernetes-container-service-GitLab-sample/lists"}