From 0bea08a33e68c5f2b5fdb8ec9b42636f9f62d0f5 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Sat, 16 Nov 2019 03:06:13 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- doc/user/clusters/applications.md | 34 +++++ doc/user/clusters/crossplane.md | 292 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 326 insertions(+) create mode 100644 doc/user/clusters/crossplane.md diff --git a/doc/user/clusters/applications.md b/doc/user/clusters/applications.md index 28016e2b3cd..c3e2e6bca5b 100644 --- a/doc/user/clusters/applications.md +++ b/doc/user/clusters/applications.md @@ -40,6 +40,7 @@ The following applications can be installed: - [GitLab Runner](#gitlab-runner) - [JupyterHub](#jupyterhub) - [Knative](#knative) +- [Crossplane](#crossplane) With the exception of Knative, the applications will be installed in a dedicated namespace called `gitlab-managed-apps`. @@ -384,6 +385,38 @@ chart is used to install this application with a [`values.yaml`](https://gitlab.com/gitlab-org/gitlab/blob/master/vendor/prometheus/values.yaml) file. +### Crossplane + +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/34702) in GitLab 12.5 for project-level clusters. + +[Crossplane](https://crossplane.io/docs) is a multi-cloud control plane useful for +managing applications and infrastructure across multiple clouds. It extends the +Kubernetes API using: + +- Custom resources. +- Controllers that watch those custom resources. + +Crossplane allows provisioning and lifecycle management of infrastructure components +across cloud providers in a uniform manner by abstracting cloud provider-specific +configurations. + +The Crossplane GitLab-managed application: + +- Installs Crossplane with a provider of choice on a Kubernetes cluster attached to the + project repository. +- Can then be used to provision infrastructure or managed applications such as + PostgreSQL (for example, CloudSQL from GCP or RDS from AWS) and other services + required by the application via the Auto DevOps pipeline. + +For information on configuring Crossplane installed on the cluster, see +[Crossplane configuration](crossplane.md). + +NOTE: **Note:** +[`alpha/crossplane`](https://charts.crossplane.io/alpha/) chart v0.4.1 is used to +install Crossplane using the +[`values.yaml`](https://github.com/crossplaneio/crossplane/blob/master/cluster/charts/crossplane/values.yaml.tmpl) +file. + ## Upgrading applications > [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/24789) in GitLab 11.8. @@ -424,6 +457,7 @@ The applications below can be uninstalled. | JupyterHub | 12.1+ | All data not committed to GitLab will be deleted and cannot be restored. | | Knative | 12.1+ | The associated IP will be deleted and cannot be restored. | | Prometheus | 11.11+ | All data will be deleted and cannot be restored. | +| Crossplane | 12.5+ | All data will be deleted and cannot be restored. | To uninstall an application: diff --git a/doc/user/clusters/crossplane.md b/doc/user/clusters/crossplane.md new file mode 100644 index 00000000000..37210b22f6f --- /dev/null +++ b/doc/user/clusters/crossplane.md @@ -0,0 +1,292 @@ +# Crossplane configuration + +Once Crossplane [is installed](applications.md#crossplane), it must be configured for +use. + +The process of configuring Crossplane includes: + +1. Configuring RBAC permissions. +1. Configuring Crossplane with a cloud provider. +1. Configure managed service access. +1. Setting up Resource classes. +1. Using Auto DevOps configuration options. +1. Connect to the PostgreSQL instance. + +To allow Crossplane to provision cloud services such as PostgreSQL, the cloud provider +stack must be configured with a user account. For example: + +- A service account for GCP. +- An IAM user for AWS. + +Important notes: + +- This guide uses GCP as an example. However, the process for AWS and Azure will be +similar. +- Crossplane requires the Kubernetes cluster to be VPC native with Alias IPs enabled so +that the IP address of the pods are routable within the GCP network. + +First, we need to declare some environment variables with configuration that will be used throughout this guide: + +```sh +export PROJECT_ID=crossplane-playground # the GCP project where all resources reside. +export NETWORK_NAME=default # the GCP network where your GKE is provisioned. +export REGION=us-central1 # the GCP region where the GKE cluster is provisioned. +``` + +## Configure RBAC permissions + +- For a non-GitLab managed cluster(s), ensure that the service account for the token provided can manage resources in the `database.crossplane.io` API group. +Manually grant GitLab's service account the ability to manage resources in the +`database.crossplane.io` API group. The Aggregated ClusterRole allows us to do that. +​ +NOTE: **Note:** +For a non-GitLab managed cluster, ensure that the service account for the token provided can manage resources in the `database.crossplane.io` API group. +​1. Save the following YAML as `crossplane-database-role.yaml`: + +```sh +cat > crossplane-database-role.yaml < network.yaml < gcp-postgres-standard.yaml < +Annotations: crossplane.io/propagate-from-name: 108e460e-06c7-11ea-b907-42010a8000bd + crossplane.io/propagate-from-namespace: gitlab-managed-apps + crossplane.io/propagate-from-uid: 10c79605-06c7-11ea-b907-42010a8000bd + +Type: Opaque + +Data +==== +privateIP: 8 bytes +publicIP: 13 bytes +serverCACertificateCert: 1272 bytes +serverCACertificateCertSerialNumber: 1 bytes +serverCACertificateCreateTime: 24 bytes +serverCACertificateExpirationTime: 24 bytes +username: 8 bytes +endpoint: 8 bytes +password: 27 bytes +serverCACertificateCommonName: 98 bytes +serverCACertificateInstance: 41 bytes +serverCACertificateSha1Fingerprint: 40 bytes +``` + +## Connect to the PostgresQL instance + +Follow this [GCP guide](https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine) if you +would like to connect to the newly provisioned Postgres database instance on CloudSQL. -- cgit v1.2.3