GitLab(https://about.gitlab.com/)是一個用於git項目託管的開源平臺。GitLab採用Git做爲版本管理系統,與Github能夠聯合使用,是分佈式、大規模代碼構建的理想工具。html
GitLab能夠直接部署在Kubernetes集羣之中,從而與Jenkins-X、Harbor、Kubernetes 造成完整的代碼管理、版本控制、自動構建、自動測試、鏡像倉庫、灰度發佈、動態調度、運維管理的「從搖籃到墳墓」的軟件生命週期支持平臺。nginx
GitLab功能相似於Github.com,能夠在局域網使用,搭建本身的私有代碼版本倉庫。GitLab分爲社區版和企業版,社區版免費,企業版是收費的、能夠購買技術支持。git
這裏介紹GitLab在Kubernetes上使用Helm進行快速安裝的方法。github
This chart is beta, and is the best way to install GitLab on Kubernetes today. A new cloud native GitLab chart is in development with increased scalability and resilience, among other benefits. Once available, the cloud native chart will be the recommended installation method for Kubernetes, and this chart will be deprecated.redis
For more information on available GitLab Helm Charts, please see our overview.sql
This work is based partially on: https://github.com/lwolf/kubernetes-gitlab/. GitLab would like to thank Sergey Nuzhdin for his work.docker
This chart provides an easy way to get started with GitLab, provisioning an installation with nearly all functionality enabled. SSL is automatically provisioned via Let's Encrypt.app
This Helm chart is in beta, and is suited for small to medium deployments. It will be deprecated by the cloud native GitLab chart once available. Due to the significant architectural changes, migrating will require backing up data out of this instance and importing it into the new deployment.less
The deployment includes:運維
For more information on available GitLab Helm Charts, please see our overview.
kubectl
CLI installed locally and authenticated for the clusterThis chart configures a GitLab server and Kubernetes cluster which can support dynamic Review Apps, as well as services like the integrated Container Registry and Mattermost.
To support the GitLab services and dynamic environments, a wildcard DNS entry is required which resolves to the Load Balancer or External IP. Configuration of the DNS entry will depend upon the DNS service being used.
To provision an external IP on GCP and Azure, simply request a new address from the Networking section. Ensure that the region matches the region your container cluster is created in. Note, it is important that the IP is not assigned at this point in time. It will be automatically assigned once the Helm chart is installed, and assigned to the Load Balancer.
Now that an external IP address has been allocated, ensure that the wildcard DNS entry you would like to use resolves to this IP. Please consult the documentation for your DNS service for more information on creating DNS records.
Finally, set the baseIP
setting to this IP address when deploying GitLab.
If you do not specify a baseIP
, an IP will be assigned to the Load Balancer or Ingress. You can retrieve this IP by running the following command after deploying GitLab:
kubectl get svc -w --namespace nginx-ingress nginx
The IP address will be displayed in the EXTERNAL-IP
field, and should be used to configure the Wildcard DNS entry. For more information on creating a wildcard DNS entry, consult the documentation for the DNS server you are using.
For production deployments of GitLab, we strongly recommend using an External IP.
For most installations, only two parameters are required:
baseDomain
: the base domain of the wildcard host entry. For example, mycompany.io
if the wild card entry is *.mycompany.io
.legoEmail
: Email address to use when requesting new SSL certificates from Let's Encrypt.Other common configuration options:
baseIP
: the desired external IP addressgitlab
: Choose the desired edition, either ee
or ce
. ce
is the default.gitlabEELicense
: For Enterprise Edition, the license can be installed directly via the Chartprovider
: Optimizes the deployment for a cloud provider. The default is gke
for Google Kubernetes Engine, with acs
also supported for the Azure Container Service.For additional configuration options, consult the values.yaml.
The version of GitLab installed is based on the gitlab
setting (see section above), and the value of the corresponding helm setting: gitlabCEImage
or gitabEEImage
.
gitlab: CE gitlabCEImage: gitlab/gitlab-ce:9.5.2-ce.0 gitlabEEImage: gitlab/gitlab-ee:9.5.2-ee.0
The different images can be found in the gitlab-ce and gitlab-ee repositories on Docker Hub.
Note: If you are using a machine type with support for less than 4 attached disks, like an Azure trial, you should disable dedicated storage for Postgres and Redis.
By default, persistent storage is enabled for GitLab and the charts it depends on (Redis and PostgreSQL).
Components can have their claim size set from your values.yaml
, along with whether to provision separate storage for Postgres and Redis.
Basic configuration:
redisImage: redis:3.2.10 redisDedicatedStorage: true redisStorageSize: 5Gi postgresImage: postgres:9.6.3 # If you disable postgresDedicatedStorage, you should consider bumping up gitlabRailsStorageSize postgresDedicatedStorage: true postgresStorageSize: 30Gi gitlabRailsStorageSize: 30Gi gitlabRegistryStorageSize: 30Gi gitlabConfigStorageSize: 1Gi
Ingress routing and SSL are automatically configured within this Chart. An NGINX ingress is provisioned and configured, and will route traffic to any service. SSL certificates are automatically created and configured by kube-lego.
Note: Let's Encrypt limits a single TLD to five certificate requests within a single week. This means that common DNS wildcard services like xip.io and nip.io are unlikely to work.
Note: You may see a temporary error message
SchedulerPredicates failed due to PersistentVolumeClaim is not bound
while storage provisions. Once the storage provisions, the pods will automatically start. This may take a couple minutes depending on your cloud provider. If the error persists, please review the prerequisites to ensure you have enough RAM, CPU, and storage.
Add the GitLab Helm repository and initialize Helm:
helm init helm repo add gitlab https://charts.gitlab.io
Once you have reviewed the configuration settings you can install the chart. We recommending saving your configuration options in a values.yaml
file for easier upgrades in the future.
For example:
helm install --name gitlab -f values.yaml gitlab/gitlab-omnibus
or passing them on the command line:
helm install --name gitlab --set baseDomain=gitlab.io,baseIP=1.1.1.1,gitlab=ee,gitlabEELicense=$LICENSE,legoEmail=email@gitlab.com gitlab/gitlab-omnibus
Note: If you are upgrading from a previous version to 0.1.35 or above, you will need to change the access mode values for GitLab's storage. To do this, set the following in
values.yaml
or on the CLI:gitlabDataAccessMode=ReadWriteMany gitlabRegistryAccessMode=ReadWriteMany gitlabConfigAccessMode=ReadWriteMany
Once your GitLab Chart is installed, configuration changes and chart updates should be done using helm upgrade
:
helm upgrade -f values.yaml gitlab gitlab/gitlab-omnibus
If you have installed the Community Edition using this chart, upgrading to Enterprise Edition is easy.
If you are using a values.yaml
file to specify the configuration options, edit the file and set gitlab=ee
. If you would like to run a specific version of GitLab EE, set gitlabEEImage
to be the desired GitLab docker image. Then you can use helm upgrade
to update your GitLab instance to EE:
helm upgrade -f values.yaml gitlab gitlab/gitlab-omnibus
You can also upgrade and specify these options via the command line:
helm upgrade gitlab --set gitlab=ee,gitlabEEImage=gitlab/gitlab-ee:9.5.5-ee.0 gitlab/gitlab-omnibus
To uninstall the GitLab Chart, run the following:
helm delete gitlab
gitlab-omnibus
versions prior to 0.1.35 Users upgrading gitlab-omnibus
from a version prior to 0.1.35, may see an error like: Error: UPGRADE FAILED: PersistentVolumeClaim "gitlab-gitlab-config-storage" is invalid: spec: Forbidden: field is immutable after creation
.
This is due to a change in the access mode for GitLab storage in version 0.1.35. To successfully upgrade, the access mode flags must be set to ReadWriteMany
as detailed in the update section.