Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GCP infra stack: single-region secure connectivity for GKE & CloudSQL, CloudMemorystore, Buckets #615

Closed
negz opened this issue Jul 30, 2019 · 3 comments
Assignees
Labels
Milestone

Comments

@negz
Copy link
Member

negz commented Jul 30, 2019

GCP infra stack users can configure everything for their environment from the Kubernetes API including networking, subnets, and secure connectivity between app deployments in a target cluster and the dynamically provisioned cloud services they depend on.

Part of the 0.3 release

Why? What problem are we solving?

A Stack is a set of CRDs and controllers that extend Crossplane. An infrastructure stack adds support for infrastructure (e.g. databases, VMs, etc), as opposed to adding support for an application (e.g. Wordpress, GitLab).

We'd like to take our first steps in this direction by breaking Crossplane's current Google Cloud Platform (GCP) managed resource functionality out into a GCP stack (covered by #612). Once the stack is broken out, we want to ensure it:

  • Could be used by an application stack (such as a Wordpress stack) to deploy to GCP, including allowing cluster administrators to configure default resource classes that ensure network connectivity per Add a draft one pager for MVP resource connectivity #606.
  • Establishes a solid foundation for the community to build new GCP related controllers.

What does it look like when we're done?

  • The GCP stack contains v1alpha2 variants of all existing v1alpha1 GCP managed resources.
  • The GCP stack contains v1alpha2 variants of all existing v1alpha1 GCP managed resource classes. This is predicated on the work tracked in Resource classes can be validated and annotated #613.
  • The GCP stack is based on the latest Crossplane best practices:
    • The stack is built on kubebuilder 0.2.0 (possibly a beta thereof), including controller-tools, and the controller-runtime.
    • All managed resources are implemented using the nascent (Implement Generic Managed Reconciler #603) generic managed resource reconciler.
    • All resource claims are implemented using the generic resource claim reconciler.
  • The GCP stack contains MVP resource connectivity between GKECluster and CloudSQLInstance managed resources as described in Add a draft one pager for MVP resource connectivity #606. This implies
  • An application owner can leverage the GCP infrastructure stack when deploying an app stack. e.g. A KubernetesApplication can be scheduled and deployed to a GCP backed KubernetesCluster, and leverage GCP backed resource claims.

How could this be demonstrated?

  1. Crossplane user reads the blog post describing this new functionality
  2. Click through to the updated user guide
  3. Try out the updated example(s)

For example:

  1. Begin with 'core' Crossplane, i.e. just the extension manager without any GCP support.
  2. Install the GCP infrastructure stack.
  3. Create Network and Subnetwork managed resources.
  4. Create a CloudSQLInstanceClass that will use the aforementioned Network as the whitelisted private network.
  5. Create a GKEClusterClass that will create nodes in the aforementioned Network and Subnetwork.
  6. Create MySQLInstance and KubernetesCluster resource claims referencing the aforementioned resource classes.
  7. Deploy wordpress to the aforementioned KubernetesCluster. Ensure it can access the aforementioned MySQLInstance.

Related

@negz negz added the epic label Jul 30, 2019
@negz negz changed the title Establish a solid foundation for the Google Cloud Platform infrastructure stack Release a v1alpha2 Google Cloud Platform infrastructure stack Jul 30, 2019
@negz negz changed the title Release a v1alpha2 Google Cloud Platform infrastructure stack Release a v1alpha2 GCP infrastructure stack Jul 30, 2019
@prasek prasek changed the title Release a v1alpha2 GCP infrastructure stack GCP infra stack: single-region secure connectivity for GKE & CloudSQL, CloudMemorystore, Buckets Jul 30, 2019
@prasek prasek changed the title GCP infra stack: single-region secure connectivity for GKE & CloudSQL, CloudMemorystore, Buckets GCP infra stack [v1alpha2]: single-region secure connectivity for GKE & CloudSQL, CloudMemorystore, Buckets Jul 30, 2019
@prasek prasek changed the title GCP infra stack [v1alpha2]: single-region secure connectivity for GKE & CloudSQL, CloudMemorystore, Buckets GCP infra stack: single-region secure connectivity for GKE & CloudSQL, CloudMemorystore, Buckets Jul 30, 2019
@prasek prasek added this to the v0.3 milestone Jul 31, 2019
@muvaf
Copy link
Member

muvaf commented Aug 2, 2019

I think we can create the sub-issues as individual tasks in the following form:

  • Version bump of GCP CRDs -> v1alpha2
  • Create strongly typed resource classes for each managed kind
  • Generic managed reconciler for all existing GCP resources (for v1alpha2)
  • Network CRD and controller with high fidelity
  • Subnetwork CRD and controller with high fidelity
  • Wordpress app stack YAMLs that use v1alpha2 managed resources and network CRDs
  • Connected Wordpress demo e2e
  • Update examples and README files containing Wordpress GCP examples.

@hasheddan
Copy link
Member

It might be worth including the creation of strongly typed resource classes for each managed kind in this process, as it will also require a minor update to each claim controller.

@muvaf
Copy link
Member

muvaf commented Aug 2, 2019

@hasheddan just added, thanks! I'll move the bulletpoints up into the first issue description once we finalize and I create the issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants