docs snapshot for crossplane version `v0.4`
|
|
@ -1 +1 @@
|
|||
[{"version":"v0.3","path":"/docs/v0.3"},{"version":"v0.2","path":"/docs/v0.2"},{"version":"v0.1","path":"/docs/v0.1"},{"version":"master","path":"/docs/master"}]
|
||||
[{"version":"v0.4","path":"/docs/v0.4"},{"version":"v0.3","path":"/docs/v0.3"},{"version":"v0.2","path":"/docs/v0.2"},{"version":"v0.1","path":"/docs/v0.1"},{"version":"master","path":"/docs/master"}]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,177 @@
|
|||
# Welcome to Crossplane!
|
||||
|
||||
Crossplane is an open source multicloud control plane to manage your
|
||||
cloud-native applications and infrastructure across environments, clusters,
|
||||
regions and clouds. It enables provisioning and full-lifecycle management of
|
||||
applications and managed services from your choice of cloud using `kubectl`.
|
||||
|
||||
Crossplane can be installed into an existing Kubernetes cluster to add managed
|
||||
service provisioning or deployed as a dedicated control plane for multi-cluster
|
||||
management and workload scheduling.
|
||||
|
||||
Crossplane enables the community to build and publish Stacks to add more clouds
|
||||
and cloud services to Crossplane with support for out-of-tree extensibility and
|
||||
independent release schedules. Crossplane includes Stacks for [GCP][stack-gcp],
|
||||
[AWS][stack-aws], and [Azure][stack-azure] today.
|
||||
|
||||
<h4 align="center"><img src="media/crossplane-overview.png" alt="Crossplane"></h4>
|
||||
|
||||
Crossplane has four main feature areas that can be used independently:
|
||||
|
||||
1. Crossplane Services - provision managed services from kubectl.
|
||||
1. Crossplane Stacks - extend Crossplane with new functionality.
|
||||
1. Crossplane Workloads - define complete applications and schedule across
|
||||
clusters, regions, and clouds.
|
||||
1. Crossplane Clusters - manage multiple Kubernetes clusters from a single
|
||||
control plane.
|
||||
|
||||
## Crossplane Services
|
||||
|
||||
Crossplane Services supports managed service provisioning using `kubectl`. It
|
||||
applies the Kubernetes pattern for Persistent Volume (PV) claims and classes to
|
||||
managed service provisioning with support for a strong separation of concern
|
||||
between app teams and cluster administrators.
|
||||
|
||||
App teams can choose between cloud-specific and portable services including
|
||||
managed databases, message queues, buckets, data pipelines, and more to define
|
||||
complete applications, build once, and deploy into multiple clouds using
|
||||
continuous delivery pipelines or GitOps flows.
|
||||
|
||||
Cluster administrators can define self-service policies and best-practice
|
||||
configurations to accelerate app delivery and improve security, so app teams can
|
||||
focus on delivering their app instead of cloud-specific infrastructure details.
|
||||
|
||||
Take a look at the [getting started guide][getting-started] for an introduction
|
||||
to Crossplane Services. The [Crossplane Services Guide][services-user-guide]
|
||||
also explores related concepts and shows how to use Crossplane Services to
|
||||
deploy a Wordpress instance that securely consumes a managed `MySQLInstance`
|
||||
from GCP, AWS, or Azure using `kubectl`.
|
||||
|
||||
## Crossplane Stacks
|
||||
|
||||
Stacks extend Crossplane with new functionality and can be installed using the
|
||||
[Stack Manager][stacks-manager] via the [Kubernetes API][stack-install-docs] or
|
||||
with the [crossplane kubectl plugin][crossplane-cli] [`stack
|
||||
install`][crossplane-cli-usage] command.
|
||||
|
||||
Crossplane is built on the Kubernetes API machinery as a platform, and Stacks
|
||||
simplify extending the Kubernetes API to provision and lifecycle manage apps and
|
||||
the managed service infrastructure they depend on, including [Stack security and
|
||||
isolation][stack-security-design].
|
||||
|
||||
The [Crossplane Stacks Guide][stack-user-guide] shows how to deploy a portable
|
||||
[Wordpress Stack][stack-wordpress-registry] into multiple clouds using Infra
|
||||
Stacks including [stack-gcp][stack-gcp], [stack-aws][stack-aws], and
|
||||
[stack-azure][stack-azure].
|
||||
|
||||
### Infrastructure Stacks
|
||||
|
||||
Infra Stacks like [stack-gcp][stack-gcp], [stack-aws][stack-aws], and
|
||||
[stack-azure][stack-azure] extend the Kubernetes API to support managed service
|
||||
provisioning (DBaaS, cache, buckets), secure connectivity (VPCs, subnets,
|
||||
peering, ACLs, secrets), and provisioning managed Kubernetes clusters on demand
|
||||
to further isolate the blast radius of applications.
|
||||
|
||||
Infra Stacks are pre-built and published to the [Stacks
|
||||
registry][stack-registry] where they can be installed by a Cluster Admin using a
|
||||
[`ClusterStackInstall`][stack-install-docs] Kubernetes API kind or with the
|
||||
[`stack install`][crossplane-cli-usage] command that installs a Stack with
|
||||
permissions to watch resources at a cluster level, across all namespaces.
|
||||
|
||||
Infra Stacks are covered in both the [Crossplane Services
|
||||
Guide][services-user-guide] and the [Crossplane Stacks Guide][stack-user-guide].
|
||||
|
||||
### Application Stacks
|
||||
|
||||
App Stacks depend on Infra Stacks like [stack-gcp][stack-gcp],
|
||||
[stack-aws][stack-aws], and [stack-azure][stack-azure] to provide managed
|
||||
services via the Kubernetes API.
|
||||
|
||||
App Stacks are pre-built and published to the [Stacks registry][stack-registry]
|
||||
where they can be installed by an app team using a
|
||||
[`StackInstall`][stack-install-docs] Kubernetes API kind or with the [`stack
|
||||
install`][crossplane-cli-usage] command that installs Stacks with permissions
|
||||
only within a single namespace.
|
||||
|
||||
The [Crossplane Stacks Guide][stack-user-guide] covers how to deploy a portable
|
||||
[Wordpress Stack][stack-wordpress] into multiple clouds using Infra Stacks such
|
||||
as [stack-gcp][stack-gcp], [stack-aws][stack-aws], and
|
||||
[stack-azure][stack-azure].
|
||||
|
||||
### Build your own Stack
|
||||
|
||||
The [Crossplane Developer Guide][stack-developer-guide] shows how to build and
|
||||
extend Infra Stacks and App Stacks.
|
||||
|
||||
## Crossplane Workloads
|
||||
|
||||
Crossplane includes an extensible workload scheduler that observes application
|
||||
policies to select a suitable target cluster from a pool of available clusters.
|
||||
The workload scheduler can be customized to consider a number of criteria
|
||||
including capabilities, availability, reliability, cost, regions, and
|
||||
performance while deploying workloads and their resources.
|
||||
|
||||
Complex workloads can be modelled as a [`KubernetesApplication`][k8s-app-design]
|
||||
resource as done by the portable [Wordpress Stack][stack-wordpress] which
|
||||
automates the lifecycle of a [`KubernetesApplication`][k8s-app-design] including
|
||||
provisioning and secure connectivity to a managed `MySQLInstance`.
|
||||
|
||||
## Crossplane Clusters
|
||||
|
||||
Crossplane supports dynamic provisioning of managed Kubernetes clusters from a
|
||||
single control plane with consistent multi-cluster best-practice configuration
|
||||
and secure connectivity between target Kubernetes clusters and the managed
|
||||
services provisioned for applications. Managed Kubernetes clusters can be
|
||||
dynamically provisioned with a `KubernetesCluster` resource as done by the
|
||||
portable [Wordpress Stack][stack-wordpress] which automates the lifecycle of a
|
||||
`KubernetesCluster`.
|
||||
|
||||
## Architecture and Vision
|
||||
|
||||
The full architecture and vision of the Crossplane project is described in depth
|
||||
in the [architecture document][arch-doc]. It is the best place to learn more
|
||||
about how Crossplane fits into the Kubernetes ecosystem, the intended use cases,
|
||||
and comparisons to existing projects.
|
||||
|
||||
## Learn More
|
||||
|
||||
If you have any questions, please drop us a note on [Crossplane Slack][join-crossplane-slack] or [contact us][contact-us]!
|
||||
|
||||
* [Quick Start Guide](quick-start.md)
|
||||
* [Concepts](concepts.md)
|
||||
* [Services Guide][services-user-guide] - upgrade an existing Kubernetes cluster
|
||||
to support managed service provisioning from kubectl.
|
||||
* [Stacks Guide][stack-user-guide] - deploy a portable Wordpress Stack into
|
||||
multiple clouds.
|
||||
* [API Reference](api.md)
|
||||
* [Developer Guide](developer-guide.md)
|
||||
* [Contributing](../CONTRIBUTING.md)
|
||||
* [FAQs](faqs.md)
|
||||
* [Learn More][learn-more]
|
||||
|
||||
<!-- Named links -->
|
||||
[getting-started]: quick-start.md
|
||||
[services-user-guide]: services-guide.md
|
||||
[stack-user-guide]: stacks-guide.md
|
||||
[stack-developer-guide]: developer-guide.md
|
||||
[stacks-manager]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#terminology
|
||||
[crossplane-cli]: https://github.com/crossplaneio/crossplane-cli
|
||||
[crossplane-cli-usage]: https://github.com/crossplaneio/crossplane-cli#usage
|
||||
[stack-security-design]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-stacks-security-isolation.md
|
||||
|
||||
[stack-wordpress-registry]: https://hub.docker.com/r/crossplane/sample-stack-wordpress
|
||||
[stack-wordpress]: https://github.com/crossplaneio/sample-stack-wordpress
|
||||
|
||||
[stack-gcp]: https://github.com/crossplaneio/stack-gcp
|
||||
[stack-aws]: https://github.com/crossplaneio/stack-aws
|
||||
[stack-azure]: https://github.com/crossplaneio/stack-azure
|
||||
[stack-registry]: https://hub.docker.com/search?q=crossplane&type=image
|
||||
[stack-install-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#installation-flow
|
||||
|
||||
[k8s-app-design]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-complex-workloads.md#design
|
||||
|
||||
[arch-doc]: https://docs.google.com/document/d/1whncqdUeU2cATGEJhHvzXWC9xdK29Er45NJeoemxebo/edit?usp=sharing
|
||||
|
||||
[contact-us]: https://github.com/crossplaneio/crossplane#contact
|
||||
[join-crossplane-slack]: https://slack.crossplane.io
|
||||
[learn-more]: learn-more.md
|
||||
|
|
@ -0,0 +1,137 @@
|
|||
---
|
||||
title: API Reference
|
||||
toc: true
|
||||
weight: 610
|
||||
---
|
||||
# API Reference
|
||||
|
||||
Crossplane is configured using a variety of Kubernetes resources. These
|
||||
resources are separated into API groups. Core API groups are provided by
|
||||
Crossplane, while cloud provider specific API groups are provided by each cloud
|
||||
provider's stack.
|
||||
|
||||
Each API Group supported by Crossplane is assigned its own individual status to
|
||||
reflect the varying maturity and stability. More details about API versioning
|
||||
and status in Kubernetes can be found on the Kubernetes [API versioning] page,
|
||||
but the key difference between the statuses are summarized below:
|
||||
|
||||
* **Alpha:** The API may change in incompatible ways in a later software release
|
||||
without notice, recommended for use only in short-lived testing clusters, due
|
||||
to increased risk of bugs and lack of long-term support.
|
||||
* **Beta:** Support for the overall features will not be dropped, though details
|
||||
may change. Support for upgrading or migrating between versions will be
|
||||
provided, either through automation or manual steps.
|
||||
* **Stable:** Features will appear in released software for many subsequent
|
||||
versions and support for upgrading between versions will be provided with
|
||||
software automation in the vast majority of scenarios.
|
||||
|
||||
## Crossplane
|
||||
|
||||
Crossplane is responsible for all portable resources, including resource claims
|
||||
(for example `MySQLInstance`) and portable resource classes (for example
|
||||
`MySQLInstanceClass). Crossplane currently supports the following API groups:
|
||||
|
||||
API Group | Status | Details
|
||||
-------- | ------ | -------
|
||||
[`cache.crossplane.io/v1alpha1`] | Alpha | Cache service claims and classes.
|
||||
[`compute.crossplane.io/v1alpha1`] | Alpha | Compute service resource claims and classes.
|
||||
[`database.crossplane.io/v1alpha1`] | Alpha | Database service resource claims and classes.
|
||||
[`kubernetes.crossplane.io/v1alpha1`] | Alpha | Resources for connecting to Kubernetes clusters.
|
||||
[`storage.crossplane.io/v1alpha1`] | Alpha | Blob storage service resource claims and classes.
|
||||
[`stacks.crossplane.io/v1alpha1`] | Alpha | Resources for managing Crossplane Stacks.
|
||||
[`workload.crossplane.io/v1alpha1`] | Alpha | Resources for managing Crossplane Workloads.
|
||||
|
||||
[`cache.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/cache-crossplane-io-v1alpha1.md
|
||||
[`compute.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/compute-crossplane-io-v1alpha1.md
|
||||
[`database.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/database-crossplane-io-v1alpha1.md
|
||||
[`kubernetes.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/kubernetes-crossplane-io-v1alpha1.md
|
||||
[`storage.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/storage-crossplane-io-v1alpha1.md
|
||||
[`stacks.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/stacks-crossplane-io-v1alpha1.md
|
||||
[`workload.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/workload-crossplane-io-v1alpha1.md
|
||||
|
||||
## AWS Stack
|
||||
|
||||
The AWS Stack is responsible for all AWS specific resources, including managed
|
||||
resources (for example `EKSCluster`), and cloud specific resource classes (for
|
||||
example `EKSClusterClass`) The AWS Stack currently supports the following API
|
||||
groups:
|
||||
|
||||
API Group | Status | Details
|
||||
-------- | ------ | -------
|
||||
[`aws.crossplane.io/v1alpha3`] | Alpha | Core AWS resources.
|
||||
[`cache.aws.crossplane.io/v1beta1`] | Beta | ElastiCache managed resources and classes.
|
||||
[`compute.aws.crossplane.io/v1alpha3`] | Alpha | EKS managed resources and classes.
|
||||
[`database.aws.crossplane.io/v1beta1`] | Beta | RDS managed resources and classes.
|
||||
[`identity.aws.crossplane.io/v1alpha3`] | Alpha | IAM managed resources and classes.
|
||||
[`network.aws.crossplane.io/v1alpha3`] | Alpha | VPC managed resources and classes.
|
||||
[`storage.aws.crossplane.io/v1alpha3`] | Alpha | S3 managed resources and classes.
|
||||
|
||||
[`aws.crossplane.io/v1alpha3`]: api/crossplaneio/stack-aws/aws-crossplane-io-v1alpha3.md
|
||||
[`cache.aws.crossplane.io/v1beta1`]: api/crossplaneio/stack-aws/cache-aws-crossplane-io-v1beta1.md
|
||||
[`compute.aws.crossplane.io/v1alpha3`]: api/crossplaneio/stack-aws/compute-aws-crossplane-io-v1alpha3.md
|
||||
[`database.aws.crossplane.io/v1beta1`]: api/crossplaneio/stack-aws/database-aws-crossplane-io-v1beta1.md
|
||||
[`identity.aws.crossplane.io/v1alpha3`]: api/crossplaneio/stack-aws/identity-aws-crossplane-io-v1alpha3.md
|
||||
[`network.aws.crossplane.io/v1alpha3`]: api/crossplaneio/stack-aws/network-aws-crossplane-io-v1alpha3.md
|
||||
[`storage.aws.crossplane.io/v1alpha3`]: api/crossplaneio/stack-aws/storage-aws-crossplane-io-v1alpha3.md
|
||||
|
||||
## Azure Stack
|
||||
|
||||
The Azure Stack is responsible for all Azure specific resources, including
|
||||
managed resources (for example `AKSCluster`), and cloud specific resource
|
||||
classes (for example `AKSClusterClass`) The Azure Stack currently supports the
|
||||
following API groups:
|
||||
|
||||
API Group | Status | Details
|
||||
-------- | ------ | -------
|
||||
[`azure.crossplane.io/v1alpha3`] | Alpha | Core Azure resources.
|
||||
[`cache.azure.crossplane.io/v1alpha3`] | Alpha | Azure Redis managed resources and classes.
|
||||
[`compute.azure.crossplane.io/v1alpha3`] | Alpha | AKS managed resources and classes.
|
||||
[`database.azure.crossplane.io/v1alpha3`] | Alpha | Azure Database managed resources and classes.
|
||||
[`network.azure.crossplane.io/v1alpha3`] | Alpha | Virtual network managed resources and classes.
|
||||
[`storage.azure.crossplane.io/v1alpha3`] | Alpha | Azure Blob Storage managed resources and classes.
|
||||
|
||||
[`azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/azure-crossplane-io-v1alpha3.md
|
||||
[`cache.azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/cache-azure-crossplane-io-v1alpha3.md
|
||||
[`compute.azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/compute-azure-crossplane-io-v1alpha3.md
|
||||
[`database.azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/database-azure-crossplane-io-v1alpha3.md
|
||||
[`network.azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/network-azure-crossplane-io-v1alpha3.md
|
||||
[`storage.azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/storage-azure-crossplane-io-v1alpha3.md
|
||||
|
||||
## GCP Stack
|
||||
|
||||
The GCP Stack is responsible for all GCP specific resources, including managed
|
||||
resources (for example `GKECluster`), and cloud specific resource classes (for
|
||||
example `GKEClusterClass`) The GCP Stack currently supports the following API
|
||||
groups:
|
||||
|
||||
API Group | Status | Details
|
||||
-------- | ------ | -------
|
||||
[`gcp.crossplane.io/v1alpha3`] | Alpha | Core GCP resources.
|
||||
[`cache.gcp.crossplane.io/v1beta1`] | Beta | CloudMemorystore managed resources and classes.
|
||||
[`compute.gcp.crossplane.io/v1alpha3`] | Alpha | Compute and Kubernetes Engine managed resources and classes.
|
||||
[`database.gcp.crossplane.io/v1beta1`] | Beta | CloudSQL managed resources and classes.
|
||||
[`servicenetworking.gcp.crossplane.io/v1alpha3`] | Alpha | Service Networking managed resources and classes.
|
||||
[`storage.gcp.crossplane.io/v1alpha3`] | Alpha | Cloud Storage managed resources and classes.
|
||||
|
||||
[`gcp.crossplane.io/v1alpha3`]: api/crossplaneio/stack-gcp/gcp-crossplane-io-v1alpha3.md
|
||||
[`cache.gcp.crossplane.io/v1beta1`]: api/crossplaneio/stack-gcp/cache-gcp-crossplane-io-v1beta1.md
|
||||
[`compute.gcp.crossplane.io/v1alpha3`]: api/crossplaneio/stack-gcp/compute-gcp-crossplane-io-v1alpha3.md
|
||||
[`database.gcp.crossplane.io/v1beta1`]: api/crossplaneio/stack-gcp/database-gcp-crossplane-io-v1beta1.md
|
||||
[`servicenetworking.gcp.crossplane.io/v1alpha3`]: api/crossplaneio/stack-gcp/servicenetworking-gcp-crossplane-io-v1alpha3.md
|
||||
[`storage.gcp.crossplane.io/v1alpha3`]: api/crossplaneio/stack-gcp/storage-gcp-crossplane-io-v1alpha3.md
|
||||
|
||||
## Rook Stack
|
||||
|
||||
The Rook Stack is responsible for all Rook specific resources, including managed resources (for
|
||||
example `YugabyteCluster`), and stroage provider specific resource classes (for example
|
||||
`YugabyteClusterClass`) The Rook Stack currently supports the following API groups:
|
||||
|
||||
API Group | Status | Details
|
||||
-------- | ------ | -------
|
||||
[`rook.crossplane.io/v1alpha1`] | Alpha | Core Rook resources.
|
||||
[`database.rook.crossplane.io/v1alpha1`] | Alpha | Database managed resources and classes, such as YugabyteDB and CockroachDB.
|
||||
|
||||
[`rook.crossplane.io/v1alpha1`]: api/crossplaneio/stack-rook/rook-crossplane-io-v1alpha1.md
|
||||
[`database.rook.crossplane.io/v1alpha1`]: api/crossplaneio/stack-rook/database-rook-crossplane-io-v1alpha1.md
|
||||
|
||||
[API Versioning]: https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-versioning
|
||||
|
|
@ -0,0 +1,211 @@
|
|||
# core.crossplane.io/v1alpha1 API Reference
|
||||
|
||||
Package v1alpha1 contains core API types used by most Crossplane resources.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
|
||||
## BindingPhase
|
||||
|
||||
BindingPhase represents the current binding phase of a resource or claim. Alias of string.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BindingStatus](#BindingStatus)
|
||||
|
||||
|
||||
## BindingStatus
|
||||
|
||||
A BindingStatus represents the bindability and binding status of a resource.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ResourceClaimStatus](#ResourceClaimStatus)
|
||||
* [ResourceStatus](#ResourceStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`bindingPhase` | Optional [BindingPhase](#BindingPhase) | Phase represents the binding phase of a managed resource or claim. Unbindable resources cannot be bound, typically because they are currently unavailable, or still being created. Unbound resource are available for binding, and Bound resources have successfully bound to another resource.
|
||||
|
||||
|
||||
|
||||
## ClassSpecTemplate
|
||||
|
||||
A ClassSpecTemplate defines a template that will be used to create the specifications of managed resources dynamically provisioned using a resource class.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`writeConnectionSecretsToNamespace` | string | WriteConnectionSecretsToNamespace specifies the namespace in which the connection secrets of managed resources dynamically provisioned using this claim will be created.
|
||||
`providerRef` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ProviderReference specifies the provider that will be used to create, observe, update, and delete managed resources that are dynamically provisioned using this resource class.
|
||||
`reclaimPolicy` | Optional [ReclaimPolicy](#ReclaimPolicy) | ReclaimPolicy specifies what will happen to external resources when managed resources dynamically provisioned using this resource class are deleted. "Delete" deletes the external resource, while "Retain" (the default) does not. Note this behaviour is subtly different from other uses of the ReclaimPolicy concept within the Kubernetes ecosystem per https://github.com/crossplaneio/crossplane-runtime/issues/21
|
||||
|
||||
|
||||
|
||||
## Condition
|
||||
|
||||
A Condition that may apply to a managed resource.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ConditionedStatus](#ConditionedStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`type` | [ConditionType](#ConditionType) | Type of this condition. At most one of each condition type may apply to a resource at any point in time.
|
||||
`status` | [core/v1.ConditionStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#conditionstatus-v1-core) | Status of this condition; is it currently True, False, or Unknown?
|
||||
`lastTransitionTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | LastTransitionTime is the last time this condition transitioned from one status to another.
|
||||
`reason` | [ConditionReason](#ConditionReason) | A Reason for this condition's last transition from one status to another.
|
||||
`message` | Optional string | A Message containing details about this condition's last transition from one status to another, if any.
|
||||
|
||||
|
||||
|
||||
## ConditionReason
|
||||
|
||||
A ConditionReason represents the reason a resource is in a condition. Alias of string.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Condition](#Condition)
|
||||
|
||||
|
||||
## ConditionType
|
||||
|
||||
A ConditionType represents a condition a resource could be in. Alias of string.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Condition](#Condition)
|
||||
|
||||
|
||||
## ConditionedStatus
|
||||
|
||||
A ConditionedStatus reflects the observed status of a managed resource. Only one condition of each type may exist.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ResourceClaimStatus](#ResourceClaimStatus)
|
||||
* [ResourceStatus](#ResourceStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`conditions` | Optional [[]Condition](#Condition) | Conditions of the resource.
|
||||
|
||||
|
||||
|
||||
## LocalSecretReference
|
||||
|
||||
A LocalSecretReference is a reference to a secret in the same namespace as the referencer.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ResourceClaimSpec](#ResourceClaimSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name of the secret.
|
||||
|
||||
|
||||
|
||||
## ReclaimPolicy
|
||||
|
||||
A ReclaimPolicy determines what should happen to managed resources when their bound resource claims are deleted. Alias of string.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ClassSpecTemplate](#ClassSpecTemplate)
|
||||
* [ResourceSpec](#ResourceSpec)
|
||||
|
||||
|
||||
## ResourceClaimSpec
|
||||
|
||||
A ResourceClaimSpec defines the desired state of a resource claim.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`writeConnectionSecretToRef` | Optional [LocalSecretReference](#LocalSecretReference) | WriteConnectionSecretToReference specifies the name of a Secret, in the same namespace as this resource claim, to which any connection details for this resource claim should be written. Connection details frequently include the endpoint, username, and password required to connect to the managed resource bound to this resource claim.
|
||||
`classSelector` | Optional [meta/v1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#labelselector-v1-meta) | A ClassSelector specifies labels that will be used to select a resource class for this claim. If multiple classes match the labels one will be chosen at random.
|
||||
`classRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | A ClassReference specifies a resource class that will be used to dynamically provision a managed resource when the resource claim is created.
|
||||
`resourceRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | A ResourceReference specifies an existing managed resource, in any namespace, to which this resource claim should attempt to bind. Omit the resource reference to enable dynamic provisioning using a resource class; the resource reference will be automatically populated by Crossplane.
|
||||
|
||||
|
||||
|
||||
## ResourceClaimStatus
|
||||
|
||||
A ResourceClaimStatus represents the observed status of a resource claim.
|
||||
|
||||
|
||||
|
||||
|
||||
ResourceClaimStatus supports all fields of:
|
||||
|
||||
* [ConditionedStatus](#ConditionedStatus)
|
||||
* [BindingStatus](#BindingStatus)
|
||||
|
||||
|
||||
## ResourceSpec
|
||||
|
||||
A ResourceSpec defines the desired state of a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`writeConnectionSecretToRef` | Optional [SecretReference](#SecretReference) | WriteConnectionSecretToReference specifies the namespace and name of a Secret to which any connection details for this managed resource should be written. Connection details frequently include the endpoint, username, and password required to connect to the managed resource.
|
||||
`claimRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ClaimReference specifies the resource claim to which this managed resource will be bound. ClaimReference is set automatically during dynamic provisioning. Crossplane does not currently support setting this field manually, per https://github.com/crossplaneio/crossplane-runtime/issues/19
|
||||
`classRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ClassReference specifies the resource class that was used to dynamically provision this managed resource, if any. Crossplane does not currently support setting this field manually, per https://github.com/crossplaneio/crossplane-runtime/issues/20
|
||||
`providerRef` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ProviderReference specifies the provider that will be used to create, observe, update, and delete this managed resource.
|
||||
`reclaimPolicy` | Optional [ReclaimPolicy](#ReclaimPolicy) | ReclaimPolicy specifies what will happen to the external resource this managed resource manages when the managed resource is deleted. "Delete" deletes the external resource, while "Retain" (the default) does not. Note this behaviour is subtly different from other uses of the ReclaimPolicy concept within the Kubernetes ecosystem per https://github.com/crossplaneio/crossplane-runtime/issues/21
|
||||
|
||||
|
||||
|
||||
## ResourceStatus
|
||||
|
||||
ResourceStatus represents the observed state of a managed resource.
|
||||
|
||||
|
||||
|
||||
|
||||
ResourceStatus supports all fields of:
|
||||
|
||||
* [ConditionedStatus](#ConditionedStatus)
|
||||
* [BindingStatus](#BindingStatus)
|
||||
|
||||
|
||||
## SecretKeySelector
|
||||
|
||||
A SecretKeySelector is a reference to a secret key in an arbitrary namespace.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`key` | string | The key to select.
|
||||
|
||||
|
||||
SecretKeySelector supports all fields of:
|
||||
|
||||
* [SecretReference](#SecretReference)
|
||||
|
||||
|
||||
## SecretReference
|
||||
|
||||
A SecretReference is a reference to a secret in an arbitrary namespace.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ResourceSpec](#ResourceSpec)
|
||||
* [SecretKeySelector](#SecretKeySelector)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name of the secret.
|
||||
`namespace` | string | Namespace of the secret.
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
# cache.crossplane.io/v1alpha1 API Reference
|
||||
|
||||
Package v1alpha1 contains portable resource claims for caching services such as Redis clusters.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [RedisCluster](#RedisCluster)
|
||||
|
||||
## RedisCluster
|
||||
|
||||
A RedisCluster is a portable resource claim that may be satisfied by binding to a Redis managed resource such as a GCP CloudMemorystore instance or an AWS ReplicationGroup. Despite the name RedisCluster claims may bind to Redis managed resources that are a single node, or not in cluster mode.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `cache.crossplane.io/v1alpha1`
|
||||
`kind` | string | `RedisCluster`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [RedisClusterSpec](#RedisClusterSpec) | RedisClusterSpec specifies the desired state of a RedisCluster.
|
||||
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
|
||||
|
||||
|
||||
|
||||
## RedisClusterSpec
|
||||
|
||||
RedisClusterSpec specifies the desired state of a RedisCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RedisCluster](#RedisCluster)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`engineVersion` | string | EngineVersion specifies the desired Redis version.
|
||||
|
||||
|
||||
RedisClusterSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
# compute.crossplane.io/v1alpha1 API Reference
|
||||
|
||||
Package v1alpha1 contains portable resource claims for compute services such as Kubernetes clusters.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [KubernetesCluster](#KubernetesCluster)
|
||||
* [MachineInstance](#MachineInstance)
|
||||
|
||||
## KubernetesCluster
|
||||
|
||||
A KubernetesCluster is a portable resource claim that may be satisfied by binding to a Kubernetes cluster managed resource such as an AWS EKS cluster or an Azure AKS cluster.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.crossplane.io/v1alpha1`
|
||||
`kind` | string | `KubernetesCluster`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [KubernetesClusterSpec](#KubernetesClusterSpec) | KubernetesClusterSpec specifies the desired state of a KubernetesCluster.
|
||||
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
|
||||
|
||||
|
||||
|
||||
## MachineInstance
|
||||
|
||||
A MachineInstance is a portable resource claim that may be satisfied by binding to a machine instance, which may include Virtual Machine managed resources such as an AWS EC2 instance or bare metal managed resources such as a Packet Device.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.crossplane.io/v1alpha1`
|
||||
`kind` | string | `MachineInstance`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [MachineInstanceSpec](#MachineInstanceSpec) | MachineInstanceSpec specifies the desired state of a MachineInstance.
|
||||
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
|
||||
|
||||
|
||||
|
||||
## KubernetesClusterSpec
|
||||
|
||||
KubernetesClusterSpec specifies the desired state of a KubernetesCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [KubernetesCluster](#KubernetesCluster)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`clusterVersion` | string | ClusterVersion specifies the desired Kubernetes version, e.g. 1.15.
|
||||
|
||||
|
||||
KubernetesClusterSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
|
||||
|
||||
|
||||
## MachineInstanceSpec
|
||||
|
||||
MachineInstanceSpec specifies the desired state of a MachineInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [MachineInstance](#MachineInstance)
|
||||
|
||||
|
||||
|
||||
|
||||
MachineInstanceSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
# database.crossplane.io/v1alpha1 API Reference
|
||||
|
||||
Package v1alpha1 contains portable resource claims for database services such as MySQL or PostgreSQL.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [MySQLInstance](#MySQLInstance)
|
||||
* [PostgreSQLInstance](#PostgreSQLInstance)
|
||||
|
||||
## MySQLInstance
|
||||
|
||||
A MySQLInstance is a portable resource claim that may be satisfied by binding to a MySQL managed resource such as an AWS RDS instance or a GCP CloudSQL instance.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.crossplane.io/v1alpha1`
|
||||
`kind` | string | `MySQLInstance`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [MySQLInstanceSpec](#MySQLInstanceSpec) | MySQLInstanceSpec specifies the desired state of a MySQLInstance.
|
||||
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
|
||||
|
||||
|
||||
|
||||
## PostgreSQLInstance
|
||||
|
||||
A PostgreSQLInstance is a portable resource claim that may be satisfied by binding to a PostgreSQL managed resource such as an AWS RDS instance or a GCP CloudSQL instance.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.crossplane.io/v1alpha1`
|
||||
`kind` | string | `PostgreSQLInstance`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [PostgreSQLInstanceSpec](#PostgreSQLInstanceSpec) | PostgreSQLInstanceSpec specifies the desired state of a PostgreSQLInstance. PostgreSQLInstance.
|
||||
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
|
||||
|
||||
|
||||
|
||||
## MySQLInstanceSpec
|
||||
|
||||
MySQLInstanceSpec specifies the desired state of a MySQLInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [MySQLInstance](#MySQLInstance)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`engineVersion` | string | EngineVersion specifies the desired MySQL engine version, e.g. 5.7.
|
||||
|
||||
|
||||
MySQLInstanceSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
|
||||
|
||||
|
||||
## PostgreSQLInstanceSpec
|
||||
|
||||
PostgreSQLInstanceSpec specifies the desired state of a PostgreSQLInstance. PostgreSQLInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [PostgreSQLInstance](#PostgreSQLInstance)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`engineVersion` | string | EngineVersion specifies the desired PostgreSQL engine version, e.g. 9.6.
|
||||
|
||||
|
||||
PostgreSQLInstanceSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
# kubernetes.crossplane.io/v1alpha1 API Reference
|
||||
|
||||
Package v1alpha1 contains resources relating to Crossplane Kubernetes.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [Provider](#Provider)
|
||||
|
||||
## Provider
|
||||
|
||||
A Provider configures a Kubernetes 'provider', i.e. a connection to a particular Kubernetes cluster using the referenced Secret.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `kubernetes.crossplane.io/v1alpha1`
|
||||
`kind` | string | `Provider`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [ProviderSpec](#ProviderSpec) | A ProviderSpec defines the desired state of a Provider.
|
||||
|
||||
|
||||
|
||||
## ProviderSpec
|
||||
|
||||
A ProviderSpec defines the desired state of a Provider.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Provider](#Provider)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`credentialsSecretRef` | [v1alpha1.SecretReference](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretreference) | A Secret containing connection credentials for a Kubernetes cluster client that will be used to authenticate to this Kubernetes Provider. This will typically be the connection secret of a KubernetesCluster claim, or the secret created by a Kubernetes service account, but could also be manually configured to connect to a preexisting cluster.
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,260 @@
|
|||
# stacks.crossplane.io/v1alpha1 API Reference
|
||||
|
||||
Package v1alpha1 contains resources relating to Crossplane Stacks.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [ClusterStackInstall](#ClusterStackInstall)
|
||||
* [Stack](#Stack)
|
||||
* [StackInstall](#StackInstall)
|
||||
|
||||
## ClusterStackInstall
|
||||
|
||||
ClusterStackInstall is the CRD type for a request to add a stack to Crossplane.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `stacks.crossplane.io/v1alpha1`
|
||||
`kind` | string | `ClusterStackInstall`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [StackInstallSpec](#StackInstallSpec) | StackInstallSpec specifies details about a request to install a stack to Crossplane.
|
||||
`status` | [StackInstallStatus](#StackInstallStatus) | StackInstallStatus represents the observed state of a StackInstall.
|
||||
|
||||
|
||||
|
||||
## Stack
|
||||
|
||||
A Stack that has been added to Crossplane.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `stacks.crossplane.io/v1alpha1`
|
||||
`kind` | string | `Stack`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [StackSpec](#StackSpec) | StackSpec specifies the desired state of a Stack.
|
||||
`status` | [StackStatus](#StackStatus) | StackStatus represents the observed state of a Stack.
|
||||
|
||||
|
||||
|
||||
## StackInstall
|
||||
|
||||
A StackInstall requests a stack be installed to Crossplane.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `stacks.crossplane.io/v1alpha1`
|
||||
`kind` | string | `StackInstall`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [StackInstallSpec](#StackInstallSpec) | StackInstallSpec specifies details about a request to install a stack to Crossplane.
|
||||
`status` | [StackInstallStatus](#StackInstallStatus) | StackInstallStatus represents the observed state of a StackInstall.
|
||||
|
||||
|
||||
|
||||
## AppMetadataSpec
|
||||
|
||||
AppMetadataSpec defines metadata about the stack application
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StackSpec](#StackSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`title` | string |
|
||||
`overviewShort` | string |
|
||||
`overview` | string |
|
||||
`readme` | string |
|
||||
`version` | string |
|
||||
`icons` | [[]IconSpec](#IconSpec) |
|
||||
`maintainers` | [[]ContributorSpec](#ContributorSpec) |
|
||||
`owners` | [[]ContributorSpec](#ContributorSpec) |
|
||||
`company` | string |
|
||||
`category` | string |
|
||||
`keywords` | []string |
|
||||
`website` | string |
|
||||
`source` | string |
|
||||
`license` | string |
|
||||
`dependsOn` | [[]StackInstallSpec](#StackInstallSpec) | DependsOn is the list of CRDs that this stack depends on. This data drives the dependency resolution process.
|
||||
`permissionScope` | string |
|
||||
|
||||
|
||||
|
||||
## ContributorSpec
|
||||
|
||||
ContributorSpec defines a contributor for a stack (e.g., maintainer, owner, etc.)
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AppMetadataSpec](#AppMetadataSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string |
|
||||
`email` | string |
|
||||
|
||||
|
||||
|
||||
## ControllerDeployment
|
||||
|
||||
ControllerDeployment defines a controller for a stack that is managed by a Deployment.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ControllerSpec](#ControllerSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string |
|
||||
`spec` | [apps/v1.DeploymentSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#deploymentspec-v1-apps) |
|
||||
|
||||
|
||||
|
||||
## ControllerJob
|
||||
|
||||
ControllerJob defines a controller for a stack that is installed by a Job.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ControllerSpec](#ControllerSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string |
|
||||
`spec` | [batch/v1.JobSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#jobspec-v1-batch) |
|
||||
|
||||
|
||||
|
||||
## ControllerSpec
|
||||
|
||||
ControllerSpec defines the controller that implements the logic for a stack, which can come in different flavors. A golang code (controller-runtime) controller with a managing Deployment is all that is supported currently, but more types will come in the future (e.g., templates, functions/hooks, templates, a new DSL, etc.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StackSpec](#StackSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`deployment` | [ControllerDeployment](#ControllerDeployment) |
|
||||
`job` | [ControllerJob](#ControllerJob) |
|
||||
|
||||
|
||||
|
||||
## IconSpec
|
||||
|
||||
IconSpec defines the icon for a stack
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AppMetadataSpec](#AppMetadataSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`base64Data` | string |
|
||||
`mediatype` | string |
|
||||
|
||||
|
||||
|
||||
## PermissionsSpec
|
||||
|
||||
PermissionsSpec defines the permissions that a stack will require to operate.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StackSpec](#StackSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`rules` | [[]rbac/v1.PolicyRule](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#policyrule-v1-rbac) |
|
||||
|
||||
|
||||
|
||||
## StackInstallSpec
|
||||
|
||||
StackInstallSpec specifies details about a request to install a stack to Crossplane.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ClusterStackInstall](#ClusterStackInstall)
|
||||
* [StackInstall](#StackInstall)
|
||||
* [AppMetadataSpec](#AppMetadataSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`source` | string | Source is the domain name for the stack registry hosting the stack being requested, e.g., registry.crossplane.io
|
||||
`package` | string | Package is the name of the stack package that is being requested, e.g., myapp. Either Package or CustomResourceDefinition can be specified.
|
||||
`crd` | string | CustomResourceDefinition is the full name of a CRD that is owned by the stack being requested. This can be a convenient way of installing a stack when the desired CRD is known, but the package name that contains it is not known. Either Package or CustomResourceDefinition can be specified.
|
||||
|
||||
|
||||
|
||||
## StackInstallStatus
|
||||
|
||||
StackInstallStatus represents the observed state of a StackInstall.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ClusterStackInstall](#ClusterStackInstall)
|
||||
* [StackInstall](#StackInstall)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`conditionedStatus` | [v1alpha1.ConditionedStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#conditionedstatus) |
|
||||
`installJob` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) |
|
||||
`stackRecord` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) |
|
||||
|
||||
|
||||
|
||||
## StackInstaller
|
||||
|
||||
StackInstaller provides a common interface for StackInstall and ClusterStackInstall to share controller and reconciler logic
|
||||
|
||||
|
||||
## StackSpec
|
||||
|
||||
StackSpec specifies the desired state of a Stack.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Stack](#Stack)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`customresourcedefinitions` | [CRDList](#CRDList) | CRDList is the full list of CRDs that this stack owns and depends on
|
||||
`controller` | [ControllerSpec](#ControllerSpec) | ControllerSpec defines the controller that implements the logic for a stack, which can come in different flavors. A golang code (controller-runtime) controller with a managing Deployment is all that is supported currently, but more types will come in the future (e.g., templates, functions/hooks, templates, a new DSL, etc.
|
||||
`permissions` | [PermissionsSpec](#PermissionsSpec) | PermissionsSpec defines the permissions that a stack will require to operate.
|
||||
|
||||
|
||||
StackSpec supports all fields of:
|
||||
|
||||
* [AppMetadataSpec](#AppMetadataSpec)
|
||||
|
||||
|
||||
## StackStatus
|
||||
|
||||
StackStatus represents the observed state of a Stack.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Stack](#Stack)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`conditionedStatus` | [v1alpha1.ConditionedStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#conditionedstatus) |
|
||||
`controllerRef` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) |
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
# storage.crossplane.io/v1alpha1 API Reference
|
||||
|
||||
Package v1alpha1 contains portable resource claims for storage services such as buckets.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [Bucket](#Bucket)
|
||||
|
||||
## Bucket
|
||||
|
||||
A Bucket is a portable resource claim that may be satisfied by binding to a storage bucket PostgreSQL managed resource such as an AWS S3 bucket or Azure storage container.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `storage.crossplane.io/v1alpha1`
|
||||
`kind` | string | `Bucket`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [BucketSpec](#BucketSpec) | BucketSpec specifies the desired state of a Bucket.
|
||||
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
|
||||
|
||||
|
||||
|
||||
## BucketSpec
|
||||
|
||||
BucketSpec specifies the desired state of a Bucket.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Bucket](#Bucket)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name specifies the desired name of the bucket.
|
||||
`predefinedACL` | [PredefinedACL](#PredefinedACL) | PredefinedACL specifies a predefined ACL (e.g. Private, ReadWrite, etc) to be applied to the bucket.
|
||||
`localPermission` | [LocalPermissionType](#LocalPermissionType) | LocalPermission specifies permissions granted to a provider specific service account for this bucket, e.g. Read, ReadWrite, or Write.
|
||||
|
||||
|
||||
BucketSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
|
||||
|
||||
|
||||
## LocalPermissionType
|
||||
|
||||
A LocalPermissionType is a type of permission that may be granted to a Bucket. Alias of string.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketSpec](#BucketSpec)
|
||||
|
||||
|
||||
## PredefinedACL
|
||||
|
||||
A PredefinedACL is a predefined ACL that may be applied to a Bucket. Alias of string.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketSpec](#BucketSpec)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
# workload.crossplane.io/v1alpha1 API Reference
|
||||
|
||||
Package v1alpha1 contains resources relating to Crossplane Workloads.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [KubernetesApplication](#KubernetesApplication)
|
||||
* [KubernetesApplicationResource](#KubernetesApplicationResource)
|
||||
|
||||
## KubernetesApplication
|
||||
|
||||
A KubernetesApplication defines an application deployed by Crossplane to a Kubernetes cluster, i.e. a portable KubernetesCluster resource claim.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `workload.crossplane.io/v1alpha1`
|
||||
`kind` | string | `KubernetesApplication`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [KubernetesApplicationSpec](#KubernetesApplicationSpec) | A KubernetesApplicationSpec specifies the resources of a Kubernetes application.
|
||||
`status` | [KubernetesApplicationStatus](#KubernetesApplicationStatus) | KubernetesApplicationStatus represents the observed state of a KubernetesApplication.
|
||||
|
||||
|
||||
|
||||
## KubernetesApplicationResource
|
||||
|
||||
A KubernetesApplicationResource is a resource of a Kubernetes application. Each resource templates a single Kubernetes resource to be deployed to its scheduled KubernetesCluster.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `workload.crossplane.io/v1alpha1`
|
||||
`kind` | string | `KubernetesApplicationResource`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [KubernetesApplicationResourceSpec](#KubernetesApplicationResourceSpec) | KubernetesApplicationResourceSpec specifies the desired state of a KubernetesApplicationResource.
|
||||
`status` | [KubernetesApplicationResourceStatus](#KubernetesApplicationResourceStatus) | KubernetesApplicationResourceStatus represents the observed state of a KubernetesApplicationResource.
|
||||
|
||||
|
||||
|
||||
## KubernetesApplicationResourceSpec
|
||||
|
||||
KubernetesApplicationResourceSpec specifies the desired state of a KubernetesApplicationResource.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [KubernetesApplicationResource](#KubernetesApplicationResource)
|
||||
* [KubernetesApplicationResourceTemplate](#KubernetesApplicationResourceTemplate)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`template` | [meta/v1/unstructured.Unstructured](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#unstructured-unstructured-v1) | A Template for a Kubernetes resource to be submitted to the KubernetesCluster to which this application resource is scheduled. The resource must be understood by the KubernetesCluster. Crossplane requires only that the resource contains standard Kubernetes type and object metadata.
|
||||
`secrets` | [[]core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core) | Secrets upon which this application resource depends. These secrets will be propagated to the Kubernetes cluster to which this application is scheduled.
|
||||
|
||||
|
||||
|
||||
## KubernetesApplicationResourceState
|
||||
|
||||
KubernetesApplicationResourceState represents the state of a KubernetesApplicationResource. Alias of string.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [KubernetesApplicationResourceStatus](#KubernetesApplicationResourceStatus)
|
||||
|
||||
|
||||
## KubernetesApplicationResourceStatus
|
||||
|
||||
KubernetesApplicationResourceStatus represents the observed state of a KubernetesApplicationResource.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [KubernetesApplicationResource](#KubernetesApplicationResource)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`conditionedStatus` | [v1alpha1.ConditionedStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#conditionedstatus) |
|
||||
`state` | [KubernetesApplicationResourceState](#KubernetesApplicationResourceState) | State of the application.
|
||||
`clusterRef` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | Cluster to which this application has been scheduled.
|
||||
`remote` | [RemoteStatus](#RemoteStatus) | Remote status of the resource templated by this application resource.
|
||||
|
||||
|
||||
|
||||
## KubernetesApplicationResourceTemplate
|
||||
|
||||
A KubernetesApplicationResourceTemplate is used to instantiate new KubernetesApplicationResources.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [KubernetesApplicationSpec](#KubernetesApplicationSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [KubernetesApplicationResourceSpec](#KubernetesApplicationResourceSpec) | KubernetesApplicationResourceSpec specifies the desired state of a KubernetesApplicationResource.
|
||||
|
||||
|
||||
|
||||
## KubernetesApplicationSpec
|
||||
|
||||
A KubernetesApplicationSpec specifies the resources of a Kubernetes application.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [KubernetesApplication](#KubernetesApplication)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`resourceSelector` | [meta/v1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#labelselector-v1-meta) | ResourceSelector selects the KubernetesApplicationResources that are managed by this KubernetesApplication. Note that a KubernetesApplication will never adopt orphaned KubernetesApplicationResources, and thus this selector serves only to help match a KubernetesApplication to its KubernetesApplicationResources.
|
||||
`clusterSelector` | [meta/v1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#labelselector-v1-meta) | ClusterSelector selects the clusters to which this application may be scheduled. Leave both match labels and expressions empty to match any cluster.
|
||||
`resourceTemplates` | [[]KubernetesApplicationResourceTemplate](#KubernetesApplicationResourceTemplate) | ResourceTemplates specifies a set of Kubernetes application resources managed by this application.
|
||||
|
||||
|
||||
|
||||
## KubernetesApplicationState
|
||||
|
||||
KubernetesApplicationState represents the state of a Kubernetes application. Alias of string.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [KubernetesApplicationStatus](#KubernetesApplicationStatus)
|
||||
|
||||
|
||||
## KubernetesApplicationStatus
|
||||
|
||||
KubernetesApplicationStatus represents the observed state of a KubernetesApplication.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [KubernetesApplication](#KubernetesApplication)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`conditionedStatus` | [v1alpha1.ConditionedStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#conditionedstatus) |
|
||||
`state` | [KubernetesApplicationState](#KubernetesApplicationState) | State of the application.
|
||||
`clusterRef` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | Cluster to which this application has been scheduled.
|
||||
`desiredResources` | int | Desired resources of this application, i.e. the number of resources that match this application's resource selector.
|
||||
`submittedResources` | int | Submitted resources of this workload, i.e. the subset of desired resources that have been successfully submitted to their scheduled Kubernetes cluster.
|
||||
|
||||
|
||||
|
||||
## RemoteStatus
|
||||
|
||||
RemoteStatus represents the observed state of a remote cluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [KubernetesApplicationResourceStatus](#KubernetesApplicationResourceStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`raw` | [encoding/json.RawMessage](https://golang.org/pkg/encoding/json#RawMessage) | Raw JSON representation of the remote status as a byte array.
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
# aws.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains core AWS resources.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [Provider](#Provider)
|
||||
|
||||
## Provider
|
||||
|
||||
A Provider configures an AWS 'provider', i.e. a connection to a particular AWS account using a particular AWS IAM role.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Provider`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [ProviderSpec](#ProviderSpec) | A ProviderSpec defines the desired state of a Provider.
|
||||
|
||||
|
||||
|
||||
## ProviderSpec
|
||||
|
||||
A ProviderSpec defines the desired state of a Provider.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Provider](#Provider)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`region` | string | Region for managed resources created using this AWS provider.
|
||||
`credentialsSecretRef` | [v1alpha1.SecretKeySelector](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretkeyselector) | A Secret containing INI encoded credentials for an AWS IAM role that will be used to authenticate to this AWS account.
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,308 @@
|
|||
# cache.aws.crossplane.io/v1beta1 API Reference
|
||||
|
||||
Package v1beta1 contains managed resources for AWS caching services such as ElastiCache.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [ReplicationGroup](#ReplicationGroup)
|
||||
* [ReplicationGroupClass](#ReplicationGroupClass)
|
||||
|
||||
## ReplicationGroup
|
||||
|
||||
A ReplicationGroup is a managed resource that represents an AWS ElastiCache Replication Group.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `cache.aws.crossplane.io/v1beta1`
|
||||
`kind` | string | `ReplicationGroup`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [ReplicationGroupSpec](#ReplicationGroupSpec) | A ReplicationGroupSpec defines the desired state of a ReplicationGroup.
|
||||
`status` | [ReplicationGroupStatus](#ReplicationGroupStatus) | A ReplicationGroupStatus defines the observed state of a ReplicationGroup.
|
||||
|
||||
|
||||
|
||||
## ReplicationGroupClass
|
||||
|
||||
A ReplicationGroupClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `cache.aws.crossplane.io/v1beta1`
|
||||
`kind` | string | `ReplicationGroupClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [ReplicationGroupClassSpecTemplate](#ReplicationGroupClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned ReplicationGroup.
|
||||
|
||||
|
||||
|
||||
## Endpoint
|
||||
|
||||
Endpoint represents the information required for client programs to connect to a cache node. Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/Endpoint
|
||||
|
||||
Appears in:
|
||||
|
||||
* [NodeGroup](#NodeGroup)
|
||||
* [NodeGroupMember](#NodeGroupMember)
|
||||
* [ReplicationGroupObservation](#ReplicationGroupObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`address` | string | Address is the DNS hostname of the cache node.
|
||||
`port` | int | Port number that the cache engine is listening on.
|
||||
|
||||
|
||||
|
||||
## MinorVersion
|
||||
|
||||
MinorVersion represents a supported minor version of Redis. Alias of string.
|
||||
|
||||
|
||||
## NodeGroup
|
||||
|
||||
NodeGroup represents a collection of cache nodes in a replication group. One node in the node group is the read/write primary node. All the other nodes are read-only Replica nodes. Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/NodeGroup
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReplicationGroupObservation](#ReplicationGroupObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`port` | string | NodeGroupID is the identifier for the node group (shard). A Redis (cluster mode disabled) replication group contains only 1 node group; therefore, the node group ID is 0001. A Redis (cluster mode enabled) replication group contains 1 to 15 node groups numbered 0001 to 0015.
|
||||
`nodeGroupMembers` | [[]NodeGroupMember](#NodeGroupMember) | NodeGroupMembers is a list containing information about individual nodes within the node group (shard).
|
||||
`primaryEndpoint` | [Endpoint](#Endpoint) | PrimaryEndpoint is the endpoint of the primary node in this node group (shard).
|
||||
`slots` | string | Slots is the keyspace for this node group (shard).
|
||||
`status` | string | Status of this replication group - creating, available, etc.
|
||||
|
||||
|
||||
|
||||
## NodeGroupConfigurationSpec
|
||||
|
||||
A NodeGroupConfigurationSpec specifies the desired state of a node group.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReplicationGroupParameters](#ReplicationGroupParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`primaryAvailabilityZone` | Optional string | PrimaryAvailabilityZone specifies the Availability Zone where the primary node of this node group (shard) is launched.
|
||||
`replicaAvailabilityZones` | Optional []string | ReplicaAvailabilityZones specifies a list of Availability Zones to be used for the read replicas. The number of Availability Zones in this list must match the value of ReplicaCount or ReplicasPerNodeGroup if not specified.
|
||||
`replicaCount` | Optional int | ReplicaCount specifies the number of read replica nodes in this node group (shard).
|
||||
`slots` | Optional string | Slots specifies the keyspace for a particular node group. Keyspaces range from 0 to 16,383. The string is in the format startkey-endkey. Example: "0-3999"
|
||||
|
||||
|
||||
|
||||
## NodeGroupMember
|
||||
|
||||
NodeGroupMember represents a single node within a node group (shard). Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/NodeGroupMember
|
||||
|
||||
Appears in:
|
||||
|
||||
* [NodeGroup](#NodeGroup)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`cacheClusterId` | string | CacheClusterID is the ID of the cluster to which the node belongs.
|
||||
`cacheNodeId` | string | CacheNodeID is the ID of the node within its cluster. A node ID is a numeric identifier (0001, 0002, etc.).
|
||||
`currentRole` | string | CurrentRole is the role that is currently assigned to the node - primary or replica. This member is only applicable for Redis (cluster mode disabled) replication groups.
|
||||
`preferredAvailabilityZone` | string | PreferredAvailabilityZone is the name of the Availability Zone in which the node is located.
|
||||
`readEndpoint` | [Endpoint](#Endpoint) | ReadEndpoint is the information required for client programs to connect to a node for read operations. The read endpoint is only applicable on Redis (cluster mode disabled) clusters.
|
||||
|
||||
|
||||
|
||||
## PatchVersion
|
||||
|
||||
PatchVersion represents a supported patch version of Redis. Alias of string.
|
||||
|
||||
|
||||
## ReplicationGroupClassSpecTemplate
|
||||
|
||||
A ReplicationGroupClassSpecTemplate is a template for the spec of a dynamically provisioned ReplicationGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReplicationGroupClass](#ReplicationGroupClass)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [ReplicationGroupParameters](#ReplicationGroupParameters) | ReplicationGroupParameters define the desired state of an AWS ElastiCache Replication Group. Most fields map directly to an AWS ReplicationGroup: https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html#API_CreateReplicationGroup_RequestParameters
|
||||
|
||||
|
||||
ReplicationGroupClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
|
||||
|
||||
## ReplicationGroupObservation
|
||||
|
||||
ReplicationGroupObservation contains the observation of the status of the given ReplicationGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReplicationGroupStatus](#ReplicationGroupStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`automaticFailoverStatus` | string | AutomaticFailover indicates the status of Multi-AZ with automatic failover for this Redis replication group.
|
||||
`clusterEnabled` | bool | ClusterEnabled is a flag indicating whether or not this replication group is cluster enabled; i.e., whether its data can be partitioned across multiple shards (API/CLI: node groups).
|
||||
`configurationEndpoint` | [Endpoint](#Endpoint) | ConfigurationEndpoint for this replication group. Use the configuration endpoint to connect to this replication group.
|
||||
`memberClusters` | []string | MemberClusters is the list of names of all the cache clusters that are part of this replication group.
|
||||
`nodeGroups` | [[]NodeGroup](#NodeGroup) | NodeGroups is a list of node groups in this replication group. For Redis (cluster mode disabled) replication groups, this is a single-element list. For Redis (cluster mode enabled) replication groups, the list contains an entry for each node group (shard).
|
||||
`pendingModifiedValues` | [ReplicationGroupPendingModifiedValues](#ReplicationGroupPendingModifiedValues) | PendingModifiedValues is a group of settings to be applied to the replication group, either immediately or during the next maintenance window.
|
||||
`status` | string | Status is the current state of this replication group - creating, available, modifying, deleting, create-failed, snapshotting.
|
||||
|
||||
|
||||
|
||||
## ReplicationGroupParameters
|
||||
|
||||
ReplicationGroupParameters define the desired state of an AWS ElastiCache Replication Group. Most fields map directly to an AWS ReplicationGroup: https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html#API_CreateReplicationGroup_RequestParameters
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReplicationGroupClassSpecTemplate](#ReplicationGroupClassSpecTemplate)
|
||||
* [ReplicationGroupSpec](#ReplicationGroupSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`applyModificationsImmediately` | bool | If true, this parameter causes the modifications in this request and any pending modifications to be applied, asynchronously and as soon as possible, regardless of the PreferredMaintenanceWindow setting for the replication group. If false, changes to the nodes in the replication group are applied on the next maintenance reboot, or the next failure reboot, whichever occurs first.
|
||||
`atRestEncryptionEnabled` | Optional bool | AtRestEncryptionEnabled enables encryption at rest when set to true. You cannot modify the value of AtRestEncryptionEnabled after the replication group is created. To enable encryption at rest on a replication group you must set AtRestEncryptionEnabled to true when you create the replication group. Only available when creating a replication group in an Amazon VPC using redis version 3.2.6 or 4.x.
|
||||
`authEnabled` | Optional bool | AuthEnabled enables mandatory authentication when connecting to the managed replication group. AuthEnabled requires TransitEncryptionEnabled to be true. While ReplicationGroupSpec mirrors the fields of the upstream replication group object as closely as possible, we expose a boolean here rather than requiring the operator pass in a string authentication token. Crossplane will generate a token automatically and expose it via a Secret.
|
||||
`automaticFailoverEnabled` | Optional bool | AutomaticFailoverEnabled specifies whether a read-only replica is automatically promoted to read/write primary if the existing primary fails. If true, Multi-AZ is enabled for this replication group. If false, Multi-AZ is disabled for this replication group. AutomaticFailoverEnabled must be enabled for Redis (cluster mode enabled) replication groups. Amazon ElastiCache for Redis does not support Multi-AZ with automatic failover on: * Redis versions earlier than 2.8.6. * Redis (cluster mode disabled): T1 and T2 cache node types. * Redis (cluster mode enabled): T1 node types.
|
||||
`cacheNodeType` | string | CacheNodeType specifies the compute and memory capacity of the nodes in the node group (shard). For a complete listing of node types and specifications, see: * Amazon ElastiCache Product Features and Details (http://aws.amazon.com/elasticache/details) * Cache Node Type-Specific Parameters for Memcached (http://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/ParameterGroups.Memcached.html#ParameterGroups.Memcached.NodeSpecific) * Cache Node Type-Specific Parameters for Redis (http://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/ParameterGroups.Redis.html#ParameterGroups.Redis.NodeSpecific)
|
||||
`cacheParameterGroupName` | Optional string | CacheParameterGroupName specifies the name of the parameter group to associate with this replication group. If this argument is omitted, the default cache parameter group for the specified engine is used. If you are running Redis version 3.2.4 or later, only one node group (shard), and want to use a default parameter group, we recommend that you specify the parameter group by name. * To create a Redis (cluster mode disabled) replication group, use CacheParameterGroupName=default.redis3.2. * To create a Redis (cluster mode enabled) replication group, use CacheParameterGroupName=default.redis3.2.cluster.on.
|
||||
`cacheSecurityGroupNames` | Optional []string | CacheSecurityGroupNames specifies a list of cache security group names to associate with this replication group.
|
||||
`cacheSubnetGroupName` | Optional string | CacheSubnetGroupName specifies the name of the cache subnet group to be used for the replication group. If you're going to launch your cluster in an Amazon VPC, you need to create a subnet group before you start creating a cluster. For more information, see Subnets and Subnet Groups (http://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/SubnetGroups.html).
|
||||
`engine` | string | Engine is the name of the cache engine (memcached or redis) to be used for the clusters in this replication group.
|
||||
`engineVersion` | Optional string | EngineVersion specifies the version number of the cache engine to be used for the clusters in this replication group. To view the supported cache engine versions, use the DescribeCacheEngineVersions operation. Important: You can upgrade to a newer engine version (see Selecting a Cache Engine and Version (http://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/SelectEngine.html#VersionManagement)) in the ElastiCache User Guide, but you cannot downgrade to an earlier engine version. If you want to use an earlier engine version, you must delete the existing cluster or replication group and create it anew with the earlier engine version.
|
||||
`nodeGroupConfiguration` | Optional [[]NodeGroupConfigurationSpec](#NodeGroupConfigurationSpec) | NodeGroupConfigurationSpec specifies a list of node group (shard) configuration options. If you're creating a Redis (cluster mode disabled) or a Redis (cluster mode enabled) replication group, you can use this parameter to individually configure each node group (shard), or you can omit this parameter. However, when seeding a Redis (cluster mode enabled) cluster from a S3 rdb file, you must configure each node group (shard) using this parameter because you must specify the slots for each node group.
|
||||
`notificationTopicArn` | Optional string | NotificationTopicARN specifies the Amazon Resource Name (ARN) of the Amazon Simple Notification Service (SNS) topic to which notifications are sent. The Amazon SNS topic owner must be the same as the cluster owner.
|
||||
`notificationTopicStatus` | Optional string | NotificationTopicStatus is the status of the Amazon SNS notification topic for the replication group. Notifications are sent only if the status is active. Valid values: active | inactive
|
||||
`numCacheClusters` | Optional int | NumCacheClusters specifies the number of clusters this replication group initially has. This parameter is not used if there is more than one node group (shard). You should use ReplicasPerNodeGroup instead. If AutomaticFailoverEnabled is true, the value of this parameter must be at least 2. If AutomaticFailoverEnabled is false you can omit this parameter (it will default to 1), or you can explicitly set it to a value between 2 and 6. The maximum permitted value for NumCacheClusters is 6 (1 primary plus 5 replicas).
|
||||
`numNodeGroups` | Optional int | NumNodeGroups specifies the number of node groups (shards) for this Redis (cluster mode enabled) replication group. For Redis (cluster mode disabled) either omit this parameter or set it to 1. Default: 1
|
||||
`port` | Optional int | Port number on which each member of the replication group accepts connections.
|
||||
`preferredCacheClusterAzs` | Optional []string | PreferredCacheClusterAZs specifies a list of EC2 Availability Zones in which the replication group's clusters are created. The order of the Availability Zones in the list is the order in which clusters are allocated. The primary cluster is created in the first AZ in the list. This parameter is not used if there is more than one node group (shard). You should use NodeGroupConfigurationSpec instead. If you are creating your replication group in an Amazon VPC (recommended), you can only locate clusters in Availability Zones associated with the subnets in the selected subnet group. The number of Availability Zones listed must equal the value of NumCacheClusters. Default: system chosen Availability Zones.
|
||||
`preferredMaintenanceWindow` | Optional string | PreferredMaintenanceWindow specifies the weekly time range during which maintenance on the cluster is performed. It is specified as a range in the format ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). The minimum maintenance window is a 60 minute period. Example: sun:23:00-mon:01:30
|
||||
`primaryClusterId` | Optional string | PrimaryClusterId is the identifier of the cluster that serves as the primary for this replication group. This cluster must already exist and have a status of available. This parameter is not required if NumCacheClusters, NumNodeGroups or ReplicasPerNodeGroup is specified.
|
||||
`replicasPerNodeGroup` | Optional int | ReplicasPerNodeGroup specifies the number of replica nodes in each node group (shard). Valid values are 0 to 5.
|
||||
`replicationGroupDescription` | string | ReplicationGroupDescription is the description for the replication group.
|
||||
`securityGroupIds` | Optional []string | SecurityGroupIDs specifies one or more Amazon VPC security groups associated with this replication group. Use this parameter only when you are creating a replication group in an Amazon VPC.
|
||||
`snapshotArns` | Optional []string | SnapshotARNs specifies a list of Amazon Resource Names (ARN) that uniquely identify the Redis RDB snapshot files stored in Amazon S3. The snapshot files are used to populate the new replication group. The Amazon S3 object name in the ARN cannot contain any commas. The new replication group will have the number of node groups (console: shards) specified by the parameter NumNodeGroups or the number of node groups configured by NodeGroupConfigurationSpec regardless of the number of ARNs specified here.
|
||||
`snapshotName` | Optional string | SnapshotName specifies the name of a snapshot from which to restore data into the new replication group. The snapshot status changes to restoring while the new replication group is being created.
|
||||
`snapshotRetentionLimit` | Optional int | SnapshotRetentionLimit specifies the number of days for which ElastiCache retains automatic snapshots before deleting them. For example, if you set SnapshotRetentionLimit to 5, a snapshot that was taken today is retained for 5 days before being deleted. Default: 0 (i.e., automatic backups are disabled for this cluster).
|
||||
`snapshotWindow` | Optional string | SnapshotWindow specifies the daily time range (in UTC) during which ElastiCache begins taking a daily snapshot of your node group (shard). Example: 05:00-09:00 If you do not specify this parameter, ElastiCache automatically chooses an appropriate time range.
|
||||
`snapshottingClusterID` | Optional string | SnapshottingClusterID is used as the daily snapshot source for the replication group. This parameter cannot be set for Redis (cluster mode enabled) replication groups.
|
||||
`tags` | Optional [[]Tag](#Tag) | A list of cost allocation tags to be added to this resource. A tag is a key-value pair.
|
||||
`transitEncryptionEnabled` | Optional bool | TransitEncryptionEnabled enables in-transit encryption when set to true. You cannot modify the value of TransitEncryptionEnabled after the cluster is created. To enable in-transit encryption on a cluster you must TransitEncryptionEnabled to true when you create a cluster. This parameter is valid only if the Engine parameter is redis, the EngineVersion parameter is 3.2.6 or 4.x, and the cluster is being created in an Amazon VPC. If you enable in-transit encryption, you must also specify a value for CacheSubnetGroup. Required: Only available when creating a replication group in an Amazon VPC using redis version 3.2.6 or 4.x. Default: false For HIPAA compliance, you must specify TransitEncryptionEnabled as true, an AuthToken, and a CacheSubnetGroup.
|
||||
|
||||
|
||||
|
||||
## ReplicationGroupPendingModifiedValues
|
||||
|
||||
ReplicationGroupPendingModifiedValues are the settings to be applied to the Redis replication group, either immediately or during the next maintenance window. Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/ReplicationGroupPendingModifiedValues
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReplicationGroupObservation](#ReplicationGroupObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`automaticFailoverStatus` | string | AutomaticFailoverStatus indicates the status of Multi-AZ with automatic failover for this Redis replication group.
|
||||
`primaryClusterId` | string | PrimaryClusterID that is applied immediately or during the next maintenance window.
|
||||
`resharding` | [ReshardingStatus](#ReshardingStatus) | Resharding is the status of an online resharding operation.
|
||||
|
||||
|
||||
|
||||
## ReplicationGroupSpec
|
||||
|
||||
A ReplicationGroupSpec defines the desired state of a ReplicationGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReplicationGroup](#ReplicationGroup)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [ReplicationGroupParameters](#ReplicationGroupParameters) | ReplicationGroupParameters define the desired state of an AWS ElastiCache Replication Group. Most fields map directly to an AWS ReplicationGroup: https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html#API_CreateReplicationGroup_RequestParameters
|
||||
|
||||
|
||||
ReplicationGroupSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## ReplicationGroupStatus
|
||||
|
||||
A ReplicationGroupStatus defines the observed state of a ReplicationGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReplicationGroup](#ReplicationGroup)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`atProvider` | [ReplicationGroupObservation](#ReplicationGroupObservation) | ReplicationGroupObservation contains the observation of the status of the given ReplicationGroup.
|
||||
|
||||
|
||||
ReplicationGroupStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## ReshardingStatus
|
||||
|
||||
ReshardingStatus is the status of an online resharding operation. Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/ReshardingStatus
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReplicationGroupPendingModifiedValues](#ReplicationGroupPendingModifiedValues)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`slotMigration` | [SlotMigration](#SlotMigration) | Represents the progress of an online resharding operation.
|
||||
|
||||
|
||||
|
||||
## SlotMigration
|
||||
|
||||
SlotMigration represents the progress of an online resharding operation. Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/SlotMigration
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReshardingStatus](#ReshardingStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`progressPercentage` | int | ProgressPercentage is the percentage of the slot migration that is complete.
|
||||
|
||||
|
||||
|
||||
## Tag
|
||||
|
||||
A Tag is used to tag the ElastiCache resources in AWS.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ReplicationGroupParameters](#ReplicationGroupParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`key` | string | Key for the tag.
|
||||
`value` | string | Value of the tag.
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,263 @@
|
|||
# compute.aws.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for AWS compute services such as EKS.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [EKSCluster](#EKSCluster)
|
||||
* [EKSClusterClass](#EKSClusterClass)
|
||||
|
||||
## EKSCluster
|
||||
|
||||
An EKSCluster is a managed resource that represents an AWS Elastic Kubernetes Service cluster.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `EKSCluster`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [EKSClusterSpec](#EKSClusterSpec) | An EKSClusterSpec defines the desired state of an EKSCluster.
|
||||
`status` | [EKSClusterStatus](#EKSClusterStatus) | An EKSClusterStatus represents the observed state of an EKSCluster.
|
||||
|
||||
|
||||
|
||||
## EKSClusterClass
|
||||
|
||||
An EKSClusterClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `EKSClusterClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [EKSClusterClassSpecTemplate](#EKSClusterClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned EKSCluster.
|
||||
|
||||
|
||||
|
||||
## EKSClusterClassSpecTemplate
|
||||
|
||||
An EKSClusterClassSpecTemplate is a template for the spec of a dynamically provisioned EKSCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [EKSClusterClass](#EKSClusterClass)
|
||||
|
||||
|
||||
|
||||
|
||||
EKSClusterClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
* [EKSClusterParameters](#EKSClusterParameters)
|
||||
|
||||
|
||||
## EKSClusterParameters
|
||||
|
||||
EKSClusterParameters define the desired state of an AWS Elastic Kubernetes Service cluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [EKSClusterClassSpecTemplate](#EKSClusterClassSpecTemplate)
|
||||
* [EKSClusterSpec](#EKSClusterSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`region` | [EKSRegion](#EKSRegion) | Region for this EKS Cluster.
|
||||
`roleARN` | string | RoleARN: The Amazon Resource Name (ARN) of the IAM role that provides permis sions for Amazon EKS to make calls to other AWS API operations on your behalf. For more information, see 'Amazon EKS Service IAM Role' in the Amazon EKS User Guide.
|
||||
`roleARNRef` | [IAMRoleARNReferencerForEKSCluster](#IAMRoleARNReferencerForEKSCluster) | RoleARNRef references to an IAMRole to retrieve its ARN
|
||||
`vpcId` | string | VPCID is the ID of the VPC.
|
||||
`vpcIdRef` | [VPCIDReferencerForEKSCluster](#VPCIDReferencerForEKSCluster) | VPCIDRef references to a VPC to and retrieves its vpcId
|
||||
`subnetIds` | []string | SubnetIDs of this EKS cluster.
|
||||
`subnetIdRefs` | [[]*github.com/crossplaneio/stack-aws/apis/compute/v1alpha3.SubnetIDReferencerForEKSCluster](#*github.com/crossplaneio/stack-aws/apis/compute/v1alpha3.SubnetIDReferencerForEKSCluster) | SubnetIDRefs is a set of referencers that each retrieve the subnetID from the referenced Subnet
|
||||
`securityGroupIds` | []string | SecurityGroupIDs of this EKS cluster.
|
||||
`securityGroupIdRefs` | [[]*github.com/crossplaneio/stack-aws/apis/compute/v1alpha3.SecurityGroupIDReferencerForEKSCluster](#*github.com/crossplaneio/stack-aws/apis/compute/v1alpha3.SecurityGroupIDReferencerForEKSCluster) | SecurityGroupIDRefs is a set of referencers that each retrieve the ID from the referenced SecurityGroup
|
||||
`clusterVersion` | Optional string | ClusterVersion: The desired Kubernetes version of this EKS Cluster. If you do not specify a value here, the latest version available is used.
|
||||
`workerNodes` | [WorkerNodesSpec](#WorkerNodesSpec) | WorkerNodes configuration for cloudformation
|
||||
`mapRoles` | Optional [[]MapRole](#MapRole) | MapRoles map AWS roles to one or more Kubernetes groups. A Default role that allows nodes access to communicate with master is autogenerated when a node pool comes online.
|
||||
`mapUsers` | Optional [[]MapUser](#MapUser) | MapUsers map AWS users to one or more Kubernetes groups.
|
||||
|
||||
|
||||
|
||||
## EKSClusterSpec
|
||||
|
||||
An EKSClusterSpec defines the desired state of an EKSCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [EKSCluster](#EKSCluster)
|
||||
|
||||
|
||||
|
||||
|
||||
EKSClusterSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [EKSClusterParameters](#EKSClusterParameters)
|
||||
|
||||
|
||||
## EKSClusterStatus
|
||||
|
||||
An EKSClusterStatus represents the observed state of an EKSCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [EKSCluster](#EKSCluster)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`state` | string | State of the cluster.
|
||||
`resourceName` | string | ClusterName of the cluster.
|
||||
`resourceVersion` | string | ClusterVersion of the cluster.
|
||||
`endpoint` | string | Endpoint for connecting to the cluster.
|
||||
`cloudformationStackId` | string | CloudFormationStackID of the Stack used to create node groups.
|
||||
|
||||
|
||||
EKSClusterStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## EKSRegion
|
||||
|
||||
EKSRegion represents an EKS enabled AWS region. Alias of string.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [EKSClusterParameters](#EKSClusterParameters)
|
||||
|
||||
|
||||
## IAMRoleARNReferencerForEKSCluster
|
||||
|
||||
IAMRoleARNReferencerForEKSCluster is an attribute referencer that retrieves IAMRoleARN from a referenced IAMRole
|
||||
|
||||
Appears in:
|
||||
|
||||
* [EKSClusterParameters](#EKSClusterParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
IAMRoleARNReferencerForEKSCluster supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-aws/apis/identity/v1alpha3.IAMRoleARNReferencer
|
||||
|
||||
|
||||
## MapRole
|
||||
|
||||
MapRole maps an AWS IAM role to one or more Kubernetes groups. See https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html and https://github.com/kubernetes-sigs/aws-iam-authenticator/blob/master/README.md
|
||||
|
||||
Appears in:
|
||||
|
||||
* [EKSClusterParameters](#EKSClusterParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`rolearn` | string | RoleARN to match, e.g. 'arn:aws:iam::000000000000:role/KubernetesNode'.
|
||||
`username` | string | Username (in Kubernetes) the RoleARN should map to.
|
||||
`groups` | []string | Groups (in Kubernetes) the RoleARN should map to.
|
||||
|
||||
|
||||
|
||||
## MapUser
|
||||
|
||||
MapUser maps an AWS IAM user to one or more Kubernetes groups. See https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html and https://github.com/kubernetes-sigs/aws-iam-authenticator/blob/master/README.md
|
||||
|
||||
Appears in:
|
||||
|
||||
* [EKSClusterParameters](#EKSClusterParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`userarn` | string | UserARN to match, e.g. 'arn:aws:iam::000000000000:user/Alice'
|
||||
`username` | string | Username (in Kubernetes) the UserARN should map to.
|
||||
`groups` | []string | Groups (in Kubernetes) the UserARN should map to.
|
||||
|
||||
|
||||
|
||||
## SecurityGroupIDReferencerForEKSCluster
|
||||
|
||||
SecurityGroupIDReferencerForEKSCluster is an attribute referencer that resolves ID from a referenced SecurityGroup
|
||||
|
||||
|
||||
|
||||
|
||||
SecurityGroupIDReferencerForEKSCluster supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.SecurityGroupIDReferencer
|
||||
|
||||
|
||||
## SecurityGroupIDReferencerForEKSWorkerNodes
|
||||
|
||||
SecurityGroupIDReferencerForEKSWorkerNodes is an attribute referencer that resolves ID from a referenced SecurityGroup
|
||||
|
||||
Appears in:
|
||||
|
||||
* [WorkerNodesSpec](#WorkerNodesSpec)
|
||||
|
||||
|
||||
|
||||
|
||||
SecurityGroupIDReferencerForEKSWorkerNodes supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.SecurityGroupIDReferencer
|
||||
|
||||
|
||||
## SubnetIDReferencerForEKSCluster
|
||||
|
||||
SubnetIDReferencerForEKSCluster is an attribute referencer that resolves SubnetID from a referenced Subnet
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetIDReferencerForEKSCluster supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.SubnetIDReferencer
|
||||
|
||||
|
||||
## VPCIDReferencerForEKSCluster
|
||||
|
||||
VPCIDReferencerForEKSCluster is an attribute referencer that resolves VPCID from a referenced VPC
|
||||
|
||||
Appears in:
|
||||
|
||||
* [EKSClusterParameters](#EKSClusterParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
VPCIDReferencerForEKSCluster supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.VPCIDReferencer
|
||||
|
||||
|
||||
## WorkerNodesSpec
|
||||
|
||||
WorkerNodesSpec - Worker node spec used to define cloudformation template that provisions workers for cluster
|
||||
|
||||
Appears in:
|
||||
|
||||
* [EKSClusterParameters](#EKSClusterParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`keyName` | Optional string | KeyName of the EC2 Key Pair to allow SSH access to the EC2 instances.
|
||||
`nodeImageId` | Optional string | NodeImageId that the EC2 instances should run. Defaults to the region's standard AMI.
|
||||
`nodeInstanceType` | string | NodeInstanceType of the EC2 instances.
|
||||
`nodeAutoScalingGroupMinSize` | Optional int | NodeAutoScalingGroupMinSize configures the minimum size of this node group's Autoscaling Group. Defaults to 1.
|
||||
`nodeAutoScalingGroupMaxSize` | Optional int | NodeAutoScalingGroupMaxSize configures the maximum size of this node group's Autoscaling Group. Defaults to 3.
|
||||
`nodeVolumeSize` | Optional int | NodeVolumeSize configures the volume size in GB. Defaults to 20.
|
||||
`bootstrapArguments` | Optional string | BootstrapArguments to pass to the bootstrap script. See files/bootstrap.sh in https://github.com/awslabs/amazon-eks-ami
|
||||
`nodeGroupName` | Optional string | NodeGroupName is a unique identifier for the Node Group.
|
||||
`clusterControlPlaneSecurityGroup` | Optional string | ClusterControlPlaneSecurityGroup configures the security group of the cluster control plane in order to allow communication to this node group.
|
||||
`clusterControlPlaneSecurityGroupRef` | [SecurityGroupIDReferencerForEKSWorkerNodes](#SecurityGroupIDReferencerForEKSWorkerNodes) | ClusterControlPlaneSecurityGroupRef references to a SecurityGroup to retrieve its ID
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
# database.aws.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for AWS database services such as RDS.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [DBSubnetGroup](#DBSubnetGroup)
|
||||
|
||||
## DBSubnetGroup
|
||||
|
||||
A DBSubnetGroup is a managed resource that represents an AWS VPC Database Subnet Group.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `DBSubnetGroup`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [DBSubnetGroupSpec](#DBSubnetGroupSpec) | A DBSubnetGroupSpec defines the desired state of a DBSubnetGroup.
|
||||
`status` | [DBSubnetGroupStatus](#DBSubnetGroupStatus) | A DBSubnetGroupStatus represents the observed state of a DBSubnetGroup.
|
||||
|
||||
|
||||
|
||||
## DBSubnetGroupExternalStatus
|
||||
|
||||
DBSubnetGroupExternalStatus keeps the state for the external resource
|
||||
|
||||
Appears in:
|
||||
|
||||
* [DBSubnetGroupStatus](#DBSubnetGroupStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`groupArn` | string | The Amazon Resource Name (ARN) for the DB subnet group.
|
||||
`groupStatus` | string | Provides the status of the DB subnet group.
|
||||
`subnets` | [[]Subnet](#Subnet) | Contains a list of Subnet elements.
|
||||
`vpcId` | string | Provides the VpcId of the DB subnet group.
|
||||
|
||||
|
||||
|
||||
## DBSubnetGroupNameReferencer
|
||||
|
||||
DBSubnetGroupNameReferencer is used to get a Name from another DBSubnetGroup
|
||||
|
||||
|
||||
|
||||
|
||||
DBSubnetGroupNameReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## DBSubnetGroupParameters
|
||||
|
||||
DBSubnetGroupParameters define the desired state of an AWS VPC Database Subnet Group.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [DBSubnetGroupSpec](#DBSubnetGroupSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`description` | string | The description for the DB subnet group.
|
||||
`groupName` | string | The name for the DB subnet group. This value is stored as a lowercase string.
|
||||
`subnetIds` | []string | The EC2 Subnet IDs for the DB subnet group.
|
||||
`subnetIdRefs` | [[]*github.com/crossplaneio/stack-aws/apis/database/v1alpha3.SubnetIDReferencerForDBSubnetGroup](#*github.com/crossplaneio/stack-aws/apis/database/v1alpha3.SubnetIDReferencerForDBSubnetGroup) | SubnetIDRefs is a set of referencers that each retrieve the subnetID from the referenced Subnet
|
||||
`tags` | [[]Tag](#Tag) | A list of tags. For more information, see Tagging Amazon RDS Resources (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) in the Amazon RDS User Guide.
|
||||
|
||||
|
||||
|
||||
## DBSubnetGroupSpec
|
||||
|
||||
A DBSubnetGroupSpec defines the desired state of a DBSubnetGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [DBSubnetGroup](#DBSubnetGroup)
|
||||
|
||||
|
||||
|
||||
|
||||
DBSubnetGroupSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [DBSubnetGroupParameters](#DBSubnetGroupParameters)
|
||||
|
||||
|
||||
## DBSubnetGroupStatus
|
||||
|
||||
A DBSubnetGroupStatus represents the observed state of a DBSubnetGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [DBSubnetGroup](#DBSubnetGroup)
|
||||
|
||||
|
||||
|
||||
|
||||
DBSubnetGroupStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [DBSubnetGroupExternalStatus](#DBSubnetGroupExternalStatus)
|
||||
|
||||
|
||||
## Subnet
|
||||
|
||||
Subnet represents a aws subnet
|
||||
|
||||
Appears in:
|
||||
|
||||
* [DBSubnetGroupExternalStatus](#DBSubnetGroupExternalStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`subnetID` | string | Specifies the identifier of the subnet.
|
||||
`subnetStatus` | string | Specifies the status of the subnet.
|
||||
|
||||
|
||||
|
||||
## SubnetIDReferencerForDBSubnetGroup
|
||||
|
||||
SubnetIDReferencerForDBSubnetGroup is an attribute referencer that resolves SubnetID from a referenced Subnet
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetIDReferencerForDBSubnetGroup supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.SubnetIDReferencer
|
||||
|
||||
|
||||
## Tag
|
||||
|
||||
Tag defines a tag
|
||||
|
||||
Appears in:
|
||||
|
||||
* [DBSubnetGroupParameters](#DBSubnetGroupParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`key` | string | Key is the name of the tag.
|
||||
`value` | string | Value is the value of the tag.
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,545 @@
|
|||
# database.aws.crossplane.io/v1beta1 API Reference
|
||||
|
||||
Package v1beta1 contains managed resources for AWS database services such as RDS.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [RDSInstance](#RDSInstance)
|
||||
* [RDSInstanceClass](#RDSInstanceClass)
|
||||
|
||||
## RDSInstance
|
||||
|
||||
An RDSInstance is a managed resource that represents an AWS Relational Database Service instance.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.aws.crossplane.io/v1beta1`
|
||||
`kind` | string | `RDSInstance`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [RDSInstanceSpec](#RDSInstanceSpec) | An RDSInstanceSpec defines the desired state of an RDSInstance.
|
||||
`status` | [RDSInstanceStatus](#RDSInstanceStatus) | An RDSInstanceStatus represents the observed state of an RDSInstance.
|
||||
|
||||
|
||||
|
||||
## RDSInstanceClass
|
||||
|
||||
An RDSInstanceClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.aws.crossplane.io/v1beta1`
|
||||
`kind` | string | `RDSInstanceClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [RDSInstanceClassSpecTemplate](#RDSInstanceClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned RDSInstance.
|
||||
|
||||
|
||||
|
||||
## AvailabilityZone
|
||||
|
||||
AvailabilityZone contains Availability Zone information. This data type is used as an element in the following data type: * OrderableDBInstanceOption Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/AvailabilityZone
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetInRDS](#SubnetInRDS)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name of the Availability Zone.
|
||||
|
||||
|
||||
|
||||
## CloudwatchLogsExportConfiguration
|
||||
|
||||
CloudwatchLogsExportConfiguration is the configuration setting for the log types to be enabled for export to CloudWatch Logs for a specific DB instance or DB cluster. The EnableLogTypes and DisableLogTypes arrays determine which logs will be exported (or not exported) to CloudWatch Logs. The values within these arrays depend on the DB engine being used. For more information, see Publishing Database Logs to Amazon CloudWatch Logs (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch) in the Amazon RDS User Guide. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/CloudwatchLogsExportConfiguration
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceParameters](#RDSInstanceParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`disableLogTypes` | []string | DisableLogTypes is the list of log types to disable.
|
||||
`enableLogTypes` | []string | EnableLogTypes is the list of log types to enable.
|
||||
|
||||
|
||||
|
||||
## DBInstanceStatusInfo
|
||||
|
||||
DBInstanceStatusInfo provides a list of status information for a DB instance. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/DBInstanceStatusInfo
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceObservation](#RDSInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`message` | string | Message is the details of the error if there is an error for the instance. If the instance is not in an error state, this value is blank.
|
||||
`normal` | bool | Normal is true if the instance is operating normally, or false if the instance is in an error state.
|
||||
`status` | string | Status of the DB instance. For a StatusType of read replica, the values can be replicating, replication stop point set, replication stop point reached, error, stopped, or terminated.
|
||||
`statusType` | string | StatusType is currently "read replication."
|
||||
|
||||
|
||||
|
||||
## DBParameterGroupStatus
|
||||
|
||||
DBParameterGroupStatus is the status of the DB parameter group. This data type is used as a response element in the following actions: * CreateDBInstance * CreateDBInstanceReadReplica * DeleteDBInstance * ModifyDBInstance * RebootDBInstance * RestoreDBInstanceFromDBSnapshot Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/DBParameterGroupStatus
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceObservation](#RDSInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`dbParameterGroupName` | string | DBParameterGroupName is the name of the DP parameter group.
|
||||
`parameterApplyStatus` | string | ParameterApplyStatus is the status of parameter updates.
|
||||
|
||||
|
||||
|
||||
## DBSecurityGroupMembership
|
||||
|
||||
DBSecurityGroupMembership is used as a response element in the following actions: * ModifyDBInstance * RebootDBInstance * RestoreDBInstanceFromDBSnapshot * RestoreDBInstanceToPointInTime Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/DBSecurityGroupMembership
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceObservation](#RDSInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`dbSecurityGroupName` | string | DBSecurityGroupName is the name of the DB security group.
|
||||
`status` | string | Status is the status of the DB security group.
|
||||
|
||||
|
||||
|
||||
## DBSubnetGroupInRDS
|
||||
|
||||
DBSubnetGroupInRDS contains the details of an Amazon RDS DB subnet group. This data type is used as a response element in the DescribeDBSubnetGroups action. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/DBSubnetGroup
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceObservation](#RDSInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`dbSubnetGroupArn` | string | DBSubnetGroupARN is the Amazon Resource Name (ARN) for the DB subnet group.
|
||||
`dbSubnetGroupDescription` | string | DBSubnetGroupDescription provides the description of the DB subnet group.
|
||||
`dbSubnetGroupName` | string | DBSubnetGroupName is the name of the DB subnet group.
|
||||
`subnetGroupStatus` | string | SubnetGroupStatus provides the status of the DB subnet group.
|
||||
`subnets` | [[]SubnetInRDS](#SubnetInRDS) | Subnets contains a list of Subnet elements.
|
||||
`vpcId` | string | VPCID provides the VPCID of the DB subnet group.
|
||||
|
||||
|
||||
|
||||
## DBSubnetGroupNameReferencerForRDSInstance
|
||||
|
||||
DBSubnetGroupNameReferencerForRDSInstance is an attribute referencer that retrieves the name from a referenced DBSubnetGroup
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceParameters](#RDSInstanceParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
DBSubnetGroupNameReferencerForRDSInstance supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-aws/apis/database/v1alpha3.DBSubnetGroupNameReferencer
|
||||
|
||||
|
||||
## DomainMembership
|
||||
|
||||
DomainMembership is an Active Directory Domain membership record associated with the DB instance. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/DomainMembership
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceObservation](#RDSInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`domain` | string | Domain is the identifier of the Active Directory Domain.
|
||||
`fqdn` | string | FQDN us the fully qualified domain name of the Active Directory Domain.
|
||||
`iamRoleName` | string | IAMRoleName is the name of the IAM role to be used when making API calls to the Directory Service.
|
||||
`status` | string | Status of the DB instance's Active Directory Domain membership, such as joined, pending-join, failed etc).
|
||||
|
||||
|
||||
|
||||
## Endpoint
|
||||
|
||||
Endpoint is used as a response element in the following actions: * CreateDBInstance * DescribeDBInstances * DeleteDBInstance Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/Endpoint
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceObservation](#RDSInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`address` | string | Address specifies the DNS address of the DB instance.
|
||||
`hostedZoneId` | string | HostedZoneID specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
|
||||
`port` | int | Port specifies the port that the database engine is listening on.
|
||||
|
||||
|
||||
|
||||
## IAMRoleARNReferencerForRDSInstanceMonitoringRole
|
||||
|
||||
IAMRoleARNReferencerForRDSInstanceMonitoringRole is an attribute referencer that retrieves an RDSInstance's MonitoringRoleARN from a referenced IAMRole.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceParameters](#RDSInstanceParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
IAMRoleARNReferencerForRDSInstanceMonitoringRole supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-aws/apis/identity/v1alpha3.IAMRoleARNReferencer
|
||||
|
||||
|
||||
## IAMRoleNameReferencerForRDSInstanceDomainRole
|
||||
|
||||
IAMRoleNameReferencerForRDSInstanceDomainRole is an attribute referencer that retrieves an RDSInstance's DomainRoleName from a referenced IAMRole.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceParameters](#RDSInstanceParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
IAMRoleNameReferencerForRDSInstanceDomainRole supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-aws/apis/identity/v1alpha3.IAMRoleNameReferencer
|
||||
|
||||
|
||||
## OptionGroupMembership
|
||||
|
||||
OptionGroupMembership provides information on the option groups the DB instance is a member of. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/OptionGroupMembership
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceObservation](#RDSInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`optionGroupName` | string | OptionGroupName is the name of the option group that the instance belongs to.
|
||||
`status` | string | Status is the status of the DB instance's option group membership. Valid values are: in-sync, pending-apply, pending-removal, pending-maintenance-apply, pending-maintenance-removal, applying, removing, and failed.
|
||||
|
||||
|
||||
|
||||
## PendingCloudwatchLogsExports
|
||||
|
||||
PendingCloudwatchLogsExports is a list of the log types whose configuration is still pending. In other words, these log types are in the process of being activated or deactivated. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/PendingCloudwatchLogsExports
|
||||
|
||||
Appears in:
|
||||
|
||||
* [PendingModifiedValues](#PendingModifiedValues)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`logTypesToDisable` | []string | LogTypesToDisable is list of log types that are in the process of being enabled. After they are enabled, these log types are exported to CloudWatch Logs.
|
||||
`logTypesToEnable` | []string | LogTypesToEnable is the log types that are in the process of being deactivated. After they are deactivated, these log types aren't exported to CloudWatch Logs.
|
||||
|
||||
|
||||
|
||||
## PendingModifiedValues
|
||||
|
||||
PendingModifiedValues is used as a response element in the ModifyDBInstance action. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/PendingModifiedValues
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceObservation](#RDSInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`allocatedStorage` | int | AllocatedStorage contains the new AllocatedStorage size for the DB instance that will be applied or is currently being applied.
|
||||
`backupRetentionPeriod` | int | BackupRetentionPeriod specifies the pending number of days for which automated backups are retained.
|
||||
`caCertificateIdentifier` | string | CACertificateIdentifier specifies the identifier of the CA certificate for the DB instance.
|
||||
`dbInstanceClass` | string | DBInstanceClass contains the new DBInstanceClass for the DB instance that will be applied or is currently being applied.
|
||||
`dbSubnetGroupName` | string | DBSubnetGroupName is the new DB subnet group for the DB instance.
|
||||
`engineVersion` | string | EngineVersion indicates the database engine version.
|
||||
`iops` | int | IOPS specifies the new Provisioned IOPS value for the DB instance that will be applied or is currently being applied.
|
||||
`licenseModel` | string | LicenseModel is the license model for the DB instance. Valid values: license-included | bring-your-own-license | general-public-license
|
||||
`multiAZ` | bool | MultiAZ indicates that the Single-AZ DB instance is to change to a Multi-AZ deployment.
|
||||
`pendingCloudwatchLogsExports` | [PendingCloudwatchLogsExports](#PendingCloudwatchLogsExports) | PendingCloudwatchLogsExports is a list of the log types whose configuration is still pending. In other words, these log types are in the process of being activated or deactivated.
|
||||
`port` | int | Port specifies the pending port for the DB instance.
|
||||
`processorFeatures` | [[]ProcessorFeature](#ProcessorFeature) | ProcessorFeatures is the number of CPU cores and the number of threads per core for the DB instance class of the DB instance.
|
||||
`storageType` | string | StorageType specifies the storage type to be associated with the DB instance.
|
||||
|
||||
|
||||
|
||||
## ProcessorFeature
|
||||
|
||||
ProcessorFeature is a processor feature entry. For more information, see Configuring the Processor of the DB Instance Class (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html#USER_ConfigureProcessor) in the Amazon RDS User Guide. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/ProcessorFeature
|
||||
|
||||
Appears in:
|
||||
|
||||
* [PendingModifiedValues](#PendingModifiedValues)
|
||||
* [RDSInstanceParameters](#RDSInstanceParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name of the processor feature. Valid names are coreCount and threadsPerCore.
|
||||
`value` | string | Value of a processor feature name.
|
||||
|
||||
|
||||
|
||||
## RDSInstanceClassSpecTemplate
|
||||
|
||||
An RDSInstanceClassSpecTemplate is a template for the spec of a dynamically provisioned RDSInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceClass](#RDSInstanceClass)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [RDSInstanceParameters](#RDSInstanceParameters) | RDSInstanceParameters define the desired state of an AWS Relational Database Service instance.
|
||||
|
||||
|
||||
RDSInstanceClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
|
||||
|
||||
## RDSInstanceObservation
|
||||
|
||||
RDSInstanceObservation is the representation of the current state that is observed.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceStatus](#RDSInstanceStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`dbInstanceStatus` | string | DBInstanceStatus specifies the current state of this database.
|
||||
`dbInstanceArn` | string | DBInstanceArn is the Amazon Resource Name (ARN) for the DB instance.
|
||||
`dbParameterGroups` | [[]DBParameterGroupStatus](#DBParameterGroupStatus) | DBParameterGroups provides the list of DB parameter groups applied to this DB instance.
|
||||
`dbSecurityGroups` | [[]DBSecurityGroupMembership](#DBSecurityGroupMembership) | DBSecurityGroups provides List of DB security group elements containing only DBSecurityGroup.Name and DBSecurityGroup.Status subelements.
|
||||
`dbSubnetGroup` | [DBSubnetGroupInRDS](#DBSubnetGroupInRDS) | DBSubnetGroup specifies information on the subnet group associated with the DB instance, including the name, description, and subnets in the subnet group.
|
||||
`dbInstancePort` | int | DBInstancePort specifies the port that the DB instance listens on. If the DB instance is part of a DB cluster, this can be a different port than the DB cluster port.
|
||||
`dbResourceId` | string | DBResourceID is the AWS Region-unique, immutable identifier for the DB instance. This identifier is found in AWS CloudTrail log entries whenever the AWS KMS key for the DB instance is accessed.
|
||||
`domainMemberships` | [[]DomainMembership](#DomainMembership) | DomainMemberships is the Active Directory Domain membership records associated with the DB instance.
|
||||
`instanceCreateTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | InstanceCreateTime provides the date and time the DB instance was created.
|
||||
`endpoint` | [Endpoint](#Endpoint) | Endpoint specifies the connection endpoint.
|
||||
`enhancedMonitoringResourceArn` | string | EnhancedMonitoringResourceArn is the Amazon Resource Name (ARN) of the Amazon CloudWatch Logs log stream that receives the Enhanced Monitoring metrics data for the DB instance.
|
||||
`latestRestorableTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | LatestRestorableTime specifies the latest time to which a database can be restored with point-in-time restore.
|
||||
`optionGroupMemberships` | [[]OptionGroupMembership](#OptionGroupMembership) | OptionGroupMemberships provides the list of option group memberships for this DB instance.
|
||||
`pendingModifiedValues` | [PendingModifiedValues](#PendingModifiedValues) | PendingModifiedValues specifies that changes to the DB instance are pending. This element is only included when changes are pending. Specific changes are identified by subelements.
|
||||
`performanceInsightsEnabled` | bool | PerformanceInsightsEnabled is true if Performance Insights is enabled for the DB instance, and otherwise false.
|
||||
`readReplicaDBClusterIdentifiers` | []string | ReadReplicaDBClusterIdentifiers contains one or more identifiers of Aurora DB clusters to which the RDS DB instance is replicated as a Read Replica. For example, when you create an Aurora Read Replica of an RDS MySQL DB instance, the Aurora MySQL DB cluster for the Aurora Read Replica is shown. This output does not contain information about cross region Aurora Read Replicas.
|
||||
`readReplicaDBInstanceIdentifiers` | []string | ReadReplicaDBInstanceIdentifiers contains one or more identifiers of the Read Replicas associated with this DB instance.
|
||||
`readReplicaSourceDBInstanceIdentifier` | string | ReadReplicaSourceDBInstanceIdentifier contains the identifier of the source DB instance if this DB instance is a Read Replica.
|
||||
`secondaryAvailabilityZone` | string | SecondaryAvailabilityZone specifies the name of the secondary Availability Zone for a DB instance with multi-AZ support when it is present.
|
||||
`statusInfos` | [[]DBInstanceStatusInfo](#DBInstanceStatusInfo) | StatusInfos is the status of a Read Replica. If the instance is not a Read Replica, this is blank.
|
||||
`vpcSecurityGroups` | [[]VPCSecurityGroupMembership](#VPCSecurityGroupMembership) | VPCSecurityGroups provides a list of VPC security group elements that the DB instance belongs to.
|
||||
|
||||
|
||||
|
||||
## RDSInstanceParameters
|
||||
|
||||
RDSInstanceParameters define the desired state of an AWS Relational Database Service instance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceClassSpecTemplate](#RDSInstanceClassSpecTemplate)
|
||||
* [RDSInstanceSpec](#RDSInstanceSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`allocatedStorage` | Optional int | AllocatedStorage is the amount of storage (in gibibytes) to allocate for the DB instance. Type: Integer Amazon Aurora Not applicable. Aurora cluster volumes automatically grow as the amount of data in your database increases, though you are only charged for the space that you use in an Aurora cluster volume. MySQL Constraints to the amount of storage for each storage type are the following: * General Purpose (SSD) storage (gp2): Must be an integer from 20 to 16384. * Provisioned IOPS storage (io1): Must be an integer from 100 to 16384. * Magnetic storage (standard): Must be an integer from 5 to 3072. MariaDB Constraints to the amount of storage for each storage type are the following: * General Purpose (SSD) storage (gp2): Must be an integer from 20 to 16384. * Provisioned IOPS storage (io1): Must be an integer from 100 to 16384. * Magnetic storage (standard): Must be an integer from 5 to 3072. PostgreSQL Constraints to the amount of storage for each storage type are the following: * General Purpose (SSD) storage (gp2): Must be an integer from 20 to 16384. * Provisioned IOPS storage (io1): Must be an integer from 100 to 16384. * Magnetic storage (standard): Must be an integer from 5 to 3072. Oracle Constraints to the amount of storage for each storage type are the following: * General Purpose (SSD) storage (gp2): Must be an integer from 20 to 16384. * Provisioned IOPS storage (io1): Must be an integer from 100 to 16384. * Magnetic storage (standard): Must be an integer from 10 to 3072. SQL Server Constraints to the amount of storage for each storage type are the following: * General Purpose (SSD) storage (gp2): Enterprise and Standard editions: Must be an integer from 200 to 16384. Web and Express editions: Must be an integer from 20 to 16384. * Provisioned IOPS storage (io1): Enterprise and Standard editions: Must be an integer from 200 to 16384. Web and Express editions: Must be an integer from 100 to 16384. * Magnetic storage (standard): Enterprise and Standard editions: Must be an integer from 200 to 1024. Web and Express editions: Must be an integer from 20 to 1024.
|
||||
`autoMinorVersionUpgrade` | Optional bool | AutoMinorVersionUpgrade indicates that minor engine upgrades are applied automatically to the DB instance during the maintenance window. Default: true
|
||||
`availabilityZone` | Optional string | AvailabilityZone is the EC2 Availability Zone that the DB instance is created in. For information on AWS Regions and Availability Zones, see Regions and Availability Zones (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html). Default: A random, system-chosen Availability Zone in the endpoint's AWS Region. Example: us-east-1d Constraint: The AvailabilityZone parameter can't be specified if the MultiAZ parameter is set to true. The specified Availability Zone must be in the same AWS Region as the current endpoint.
|
||||
`backupRetentionPeriod` | Optional int | BackupRetentionPeriod is the number of days for which automated backups are retained. Setting this parameter to a positive number enables backups. Setting this parameter to 0 disables automated backups. Amazon Aurora Not applicable. The retention period for automated backups is managed by the DB cluster. For more information, see CreateDBCluster. Default: 1 Constraints: * Must be a value from 0 to 35 * Cannot be set to 0 if the DB instance is a source to Read Replicas
|
||||
`caCertificateIdentifier` | Optional string | CACertificateIdentifier indicates the certificate that needs to be associated with the instance.
|
||||
`characterSetName` | Optional string | CharacterSetName indicates that the DB instance should be associated with the specified CharacterSet for supported engines, Amazon Aurora Not applicable. The character set is managed by the DB cluster. For more information, see CreateDBCluster.
|
||||
`copyTagsToSnapshot` | Optional bool | CopyTagsToSnapshot should be true to copy all tags from the DB instance to snapshots of the DB instance, and otherwise false. The default is false.
|
||||
`dbClusterIdentifier` | Optional string | DBClusterIdentifier is the identifier of the DB cluster that the instance will belong to. For information on creating a DB cluster, see CreateDBCluster. Type: String
|
||||
`dbClusterParameterGroupName` | Optional string | DBClusterParameterGroupName is the name of the DB cluster parameter group to use for the DB cluster.
|
||||
`dbInstanceClass` | string | DBInstanceClass is the compute and memory capacity of the DB instance, for example, db.m4.large. Not all DB instance classes are available in all AWS Regions, or for all database engines. For the full list of DB instance classes, and availability for your engine, see DB Instance Class (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html) in the Amazon RDS User Guide.
|
||||
`dbName` | Optional string | DBName is the meaning of this parameter differs according to the database engine you use. Type: String MySQL The name of the database to create when the DB instance is created. If this parameter is not specified, no database is created in the DB instance. Constraints: * Must contain 1 to 64 letters or numbers. * Cannot be a word reserved by the specified database engine MariaDB The name of the database to create when the DB instance is created. If this parameter is not specified, no database is created in the DB instance. Constraints: * Must contain 1 to 64 letters or numbers. * Cannot be a word reserved by the specified database engine PostgreSQL The name of the database to create when the DB instance is created. If this parameter is not specified, the default "postgres" database is created in the DB instance. Constraints: * Must contain 1 to 63 letters, numbers, or underscores. * Must begin with a letter or an underscore. Subsequent characters can be letters, underscores, or digits (0-9). * Cannot be a word reserved by the specified database engine Oracle The Oracle System ID (SID) of the created DB instance. If you specify null, the default value ORCL is used. You can't specify the string NULL, or any other reserved word, for DBName. Default: ORCL Constraints: * Cannot be longer than 8 characters SQL Server Not applicable. Must be null. Amazon Aurora The name of the database to create when the primary instance of the DB cluster is created. If this parameter is not specified, no database is created in the DB instance. Constraints: * Must contain 1 to 64 letters or numbers. * Cannot be a word reserved by the specified database engine
|
||||
`dbSecurityGroups` | Optional []string | DBSecurityGroups is a list of DB security groups to associate with this DB instance. Default: The default DB security group for the database engine.
|
||||
`dbSubnetGroupName` | Optional string | DBSubnetGroupName is a DB subnet group to associate with this DB instance. If there is no DB subnet group, then it is a non-VPC DB instance.
|
||||
`dbSubnetGroupNameRef` | Optional [DBSubnetGroupNameReferencerForRDSInstance](#DBSubnetGroupNameReferencerForRDSInstance) | DBSubnetGroupNameRef is a reference to a DBSubnetGroup used to set DBSubnetGroupName.
|
||||
`deletionProtection` | Optional bool | DeletionProtection indicates if the DB instance should have deletion protection enabled. The database can't be deleted when this value is set to true. The default is false. For more information, see Deleting a DB Instance (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DeleteInstance.html).
|
||||
`enableCloudwatchLogsExports` | Optional []string | EnableCloudwatchLogsExports is the list of log types that need to be enabled for exporting to CloudWatch Logs. The values in the list depend on the DB engine being used. For more information, see Publishing Database Logs to Amazon CloudWatch Logs (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch) in the Amazon Relational Database Service User Guide.
|
||||
`enableIAMDatabaseAuthentication` | Optional bool | EnableIAMDatabaseAuthentication should be true to enable mapping of AWS Identity and Access Management (IAM) accounts to database accounts, and otherwise false. You can enable IAM database authentication for the following database engines: Amazon Aurora Not applicable. Mapping AWS IAM accounts to database accounts is managed by the DB cluster. For more information, see CreateDBCluster. MySQL * For MySQL 5.6, minor version 5.6.34 or higher * For MySQL 5.7, minor version 5.7.16 or higher Default: false
|
||||
`enablePerformanceInsights` | Optional bool | EnablePerformanceInsights should be true to enable Performance Insights for the DB instance, and otherwise false. For more information, see Using Amazon Performance Insights (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html) in the Amazon Relational Database Service User Guide.
|
||||
`engine` | string | Engine is the name of the database engine to be used for this instance. Not every database engine is available for every AWS Region. Valid Values: * aurora (for MySQL 5.6-compatible Aurora) * aurora-mysql (for MySQL 5.7-compatible Aurora) * aurora-postgresql * mariadb * mysql * oracle-ee * oracle-se2 * oracle-se1 * oracle-se * postgres * sqlserver-ee * sqlserver-se * sqlserver-ex * sqlserver-web Engine is a required field
|
||||
`engineVersion` | Optional string | EngineVersion is the version number of the database engine to use. For a list of valid engine versions, call DescribeDBEngineVersions. The following are the database engines and links to information about the major and minor versions that are available with Amazon RDS. Not every database engine is available for every AWS Region. Amazon Aurora Not applicable. The version number of the database engine to be used by the DB instance is managed by the DB cluster. For more information, see CreateDBCluster. MariaDB See MariaDB on Amazon RDS Versions (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html#MariaDB.Concepts.VersionMgmt) in the Amazon RDS User Guide. Microsoft SQL Server See Version and Feature Support on Amazon RDS (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.FeatureSupport) in the Amazon RDS User Guide. MySQL See MySQL on Amazon RDS Versions (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.VersionMgmt) in the Amazon RDS User Guide. Oracle See Oracle Database Engine Release Notes (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.PatchComposition.html) in the Amazon RDS User Guide. PostgreSQL See Supported PostgreSQL Database Versions (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.DBVersions) in the Amazon RDS User Guide.
|
||||
`iops` | Optional int | IOPS is the amount of Provisioned IOPS (input/output operations per second) to be initially allocated for the DB instance. For information about valid IOPS values, see see Amazon RDS Provisioned IOPS Storage to Improve Performance (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS) in the Amazon RDS User Guide. Constraints: Must be a multiple between 1 and 50 of the storage amount for the DB instance. Must also be an integer multiple of 1000. For example, if the size of your DB instance is 500 GiB, then your IOPS value can be 2000, 3000, 4000, or 5000.
|
||||
`kmsKeyId` | Optional string | KMSKeyID for an encrypted DB instance. The KMS key identifier is the Amazon Resource Name (ARN) for the KMS encryption key. If you are creating a DB instance with the same AWS account that owns the KMS encryption key used to encrypt the new DB instance, then you can use the KMS key alias instead of the ARN for the KM encryption key. Amazon Aurora Not applicable. The KMS key identifier is managed by the DB cluster. For more information, see CreateDBCluster. If the StorageEncrypted parameter is true, and you do not specify a value for the KMSKeyID parameter, then Amazon RDS will use your default encryption key. AWS KMS creates the default encryption key for your AWS account. Your AWS account has a different default encryption key for each AWS Region.
|
||||
`licenseModel` | Optional string | LicenseModel information for this DB instance. Valid values: license-included | bring-your-own-license | general-public-license
|
||||
`masterUserPassword` | Optional string | MasterUserPassword is the password for the master user. The password can include any printable ASCII character except "/", """, or "@". Amazon Aurora Not applicable. The password for the master user is managed by the DB cluster. For more information, see CreateDBCluster. MariaDB Constraints: Must contain from 8 to 41 characters. Microsoft SQL Server Constraints: Must contain from 8 to 128 characters. MySQL Constraints: Must contain from 8 to 41 characters. Oracle Constraints: Must contain from 8 to 30 characters. PostgreSQL Constraints: Must contain from 8 to 128 characters.
|
||||
`masterUsername` | Optional string | MasterUsername is the name for the master user. Amazon Aurora Not applicable. The name for the master user is managed by the DB cluster. For more information, see CreateDBCluster. MariaDB Constraints: * Required for MariaDB. * Must be 1 to 16 letters or numbers. * Cannot be a reserved word for the chosen database engine. Microsoft SQL Server Constraints: * Required for SQL Server. * Must be 1 to 128 letters or numbers. * The first character must be a letter. * Cannot be a reserved word for the chosen database engine. MySQL Constraints: * Required for MySQL. * Must be 1 to 16 letters or numbers. * First character must be a letter. * Cannot be a reserved word for the chosen database engine. Oracle Constraints: * Required for Oracle. * Must be 1 to 30 letters or numbers. * First character must be a letter. * Cannot be a reserved word for the chosen database engine. PostgreSQL Constraints: * Required for PostgreSQL. * Must be 1 to 63 letters or numbers. * First character must be a letter. * Cannot be a reserved word for the chosen database engine.
|
||||
`monitoringInterval` | Optional int | MonitoringInterval is the interval, in seconds, between points when Enhanced Monitoring metrics are collected for the DB instance. To disable collecting Enhanced Monitoring metrics, specify 0. The default is 0. If MonitoringRoleARN is specified, then you must also set MonitoringInterval to a value other than 0. Valid Values: 0, 1, 5, 10, 15, 30, 60
|
||||
`monitoringRoleArn` | Optional string | MonitoringRoleARN is the ARN for the IAM role that permits RDS to send enhanced monitoring metrics to Amazon CloudWatch Logs. For example, arn:aws:iam:123456789012:role/emaccess. For information on creating a monitoring role, go to Setting Up and Enabling Enhanced Monitoring (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html#USER_Monitoring.OS.Enabling) in the Amazon RDS User Guide. If MonitoringInterval is set to a value other than 0, then you must supply a MonitoringRoleARN value.
|
||||
`monitoringRoleArnRef` | Optional [IAMRoleARNReferencerForRDSInstanceMonitoringRole](#IAMRoleARNReferencerForRDSInstanceMonitoringRole) | MonitoringRoleARNRef is a reference to an IAMRole used to set MonitoringRoleARN.
|
||||
`multiAZ` | Optional bool | MultiAZ specifies if the DB instance is a Multi-AZ deployment. You can't set the AvailabilityZone parameter if the MultiAZ parameter is set to true.
|
||||
`performanceInsightsKMSKeyId` | Optional string | PerformanceInsightsKMSKeyID is the AWS KMS key identifier for encryption of Performance Insights data. The KMS key ID is the Amazon Resource Name (ARN), KMS key identifier, or the KMS key alias for the KMS encryption key.
|
||||
`performanceInsightsRetentionPeriod` | Optional int | PerformanceInsightsRetentionPeriod is the amount of time, in days, to retain Performance Insights data. Valid values are 7 or 731 (2 years).
|
||||
`port` | Optional int | Port number on which the database accepts connections. MySQL Default: 3306 Valid Values: 1150-65535 Type: Integer MariaDB Default: 3306 Valid Values: 1150-65535 Type: Integer PostgreSQL Default: 5432 Valid Values: 1150-65535 Type: Integer Oracle Default: 1521 Valid Values: 1150-65535 SQL Server Default: 1433 Valid Values: 1150-65535 except for 1434, 3389, 47001, 49152, and 49152 through 49156. Amazon Aurora Default: 3306 Valid Values: 1150-65535 Type: Integer
|
||||
`preferredBackupWindow` | Optional string | PreferredBackupWindow is the daily time range during which automated backups are created if automated backups are enabled, using the BackupRetentionPeriod parameter. For more information, see The Backup Window (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.BackupWindow) in the Amazon RDS User Guide. Amazon Aurora Not applicable. The daily time range for creating automated backups is managed by the DB cluster. For more information, see CreateDBCluster. The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region. To see the time blocks available, see Adjusting the Preferred DB Instance Maintenance Window (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html#AdjustingTheMaintenanceWindow) in the Amazon RDS User Guide. Constraints: * Must be in the format hh24:mi-hh24:mi. * Must be in Universal Coordinated Time (UTC). * Must not conflict with the preferred maintenance window. * Must be at least 30 minutes.
|
||||
`preferredMaintenanceWindow` | Optional string | PreferredMaintenanceWindow is the time range each week during which system maintenance can occur, in Universal Coordinated Time (UTC). For more information, see Amazon RDS Maintenance Window (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html#Concepts.DBMaintenance). Format: ddd:hh24:mi-ddd:hh24:mi The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region, occurring on a random day of the week. Valid Days: Mon, Tue, Wed, Thu, Fri, Sat, Sun. Constraints: Minimum 30-minute window.
|
||||
`processorFeatures` | Optional [[]ProcessorFeature](#ProcessorFeature) | ProcessorFeatures is the number of CPU cores and the number of threads per core for the DB instance class of the DB instance.
|
||||
`promotionTier` | Optional int | PromotionTier specifies the order in which an Aurora Replica is promoted to the primary instance after a failure of the existing primary instance. For more information, see Fault Tolerance for an Aurora DB Cluster (http://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Managing.Backups.html#Aurora.Managing.FaultTolerance) in the Amazon Aurora User Guide. Default: 1 Valid Values: 0 - 15
|
||||
`publiclyAccessible` | Optional bool | PubliclyAccessible specifies the accessibility options for the DB instance. A value of true specifies an Internet-facing instance with a publicly resolvable DNS name, which resolves to a public IP address. A value of false specifies an internal instance with a DNS name that resolves to a private IP address. Default: The default behavior varies depending on whether DBSubnetGroupName is specified. If DBSubnetGroupName is not specified, and PubliclyAccessible is not specified, the following applies: * If the default VPC in the target region doesn’t have an Internet gateway attached to it, the DB instance is private. * If the default VPC in the target region has an Internet gateway attached to it, the DB instance is public. If DBSubnetGroupName is specified, and PubliclyAccessible is not specified, the following applies: * If the subnets are part of a VPC that doesn’t have an Internet gateway attached to it, the DB instance is private. * If the subnets are part of a VPC that has an Internet gateway attached to it, the DB instance is public.
|
||||
`scalingConfiguration` | Optional [ScalingConfiguration](#ScalingConfiguration) | ScalingConfiguration is the scaling properties of the DB cluster. You can only modify scaling properties for DB clusters in serverless DB engine mode.
|
||||
`storageEncrypted` | Optional bool | StorageEncrypted specifies whether the DB instance is encrypted. Amazon Aurora Not applicable. The encryption for DB instances is managed by the DB cluster. For more information, see CreateDBCluster. Default: false
|
||||
`storageType` | Optional string | StorageType specifies the storage type to be associated with the DB instance. Valid values: standard | gp2 | io1 If you specify io1, you must also include a value for the IOPS parameter. Default: io1 if the IOPS parameter is specified, otherwise standard
|
||||
`tags` | Optional [[]Tag](#Tag) | Tags. For more information, see Tagging Amazon RDS Resources (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) in the Amazon RDS User Guide.
|
||||
`timezone` | Optional string | Timezone of the DB instance. The time zone parameter is currently supported only by Microsoft SQL Server (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.TimeZone).
|
||||
`vpcSecurityGroupIds` | Optional []string | VPCSecurityGroupIDs is a list of EC2 VPC security groups to associate with this DB instance. Amazon Aurora Not applicable. The associated list of EC2 VPC security groups is managed by the DB cluster. For more information, see CreateDBCluster. Default: The default EC2 VPC security group for the DB subnet group's VPC.
|
||||
`vpcSecurityGroupIDRefs` | Optional [[]*github.com/crossplaneio/stack-aws/apis/database/v1beta1.VPCSecurityGroupIDReferencerForRDSInstance](#*github.com/crossplaneio/stack-aws/apis/database/v1beta1.VPCSecurityGroupIDReferencerForRDSInstance) | VPCSecurityGroupIDRefs are references to VPCSecurityGroups used to set the VPCSecurityGroupIDs.
|
||||
`allowMajorVersionUpgrade` | Optional bool | AllowMajorVersionUpgrade indicates that major version upgrades are allowed. Changing this parameter doesn't result in an outage and the change is asynchronously applied as soon as possible. Constraints: This parameter must be set to true when specifying a value for the EngineVersion parameter that is a different major version than the DB instance's current version.
|
||||
`applyModificationsImmediately` | Optional bool | ApplyModificationsImmediately specifies whether the modifications in this request and any pending modifications are asynchronously applied as soon as possible, regardless of the PreferredMaintenanceWindow setting for the DB instance. If this parameter is set to false, changes to the DB instance are applied during the next maintenance window. Some parameter changes can cause an outage and are applied on the next call to RebootDBInstance, or the next failure reboot. Review the table of parameters in Modifying a DB Instance and Using the Apply Immediately Parameter (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html) in the Amazon RDS User Guide. to see the impact that setting ApplyImmediately to true or false has for each modified parameter and to determine when the changes are applied. Default: false
|
||||
`cloudwatchLogsExportConfiguration` | Optional [CloudwatchLogsExportConfiguration](#CloudwatchLogsExportConfiguration) | CloudwatchLogsExportConfiguration is the configuration setting for the log types to be enabled for export to CloudWatch Logs for a specific DB instance.
|
||||
`dbParameterGroupName` | Optional string | DBParameterGroupName is the name of the DB parameter group to associate with this DB instance. If this argument is omitted, the default DBParameterGroup for the specified engine is used. Constraints: * Must be 1 to 255 letters, numbers, or hyphens. * First character must be a letter * Cannot end with a hyphen or contain two consecutive hyphens
|
||||
`domain` | Optional string | Domain specifies the Active Directory Domain to create the instance in.
|
||||
`domainIAMRoleName` | Optional string | DomainIAMRoleName specifies the name of the IAM role to be used when making API calls to the Directory Service.
|
||||
`domainIAMRoleNameRef` | Optional [IAMRoleNameReferencerForRDSInstanceDomainRole](#IAMRoleNameReferencerForRDSInstanceDomainRole) | DomainIAMRoleNameRef is a reference to an IAMRole used to set DomainIAMRoleName.
|
||||
`optionGroupName` | Optional string | OptionGroupName indicates that the DB instance should be associated with the specified option group. Permanent options, such as the TDE option for Oracle Advanced Security TDE, can't be removed from an option group, and that option group can't be removed from a DB instance once it is associated with a DB instance
|
||||
`useDefaultProcessorFeatures` | bool | A value that specifies that the DB instance class of the DB instance uses its default processor features.
|
||||
`skipFinalSnapshotBeforeDeletion` | bool | Determines whether a final DB snapshot is created before the DB instance is deleted. If true is specified, no DBSnapshot is created. If false is specified, a DB snapshot is created before the DB instance is deleted. Note that when a DB instance is in a failure state and has a status of 'failed', 'incompatible-restore', or 'incompatible-network', it can only be deleted when the SkipFinalSnapshotBeforeDeletion parameter is set to "true". Specify true when deleting a Read Replica. The FinalDBSnapshotIdentifier parameter must be specified if SkipFinalSnapshotBeforeDeletion is false. Default: false
|
||||
`finalDBSnapshotIdentifier` | string | The DBSnapshotIdentifier of the new DBSnapshot created when SkipFinalSnapshot is set to false. Specifying this parameter and also setting the SkipFinalShapshot parameter to true results in an error. Constraints: * Must be 1 to 255 letters or numbers. * First character must be a letter * Cannot end with a hyphen or contain two consecutive hyphens * Cannot be specified when deleting a Read Replica.
|
||||
|
||||
|
||||
|
||||
## RDSInstanceSpec
|
||||
|
||||
An RDSInstanceSpec defines the desired state of an RDSInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstance](#RDSInstance)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [RDSInstanceParameters](#RDSInstanceParameters) | RDSInstanceParameters define the desired state of an AWS Relational Database Service instance.
|
||||
|
||||
|
||||
RDSInstanceSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## RDSInstanceState
|
||||
|
||||
RDSInstanceState represents the state of an RDS instance. Alias of string.
|
||||
|
||||
|
||||
## RDSInstanceStatus
|
||||
|
||||
An RDSInstanceStatus represents the observed state of an RDSInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstance](#RDSInstance)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`atProvider` | [RDSInstanceObservation](#RDSInstanceObservation) | RDSInstanceObservation is the representation of the current state that is observed.
|
||||
|
||||
|
||||
RDSInstanceStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## ScalingConfiguration
|
||||
|
||||
ScalingConfiguration contains the scaling configuration of an Aurora Serverless DB cluster. For more information, see Using Amazon Aurora Serverless (http://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html) in the Amazon Aurora User Guide. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/ScalingConfiguration
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceParameters](#RDSInstanceParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`autoPause` | Optional bool | AutoPause specifies whether to allow or disallow automatic pause for an Aurora DB cluster in serverless DB engine mode. A DB cluster can be paused only when it's idle (it has no connections). If a DB cluster is paused for more than seven days, the DB cluster might be backed up with a snapshot. In this case, the DB cluster is restored when there is a request to connect to it.
|
||||
`maxCapacity` | Optional int | MaxCapacity is the maximum capacity for an Aurora DB cluster in serverless DB engine mode. Valid capacity values are 2, 4, 8, 16, 32, 64, 128, and 256. The maximum capacity must be greater than or equal to the minimum capacity.
|
||||
`minCapacity` | Optional int | MinCapacity is the minimum capacity for an Aurora DB cluster in serverless DB engine mode. Valid capacity values are 2, 4, 8, 16, 32, 64, 128, and 256. The minimum capacity must be less than or equal to the maximum capacity.
|
||||
`secondsUntilAutoPause` | Optional int | SecondsUntilAutoPause is the time, in seconds, before an Aurora DB cluster in serverless mode is paused.
|
||||
|
||||
|
||||
|
||||
## SubnetInRDS
|
||||
|
||||
SubnetInRDS is used as a response element in the DescribeDBSubnetGroups action. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/Subnet
|
||||
|
||||
Appears in:
|
||||
|
||||
* [DBSubnetGroupInRDS](#DBSubnetGroupInRDS)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`subnetAvailabilityZone` | [AvailabilityZone](#AvailabilityZone) | SubnetAvailabilityZone contains Availability Zone information. This data type is used as an element in the following data type: * OrderableDBInstanceOption
|
||||
`subnetIdentifier` | string | SubnetIdentifier specifies the identifier of the subnet.
|
||||
`subnetStatus` | string | SubnetStatus specifies the status of the subnet.
|
||||
|
||||
|
||||
|
||||
## Tag
|
||||
|
||||
Tag is a metadata assigned to an Amazon RDS resource consisting of a key-value pair. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/Tag
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceParameters](#RDSInstanceParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`key` | string | A key is the required name of the tag. The string value can be from 1 to 128 Unicode characters in length and can't be prefixed with "aws:" or "rds:". The string can only contain only the set of Unicode letters, digits, white-space, '_', '.', '/', '=', '+', '-' (Java regex: "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$").
|
||||
`value` | string | A value is the optional value of the tag. The string value can be from 1 to 256 Unicode characters in length and can't be prefixed with "aws:" or "rds:". The string can only contain only the set of Unicode letters, digits, white-space, '_', '.', '/', '=', '+', '-' (Java regex: "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$").
|
||||
|
||||
|
||||
|
||||
## VPCSecurityGroupIDReferencerForRDSInstance
|
||||
|
||||
VPCSecurityGroupIDReferencerForRDSInstance is an attribute referencer that resolves SecurityGroupID from a referenced SecurityGroup
|
||||
|
||||
|
||||
|
||||
|
||||
VPCSecurityGroupIDReferencerForRDSInstance supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.SecurityGroupIDReferencer
|
||||
|
||||
|
||||
## VPCSecurityGroupMembership
|
||||
|
||||
VPCSecurityGroupMembership is used as a response element for queries on VPC security group membership. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/VpcSecurityGroupMembership
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RDSInstanceObservation](#RDSInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`status` | string | Status is the status of the VPC security group.
|
||||
`vpcSecurityGroupId` | string | VPCSecurityGroupID is the name of the VPC security group.
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,217 @@
|
|||
# identity.aws.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for AWS identity services such as IAM.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [IAMRole](#IAMRole)
|
||||
* [IAMRolePolicyAttachment](#IAMRolePolicyAttachment)
|
||||
|
||||
## IAMRole
|
||||
|
||||
An IAMRole is a managed resource that represents an AWS IAM Role.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `identity.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `IAMRole`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [IAMRoleSpec](#IAMRoleSpec) | An IAMRoleSpec defines the desired state of an IAMRole.
|
||||
`status` | [IAMRoleStatus](#IAMRoleStatus) | An IAMRoleStatus represents the observed state of an IAMRole.
|
||||
|
||||
|
||||
|
||||
## IAMRolePolicyAttachment
|
||||
|
||||
An IAMRolePolicyAttachment is a managed resource that represents an AWS IAM Role policy attachment.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `identity.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `IAMRolePolicyAttachment`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [IAMRolePolicyAttachmentSpec](#IAMRolePolicyAttachmentSpec) | An IAMRolePolicyAttachmentSpec defines the desired state of an IAMRolePolicyAttachment.
|
||||
`status` | [IAMRolePolicyAttachmentStatus](#IAMRolePolicyAttachmentStatus) | An IAMRolePolicyAttachmentStatus represents the observed state of an IAMRolePolicyAttachment.
|
||||
|
||||
|
||||
|
||||
## IAMRoleARNReferencer
|
||||
|
||||
IAMRoleARNReferencer is used to get the ARN from a referenced IAMRole object
|
||||
|
||||
|
||||
|
||||
|
||||
IAMRoleARNReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## IAMRoleExternalStatus
|
||||
|
||||
IAMRoleExternalStatus keeps the state for the external resource
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IAMRoleStatus](#IAMRoleStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`arn` | string | ARN is the Amazon Resource Name (ARN) specifying the role. For more information about ARNs and how to use them in policies, see IAM Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html) in the IAM User Guide guide.
|
||||
`roleID` | string | RoleID is the stable and unique string identifying the role. For more information about IDs, see IAM Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html) in the Using IAM guide.
|
||||
|
||||
|
||||
|
||||
## IAMRoleNameReferencer
|
||||
|
||||
IAMRoleNameReferencer is used to get the Name from a referenced IAMRole object
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IAMRoleNameReferencerForIAMRolePolicyAttachment](#IAMRoleNameReferencerForIAMRolePolicyAttachment)
|
||||
|
||||
|
||||
|
||||
|
||||
IAMRoleNameReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## IAMRoleNameReferencerForIAMRolePolicyAttachment
|
||||
|
||||
IAMRoleNameReferencerForIAMRolePolicyAttachment is an attribute referencer that retrieves Name from a referenced IAMRole
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IAMRolePolicyAttachmentParameters](#IAMRolePolicyAttachmentParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
IAMRoleNameReferencerForIAMRolePolicyAttachment supports all fields of:
|
||||
|
||||
* [IAMRoleNameReferencer](#IAMRoleNameReferencer)
|
||||
|
||||
|
||||
## IAMRoleParameters
|
||||
|
||||
IAMRoleParameters define the desired state of an AWS IAM Role.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IAMRoleSpec](#IAMRoleSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`assumeRolePolicyDocument` | string | AssumeRolePolicyDocument is the the trust relationship policy document that grants an entity permission to assume the role.
|
||||
`description` | Optional string | Description is a description of the role.
|
||||
`roleName` | string | RoleName presents the name of the IAM role.
|
||||
|
||||
|
||||
|
||||
## IAMRolePolicyAttachmentExternalStatus
|
||||
|
||||
IAMRolePolicyAttachmentExternalStatus keeps the state for the external resource
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IAMRolePolicyAttachmentStatus](#IAMRolePolicyAttachmentStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`attachedPolicyArn` | string | AttachedPolicyARN is the arn for the attached policy. If nil, the policy is not yet attached
|
||||
|
||||
|
||||
|
||||
## IAMRolePolicyAttachmentParameters
|
||||
|
||||
IAMRolePolicyAttachmentParameters define the desired state of an AWS IAM Role policy attachment.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IAMRolePolicyAttachmentSpec](#IAMRolePolicyAttachmentSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`policyArn` | string | PolicyARN is the Amazon Resource Name (ARN) of the IAM policy you want to attach.
|
||||
`roleName` | string | RoleName presents the name of the IAM role.
|
||||
`roleNameRef` | [IAMRoleNameReferencerForIAMRolePolicyAttachment](#IAMRoleNameReferencerForIAMRolePolicyAttachment) | RoleNameRef references to an IAMRole to retrieve its Name
|
||||
|
||||
|
||||
|
||||
## IAMRolePolicyAttachmentSpec
|
||||
|
||||
An IAMRolePolicyAttachmentSpec defines the desired state of an IAMRolePolicyAttachment.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IAMRolePolicyAttachment](#IAMRolePolicyAttachment)
|
||||
|
||||
|
||||
|
||||
|
||||
IAMRolePolicyAttachmentSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [IAMRolePolicyAttachmentParameters](#IAMRolePolicyAttachmentParameters)
|
||||
|
||||
|
||||
## IAMRolePolicyAttachmentStatus
|
||||
|
||||
An IAMRolePolicyAttachmentStatus represents the observed state of an IAMRolePolicyAttachment.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IAMRolePolicyAttachment](#IAMRolePolicyAttachment)
|
||||
|
||||
|
||||
|
||||
|
||||
IAMRolePolicyAttachmentStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [IAMRolePolicyAttachmentExternalStatus](#IAMRolePolicyAttachmentExternalStatus)
|
||||
|
||||
|
||||
## IAMRoleSpec
|
||||
|
||||
An IAMRoleSpec defines the desired state of an IAMRole.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IAMRole](#IAMRole)
|
||||
|
||||
|
||||
|
||||
|
||||
IAMRoleSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [IAMRoleParameters](#IAMRoleParameters)
|
||||
|
||||
|
||||
## IAMRoleStatus
|
||||
|
||||
An IAMRoleStatus represents the observed state of an IAMRole.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IAMRole](#IAMRole)
|
||||
|
||||
|
||||
|
||||
|
||||
IAMRoleStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [IAMRoleExternalStatus](#IAMRoleExternalStatus)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,733 @@
|
|||
# network.aws.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for AWS network services such as VPC and Subnet.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [InternetGateway](#InternetGateway)
|
||||
* [RouteTable](#RouteTable)
|
||||
* [SecurityGroup](#SecurityGroup)
|
||||
* [Subnet](#Subnet)
|
||||
* [VPC](#VPC)
|
||||
|
||||
## InternetGateway
|
||||
|
||||
An InternetGateway is a managed resource that represents an AWS VPC Internet Gateway.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `network.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `InternetGateway`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [InternetGatewaySpec](#InternetGatewaySpec) | An InternetGatewaySpec defines the desired state of an InternetGateway.
|
||||
`status` | [InternetGatewayStatus](#InternetGatewayStatus) | An InternetGatewayStatus represents the observed state of an InternetGateway.
|
||||
|
||||
|
||||
|
||||
## RouteTable
|
||||
|
||||
A RouteTable is a managed resource that represents an AWS VPC Route Table.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `network.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `RouteTable`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [RouteTableSpec](#RouteTableSpec) | A RouteTableSpec defines the desired state of a RouteTable.
|
||||
`status` | [RouteTableStatus](#RouteTableStatus) | A RouteTableStatus represents the observed state of a RouteTable.
|
||||
|
||||
|
||||
|
||||
## SecurityGroup
|
||||
|
||||
A SecurityGroup is a managed resource that represents an AWS VPC Security Group.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `network.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `SecurityGroup`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [SecurityGroupSpec](#SecurityGroupSpec) | A SecurityGroupSpec defines the desired state of a SecurityGroup.
|
||||
`status` | [SecurityGroupStatus](#SecurityGroupStatus) | A SecurityGroupStatus represents the observed state of a SecurityGroup.
|
||||
|
||||
|
||||
|
||||
## Subnet
|
||||
|
||||
A Subnet is a managed resource that represents an AWS VPC Subnet.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `network.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Subnet`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [SubnetSpec](#SubnetSpec) | A SubnetSpec defines the desired state of a Subnet.
|
||||
`status` | [SubnetStatus](#SubnetStatus) | A SubnetStatus represents the observed state of a Subnet.
|
||||
|
||||
|
||||
|
||||
## VPC
|
||||
|
||||
A VPC is a managed resource that represents an AWS Virtual Private Cloud.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `network.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `VPC`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [VPCSpec](#VPCSpec) | A VPCSpec defines the desired state of a VPC.
|
||||
`status` | [VPCStatus](#VPCStatus) | A VPCStatus represents the observed state of a VPC.
|
||||
|
||||
|
||||
|
||||
## Association
|
||||
|
||||
Association describes an association between a route table and a subnet.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AssociationState](#AssociationState)
|
||||
* [RouteTableParameters](#RouteTableParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`subnetId` | string | The ID of the subnet. A subnet ID is not returned for an implicit association.
|
||||
`subnetIdRef` | [SubnetIDReferencerForRouteTable](#SubnetIDReferencerForRouteTable) | A referencer to retrieve the ID of a subnet
|
||||
|
||||
|
||||
|
||||
## AssociationState
|
||||
|
||||
AssociationState describes an association state in the route table.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RouteTableExternalStatus](#RouteTableExternalStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`main` | bool | Indicates whether this is the main route table.
|
||||
`associationId` | string | The ID of the association between a route table and a subnet.
|
||||
|
||||
|
||||
AssociationState supports all fields of:
|
||||
|
||||
* [Association](#Association)
|
||||
|
||||
|
||||
## IPPermission
|
||||
|
||||
IPPermission Describes a set of permissions for a security group rule.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SecurityGroupParameters](#SecurityGroupParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`fromPort` | int64 | The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 type number. A value of -1 indicates all ICMP/ICMPv6 types. If you specify all ICMP/ICMPv6 types, you must specify all codes.
|
||||
`toPort` | int64 | The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code. A value of -1 indicates all ICMP/ICMPv6 codes for the specified ICMP type. If you specify all ICMP/ICMPv6 types, you must specify all codes.
|
||||
`protocol` | string | The IP protocol name (tcp, udp, icmp) or number (see Protocol Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). [EC2-VPC only] Use -1 to specify all protocols. When authorizing security group rules, specifying -1 or a protocol number other than tcp, udp, icmp, or 58 (ICMPv6) allows traffic on all ports, regardless of any port range you specify. For tcp, udp, and icmp, you must specify a port range. For 58 (ICMPv6), you can optionally specify a port range; if you don't, traffic for all types and codes is allowed when authorizing rules.
|
||||
`cidrBlocks` | [[]IPRange](#IPRange) | One or more IPv4 ranges.
|
||||
|
||||
|
||||
|
||||
## IPRange
|
||||
|
||||
IPRange describes an IPv4 range.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IPPermission](#IPPermission)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`cidrIp` | string | The IPv4 CIDR range. You can either specify a CIDR range or a source security group, not both. To specify a single IPv4 address, use the /32 prefix length.
|
||||
`description` | string | A description for the ip range
|
||||
|
||||
|
||||
|
||||
## InternetGatewayAttachment
|
||||
|
||||
InternetGatewayAttachment describes the attachment of a VPC to an internet gateway or an egress-only internet gateway.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [InternetGatewayExternalStatus](#InternetGatewayExternalStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`attachmentStatus` | string | The current state of the attachment. For an internet gateway, the state is available when attached to a VPC; otherwise, this value is not returned.
|
||||
`vpcId` | string | VPCID is the ID of the attached VPC.
|
||||
|
||||
|
||||
|
||||
## InternetGatewayExternalStatus
|
||||
|
||||
InternetGatewayExternalStatus keeps the state for the external resource
|
||||
|
||||
Appears in:
|
||||
|
||||
* [InternetGatewayStatus](#InternetGatewayStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`attachments` | [[]InternetGatewayAttachment](#InternetGatewayAttachment) | Any VPCs attached to the internet gateway.
|
||||
`internetGatewayId` | string | The ID of the internet gateway.
|
||||
`tags` | [[]Tag](#Tag) | Tags represents to current ec2 tags.
|
||||
|
||||
|
||||
|
||||
## InternetGatewayIDReferencer
|
||||
|
||||
InternetGatewayIDReferencer is used to get a InternetGatewayID from a InternetGateway
|
||||
|
||||
Appears in:
|
||||
|
||||
* [InternetGatewayIDReferencerForRouteTable](#InternetGatewayIDReferencerForRouteTable)
|
||||
|
||||
|
||||
|
||||
|
||||
InternetGatewayIDReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## InternetGatewayIDReferencerForRouteTable
|
||||
|
||||
InternetGatewayIDReferencerForRouteTable is an attribute referencer that resolves VPCID from a referenced VPC
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Route](#Route)
|
||||
|
||||
|
||||
|
||||
|
||||
InternetGatewayIDReferencerForRouteTable supports all fields of:
|
||||
|
||||
* [InternetGatewayIDReferencer](#InternetGatewayIDReferencer)
|
||||
|
||||
|
||||
## InternetGatewayParameters
|
||||
|
||||
InternetGatewayParameters define the desired state of an AWS VPC Internet Gateway.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [InternetGatewaySpec](#InternetGatewaySpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`vpcId` | string | VPCID is the ID of the VPC.
|
||||
`vpcIdRef` | [VPCIDReferencerForInternetGateway](#VPCIDReferencerForInternetGateway) | VPCIDRef references to a VPC to and retrieves its vpcId
|
||||
|
||||
|
||||
|
||||
## InternetGatewaySpec
|
||||
|
||||
An InternetGatewaySpec defines the desired state of an InternetGateway.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [InternetGateway](#InternetGateway)
|
||||
|
||||
|
||||
|
||||
|
||||
InternetGatewaySpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [InternetGatewayParameters](#InternetGatewayParameters)
|
||||
|
||||
|
||||
## InternetGatewayStatus
|
||||
|
||||
An InternetGatewayStatus represents the observed state of an InternetGateway.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [InternetGateway](#InternetGateway)
|
||||
|
||||
|
||||
|
||||
|
||||
InternetGatewayStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [InternetGatewayExternalStatus](#InternetGatewayExternalStatus)
|
||||
|
||||
|
||||
## Route
|
||||
|
||||
Route describes a route in a route table.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RouteState](#RouteState)
|
||||
* [RouteTableParameters](#RouteTableParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`destinationCidrBlock` | string | The IPv4 CIDR address block used for the destination match. Routing decisions are based on the most specific match.
|
||||
`gatewayId` | string | The ID of an internet gateway or virtual private gateway attached to your VPC.
|
||||
`gatewayIdRef` | [InternetGatewayIDReferencerForRouteTable](#InternetGatewayIDReferencerForRouteTable) | A referencer to retrieve the ID of a gateway
|
||||
|
||||
|
||||
|
||||
## RouteState
|
||||
|
||||
RouteState describes a route state in the route table.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RouteTableExternalStatus](#RouteTableExternalStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`routeState` | string | The state of the route. The blackhole state indicates that the route's target isn't available (for example, the specified gateway isn't attached to the VPC, or the specified NAT instance has been terminated).
|
||||
|
||||
|
||||
RouteState supports all fields of:
|
||||
|
||||
* [Route](#Route)
|
||||
|
||||
|
||||
## RouteTableExternalStatus
|
||||
|
||||
RouteTableExternalStatus keeps the state for the external resource
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RouteTableStatus](#RouteTableStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`routeTableId` | string | RouteTableID is the ID of the RouteTable.
|
||||
`routes` | [[]RouteState](#RouteState) | The actual routes created for the route table.
|
||||
`associations` | [[]AssociationState](#AssociationState) | The actual associations created for the route table.
|
||||
|
||||
|
||||
|
||||
## RouteTableParameters
|
||||
|
||||
RouteTableParameters define the desired state of an AWS VPC Route Table.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RouteTableSpec](#RouteTableSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`vpcId` | string | VPCID is the ID of the VPC.
|
||||
`vpcIdRef` | [VPCIDReferencerForRouteTable](#VPCIDReferencerForRouteTable) | VPCIDRef references to a VPC to and retrieves its vpcId
|
||||
`routes` | [[]Route](#Route) | the routes in the route table
|
||||
`associations` | [[]Association](#Association) | The associations between the route table and one or more subnets.
|
||||
|
||||
|
||||
|
||||
## RouteTableSpec
|
||||
|
||||
A RouteTableSpec defines the desired state of a RouteTable.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RouteTable](#RouteTable)
|
||||
|
||||
|
||||
|
||||
|
||||
RouteTableSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [RouteTableParameters](#RouteTableParameters)
|
||||
|
||||
|
||||
## RouteTableStatus
|
||||
|
||||
A RouteTableStatus represents the observed state of a RouteTable.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RouteTable](#RouteTable)
|
||||
|
||||
|
||||
|
||||
|
||||
RouteTableStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [RouteTableExternalStatus](#RouteTableExternalStatus)
|
||||
|
||||
|
||||
## SecurityGroupExternalStatus
|
||||
|
||||
SecurityGroupExternalStatus keeps the state for the external resource
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SecurityGroupStatus](#SecurityGroupStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`securityGroupID` | string | SecurityGroupID is the ID of the SecurityGroup.
|
||||
`tags` | [[]Tag](#Tag) | Tags represents to current ec2 tags.
|
||||
|
||||
|
||||
|
||||
## SecurityGroupIDReferencer
|
||||
|
||||
SecurityGroupIDReferencer is used to get the ID from another SecurityGroup
|
||||
|
||||
|
||||
|
||||
|
||||
SecurityGroupIDReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## SecurityGroupParameters
|
||||
|
||||
SecurityGroupParameters define the desired state of an AWS VPC Security Group.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SecurityGroupSpec](#SecurityGroupSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`vpcId` | string | VPCID is the ID of the VPC.
|
||||
`vpcIdRef` | [VPCIDReferencerForSecurityGroup](#VPCIDReferencerForSecurityGroup) | VPCIDRef references to a VPC to and retrieves its vpcId
|
||||
`description` | string | A description of the security group.
|
||||
`groupName` | string | The name of the security group.
|
||||
`ingress` | [[]IPPermission](#IPPermission) | One or more inbound rules associated with the security group.
|
||||
`egress` | [[]IPPermission](#IPPermission) | [EC2-VPC] One or more outbound rules associated with the security group.
|
||||
|
||||
|
||||
|
||||
## SecurityGroupSpec
|
||||
|
||||
A SecurityGroupSpec defines the desired state of a SecurityGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SecurityGroup](#SecurityGroup)
|
||||
|
||||
|
||||
|
||||
|
||||
SecurityGroupSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [SecurityGroupParameters](#SecurityGroupParameters)
|
||||
|
||||
|
||||
## SecurityGroupStatus
|
||||
|
||||
A SecurityGroupStatus represents the observed state of a SecurityGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SecurityGroup](#SecurityGroup)
|
||||
|
||||
|
||||
|
||||
|
||||
SecurityGroupStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [SecurityGroupExternalStatus](#SecurityGroupExternalStatus)
|
||||
|
||||
|
||||
## SubnetExternalStatus
|
||||
|
||||
SubnetExternalStatus keeps the state for the external resource
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetStatus](#SubnetStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`subnetState` | string | SubnetState is the current state of the Subnet.
|
||||
`tags` | [[]Tag](#Tag) | Tags represents to current ec2 tags.
|
||||
`subnetId` | string | SubnetID is the ID of the Subnet.
|
||||
|
||||
|
||||
|
||||
## SubnetIDReferencer
|
||||
|
||||
SubnetIDReferencer is used to get a SubnetID from another Subnet
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetIDReferencerForRouteTable](#SubnetIDReferencerForRouteTable)
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetIDReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## SubnetIDReferencerForRouteTable
|
||||
|
||||
SubnetIDReferencerForRouteTable is an attribute referencer that resolves SubnetID from a referenced Subnet
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Association](#Association)
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetIDReferencerForRouteTable supports all fields of:
|
||||
|
||||
* [SubnetIDReferencer](#SubnetIDReferencer)
|
||||
|
||||
|
||||
## SubnetParameters
|
||||
|
||||
SubnetParameters define the desired state of an AWS VPC Subnet.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetSpec](#SubnetSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`cidrBlock` | string | CIDRBlock is the IPv4 network range for the Subnet, in CIDR notation. For example, 10.0.0.0/18.
|
||||
`availabilityZone` | string | The Availability Zone for the subnet. Default: AWS selects one for you. If you create more than one subnet in your VPC, we may not necessarily select a different zone for each subnet.
|
||||
`vpcId` | string | VPCID is the ID of the VPC.
|
||||
`vpcIdRef` | [VPCIDReferencerForSubnet](#VPCIDReferencerForSubnet) | VPCIDRef references to a VPC to and retrieves its vpcId
|
||||
|
||||
|
||||
|
||||
## SubnetSpec
|
||||
|
||||
A SubnetSpec defines the desired state of a Subnet.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Subnet](#Subnet)
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [SubnetParameters](#SubnetParameters)
|
||||
|
||||
|
||||
## SubnetStatus
|
||||
|
||||
A SubnetStatus represents the observed state of a Subnet.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Subnet](#Subnet)
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [SubnetExternalStatus](#SubnetExternalStatus)
|
||||
|
||||
|
||||
## Tag
|
||||
|
||||
Tag defines a tag
|
||||
|
||||
Appears in:
|
||||
|
||||
* [InternetGatewayExternalStatus](#InternetGatewayExternalStatus)
|
||||
* [SecurityGroupExternalStatus](#SecurityGroupExternalStatus)
|
||||
* [SubnetExternalStatus](#SubnetExternalStatus)
|
||||
* [VPCExternalStatus](#VPCExternalStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`key` | string | Key is the name of the tag.
|
||||
`value` | string | Value is the value of the tag.
|
||||
|
||||
|
||||
|
||||
## VPCExternalStatus
|
||||
|
||||
VPCExternalStatus keeps the state for the external resource
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VPCStatus](#VPCStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`vpcState` | string | VPCState is the current state of the VPC.
|
||||
`tags` | [[]Tag](#Tag) | Tags represents to current ec2 tags.
|
||||
`vpcId` | string | VPCID is the ID of the VPC.
|
||||
|
||||
|
||||
|
||||
## VPCIDReferencer
|
||||
|
||||
VPCIDReferencer is used to get a VPCID from another VPC
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VPCIDReferencerForInternetGateway](#VPCIDReferencerForInternetGateway)
|
||||
* [VPCIDReferencerForRouteTable](#VPCIDReferencerForRouteTable)
|
||||
* [VPCIDReferencerForSecurityGroup](#VPCIDReferencerForSecurityGroup)
|
||||
* [VPCIDReferencerForSubnet](#VPCIDReferencerForSubnet)
|
||||
|
||||
|
||||
|
||||
|
||||
VPCIDReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## VPCIDReferencerForInternetGateway
|
||||
|
||||
VPCIDReferencerForInternetGateway is an attribute referencer that resolves VPCID from a referenced VPC
|
||||
|
||||
Appears in:
|
||||
|
||||
* [InternetGatewayParameters](#InternetGatewayParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
VPCIDReferencerForInternetGateway supports all fields of:
|
||||
|
||||
* [VPCIDReferencer](#VPCIDReferencer)
|
||||
|
||||
|
||||
## VPCIDReferencerForRouteTable
|
||||
|
||||
VPCIDReferencerForRouteTable is an attribute referencer that resolves VPCID from a referenced VPC
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RouteTableParameters](#RouteTableParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
VPCIDReferencerForRouteTable supports all fields of:
|
||||
|
||||
* [VPCIDReferencer](#VPCIDReferencer)
|
||||
|
||||
|
||||
## VPCIDReferencerForSecurityGroup
|
||||
|
||||
VPCIDReferencerForSecurityGroup is an attribute referencer that resolves VPCID from a referenced VPC
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SecurityGroupParameters](#SecurityGroupParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
VPCIDReferencerForSecurityGroup supports all fields of:
|
||||
|
||||
* [VPCIDReferencer](#VPCIDReferencer)
|
||||
|
||||
|
||||
## VPCIDReferencerForSubnet
|
||||
|
||||
VPCIDReferencerForSubnet is an attribute referencer that resolves VPCID from a referenced VPC
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetParameters](#SubnetParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
VPCIDReferencerForSubnet supports all fields of:
|
||||
|
||||
* [VPCIDReferencer](#VPCIDReferencer)
|
||||
|
||||
|
||||
## VPCParameters
|
||||
|
||||
VPCParameters define the desired state of an AWS Virtual Private Cloud.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VPCSpec](#VPCSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`cidrBlock` | string | CIDRBlock is the IPv4 network range for the VPC, in CIDR notation. For example, 10.0.0.0/16.
|
||||
`enableDnsSupport` | bool | A boolean flag to enable/disable DNS support in the VPC
|
||||
`enableDnsHostNames` | bool | A boolean flag to enable/disable DNS hostnames in the VPC
|
||||
|
||||
|
||||
|
||||
## VPCSpec
|
||||
|
||||
A VPCSpec defines the desired state of a VPC.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VPC](#VPC)
|
||||
|
||||
|
||||
|
||||
|
||||
VPCSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [VPCParameters](#VPCParameters)
|
||||
|
||||
|
||||
## VPCStatus
|
||||
|
||||
A VPCStatus represents the observed state of a VPC.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VPC](#VPC)
|
||||
|
||||
|
||||
|
||||
|
||||
VPCStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [VPCExternalStatus](#VPCExternalStatus)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
# storage.aws.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for AWS storage services such as S3.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [S3Bucket](#S3Bucket)
|
||||
* [S3BucketClass](#S3BucketClass)
|
||||
|
||||
## S3Bucket
|
||||
|
||||
An S3Bucket is a managed resource that represents an AWS S3 Bucket.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `storage.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `S3Bucket`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [S3BucketSpec](#S3BucketSpec) | S3BucketSpec defines the desired state of S3Bucket
|
||||
`status` | [S3BucketStatus](#S3BucketStatus) | S3BucketStatus defines the observed state of S3Bucket
|
||||
|
||||
|
||||
|
||||
## S3BucketClass
|
||||
|
||||
An S3BucketClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `storage.aws.crossplane.io/v1alpha3`
|
||||
`kind` | string | `S3BucketClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [S3BucketClassSpecTemplate](#S3BucketClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned S3Bucket.
|
||||
|
||||
|
||||
|
||||
## S3BucketClassSpecTemplate
|
||||
|
||||
An S3BucketClassSpecTemplate is a template for the spec of a dynamically provisioned S3Bucket.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [S3BucketClass](#S3BucketClass)
|
||||
|
||||
|
||||
|
||||
|
||||
S3BucketClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
* [S3BucketParameters](#S3BucketParameters)
|
||||
|
||||
|
||||
## S3BucketParameters
|
||||
|
||||
S3BucketParameters define the desired state of an AWS S3 Bucket.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [S3BucketClassSpecTemplate](#S3BucketClassSpecTemplate)
|
||||
* [S3BucketSpec](#S3BucketSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`nameFormat` | Optional string | NameFormat specifies the name of the external S3Bucket instance. The first instance of the string '%s' will be replaced with the Kubernetes UID of this S3Bucket. Omit this field to use the UID alone as the name.
|
||||
`region` | string | Region of the bucket.
|
||||
`cannedACL` | Optional [s3.BucketCannedACL](https://godoc.org/github.com/aws/aws-sdk-go-v2/service/s3#BucketCannedACL) | CannedACL applies a standard AWS built-in ACL for common bucket use cases.
|
||||
`versioning` | Optional bool | Versioning enables versioning of objects stored in this bucket.
|
||||
`localPermission` | [storage/v1alpha1.LocalPermissionType](../crossplane/storage-crossplane-io-v1alpha1.md#localpermissiontype) | LocalPermission is the permissions granted on the bucket for the provider specific bucket service account that is available in a secret after provisioning.
|
||||
|
||||
|
||||
|
||||
## S3BucketSpec
|
||||
|
||||
S3BucketSpec defines the desired state of S3Bucket
|
||||
|
||||
Appears in:
|
||||
|
||||
* [S3Bucket](#S3Bucket)
|
||||
|
||||
|
||||
|
||||
|
||||
S3BucketSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [S3BucketParameters](#S3BucketParameters)
|
||||
|
||||
|
||||
## S3BucketStatus
|
||||
|
||||
S3BucketStatus defines the observed state of S3Bucket
|
||||
|
||||
Appears in:
|
||||
|
||||
* [S3Bucket](#S3Bucket)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`providerID` | string | ProviderID is the AWS identifier for this bucket.
|
||||
`iamUsername` | string | IAMUsername is the name of an IAM user that is automatically created and granted access to this bucket by Crossplane at bucket creation time.
|
||||
`lastUserPolicyVersion` | int | LastUserPolicyVersion is the most recent version of the policy associated with this bucket's IAMUser.
|
||||
`lastLocalPermission` | [storage/v1alpha1.LocalPermissionType](../crossplane/storage-crossplane-io-v1alpha1.md#localpermissiontype) | LastLocalPermission is the most recent local permission that was set for this bucket.
|
||||
|
||||
|
||||
S3BucketStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
# azure.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains core resources for Microsoft Azure.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [Provider](#Provider)
|
||||
* [ResourceGroup](#ResourceGroup)
|
||||
|
||||
## Provider
|
||||
|
||||
A Provider configures an Azure 'provider', i.e. a connection to a particular Azure account using a particular Azure Service Principal.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Provider`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [ProviderSpec](#ProviderSpec) | A ProviderSpec defines the desired state of a Provider.
|
||||
|
||||
|
||||
|
||||
## ResourceGroup
|
||||
|
||||
A ResourceGroup is a managed resource that represents an Azure Resource Group.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `ResourceGroup`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [ResourceGroupSpec](#ResourceGroupSpec) | A ResourceGroupSpec defines the desired state of a ResourceGroup.
|
||||
`status` | [ResourceGroupStatus](#ResourceGroupStatus) | A ResourceGroupStatus represents the observed status of a ResourceGroup.
|
||||
|
||||
|
||||
|
||||
## ProviderSpec
|
||||
|
||||
A ProviderSpec defines the desired state of a Provider.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Provider](#Provider)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`credentialsSecretRef` | [v1alpha1.SecretKeySelector](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretkeyselector) | Azure service principal credentials json secret key reference A Secret containing JSON encoded credentials for an Azure Service Principal that will be used to authenticate to this Azure Provider.
|
||||
|
||||
|
||||
|
||||
## ResourceGroupNameReferencer
|
||||
|
||||
ResourceGroupNameReferencer is used to get the name from another ResourceGroup
|
||||
|
||||
|
||||
|
||||
|
||||
ResourceGroupNameReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## ResourceGroupSpec
|
||||
|
||||
A ResourceGroupSpec defines the desired state of a ResourceGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ResourceGroup](#ResourceGroup)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name of the resource group.
|
||||
`location` | string | Location of the resource group. See the official list of valid regions - https://azure.microsoft.com/en-us/global-infrastructure/regions/
|
||||
|
||||
|
||||
ResourceGroupSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## ResourceGroupStatus
|
||||
|
||||
A ResourceGroupStatus represents the observed status of a ResourceGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ResourceGroup](#ResourceGroup)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name of the resource group.
|
||||
|
||||
|
||||
ResourceGroupStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
# cache.azure.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for Azure cache services such as Redis.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [Redis](#Redis)
|
||||
* [RedisClass](#RedisClass)
|
||||
|
||||
## Redis
|
||||
|
||||
A Redis is a managed resource that represents an Azure Redis cluster.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `cache.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Redis`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [RedisSpec](#RedisSpec) | A RedisSpec defines the desired state of a Redis.
|
||||
`status` | [RedisStatus](#RedisStatus) | A RedisStatus represents the observed state of a Redis.
|
||||
|
||||
|
||||
|
||||
## RedisClass
|
||||
|
||||
A RedisClass is a non-portable resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `cache.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `RedisClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [RedisClassSpecTemplate](#RedisClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned Redis.
|
||||
|
||||
|
||||
|
||||
## RedisClassSpecTemplate
|
||||
|
||||
A RedisClassSpecTemplate is a template for the spec of a dynamically provisioned Redis.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RedisClass](#RedisClass)
|
||||
|
||||
|
||||
|
||||
|
||||
RedisClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
* [RedisParameters](#RedisParameters)
|
||||
|
||||
|
||||
## RedisParameters
|
||||
|
||||
RedisParameters define the desired state of an Azure Redis cluster. Most fields map directly to an Azure Redis resource: https://docs.microsoft.com/en-us/rest/api/redis/redis/create#redisresource
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RedisClassSpecTemplate](#RedisClassSpecTemplate)
|
||||
* [RedisSpec](#RedisSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`resourceGroupName` | string | ResourceGroupName in which to create this resource.
|
||||
`location` | string | Location in which to create this resource.
|
||||
`sku` | [SKUSpec](#SKUSpec) | SKU of the Redis cache to deploy.
|
||||
`enableNonSslPort` | Optional bool | EnableNonSSLPort specifies whether the non-ssl Redis server port (6379) is enabled.
|
||||
`shardCount` | Optional int | ShardCount specifies the number of shards to be created on a Premium Cluster Cache.
|
||||
`staticIP` | Optional string | StaticIP address. Required when deploying a Redis cache inside an existing Azure Virtual Network.
|
||||
`subnetId` | Optional string | SubnetID specifies the full resource ID of a subnet in a virtual network to deploy the Redis cache in. Example format: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/Microsoft.{Network|ClassicNetwork}/VirtualNetworks/vnet1/subnets/subnet1
|
||||
`redisConfiguration` | Optional map[string]string | RedisConfiguration specifies Redis Settings.
|
||||
|
||||
|
||||
|
||||
## RedisSpec
|
||||
|
||||
A RedisSpec defines the desired state of a Redis.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Redis](#Redis)
|
||||
|
||||
|
||||
|
||||
|
||||
RedisSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [RedisParameters](#RedisParameters)
|
||||
|
||||
|
||||
## RedisStatus
|
||||
|
||||
A RedisStatus represents the observed state of a Redis.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Redis](#Redis)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`state` | string | State represents the state of an Azure Redis.
|
||||
`providerID` | string | ProviderID is the external ID to identify this resource in the cloud provider.
|
||||
`endpoint` | string | Endpoint of the Redis resource used in connection strings.
|
||||
`port` | int | Port at which the Redis endpoint is listening.
|
||||
`sslPort` | int | SSLPort at which the Redis endpoint is listening.
|
||||
`redisVersion` | string | RedisVersion the Redis endpoint is running.
|
||||
`resourceName` | string | ResourceName of the Redis cache resource.
|
||||
|
||||
|
||||
RedisStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## SKUSpec
|
||||
|
||||
An SKUSpec represents the performance and cost oriented properties of a Redis.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [RedisParameters](#RedisParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name specifies what type of Redis cache to deploy. Valid values: (Basic, Standard, Premium). Possible values include: 'Basic', 'Standard', 'Premium'
|
||||
`family` | string | Family specifies which family to use. Valid values: (C, P). Possible values include: 'C', 'P'
|
||||
`capacity` | int | Capacity specifies the size of Redis cache to deploy. Valid values: for C family (0, 1, 2, 3, 4, 5, 6), for P family (1, 2, 3, 4).
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,156 @@
|
|||
# compute.azure.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for Azure compute services such as AKS.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [AKSCluster](#AKSCluster)
|
||||
* [AKSClusterClass](#AKSClusterClass)
|
||||
|
||||
## AKSCluster
|
||||
|
||||
An AKSCluster is a managed resource that represents an Azure Kubernetes Engine cluster.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `AKSCluster`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [AKSClusterSpec](#AKSClusterSpec) | An AKSClusterSpec defines the desired state of a AKSCluster.
|
||||
`status` | [AKSClusterStatus](#AKSClusterStatus) | An AKSClusterStatus represents the observed state of an AKSCluster.
|
||||
|
||||
|
||||
|
||||
## AKSClusterClass
|
||||
|
||||
An AKSClusterClass is a non-portable resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `AKSClusterClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [AKSClusterClassSpecTemplate](#AKSClusterClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned AKSCluster.
|
||||
|
||||
|
||||
|
||||
## AKSClusterClassSpecTemplate
|
||||
|
||||
An AKSClusterClassSpecTemplate is a template for the spec of a dynamically provisioned AKSCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AKSClusterClass](#AKSClusterClass)
|
||||
|
||||
|
||||
|
||||
|
||||
AKSClusterClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
* [AKSClusterParameters](#AKSClusterParameters)
|
||||
|
||||
|
||||
## AKSClusterParameters
|
||||
|
||||
AKSClusterParameters define the desired state of an Azure Kubernetes Engine cluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AKSClusterClassSpecTemplate](#AKSClusterClassSpecTemplate)
|
||||
* [AKSClusterSpec](#AKSClusterSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`resourceGroupName` | string | ResourceGroupName is the name of the resource group that the cluster will be created in
|
||||
`resourceGroupNameRef` | [ResourceGroupNameReferencerForAKSCluster](#ResourceGroupNameReferencerForAKSCluster) | ResourceGroupNameRef - A reference to a ResourceGroup object to retrieve its name
|
||||
`location` | string | Location is the Azure location that the cluster will be created in
|
||||
`version` | string | Version is the Kubernetes version that will be deployed to the cluster
|
||||
`vnetSubnetID` | Optional string | VnetSubnetID is the subnet to which the cluster will be deployed.
|
||||
`vnetSubnetIDRef` | [SubnetIDReferencerForAKSCluster](#SubnetIDReferencerForAKSCluster) | ResourceGroupNameRef - A reference to a VnetSubnet object to retrieve its ID
|
||||
`nodeCount` | Optional int | NodeCount is the number of nodes that the cluster will initially be created with. This can be scaled over time and defaults to 1.
|
||||
`nodeVMSize` | Optional string | NodeVMSize is the name of the worker node VM size, e.g., Standard_B2s, Standard_F2s_v2, etc.
|
||||
`dnsNamePrefix` | Optional string | DNSNamePrefix is the DNS name prefix to use with the hosted Kubernetes API server FQDN. You will use this to connect to the Kubernetes API when managing containers after creating the cluster.
|
||||
`disableRBAC` | Optional bool | DisableRBAC determines whether RBAC will be disabled or enabled in the cluster.
|
||||
`writeServicePrincipalTo` | [v1alpha1.SecretReference](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretreference) | WriteServicePrincipalSecretTo the specified Secret. The service principal is automatically generated and used by the AKS cluster to interact with other Azure resources.
|
||||
|
||||
|
||||
|
||||
## AKSClusterSpec
|
||||
|
||||
An AKSClusterSpec defines the desired state of a AKSCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AKSCluster](#AKSCluster)
|
||||
|
||||
|
||||
|
||||
|
||||
AKSClusterSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [AKSClusterParameters](#AKSClusterParameters)
|
||||
|
||||
|
||||
## AKSClusterStatus
|
||||
|
||||
An AKSClusterStatus represents the observed state of an AKSCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AKSCluster](#AKSCluster)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`clusterName` | string | ClusterName is the name of the cluster as registered with the cloud provider.
|
||||
`state` | string | State is the current state of the cluster.
|
||||
`providerID` | string | ProviderID is the external ID to identify this resource in the cloud provider.
|
||||
`endpoint` | string | Endpoint is the endpoint where the cluster can be reached
|
||||
`appObjectID` | string | ApplicationObjectID is the object ID of the AD application the cluster uses for Azure APIs.
|
||||
`servicePrincipalID` | string | ServicePrincipalID is the ID of the service principal the AD application uses.
|
||||
`runningOperation` | string | RunningOperation stores any current long running operation for this instance across reconciliation attempts.
|
||||
|
||||
|
||||
AKSClusterStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## ResourceGroupNameReferencerForAKSCluster
|
||||
|
||||
ResourceGroupNameReferencerForAKSCluster is an attribute referencer that resolves name from a referenced ResourceGroup
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AKSClusterParameters](#AKSClusterParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
ResourceGroupNameReferencerForAKSCluster supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-azure/apis/v1alpha3.ResourceGroupNameReferencer
|
||||
|
||||
|
||||
## SubnetIDReferencerForAKSCluster
|
||||
|
||||
SubnetIDReferencerForAKSCluster is an attribute referencer that resolves name from a referenced ResourceGroup
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AKSClusterParameters](#AKSClusterParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetIDReferencerForAKSCluster supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-azure/apis/network/v1alpha3.SubnetIDReferencer
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,398 @@
|
|||
# database.azure.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for Azure database services such as SQL server.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [MySQLServer](#MySQLServer)
|
||||
* [MySQLServerVirtualNetworkRule](#MySQLServerVirtualNetworkRule)
|
||||
* [PostgreSQLServer](#PostgreSQLServer)
|
||||
* [PostgreSQLServerVirtualNetworkRule](#PostgreSQLServerVirtualNetworkRule)
|
||||
* [SQLServerClass](#SQLServerClass)
|
||||
|
||||
## MySQLServer
|
||||
|
||||
A MySQLServer is a managed resource that represents an Azure MySQL Database Server.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `MySQLServer`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [SQLServerSpec](#SQLServerSpec) | A SQLServerSpec defines the desired state of a SQLServer.
|
||||
`status` | [SQLServerStatus](#SQLServerStatus) | A SQLServerStatus represents the observed state of a SQLServer.
|
||||
|
||||
|
||||
|
||||
## MySQLServerVirtualNetworkRule
|
||||
|
||||
A MySQLServerVirtualNetworkRule is a managed resource that represents an Azure MySQL Database virtual network rule.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `MySQLServerVirtualNetworkRule`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [MySQLVirtualNetworkRuleSpec](#MySQLVirtualNetworkRuleSpec) | A MySQLVirtualNetworkRuleSpec defines the desired state of a MySQLVirtualNetworkRule.
|
||||
`status` | [VirtualNetworkRuleStatus](#VirtualNetworkRuleStatus) | A VirtualNetworkRuleStatus represents the observed state of a VirtualNetworkRule.
|
||||
|
||||
|
||||
|
||||
## PostgreSQLServer
|
||||
|
||||
A PostgreSQLServer is a managed resource that represents an Azure PostgreSQL Database Server.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `PostgreSQLServer`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [SQLServerSpec](#SQLServerSpec) | A SQLServerSpec defines the desired state of a SQLServer.
|
||||
`status` | [SQLServerStatus](#SQLServerStatus) | A SQLServerStatus represents the observed state of a SQLServer.
|
||||
|
||||
|
||||
|
||||
## PostgreSQLServerVirtualNetworkRule
|
||||
|
||||
A PostgreSQLServerVirtualNetworkRule is a managed resource that represents an Azure PostgreSQL Database virtual network rule.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `PostgreSQLServerVirtualNetworkRule`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [PostgreSQLVirtualNetworkRuleSpec](#PostgreSQLVirtualNetworkRuleSpec) | A PostgreSQLVirtualNetworkRuleSpec defines the desired state of a PostgreSQLVirtualNetworkRule.
|
||||
`status` | [VirtualNetworkRuleStatus](#VirtualNetworkRuleStatus) | A VirtualNetworkRuleStatus represents the observed state of a VirtualNetworkRule.
|
||||
|
||||
|
||||
|
||||
## SQLServerClass
|
||||
|
||||
A SQLServerClass is a non-portable resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `SQLServerClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [SQLServerClassSpecTemplate](#SQLServerClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned SQLServer.
|
||||
|
||||
|
||||
|
||||
## MySQLServerNameReferencer
|
||||
|
||||
A MySQLServerNameReferencer returns the server name of a referenced MySQLServer.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [MySQLVirtualNetworkRuleSpec](#MySQLVirtualNetworkRuleSpec)
|
||||
* [ServerNameReferencerForMySQLServerVirtualNetworkRule](#ServerNameReferencerForMySQLServerVirtualNetworkRule)
|
||||
|
||||
|
||||
|
||||
|
||||
MySQLServerNameReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## MySQLVirtualNetworkRuleSpec
|
||||
|
||||
A MySQLVirtualNetworkRuleSpec defines the desired state of a MySQLVirtualNetworkRule.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [MySQLServerVirtualNetworkRule](#MySQLServerVirtualNetworkRule)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name - Name of the Virtual Network Rule.
|
||||
`serverName` | string | ServerName - Name of the Virtual Network Rule's server.
|
||||
`serverNameRef` | [MySQLServerNameReferencer](#MySQLServerNameReferencer) | ServerNameRef - A reference to the Virtual Network Rule's MySQLServer.
|
||||
`resourceGroupName` | string | ResourceGroupName - Name of the Virtual Network Rule's resource group.
|
||||
`resourceGroupNameRef` | [ResourceGroupNameReferencerForVirtualNetworkRule](#ResourceGroupNameReferencerForVirtualNetworkRule) | ResourceGroupNameRef - A reference to a ResourceGroup object to retrieve its name
|
||||
`properties` | [VirtualNetworkRuleProperties](#VirtualNetworkRuleProperties) | VirtualNetworkRuleProperties - Resource properties.
|
||||
|
||||
|
||||
MySQLVirtualNetworkRuleSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## PostgreSQLServerNameReferencer
|
||||
|
||||
A PostgreSQLServerNameReferencer returns the server name of a referenced PostgreSQLServer.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [PostgreSQLVirtualNetworkRuleSpec](#PostgreSQLVirtualNetworkRuleSpec)
|
||||
* [ServerNameReferencerForPostgreSQLServerVirtualNetworkRule](#ServerNameReferencerForPostgreSQLServerVirtualNetworkRule)
|
||||
|
||||
|
||||
|
||||
|
||||
PostgreSQLServerNameReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## PostgreSQLVirtualNetworkRuleSpec
|
||||
|
||||
A PostgreSQLVirtualNetworkRuleSpec defines the desired state of a PostgreSQLVirtualNetworkRule.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [PostgreSQLServerVirtualNetworkRule](#PostgreSQLServerVirtualNetworkRule)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name - Name of the Virtual Network Rule.
|
||||
`serverName` | string | ServerName - Name of the Virtual Network Rule's PostgreSQLServer.
|
||||
`serverNameRef` | [PostgreSQLServerNameReferencer](#PostgreSQLServerNameReferencer) | ServerNameRef - A reference to the Virtual Network Rule's PostgreSQLServer.
|
||||
`resourceGroupName` | string | ResourceGroupName - Name of the Virtual Network Rule's resource group.
|
||||
`resourceGroupNameRef` | [ResourceGroupNameReferencerForVirtualNetworkRule](#ResourceGroupNameReferencerForVirtualNetworkRule) | ResourceGroupNameRef - A reference to a ResourceGroup object to retrieve its name
|
||||
`properties` | [VirtualNetworkRuleProperties](#VirtualNetworkRuleProperties) | VirtualNetworkRuleProperties - Resource properties.
|
||||
|
||||
|
||||
PostgreSQLVirtualNetworkRuleSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## PricingTierSpec
|
||||
|
||||
PricingTierSpec represents the performance and cost oriented properties of a SQLServer.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SQLServerParameters](#SQLServerParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`tier` | string | Tier of the particular SKU, e.g. Basic. Possible values include: 'Basic', 'GeneralPurpose', 'MemoryOptimized'
|
||||
`vcores` | int | VCores (aka Capacity) specifies how many virtual cores this SQLServer requires.
|
||||
`family` | string | Family of hardware.
|
||||
|
||||
|
||||
|
||||
## ResourceGroupNameReferencerForSQLServer
|
||||
|
||||
ResourceGroupNameReferencerForSQLServer is an attribute referencer that resolves the name of a the ResourceGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SQLServerParameters](#SQLServerParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
ResourceGroupNameReferencerForSQLServer supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-azure/apis/v1alpha3.ResourceGroupNameReferencer
|
||||
|
||||
|
||||
## ResourceGroupNameReferencerForVirtualNetworkRule
|
||||
|
||||
ResourceGroupNameReferencerForVirtualNetworkRule is an attribute referencer that resolves the name of a the ResourceGroup.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [MySQLVirtualNetworkRuleSpec](#MySQLVirtualNetworkRuleSpec)
|
||||
* [PostgreSQLVirtualNetworkRuleSpec](#PostgreSQLVirtualNetworkRuleSpec)
|
||||
|
||||
|
||||
|
||||
|
||||
ResourceGroupNameReferencerForVirtualNetworkRule supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-azure/apis/v1alpha3.ResourceGroupNameReferencer
|
||||
|
||||
|
||||
## SQLServerClassSpecTemplate
|
||||
|
||||
A SQLServerClassSpecTemplate is a template for the spec of a dynamically provisioned MySQLServer or PostgreSQLServer.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SQLServerClass](#SQLServerClass)
|
||||
|
||||
|
||||
|
||||
|
||||
SQLServerClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
* [SQLServerParameters](#SQLServerParameters)
|
||||
|
||||
|
||||
## SQLServerParameters
|
||||
|
||||
SQLServerParameters define the desired state of an Azure SQL Database, either PostgreSQL or MySQL.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SQLServerClassSpecTemplate](#SQLServerClassSpecTemplate)
|
||||
* [SQLServerSpec](#SQLServerSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`resourceGroupName` | string | ResourceGroupName specifies the name of the resource group that should contain this SQLServer.
|
||||
`resourceGroupNameRef` | [ResourceGroupNameReferencerForSQLServer](#ResourceGroupNameReferencerForSQLServer) | ResourceGroupNameRef - A reference to a ResourceGroup object to retrieve its name
|
||||
`location` | string | Location specifies the location of this SQLServer.
|
||||
`pricingTier` | [PricingTierSpec](#PricingTierSpec) | PricingTier specifies the pricing tier (aka SKU) for this SQLServer.
|
||||
`storageProfile` | [StorageProfileSpec](#StorageProfileSpec) | StorageProfile configures the storage profile of this SQLServer.
|
||||
`adminLoginName` | string | AdminLoginName specifies the administrator login name for this SQLServer.
|
||||
`version` | string | Version specifies the version of this server, for example "5.6", or "9.6".
|
||||
`sslEnforced` | Optional bool | SSLEnforced specifies whether SSL is required to connect to this SQLServer.
|
||||
|
||||
|
||||
|
||||
## SQLServerSpec
|
||||
|
||||
A SQLServerSpec defines the desired state of a SQLServer.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [MySQLServer](#MySQLServer)
|
||||
* [PostgreSQLServer](#PostgreSQLServer)
|
||||
|
||||
|
||||
|
||||
|
||||
SQLServerSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [SQLServerParameters](#SQLServerParameters)
|
||||
|
||||
|
||||
## SQLServerStatus
|
||||
|
||||
A SQLServerStatus represents the observed state of a SQLServer.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [MySQLServer](#MySQLServer)
|
||||
* [PostgreSQLServer](#PostgreSQLServer)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`state` | string | State of this SQLServer.
|
||||
`message` | string | A Message containing detail on the state of this SQLServer, if any.
|
||||
`providerID` | string | ProviderID is the external ID to identify this resource in the cloud provider.
|
||||
`endpoint` | string | Endpoint of the MySQL Server instance used in connection strings.
|
||||
|
||||
|
||||
SQLServerStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## ServerNameReferencerForMySQLServerVirtualNetworkRule
|
||||
|
||||
ServerNameReferencerForMySQLServerVirtualNetworkRule is an attribute referencer that resolves the name of a MySQLServer.
|
||||
|
||||
|
||||
|
||||
|
||||
ServerNameReferencerForMySQLServerVirtualNetworkRule supports all fields of:
|
||||
|
||||
* [MySQLServerNameReferencer](#MySQLServerNameReferencer)
|
||||
|
||||
|
||||
## ServerNameReferencerForPostgreSQLServerVirtualNetworkRule
|
||||
|
||||
ServerNameReferencerForPostgreSQLServerVirtualNetworkRule is an attribute referencer that resolves the name of a PostgreSQLServer.
|
||||
|
||||
|
||||
|
||||
|
||||
ServerNameReferencerForPostgreSQLServerVirtualNetworkRule supports all fields of:
|
||||
|
||||
* [PostgreSQLServerNameReferencer](#PostgreSQLServerNameReferencer)
|
||||
|
||||
|
||||
## StorageProfileSpec
|
||||
|
||||
A StorageProfileSpec represents storage related properties of a SQLServer.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SQLServerParameters](#SQLServerParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`storageGB` | int | StorageGB configures the maximum storage allowed.
|
||||
`backupRetentionDays` | int | BackupRetentionDays configures how many days backups will be retained.
|
||||
`geoRedundantBackup` | bool | GeoRedundantBackup enables geo-redunndant backups.
|
||||
|
||||
|
||||
|
||||
## SubnetIDReferencerForVirtualNetworkRule
|
||||
|
||||
SubnetIDReferencerForVirtualNetworkRule is an attribute referencer that resolves id from a referenced Subnet and assigns it to a PostgreSQLServer or MySQL server object
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VirtualNetworkRuleProperties](#VirtualNetworkRuleProperties)
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetIDReferencerForVirtualNetworkRule supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-azure/apis/network/v1alpha3.SubnetIDReferencer
|
||||
|
||||
|
||||
## VirtualNetworkRuleProperties
|
||||
|
||||
VirtualNetworkRuleProperties defines the properties of a VirtualNetworkRule.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [MySQLVirtualNetworkRuleSpec](#MySQLVirtualNetworkRuleSpec)
|
||||
* [PostgreSQLVirtualNetworkRuleSpec](#PostgreSQLVirtualNetworkRuleSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`virtualNetworkSubnetId` | string | VirtualNetworkSubnetID - The ARM resource id of the virtual network subnet.
|
||||
`virtualNetworkSubnetIdRef` | [SubnetIDReferencerForVirtualNetworkRule](#SubnetIDReferencerForVirtualNetworkRule) | VirtualNetworkSubnetIDRef - A reference to a Subnet to retrieve its ID
|
||||
`ignoreMissingVnetServiceEndpoint` | bool | IgnoreMissingVnetServiceEndpoint - Create firewall rule before the virtual network has vnet service endpoint enabled.
|
||||
|
||||
|
||||
|
||||
## VirtualNetworkRuleStatus
|
||||
|
||||
A VirtualNetworkRuleStatus represents the observed state of a VirtualNetworkRule.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [MySQLServerVirtualNetworkRule](#MySQLServerVirtualNetworkRule)
|
||||
* [PostgreSQLServerVirtualNetworkRule](#PostgreSQLServerVirtualNetworkRule)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`state` | string | State of this virtual network rule.
|
||||
`message` | string | A Message containing details about the state of this virtual network rule, if any.
|
||||
`id` | string | ID - Resource ID
|
||||
`type` | string | Type - Resource type.
|
||||
|
||||
|
||||
VirtualNetworkRuleStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,276 @@
|
|||
# network.azure.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for Azure network services such as virtual networks.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [Subnet](#Subnet)
|
||||
* [VirtualNetwork](#VirtualNetwork)
|
||||
|
||||
## Subnet
|
||||
|
||||
A Subnet is a managed resource that represents an Azure Subnet.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `network.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Subnet`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [SubnetSpec](#SubnetSpec) | A SubnetSpec defines the desired state of a Subnet.
|
||||
`status` | [SubnetStatus](#SubnetStatus) | A SubnetStatus represents the observed state of a Subnet.
|
||||
|
||||
|
||||
|
||||
## VirtualNetwork
|
||||
|
||||
A VirtualNetwork is a managed resource that represents an Azure Virtual Network.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `network.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `VirtualNetwork`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [VirtualNetworkSpec](#VirtualNetworkSpec) | A VirtualNetworkSpec defines the desired state of a VirtualNetwork.
|
||||
`status` | [VirtualNetworkStatus](#VirtualNetworkStatus) | A VirtualNetworkStatus represents the observed state of a VirtualNetwork.
|
||||
|
||||
|
||||
|
||||
## AddressSpace
|
||||
|
||||
AddressSpace contains an array of IP address ranges that can be used by subnets of the virtual network.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VirtualNetworkPropertiesFormat](#VirtualNetworkPropertiesFormat)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`addressPrefixes` | []string | AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
|
||||
|
||||
|
||||
|
||||
## ResourceGroupNameReferencerForSubnet
|
||||
|
||||
ResourceGroupNameReferencerForSubnet is an attribute referencer that resolves name from a referenced ResourceGroup
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetSpec](#SubnetSpec)
|
||||
|
||||
|
||||
|
||||
|
||||
ResourceGroupNameReferencerForSubnet supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-azure/apis/v1alpha3.ResourceGroupNameReferencer
|
||||
|
||||
|
||||
## ResourceGroupNameReferencerForVirtualNetwork
|
||||
|
||||
ResourceGroupNameReferencerForVirtualNetwork is an attribute referencer that resolves name from a referenced ResourceGroup
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VirtualNetworkSpec](#VirtualNetworkSpec)
|
||||
|
||||
|
||||
|
||||
|
||||
ResourceGroupNameReferencerForVirtualNetwork supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-azure/apis/v1alpha3.ResourceGroupNameReferencer
|
||||
|
||||
|
||||
## ServiceEndpointPropertiesFormat
|
||||
|
||||
ServiceEndpointPropertiesFormat defines properties of a service endpoint.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetPropertiesFormat](#SubnetPropertiesFormat)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`service` | Optional string | Service - The type of the endpoint service.
|
||||
`locations` | Optional []string | Locations - A list of locations.
|
||||
`provisioningState` | Optional string | ProvisioningState - The provisioning state of the resource.
|
||||
|
||||
|
||||
|
||||
## SubnetIDReferencer
|
||||
|
||||
SubnetIDReferencer is used to get the name from another Subnet
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetIDReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## SubnetPropertiesFormat
|
||||
|
||||
SubnetPropertiesFormat defines properties of a Subnet.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetSpec](#SubnetSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`addressPrefix` | string | AddressPrefix - The address prefix for the subnet.
|
||||
`serviceEndpoints` | [[]ServiceEndpointPropertiesFormat](#ServiceEndpointPropertiesFormat) | ServiceEndpoints - An array of service endpoints.
|
||||
|
||||
|
||||
|
||||
## SubnetSpec
|
||||
|
||||
A SubnetSpec defines the desired state of a Subnet.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Subnet](#Subnet)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
|
||||
`virtualNetworkName` | string | VirtualNetworkName - Name of the Subnet's virtual network.
|
||||
`virtualNetworkNameRef` | [VirtualNetworkNameReferencerForSubnet](#VirtualNetworkNameReferencerForSubnet) | VirtualNetworkNameRef references to a VirtualNetwork to retrieve its name
|
||||
`resourceGroupName` | string | ResourceGroupName - Name of the Subnet's resource group.
|
||||
`resourceGroupNameRef` | [ResourceGroupNameReferencerForSubnet](#ResourceGroupNameReferencerForSubnet) | ResourceGroupNameRef - A reference to the the Subnets's resource group.
|
||||
`properties` | [SubnetPropertiesFormat](#SubnetPropertiesFormat) | SubnetPropertiesFormat - Properties of the subnet.
|
||||
|
||||
|
||||
SubnetSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## SubnetStatus
|
||||
|
||||
A SubnetStatus represents the observed state of a Subnet.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Subnet](#Subnet)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`state` | string | State of this Subnet.
|
||||
`message` | string | A Message providing detail about the state of this Subnet, if any.
|
||||
`etag` | string | Etag - A unique string that changes whenever the resource is updated.
|
||||
`id` | string | ID of this Subnet.
|
||||
`purpose` | string | Purpose - A string identifying the intention of use for this subnet based on delegations and other user-defined properties.
|
||||
|
||||
|
||||
SubnetStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## VirtualNetworkNameReferencer
|
||||
|
||||
VirtualNetworkNameReferencer is used to get the name from another VirtualNetwork
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VirtualNetworkNameReferencerForSubnet](#VirtualNetworkNameReferencerForSubnet)
|
||||
|
||||
|
||||
|
||||
|
||||
VirtualNetworkNameReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## VirtualNetworkNameReferencerForSubnet
|
||||
|
||||
VirtualNetworkNameReferencerForSubnet is an attribute referencer that resolves name from a referenced Network
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetSpec](#SubnetSpec)
|
||||
|
||||
|
||||
|
||||
|
||||
VirtualNetworkNameReferencerForSubnet supports all fields of:
|
||||
|
||||
* [VirtualNetworkNameReferencer](#VirtualNetworkNameReferencer)
|
||||
|
||||
|
||||
## VirtualNetworkPropertiesFormat
|
||||
|
||||
VirtualNetworkPropertiesFormat defines properties of a VirtualNetwork.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VirtualNetworkSpec](#VirtualNetworkSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`addressSpace` | Optional [AddressSpace](#AddressSpace) | AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
|
||||
`enableDdosProtection` | Optional bool | EnableDDOSProtection - Indicates if DDoS protection is enabled for all the protected resources in the virtual network. It requires a DDoS protection plan associated with the resource.
|
||||
`enableVmProtection` | Optional bool | EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
|
||||
|
||||
|
||||
|
||||
## VirtualNetworkSpec
|
||||
|
||||
A VirtualNetworkSpec defines the desired state of a VirtualNetwork.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VirtualNetwork](#VirtualNetwork)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name - Name of the Virtual Network.
|
||||
`resourceGroupName` | string | ResourceGroupName - Name of the Virtual Network's resource group.
|
||||
`resourceGroupNameRef` | [ResourceGroupNameReferencerForVirtualNetwork](#ResourceGroupNameReferencerForVirtualNetwork) | ResourceGroupNameRef - A reference to the the Virtual Network's resource group.
|
||||
`properties` | [VirtualNetworkPropertiesFormat](#VirtualNetworkPropertiesFormat) | VirtualNetworkPropertiesFormat - Properties of the virtual network.
|
||||
`location` | string | Location - Resource location.
|
||||
`tags` | Optional map[string]string | Tags - Resource tags.
|
||||
|
||||
|
||||
VirtualNetworkSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## VirtualNetworkStatus
|
||||
|
||||
A VirtualNetworkStatus represents the observed state of a VirtualNetwork.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [VirtualNetwork](#VirtualNetwork)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`state` | string | State of this VirtualNetwork.
|
||||
`message` | string | A Message providing detail about the state of this VirtualNetwork, if any.
|
||||
`id` | string | ID of this VirtualNetwork.
|
||||
`etag` | string | Etag - A unique read-only string that changes whenever the resource is updated.
|
||||
`resourceGuid` | string | ResourceGUID - The GUID of this VirtualNetwork.
|
||||
`type` | string | Type of this VirtualNetwork.
|
||||
|
||||
|
||||
VirtualNetworkStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,469 @@
|
|||
# storage.azure.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for Azure storage services such as containers and accounts.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [Account](#Account)
|
||||
* [AccountClass](#AccountClass)
|
||||
* [Container](#Container)
|
||||
* [ContainerClass](#ContainerClass)
|
||||
|
||||
## Account
|
||||
|
||||
An Account is a managed resource that represents an Azure Blob Service Account.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `storage.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Account`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [AccountSpec](#AccountSpec) | An AccountSpec defines the desired state of an Account.
|
||||
`status` | [AccountStatus](#AccountStatus) | An AccountStatus represents the observed state of an Account.
|
||||
|
||||
|
||||
|
||||
## AccountClass
|
||||
|
||||
An AccountClass is a non-portable resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `storage.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `AccountClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [AccountClassSpecTemplate](#AccountClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned Account.
|
||||
|
||||
|
||||
|
||||
## Container
|
||||
|
||||
A Container is a managed resource that represents an Azure Blob Storage Container.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `storage.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Container`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [ContainerSpec](#ContainerSpec) | A ContainerSpec defines the desired state of a Container.
|
||||
`status` | [ContainerStatus](#ContainerStatus) | A ContainerStatus represents the observed status of a Container.
|
||||
|
||||
|
||||
|
||||
## ContainerClass
|
||||
|
||||
A ContainerClass is a non-portable resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `storage.azure.crossplane.io/v1alpha3`
|
||||
`kind` | string | `ContainerClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [ContainerClassSpecTemplate](#ContainerClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned Container.
|
||||
|
||||
|
||||
|
||||
## AccountClassSpecTemplate
|
||||
|
||||
An AccountClassSpecTemplate is a template for the spec of a dynamically provisioned Account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AccountClass](#AccountClass)
|
||||
|
||||
|
||||
|
||||
|
||||
AccountClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
* [AccountParameters](#AccountParameters)
|
||||
|
||||
|
||||
## AccountParameters
|
||||
|
||||
AccountParameters define the desired state of an Azure Blob Storage Account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AccountClassSpecTemplate](#AccountClassSpecTemplate)
|
||||
* [AccountSpec](#AccountSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`resourceGroupName` | string | ResourceGroupName specifies the resource group for this Account.
|
||||
`storageAccountName` | string | StorageAccountName specifies the name for this Account.
|
||||
`storageAccountSpec` | [StorageAccountSpec](#StorageAccountSpec) | StorageAccountSpec specifies the desired state of this Account.
|
||||
|
||||
|
||||
|
||||
## AccountSpec
|
||||
|
||||
An AccountSpec defines the desired state of an Account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Account](#Account)
|
||||
|
||||
|
||||
|
||||
|
||||
AccountSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [AccountParameters](#AccountParameters)
|
||||
|
||||
|
||||
## AccountStatus
|
||||
|
||||
An AccountStatus represents the observed state of an Account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Account](#Account)
|
||||
|
||||
|
||||
|
||||
|
||||
AccountStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [StorageAccountStatus](#StorageAccountStatus)
|
||||
|
||||
|
||||
## ContainerClassSpecTemplate
|
||||
|
||||
A ContainerClassSpecTemplate is a template for the spec of a dynamically provisioned Container.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ContainerClass](#ContainerClass)
|
||||
|
||||
|
||||
|
||||
|
||||
ContainerClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
* [ContainerParameters](#ContainerParameters)
|
||||
|
||||
|
||||
## ContainerParameters
|
||||
|
||||
ContainerParameters define the desired state of an Azure Blob Storage Container.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ContainerClassSpecTemplate](#ContainerClassSpecTemplate)
|
||||
* [ContainerSpec](#ContainerSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`nameFormat` | string | NameFormat specifies the name of the external Container. The first instance of the string '%s' will be replaced with the Kubernetes UID of this Container.
|
||||
`metadata` | Optional [azblob.Metadata](https://godoc.org/github.com/Azure/azure-storage-blob-go/azblob#Metadata) | Metadata for this Container.
|
||||
`publicAccessType` | Optional [azblob.PublicAccessType](https://godoc.org/github.com/Azure/azure-storage-blob-go/azblob#PublicAccessType) | PublicAccessType for this container; either "blob" or "container".
|
||||
`accountReference` | [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core) | AccountReference to the Azure Blob Storage Account this Container will reside within.
|
||||
|
||||
|
||||
|
||||
## ContainerSpec
|
||||
|
||||
A ContainerSpec defines the desired state of a Container.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Container](#Container)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`writeConnectionSecretToRef` | Optional [v1alpha1.SecretReference](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretreference) | WriteConnectionSecretToReference specifies the name of a Secret, in the same namespace as this managed resource, to which any connection details for this managed resource should be written. Connection details frequently include the endpoint, username, and password required to connect to the managed resource.
|
||||
`claimRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ClaimReference specifies the resource claim to which this managed resource will be bound. ClaimReference is set automatically during dynamic provisioning. Crossplane does not currently support setting this field manually, per https://github.com/crossplaneio/crossplane-runtime/issues/19
|
||||
`classRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ClassReference specifies the non-portable resource class that was used to dynamically provision this managed resource, if any. Crossplane does not currently support setting this field manually, per https://github.com/crossplaneio/crossplane-runtime/issues/20
|
||||
`reclaimPolicy` | Optional [v1alpha1.ReclaimPolicy](../crossplane-runtime/core-crossplane-io-v1alpha1.md#reclaimpolicy) | ReclaimPolicy specifies what will happen to the external resource this managed resource manages when the managed resource is deleted. "Delete" deletes the external resource, while "Retain" (the default) does not. Note this behaviour is subtly different from other uses of the ReclaimPolicy concept within the Kubernetes ecosystem per https://github.com/crossplaneio/crossplane-runtime/issues/21
|
||||
|
||||
|
||||
ContainerSpec supports all fields of:
|
||||
|
||||
* [ContainerParameters](#ContainerParameters)
|
||||
|
||||
|
||||
## ContainerStatus
|
||||
|
||||
A ContainerStatus represents the observed status of a Container.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Container](#Container)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name of this Container.
|
||||
|
||||
|
||||
ContainerStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## CustomDomain
|
||||
|
||||
CustomDomain specifies the custom domain assigned to this storage account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StorageAccountSpecProperties](#StorageAccountSpecProperties)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | Optional string | Name - custom domain name assigned to the storage account. Name is the CNAME source.
|
||||
`useSubDomainName` | Optional bool | UseSubDomainName - Indicates whether indirect CNAME validation is enabled.
|
||||
|
||||
|
||||
|
||||
## EnabledEncryptionServices
|
||||
|
||||
EnabledEncryptionServices a list of services that support encryption.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Encryption](#Encryption)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`blob` | bool | Blob - The encryption function of the blob storage service.
|
||||
`file` | bool | File - The encryption function of the file storage service.
|
||||
`table` | bool | Table - The encryption function of the table storage service.
|
||||
`queue` | bool | Queue - The encryption function of the queue storage service.
|
||||
|
||||
|
||||
|
||||
## Encryption
|
||||
|
||||
Encryption the encryption settings on the storage account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StorageAccountSpecProperties](#StorageAccountSpecProperties)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`services` | [EnabledEncryptionServices](#EnabledEncryptionServices) | Services - List of services which support encryption.
|
||||
`keySource` | [storage.KeySource](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#KeySource) | KeySource - The encryption keySource (provider). Possible values (case-insensitive): Microsoft.Storage, Microsoft.Keyvault
|
||||
`keyvaultproperties` | [KeyVaultProperties](#KeyVaultProperties) | KeyVaultProperties - Properties provided by key vault.
|
||||
|
||||
|
||||
|
||||
## Endpoints
|
||||
|
||||
Endpoints the URIs that are used to perform a retrieval of a public blob, queue, or table object.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StorageAccountStatusProperties](#StorageAccountStatusProperties)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`blob` | string | Blob - the blob endpoint.
|
||||
`queue` | string | Queue - the queue endpoint.
|
||||
`table` | string | Table - the table endpoint.
|
||||
`file` | string | File - the file endpoint.
|
||||
|
||||
|
||||
|
||||
## IPRule
|
||||
|
||||
IPRule IP rule with specific IP or IP range in CIDR format.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [NetworkRuleSet](#NetworkRuleSet)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`value` | string | IPAddressOrRange - Specifies the IP or IP range in CIDR format. Only IPV4 address is allowed.
|
||||
`action` | [storage.Action](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#Action) | Action - The action of IP ACL rule. Possible values include: 'Allow'
|
||||
|
||||
|
||||
|
||||
## Identity
|
||||
|
||||
Identity identity for the resource.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StorageAccountSpec](#StorageAccountSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`principalId` | string | PrincipalID - The principal ID of resource identity.
|
||||
`tenantId` | string | TenantID - The tenant ID of resource.
|
||||
`type` | string | Type - The identity type.
|
||||
|
||||
|
||||
|
||||
## KeyVaultProperties
|
||||
|
||||
KeyVaultProperties properties of key vault.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Encryption](#Encryption)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`keyname` | string | KeyName - The name of KeyVault key.
|
||||
`keyversion` | string | KeyVersion - The version of KeyVault key.
|
||||
`keyvaulturi` | string | KeyVaultURI - The Uri of KeyVault.
|
||||
|
||||
|
||||
|
||||
## NetworkRuleSet
|
||||
|
||||
NetworkRuleSet network rule set
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StorageAccountSpecProperties](#StorageAccountSpecProperties)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`bypass` | [storage.Bypass](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#Bypass) | Bypass - Specifies whether traffic is bypassed for Logging/Metrics/AzureServices. Possible values are any combination of Logging|Metrics|AzureServices (For example, "Logging, Metrics"), or None to bypass none of those traffics. Possible values include: 'None', 'Logging', 'Metrics', 'AzureServices'
|
||||
`virtualNetworkRules` | [[]VirtualNetworkRule](#VirtualNetworkRule) | VirtualNetworkRules - Sets the virtual network rules
|
||||
`ipRules` | [[]IPRule](#IPRule) | IPRules - Sets the IP ACL rules
|
||||
`defaultAction` | [storage.DefaultAction](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#DefaultAction) | DefaultAction - Specifies the default action of allow or deny when no other rules match. Possible values include: 'Allow', 'Deny'
|
||||
|
||||
|
||||
|
||||
## Sku
|
||||
|
||||
Sku of an Azure Blob Storage Account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StorageAccountSpec](#StorageAccountSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`capabilities` | [[]skuCapability](#skuCapability) | Capabilities - The capability information in the specified sku, including file encryption, network acls, change notification, etc.
|
||||
`kind` | [storage.Kind](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#Kind) | Kind - Indicates the type of storage account. Possible values include: 'Storage', 'BlobStorage'
|
||||
`locations` | []string | Locations - The set of locations that the Sku is available. This will be supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.).
|
||||
`name` | [storage.SkuName](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#SkuName) | Name - Gets or sets the sku name. Required for account creation; optional for update. Note that in older versions, sku name was called accountType. Possible values include: 'Standard_LRS', 'Standard_GRS', 'Standard_RAGRS', 'Standard_ZRS', 'Premium_LRS'
|
||||
`resourceType` | string | ResourceType - The type of the resource, usually it is 'storageAccounts'.
|
||||
`tier` | [storage.SkuTier](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#SkuTier) | Tier - Gets the sku tier. This is based on the Sku name. Possible values include: 'Standard', 'Premium'
|
||||
|
||||
|
||||
|
||||
## StorageAccountSpec
|
||||
|
||||
A StorageAccountSpec defines the desired state of an Azure Blob Storage account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AccountParameters](#AccountParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`identity` | Optional [Identity](#Identity) | Identity - The identity of the resource.
|
||||
`kind` | [storage.Kind](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#Kind) | Kind - Indicates the type of storage account. Possible values include: 'Storage', 'BlobStorage'
|
||||
`location` | string | Location - The location of the resource. This will be one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.).
|
||||
`sku` | [Sku](#Sku) | Sku of the storage account.
|
||||
`properties` | Optional [StorageAccountSpecProperties](#StorageAccountSpecProperties) | StorageAccountSpecProperties - The parameters used to create the storage account.
|
||||
`tags` | Optional map[string]string | Tags - A list of key value pairs that describe the resource. These tags can be used for viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key with a length no greater than 128 characters and a value with a length no greater than 256 characters.
|
||||
|
||||
|
||||
|
||||
## StorageAccountSpecProperties
|
||||
|
||||
StorageAccountSpecProperties the parameters used to create the storage account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StorageAccountSpec](#StorageAccountSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`accessTier` | [storage.AccessTier](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#AccessTier) | AccessTier - Required for storage accounts where kind = BlobStorage. The access tier used for billing. Possible values include: 'Hot', 'Cool'
|
||||
`customDomain` | [CustomDomain](#CustomDomain) | CustomDomain - User domain assigned to the storage account. Name is the CNAME source. Only one custom domain is supported per storage account at this time. to clear the existing custom domain, use an empty string for the custom domain name property.
|
||||
`supportsHttpsTrafficOnly` | bool | EnableHTTPSTrafficOnly - Allows https traffic only to storage service if sets to true.
|
||||
`encryption` | [Encryption](#Encryption) | Encryption - Provides the encryption settings on the account. If left unspecified the account encryption settings will remain the same. The default setting is unencrypted.
|
||||
`networkAcls` | [NetworkRuleSet](#NetworkRuleSet) | NetworkRuleSet - Network rule set
|
||||
|
||||
|
||||
|
||||
## StorageAccountStatus
|
||||
|
||||
A StorageAccountStatus represents the observed status of an Account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [AccountStatus](#AccountStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`id` | string | ID of this Account.
|
||||
`name` | string | Name of this Account.
|
||||
`type` | string | Type of this Account.
|
||||
`properties` | [StorageAccountStatusProperties](#StorageAccountStatusProperties) | Properties of this Account.
|
||||
|
||||
|
||||
|
||||
## StorageAccountStatusProperties
|
||||
|
||||
StorageAccountStatusProperties represent the observed state of an Account.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [StorageAccountStatus](#StorageAccountStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`creationTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | CreationTime - the creation date and time of the storage account in UTC.
|
||||
`lastGeoFailoverTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | LastGeoFailoverTime - the timestamp of the most recent instance of a failover to the secondary location. Only the most recent timestamp is retained. This element is not returned if there has never been a failover instance. Only available if the accountType is Standard_GRS or Standard_RAGRS.
|
||||
`primaryEndpoints` | [Endpoints](#Endpoints) | PrimaryEndpoints - the URLs that are used to perform a retrieval of a public blob, queue, or table object. Note that Standard_ZRS and Premium_LRS accounts only return the blob endpoint.
|
||||
`primaryLocation` | string | PrimaryLocation - the location of the primary data center for the storage account.
|
||||
`provisioningState` | [storage.ProvisioningState](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#ProvisioningState) | ProvisioningState - the status of the storage account at the time the operation was called. Possible values include: 'Creating', 'ResolvingDNS', 'Succeeded'
|
||||
`secondaryEndpoints` | [Endpoints](#Endpoints) | SecondaryEndpoints - the URLs that are used to perform a retrieval of a public blob, queue, or table object from the secondary location of the storage account. Only available if the Sku name is Standard_RAGRS.
|
||||
`secondaryLocation` | string | SecondaryLocation - the location of the geo-replicated secondary for the storage account. Only available if the accountType is Standard_GRS or Standard_RAGRS.
|
||||
`statusOfPrimary` | [storage.AccountStatus](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#AccountStatus) | StatusOfPrimary - the status indicating whether the primary location of the storage account is available or unavailable. Possible values include: 'Available', 'Unavailable'
|
||||
`statusOfSecondary` | [storage.AccountStatus](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#AccountStatus) | StatusOfSecondary - the status indicating whether the secondary location of the storage account is available or unavailable. Only available if the Sku name is Standard_GRS or Standard_RAGRS. Possible values include: 'Available', 'Unavailable'
|
||||
|
||||
|
||||
|
||||
## VirtualNetworkRule
|
||||
|
||||
VirtualNetworkRule virtual Network rule.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [NetworkRuleSet](#NetworkRuleSet)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`id` | string | VirtualNetworkResourceID - Resource ID of a subnet, for example: /subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}.
|
||||
`action` | [storage.Action](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#Action) | Action - The action of virtual network rule. Possible values include: 'Allow'
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
# cache.gcp.crossplane.io/v1beta1 API Reference
|
||||
|
||||
Package v1beta1 contains managed resources for GCP cache services such as CloudMemorystore.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [CloudMemorystoreInstance](#CloudMemorystoreInstance)
|
||||
* [CloudMemorystoreInstanceClass](#CloudMemorystoreInstanceClass)
|
||||
|
||||
## CloudMemorystoreInstance
|
||||
|
||||
A CloudMemorystoreInstance is a managed resource that represents a Google Cloud Memorystore instance.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `cache.gcp.crossplane.io/v1beta1`
|
||||
`kind` | string | `CloudMemorystoreInstance`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [CloudMemorystoreInstanceSpec](#CloudMemorystoreInstanceSpec) | A CloudMemorystoreInstanceSpec defines the desired state of a CloudMemorystoreInstance.
|
||||
`status` | [CloudMemorystoreInstanceStatus](#CloudMemorystoreInstanceStatus) | A CloudMemorystoreInstanceStatus represents the observed state of a CloudMemorystoreInstance.
|
||||
|
||||
|
||||
|
||||
## CloudMemorystoreInstanceClass
|
||||
|
||||
A CloudMemorystoreInstanceClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `cache.gcp.crossplane.io/v1beta1`
|
||||
`kind` | string | `CloudMemorystoreInstanceClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [CloudMemorystoreInstanceClassSpecTemplate](#CloudMemorystoreInstanceClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned CloudMemorystoreInstance.
|
||||
|
||||
|
||||
|
||||
## CloudMemorystoreInstanceClassSpecTemplate
|
||||
|
||||
A CloudMemorystoreInstanceClassSpecTemplate is a template for the spec of a dynamically provisioned CloudMemorystoreInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudMemorystoreInstanceClass](#CloudMemorystoreInstanceClass)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [CloudMemorystoreInstanceParameters](#CloudMemorystoreInstanceParameters) | CloudMemorystoreInstanceParameters define the desired state of an Google Cloud Memorystore instance. Most fields map directly to an Instance: https://cloud.google.com/memorystore/docs/redis/reference/rest/v1/projects.locations.instances#Instance
|
||||
|
||||
|
||||
CloudMemorystoreInstanceClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
|
||||
|
||||
## CloudMemorystoreInstanceObservation
|
||||
|
||||
CloudMemorystoreInstanceObservation is used to show the observed state of the CloudMemorystore resource on GCP.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudMemorystoreInstanceStatus](#CloudMemorystoreInstanceStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Unique name of the resource in this scope including project and location using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` Note: Redis instances are managed and addressed at regional level so location_id here refers to a GCP region; however, users may choose which specific zone (or collection of zones for cross-zone instances) an instance should be provisioned in. Refer to [location_id] and [alternative_location_id] fields for more details.
|
||||
`host` | string | Hostname or IP address of the exposed Redis endpoint used by clients to connect to the service.
|
||||
`port` | int32 | The port number of the exposed Redis endpoint.
|
||||
`currentLocationId` | string | The current zone where the Redis endpoint is placed. For Basic Tier instances, this will always be the same as the [location_id] provided by the user at creation time. For Standard Tier instances, this can be either [location_id] or [alternative_location_id] and can change after a failover event.
|
||||
`createTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | The time the instance was created.
|
||||
`state` | string | The current state of this instance.
|
||||
`statusMessage` | string | Additional information about the current status of this instance, if available.
|
||||
`persistenceIamIdentity` | string | Cloud IAM identity used by import / export operations to transfer data to/from Cloud Storage. Format is "serviceAccount:<service_account_email>". The value may change over time for a given instance so should be checked before each import/export operation.
|
||||
|
||||
|
||||
|
||||
## CloudMemorystoreInstanceParameters
|
||||
|
||||
CloudMemorystoreInstanceParameters define the desired state of an Google Cloud Memorystore instance. Most fields map directly to an Instance: https://cloud.google.com/memorystore/docs/redis/reference/rest/v1/projects.locations.instances#Instance
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudMemorystoreInstanceClassSpecTemplate](#CloudMemorystoreInstanceClassSpecTemplate)
|
||||
* [CloudMemorystoreInstanceSpec](#CloudMemorystoreInstanceSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`region` | string | Region in which to create this Cloud Memorystore cluster.
|
||||
`tier` | string | Tier specifies the replication level of the Redis cluster. BASIC provides a single Redis instance with no high availability. STANDARD_HA provides a cluster of two Redis instances in distinct availability zones. https://cloud.google.com/memorystore/docs/redis/redis-tiers
|
||||
`memorySizeGb` | int32 | Redis memory size in GiB.
|
||||
`displayName` | Optional string | An arbitrary and optional user-provided name for the instance.
|
||||
`labels` | Optional map[string]string | Resource labels to represent user provided metadata
|
||||
`locationId` | Optional string | The zone where the instance will be provisioned. If not provided, the service will choose a zone for the instance. For STANDARD_HA tier, instances will be created across two zones for protection against zonal failures. If [alternative_location_id] is also provided, it must be different from [location_id].
|
||||
`alternativeLocationId` | Optional string | Only applicable to STANDARD_HA tier which protects the instance against zonal failures by provisioning it across two zones. If provided, it must be a different zone from the one provided in [location_id].
|
||||
`redisVersion` | Optional string | The version of Redis software. If not provided, latest supported version will be used. Updating the version will perform an upgrade/downgrade to the new version. Currently, the supported values are: * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_3_2` for Redis 3.2 compatibility
|
||||
`reservedIpRange` | Optional string | The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network.
|
||||
`redisConfigs` | Optional map[string]string | Redis configuration parameters, according to http://redis.io/topics/config. Currently, the only supported parameters are: Redis 3.2 and above: * maxmemory-policy * notify-keyspace-events Redis 4.0 and above: * activedefrag * lfu-log-factor * lfu-decay-time
|
||||
`authorizedNetwork` | Optional string | The full name of the Google Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to which the instance is connected. If left unspecified, the `default` network will be used.
|
||||
|
||||
|
||||
|
||||
## CloudMemorystoreInstanceSpec
|
||||
|
||||
A CloudMemorystoreInstanceSpec defines the desired state of a CloudMemorystoreInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudMemorystoreInstance](#CloudMemorystoreInstance)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [CloudMemorystoreInstanceParameters](#CloudMemorystoreInstanceParameters) | CloudMemorystoreInstanceParameters define the desired state of an Google Cloud Memorystore instance. Most fields map directly to an Instance: https://cloud.google.com/memorystore/docs/redis/reference/rest/v1/projects.locations.instances#Instance
|
||||
|
||||
|
||||
CloudMemorystoreInstanceSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## CloudMemorystoreInstanceStatus
|
||||
|
||||
A CloudMemorystoreInstanceStatus represents the observed state of a CloudMemorystoreInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudMemorystoreInstance](#CloudMemorystoreInstance)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`atProvider` | [CloudMemorystoreInstanceObservation](#CloudMemorystoreInstanceObservation) | CloudMemorystoreInstanceObservation is used to show the observed state of the CloudMemorystore resource on GCP.
|
||||
|
||||
|
||||
CloudMemorystoreInstanceStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,554 @@
|
|||
# compute.gcp.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for GCP compute services such as GKE.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [GKECluster](#GKECluster)
|
||||
* [GKEClusterClass](#GKEClusterClass)
|
||||
* [GlobalAddress](#GlobalAddress)
|
||||
* [Network](#Network)
|
||||
* [Subnetwork](#Subnetwork)
|
||||
|
||||
## GKECluster
|
||||
|
||||
A GKECluster is a managed resource that represents a Google Kubernetes Engine cluster.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.gcp.crossplane.io/v1alpha3`
|
||||
`kind` | string | `GKECluster`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [GKEClusterSpec](#GKEClusterSpec) | A GKEClusterSpec defines the desired state of a GKECluster.
|
||||
`status` | [GKEClusterStatus](#GKEClusterStatus) | A GKEClusterStatus represents the observed state of a GKECluster.
|
||||
|
||||
|
||||
|
||||
## GKEClusterClass
|
||||
|
||||
A GKEClusterClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.gcp.crossplane.io/v1alpha3`
|
||||
`kind` | string | `GKEClusterClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [GKEClusterClassSpecTemplate](#GKEClusterClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned GKECluster.
|
||||
|
||||
|
||||
|
||||
## GlobalAddress
|
||||
|
||||
A GlobalAddress is a managed resource that represents a Google Compute Engine Global Address.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.gcp.crossplane.io/v1alpha3`
|
||||
`kind` | string | `GlobalAddress`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [GlobalAddressSpec](#GlobalAddressSpec) | A GlobalAddressSpec defines the desired state of a GlobalAddress.
|
||||
`status` | [GlobalAddressStatus](#GlobalAddressStatus) | A GlobalAddressStatus reflects the observed state of a GlobalAddress.
|
||||
|
||||
|
||||
|
||||
## Network
|
||||
|
||||
A Network is a managed resource that represents a Google Compute Engine VPC Network.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.gcp.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Network`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [NetworkSpec](#NetworkSpec) | A NetworkSpec defines the desired state of a Network.
|
||||
`status` | [NetworkStatus](#NetworkStatus) | A NetworkStatus represents the observed state of a Network.
|
||||
|
||||
|
||||
|
||||
## Subnetwork
|
||||
|
||||
A Subnetwork is a managed resource that represents a Google Compute Engine VPC Subnetwork.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `compute.gcp.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Subnetwork`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [SubnetworkSpec](#SubnetworkSpec) | A SubnetworkSpec defines the desired state of a Subnetwork.
|
||||
`status` | [SubnetworkStatus](#SubnetworkStatus) | A SubnetworkStatus represents the observed state of a Subnetwork.
|
||||
|
||||
|
||||
|
||||
## GCPNetworkPeering
|
||||
|
||||
A GCPNetworkPeering represents the observed state of a Google Compute Engine VPC Network Peering.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`autoCreateRoutes` | bool | AutoCreateRoutes: This field will be deprecated soon. Use the exchange_subnet_routes field instead. Indicates whether full mesh connectivity is created and managed automatically between peered networks. Currently this field should always be true since Google Compute Engine will automatically create and manage subnetwork routes between two networks when peering state is ACTIVE.
|
||||
`exchangeSubnetRoutes` | bool | ExchangeSubnetRoutes: Indicates whether full mesh connectivity is created and managed automatically between peered networks. Currently this field should always be true since Google Compute Engine will automatically create and manage subnetwork routes between two networks when peering state is ACTIVE.
|
||||
`name` | string | Name: Name of this peering. Provided by the client when the peering is created. The name must comply with RFC1035. Specifically, the name must be 1-63 characters long and match regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`. The first character must be a lowercase letter, and all the following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
|
||||
`network` | string | Network: The URL of the peer network. It can be either full URL or partial URL. The peer network may belong to a different project. If the partial URL does not contain project, it is assumed that the peer network is in the same project as the current network.
|
||||
`state` | string | State: State for the peering, either `ACTIVE` or `INACTIVE`. The peering is `ACTIVE` when there's a matching configuration in the peer network. Possible values: "ACTIVE" "INACTIVE"
|
||||
`stateDetails` | string | StateDetails: Details about the current state of the peering.
|
||||
|
||||
|
||||
|
||||
## GCPNetworkRoutingConfig
|
||||
|
||||
A GCPNetworkRoutingConfig specifies the desired state of a Google Compute Engine VPC Network Routing configuration.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GCPNetworkStatus](#GCPNetworkStatus)
|
||||
* [NetworkParameters](#NetworkParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`routingMode` | string | RoutingMode: The network-wide routing mode to use. If set to REGIONAL, this network's Cloud Routers will only advertise routes with subnets of this network in the same region as the router. If set to GLOBAL, this network's Cloud Routers will advertise routes with all subnets of this network, across regions. Possible values: "GLOBAL" "REGIONAL"
|
||||
|
||||
|
||||
|
||||
## GCPNetworkStatus
|
||||
|
||||
A GCPNetworkStatus represents the observed state of a Google Compute Engine VPC Network.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [NetworkStatus](#NetworkStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`IPv4Range` | string | IPv4Range: Deprecated in favor of subnet mode networks. The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.
|
||||
`autoCreateSubnetworks` | bool | AutoCreateSubnetworks: When set to true, the VPC network is created in "auto" mode. When set to false, the VPC network is created in "custom" mode. An auto mode VPC network starts with one subnet per region. Each subnet has a predetermined range as described in Auto mode VPC network IP ranges.
|
||||
`creationTimestamp` | string | CreationTimestamp: Creation timestamp in RFC3339 text format.
|
||||
`description` | string | Description: An optional description of this resource. Provide this field when you create the resource.
|
||||
`gatewayIPv4` | string | GatewayIPv4: The gateway address for default routing out of the network, selected by GCP.
|
||||
`id` | uint64 | Id: The unique identifier for the resource. This identifier is defined by the server.
|
||||
`peerings` | [[]*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPNetworkPeering](#*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPNetworkPeering) | Peerings: A list of network peerings for the resource.
|
||||
`routingConfig` | [GCPNetworkRoutingConfig](#GCPNetworkRoutingConfig) | RoutingConfig: The network-level routing configuration for this network. Used by Cloud Router to determine what type of network-wide routing behavior to enforce.
|
||||
`selfLink` | string | SelfLink: Server-defined URL for the resource.
|
||||
`subnetworks` | []string | Subnetworks: Server-defined fully-qualified URLs for all subnetworks in this VPC network.
|
||||
|
||||
|
||||
|
||||
## GCPSubnetworkSecondaryRange
|
||||
|
||||
A GCPSubnetworkSecondaryRange defines the state of a Google Compute Engine VPC Subnetwork secondary range.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`ipCidrRange` | string | IPCIDRRange: The range of IP addresses belonging to this subnetwork secondary range. Provide this property when you create the subnetwork. Ranges must be unique and non-overlapping with all primary and secondary IP ranges within a network. Only IPv4 is supported.
|
||||
`rangeName` | string | RangeName: The name associated with this subnetwork secondary range, used when adding an alias IP range to a VM instance. The name must be 1-63 characters long, and comply with RFC1035. The name must be unique within the subnetwork.
|
||||
|
||||
|
||||
|
||||
## GCPSubnetworkStatus
|
||||
|
||||
A GCPSubnetworkStatus represents the observed state of a Google Compute Engine VPC Subnetwork.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetworkStatus](#SubnetworkStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`creationTimestamp` | string | CreationTimestamp: Creation timestamp in RFC3339 text format.
|
||||
`description` | string | Description: An optional description of this resource. Provide this property when you create the resource. This field can be set only at resource creation time.
|
||||
`enableFlowLogs` | bool | EnableFlowLogs: Whether to enable flow logging for this subnetwork. If this field is not explicitly set, it will not appear in get listings. If not set the default behavior is to disable flow logging.
|
||||
`fingerprint` | string | Fingerprint: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a Subnetwork. An up-to-date fingerprint must be provided in order to update the Subnetwork, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve a Subnetwork.
|
||||
`gatewayAddress` | string | GatewayAddress: The gateway address for default routes to reach destination addresses outside this subnetwork.
|
||||
`id` | uint64 | Id: The unique identifier for the resource. This identifier is defined by the server.
|
||||
`ipCidrRange` | string | IPCIDRRange: The range of internal addresses that are owned by this subnetwork. Provide this property when you create the subnetwork. For example, 10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and non-overlapping within a network. Only IPv4 is supported. This field can be set only at resource creation time.
|
||||
`kind` | string | Kind: Type of the resource. Always compute#subnetwork for Subnetwork resources.
|
||||
`name` | string | Name: The name of the resource, provided by the client when initially creating the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
|
||||
`network` | string | Network: The URL of the network to which this subnetwork belongs, provided by the client when initially creating the subnetwork. Only networks that are in the distributed mode can have subnetworks. This field can be set only at resource creation time.
|
||||
`privateIpGoogleAccess` | bool | PrivateIPGoogleAccess: Whether the VMs in this subnet can access Google services without assigned external IP addresses. This field can be both set at resource creation time and updated using setPrivateIPGoogleAccess.
|
||||
`region` | string | Region: URL of the region where the Subnetwork resides. This field can be set only at resource creation time.
|
||||
`secondaryIpRanges` | [[]*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPSubnetworkSecondaryRange](#*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPSubnetworkSecondaryRange) | SecondaryIPRanges: An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary ranges. This field can be updated with a patch request.
|
||||
`selfLink` | string | SelfLink: Server-defined URL for the resource.
|
||||
|
||||
|
||||
|
||||
## GKEClusterClassSpecTemplate
|
||||
|
||||
A GKEClusterClassSpecTemplate is a template for the spec of a dynamically provisioned GKECluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GKEClusterClass](#GKEClusterClass)
|
||||
|
||||
|
||||
|
||||
|
||||
GKEClusterClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
* [GKEClusterParameters](#GKEClusterParameters)
|
||||
|
||||
|
||||
## GKEClusterParameters
|
||||
|
||||
GKEClusterParameters define the desired state of a Google Kubernetes Engine cluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GKEClusterClassSpecTemplate](#GKEClusterClassSpecTemplate)
|
||||
* [GKEClusterSpec](#GKEClusterSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`clusterVersion` | Optional string | ClusterVersion is the initial Kubernetes version for this cluster. Users may specify either explicit versions offered by Kubernetes Engine or version aliases, for example "latest", "1.X", or "1.X.Y". Leave unset to use the default version.
|
||||
`labels` | Optional map[string]string | Labels for the cluster to use to annotate any related Google Compute Engine resources.
|
||||
`machineType` | Optional string | MachineType is the name of a Google Compute Engine machine type (e.g. n1-standard-1). If unspecified the default machine type is n1-standard-1.
|
||||
`numNodes` | int64 | NumNodes is the number of nodes to create in this cluster. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota.
|
||||
`zone` | Optional string | Zone specifies the name of the Google Compute Engine zone in which this cluster resides.
|
||||
`scopes` | Optional []string | Scopes are the set of Google API scopes to be made available on all of the node VMs under the "default" service account.
|
||||
`network` | Optional string | Network is the name of the Google Compute Engine network to which the cluster is connected. If left unspecified, the default network will be used.
|
||||
`networkRef` | [NetworkURIReferencerForGKECluster](#NetworkURIReferencerForGKECluster) | NetworkRef references to a Network and retrieves its URI
|
||||
`subnetwork` | Optional string | Subnetwork is the name of the Google Compute Engine subnetwork to which the cluster is connected.
|
||||
`subnetworkRef` | [SubnetworkURIReferencerForGKECluster](#SubnetworkURIReferencerForGKECluster) | SubnetworkRef references to a Subnetwork and retrieves its URI
|
||||
`enableIPAlias` | Optional bool | EnableIPAlias determines whether Alias IPs will be used for pod IPs in the cluster.
|
||||
`createSubnetwork` | Optional bool | CreateSubnetwork determines whether a new subnetwork will be created automatically for the cluster. Only applicable when EnableIPAlias is true.
|
||||
`nodeIPV4CIDR` | Optional string | NodeIPV4CIDR specifies the IP address range of the instance IPs in this cluster. This is applicable only if CreateSubnetwork is true. Omit this field to have a range chosen with the default size. Set it to a netmask (e.g. /24) to have a range chosen with a specific netmask.
|
||||
`clusterIPV4CIDR` | Optional string | ClusterIPV4CIDR specifies the IP address range of the pod IPs in this cluster. This is applicable only if EnableIPAlias is true. Omit this field to have a range chosen with the default size. Set it to a netmask (e.g. /24) to have a range chosen with a specific netmask.
|
||||
`clusterSecondaryRangeName` | Optional string | ClusterSecondaryRangeName specifies the name of the secondary range to be used for the cluster CIDR block. The secondary range will be used for pod IP addresses. This must be an existing secondary range associated with the cluster subnetwork.
|
||||
`serviceIPV4CIDR` | Optional string | ServiceIPV4CIDR specifies the IP address range of service IPs in this cluster. This is applicable only if EnableIPAlias is true. Omit this field to have a range chosen with the default size. Set it to a netmask (e.g. /24) to have a range chosen with a specific netmask.
|
||||
`servicesSecondaryRangeName` | string | ServicesSecondaryRangeName specifies the name of the secondary range to be used as for the services CIDR block. The secondary range will be used for service ClusterIPs. This must be an existing secondary range associated with the cluster subnetwork.
|
||||
|
||||
|
||||
|
||||
## GKEClusterSpec
|
||||
|
||||
A GKEClusterSpec defines the desired state of a GKECluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GKECluster](#GKECluster)
|
||||
|
||||
|
||||
|
||||
|
||||
GKEClusterSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [GKEClusterParameters](#GKEClusterParameters)
|
||||
|
||||
|
||||
## GKEClusterStatus
|
||||
|
||||
A GKEClusterStatus represents the observed state of a GKECluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GKECluster](#GKECluster)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`clusterName` | string | ClusterName is the name of this GKE cluster. The name is automatically generated by Crossplane.
|
||||
`endpoint` | string | Endpoint of the GKE cluster used in connection strings.
|
||||
`state` | string | State of this GKE cluster.
|
||||
|
||||
|
||||
GKEClusterStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## GlobalAddressNameReferencer
|
||||
|
||||
GlobalAddressNameReferencer retrieves a Name from a referenced GlobalAddress object
|
||||
|
||||
|
||||
|
||||
|
||||
GlobalAddressNameReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## GlobalAddressParameters
|
||||
|
||||
GlobalAddressParameters define the desired state of a Google Compute Engine Global Address. Most fields map directly to an Address: https://cloud.google.com/compute/docs/reference/rest/v1/globalAddresses
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GlobalAddressSpec](#GlobalAddressSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`address` | Optional string | Address: The static IP address represented by this resource.
|
||||
`addressType` | Optional string | AddressType: The type of address to reserve, either INTERNAL or EXTERNAL. If unspecified, defaults to EXTERNAL. Possible values: "EXTERNAL" "INTERNAL" "UNSPECIFIED_TYPE"
|
||||
`description` | Optional string | Description: An optional description of this resource.
|
||||
`ipVersion` | Optional string | IPVersion: The IP version that will be used by this address. Valid options are IPV4 or IPV6. Possible values: "IPV4" "IPV6" "UNSPECIFIED_VERSION"
|
||||
`name` | string | Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`. The first character must be a lowercase letter, and all following characters (except for the last character) must be a dash, lowercase letter, or digit. The last character must be a lowercase letter or digit.
|
||||
`network` | Optional string | Network: The URL of the network in which to reserve the address. This field can only be used with INTERNAL type with the VPC_PEERING purpose.
|
||||
`networkRef` | [NetworkURIReferencerForGlobalAddress](#NetworkURIReferencerForGlobalAddress) | NetworkRef references to a Network and retrieves its URI
|
||||
`prefixLength` | Optional int64 | PrefixLength: The prefix length if the resource represents an IP range.
|
||||
`purpose` | Optional string | Purpose: The purpose of this resource, which can be one of the following values: - `GCE_ENDPOINT` for addresses that are used by VM instances, alias IP ranges, internal load balancers, and similar resources. - `DNS_RESOLVER` for a DNS resolver address in a subnetwork - `VPC_PEERING` for addresses that are reserved for VPC peer networks. - `NAT_AUTO` for addresses that are external IP addresses automatically reserved for Cloud NAT. Possible values: "DNS_RESOLVER" "GCE_ENDPOINT" "NAT_AUTO" "VPC_PEERING"
|
||||
`subnetwork` | Optional string | Subnetwork: The URL of the subnetwork in which to reserve the address. If an IP address is specified, it must be within the subnetwork's IP range. This field can only be used with INTERNAL type with a GCE_ENDPOINT or DNS_RESOLVER purpose.
|
||||
|
||||
|
||||
|
||||
## GlobalAddressSpec
|
||||
|
||||
A GlobalAddressSpec defines the desired state of a GlobalAddress.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GlobalAddress](#GlobalAddress)
|
||||
|
||||
|
||||
|
||||
|
||||
GlobalAddressSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [GlobalAddressParameters](#GlobalAddressParameters)
|
||||
|
||||
|
||||
## GlobalAddressStatus
|
||||
|
||||
A GlobalAddressStatus reflects the observed state of a GlobalAddress.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GlobalAddress](#GlobalAddress)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`creationTimestamp` | string | CreationTimestamp in RFC3339 text format.
|
||||
`id` | uint64 | ID for the resource. This identifier is defined by the server.
|
||||
`selfLink` | string | SelfLink: Server-defined URL for the resource.
|
||||
`status` | string | Status of the address, which can be one of RESERVING, RESERVED, or IN_USE. An address that is RESERVING is currently in the process of being reserved. A RESERVED address is currently reserved and available to use. An IN_USE address is currently being used by another resource and is not available. Possible values: "IN_USE" "RESERVED" "RESERVING"
|
||||
`users` | []string | Users that are using this address.
|
||||
|
||||
|
||||
GlobalAddressStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## NetworkParameters
|
||||
|
||||
NetworkParameters define the desired state of a Google Compute Engine VPC Network. Most fields map directly to a Network: https://cloud.google.com/compute/docs/reference/rest/v1/networks
|
||||
|
||||
Appears in:
|
||||
|
||||
* [NetworkSpec](#NetworkSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`IPv4Range` | string | IPv4Range: Deprecated in favor of subnet mode networks. The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.
|
||||
`autoCreateSubnetworks` | bool | AutoCreateSubnetworks: When set to true, the VPC network is created in "auto" mode. When set to false, the VPC network is created in "custom" mode. When set to nil, the VPC network is created in "legacy" mode which will be deprecated by GCP soon. An auto mode VPC network starts with one subnet per region. Each subnet has a predetermined range as described in Auto mode VPC network IP ranges.
|
||||
`description` | string | Description: An optional description of this resource. Provide this field when you create the resource.
|
||||
`name` | string | Name: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?. The first character must be a lowercase letter, and all following characters (except for the last character) must be a dash, lowercase letter, or digit. The last character must be a lowercase letter or digit.
|
||||
`routingConfig` | [GCPNetworkRoutingConfig](#GCPNetworkRoutingConfig) | RoutingConfig: The network-level routing configuration for this network. Used by Cloud Router to determine what type of network-wide routing behavior to enforce.
|
||||
|
||||
|
||||
|
||||
## NetworkSpec
|
||||
|
||||
A NetworkSpec defines the desired state of a Network.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Network](#Network)
|
||||
|
||||
|
||||
|
||||
|
||||
NetworkSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [NetworkParameters](#NetworkParameters)
|
||||
|
||||
|
||||
## NetworkStatus
|
||||
|
||||
A NetworkStatus represents the observed state of a Network.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Network](#Network)
|
||||
|
||||
|
||||
|
||||
|
||||
NetworkStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [GCPNetworkStatus](#GCPNetworkStatus)
|
||||
|
||||
|
||||
## NetworkURIReferencer
|
||||
|
||||
NetworkURIReferencer retrieves a NetworkURI from a referenced Network object
|
||||
|
||||
Appears in:
|
||||
|
||||
* [NetworkURIReferencerForGKECluster](#NetworkURIReferencerForGKECluster)
|
||||
* [NetworkURIReferencerForGlobalAddress](#NetworkURIReferencerForGlobalAddress)
|
||||
* [NetworkURIReferencerForSubnetwork](#NetworkURIReferencerForSubnetwork)
|
||||
|
||||
|
||||
|
||||
|
||||
NetworkURIReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## NetworkURIReferencerForGKECluster
|
||||
|
||||
NetworkURIReferencerForGKECluster is an attribute referencer that resolves network uri from a referenced Network and assigns it to a GKECluster
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GKEClusterParameters](#GKEClusterParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
NetworkURIReferencerForGKECluster supports all fields of:
|
||||
|
||||
* [NetworkURIReferencer](#NetworkURIReferencer)
|
||||
|
||||
|
||||
## NetworkURIReferencerForGlobalAddress
|
||||
|
||||
NetworkURIReferencerForGlobalAddress is an attribute referencer that resolves network uri from a referenced Network and assigns it to a global address object
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GlobalAddressParameters](#GlobalAddressParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
NetworkURIReferencerForGlobalAddress supports all fields of:
|
||||
|
||||
* [NetworkURIReferencer](#NetworkURIReferencer)
|
||||
|
||||
|
||||
## NetworkURIReferencerForSubnetwork
|
||||
|
||||
NetworkURIReferencerForSubnetwork is an attribute referencer that resolves network uri from a referenced Network and assigns it to a subnetwork
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetworkParameters](#SubnetworkParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
NetworkURIReferencerForSubnetwork supports all fields of:
|
||||
|
||||
* [NetworkURIReferencer](#NetworkURIReferencer)
|
||||
|
||||
|
||||
## SubnetworkParameters
|
||||
|
||||
SubnetworkParameters define the desired state of a Google Compute Engine VPC Subnetwork. Most fields map directly to a Subnetwork: https://cloud.google.com/compute/docs/reference/rest/v1/subnetworks
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetworkSpec](#SubnetworkSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`description` | Optional string | Description: An optional description of this resource. Provide this property when you create the resource. This field can be set only at resource creation time.
|
||||
`enableFlowLogs` | Optional bool | EnableFlowLogs: Whether to enable flow logging for this subnetwork. If this field is not explicitly set, it will not appear in get listings. If not set the default behavior is to disable flow logging.
|
||||
`ipCidrRange` | string | IPCIDRRange: The range of internal addresses that are owned by this subnetwork. Provide this property when you create the subnetwork. For example, 10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and non-overlapping within a network. Only IPv4 is supported. This field can be set only at resource creation time.
|
||||
`name` | string | Name: The name of the resource, provided by the client when initially creating the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
|
||||
`network` | string | Network: The URL of the network to which this subnetwork belongs, provided by the client when initially creating the subnetwork. Only networks that are in the distributed mode can have subnetworks. This field can be set only at resource creation time.
|
||||
`networkRef` | [NetworkURIReferencerForSubnetwork](#NetworkURIReferencerForSubnetwork) | NetworkRef references to a Network and retrieves its URI
|
||||
`privateIpGoogleAccess` | Optional bool | PrivateIPGoogleAccess: Whether the VMs in this subnet can access Google services without assigned external IP addresses. This field can be both set at resource creation time and updated using setPrivateIPGoogleAccess.
|
||||
`region` | Optional string | Region: URL of the region where the Subnetwork resides. This field can be set only at resource creation time.
|
||||
`secondaryIpRanges` | Optional [[]*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPSubnetworkSecondaryRange](#*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPSubnetworkSecondaryRange) | SecondaryIPRanges: An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary ranges. This field can be updated with a patch request.
|
||||
|
||||
|
||||
|
||||
## SubnetworkSpec
|
||||
|
||||
A SubnetworkSpec defines the desired state of a Subnetwork.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Subnetwork](#Subnetwork)
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetworkSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [SubnetworkParameters](#SubnetworkParameters)
|
||||
|
||||
|
||||
## SubnetworkStatus
|
||||
|
||||
A SubnetworkStatus represents the observed state of a Subnetwork.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Subnetwork](#Subnetwork)
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetworkStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
* [GCPSubnetworkStatus](#GCPSubnetworkStatus)
|
||||
|
||||
|
||||
## SubnetworkURIReferencer
|
||||
|
||||
SubnetworkURIReferencer retrieves a SubnetworkURI from a referenced Subnetwork object
|
||||
|
||||
Appears in:
|
||||
|
||||
* [SubnetworkURIReferencerForGKECluster](#SubnetworkURIReferencerForGKECluster)
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetworkURIReferencer supports all fields of:
|
||||
|
||||
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
|
||||
|
||||
|
||||
## SubnetworkURIReferencerForGKECluster
|
||||
|
||||
SubnetworkURIReferencerForGKECluster is an attribute referencer that resolves subnetwork uri from a referenced Subnetwork and assigns it to a GKECluster
|
||||
|
||||
Appears in:
|
||||
|
||||
* [GKEClusterParameters](#GKEClusterParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
SubnetworkURIReferencerForGKECluster supports all fields of:
|
||||
|
||||
* [SubnetworkURIReferencer](#SubnetworkURIReferencer)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,382 @@
|
|||
# database.gcp.crossplane.io/v1beta1 API Reference
|
||||
|
||||
Package v1beta1 contains managed resources for GCP database services such as CloudSQL.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [CloudSQLInstance](#CloudSQLInstance)
|
||||
* [CloudSQLInstanceClass](#CloudSQLInstanceClass)
|
||||
|
||||
## CloudSQLInstance
|
||||
|
||||
A CloudSQLInstance is a managed resource that represents a Google CloudSQL instance.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.gcp.crossplane.io/v1beta1`
|
||||
`kind` | string | `CloudSQLInstance`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [CloudSQLInstanceSpec](#CloudSQLInstanceSpec) | A CloudSQLInstanceSpec defines the desired state of a CloudSQLInstance.
|
||||
`status` | [CloudSQLInstanceStatus](#CloudSQLInstanceStatus) | A CloudSQLInstanceStatus represents the observed state of a CloudSQLInstance.
|
||||
|
||||
|
||||
|
||||
## CloudSQLInstanceClass
|
||||
|
||||
A CloudSQLInstanceClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.gcp.crossplane.io/v1beta1`
|
||||
`kind` | string | `CloudSQLInstanceClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [CloudSQLInstanceClassSpecTemplate](#CloudSQLInstanceClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned CloudSQLInstance.
|
||||
|
||||
|
||||
|
||||
## ACLEntry
|
||||
|
||||
ACLEntry is an entry for an Access Control list.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`expirationTime` | Optional string | ExpirationTime: The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
|
||||
`name` | Optional string | Name: An optional label to identify this entry.
|
||||
`value` | Optional string | Value: The whitelisted value for the access control list.
|
||||
|
||||
|
||||
|
||||
## BackupConfiguration
|
||||
|
||||
BackupConfiguration is database instance backup configuration.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Settings](#Settings)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`binaryLogEnabled` | Optional bool | BinaryLogEnabled: Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
|
||||
`enabled` | Optional bool | Enabled: Whether this configuration is enabled.
|
||||
`location` | Optional string | Location: The location of the backup.
|
||||
`replicationLogArchivingEnabled` | Optional bool | ReplicationLogArchivingEnabled: Reserved for future use.
|
||||
`startTime` | Optional string | StartTime: Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
|
||||
|
||||
|
||||
|
||||
## CloudSQLInstanceClassSpecTemplate
|
||||
|
||||
A CloudSQLInstanceClassSpecTemplate is a template for the spec of a dynamically provisioned CloudSQLInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstanceClass](#CloudSQLInstanceClass)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [CloudSQLInstanceParameters](#CloudSQLInstanceParameters) | CloudSQLInstanceParameters define the desired state of a Google CloudSQL instance.
|
||||
|
||||
|
||||
CloudSQLInstanceClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
|
||||
|
||||
## CloudSQLInstanceObservation
|
||||
|
||||
CloudSQLInstanceObservation is used to show the observed state of the Cloud SQL resource on GCP.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstanceStatus](#CloudSQLInstanceStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`backendType` | string | BackendType: FIRST_GEN: First Generation instance. MySQL only. SECOND_GEN: Second Generation instance or PostgreSQL instance. EXTERNAL: A database server that is not managed by Google. This property is read-only; use the tier property in the settings object to determine the database type and Second or First Generation.
|
||||
`currentDiskSize` | int64 | CurrentDiskSize: The current disk usage of the instance in bytes. This property has been deprecated. Users should use the "cloudsql.googleapis.com/database/disk/bytes_used" metric in Cloud Monitoring API instead. Please see this announcement for details.
|
||||
`connectionName` | string | ConnectionName: Connection name of the Cloud SQL instance used in connection strings.
|
||||
`diskEncryptionStatus` | [DiskEncryptionStatus](#DiskEncryptionStatus) | DiskEncryptionStatus: Disk encryption status specific to an instance. Applies only to Second Generation instances.
|
||||
`failoverReplica` | [DatabaseInstanceFailoverReplicaStatus](#DatabaseInstanceFailoverReplicaStatus) | FailoverReplica: The name and status of the failover replica. This property is applicable only to Second Generation instances.
|
||||
`gceZone` | string | GceZone: The Compute Engine zone that the instance is currently serving from. This value could be different from the zone that was specified when the instance was created if the instance has failed over to its secondary zone.
|
||||
`ipAddresses` | [[]*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.IPMapping](#*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.IPMapping) | IPAddresses: The assigned IP addresses for the instance.
|
||||
`ipv6Address` | string | IPv6Address: The IPv6 address assigned to the instance. This property is applicable only to First Generation instances.
|
||||
`project` | string | Project: The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
|
||||
`selfLink` | string | SelfLink: The URI of this resource.
|
||||
`serviceAccountEmailAddress` | string | ServiceAccountEmailAddress: The service account email address assigned to the instance. This property is applicable only to Second Generation instances.
|
||||
`state` | string | State: The current serving state of the Cloud SQL instance. This can be one of the following. RUNNABLE: The instance is running, or is ready to run when accessed. SUSPENDED: The instance is not available, for example due to problems with billing. PENDING_CREATE: The instance is being created. MAINTENANCE: The instance is down for maintenance. FAILED: The instance creation failed. UNKNOWN_STATE: The state of the instance is unknown.
|
||||
`settingsVersion` | int64 | SettingsVersion: The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
|
||||
|
||||
|
||||
|
||||
## CloudSQLInstanceParameters
|
||||
|
||||
CloudSQLInstanceParameters define the desired state of a Google CloudSQL instance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstanceClassSpecTemplate](#CloudSQLInstanceClassSpecTemplate)
|
||||
* [CloudSQLInstanceSpec](#CloudSQLInstanceSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`region` | string | Region: The geographical region. Can be us-central (FIRST_GEN instances only), us-central1 (SECOND_GEN instances only), asia-east1 or europe-west1. Defaults to us-central or us-central1 depending on the instance type (First Generation or Second Generation). The region can not be changed after instance creation.
|
||||
`settings` | [Settings](#Settings) | Settings: The user settings.
|
||||
`databaseVersion` | Optional string | DatabaseVersion: The database engine type and version. The databaseVersion field can not be changed after instance creation. MySQL Second Generation instances: MYSQL_5_7 (default) or MYSQL_5_6. PostgreSQL instances: POSTGRES_9_6 (default) or POSTGRES_11 Beta. MySQL First Generation instances: MYSQL_5_6 (default) or MYSQL_5_5
|
||||
`masterInstanceName` | Optional string | MasterInstanceName: The name of the instance which will act as master in the replication setup.
|
||||
`diskEncryptionConfiguration` | Optional [DiskEncryptionConfiguration](#DiskEncryptionConfiguration) | DiskEncryptionConfiguration: Disk encryption configuration specific to an instance. Applies only to Second Generation instances.
|
||||
`failoverReplica` | Optional [DatabaseInstanceFailoverReplicaSpec](#DatabaseInstanceFailoverReplicaSpec) | FailoverReplica: The name and status of the failover replica. This property is applicable only to Second Generation instances.
|
||||
`gceZone` | Optional string | GceZone: The Compute Engine zone that the instance is currently serving from. This value could be different from the zone that was specified when the instance was created if the instance has failed over to its secondary zone.
|
||||
`instanceType` | Optional string | InstanceType: The instance type. This can be one of the following. CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master. ON_PREMISES_INSTANCE: An instance running on the customer's premises. READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
|
||||
`maxDiskSize` | Optional int64 | MaxDiskSize: The maximum disk size of the instance in bytes.
|
||||
`onPremisesConfiguration` | Optional [OnPremisesConfiguration](#OnPremisesConfiguration) | OnPremisesConfiguration: Configuration specific to on-premises instances.
|
||||
`replicaNames` | Optional []string | ReplicaNames: The replicas of the instance.
|
||||
`suspensionReason` | Optional []string | SuspensionReason: If the instance state is SUSPENDED, the reason for the suspension.
|
||||
|
||||
|
||||
|
||||
## CloudSQLInstanceSpec
|
||||
|
||||
A CloudSQLInstanceSpec defines the desired state of a CloudSQLInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstance](#CloudSQLInstance)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [CloudSQLInstanceParameters](#CloudSQLInstanceParameters) | CloudSQLInstanceParameters define the desired state of a Google CloudSQL instance.
|
||||
|
||||
|
||||
CloudSQLInstanceSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## CloudSQLInstanceStatus
|
||||
|
||||
A CloudSQLInstanceStatus represents the observed state of a CloudSQLInstance.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstance](#CloudSQLInstance)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`atProvider` | [CloudSQLInstanceObservation](#CloudSQLInstanceObservation) | CloudSQLInstanceObservation is used to show the observed state of the Cloud SQL resource on GCP.
|
||||
|
||||
|
||||
CloudSQLInstanceStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## DatabaseFlags
|
||||
|
||||
DatabaseFlags are database flags for Cloud SQL instances.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name: The name of the flag. These flags are passed at instance startup, so include both server options and system variables for MySQL. Flags should be specified with underscores, not hyphens. For more information, see Configuring Database Flags in the Cloud SQL documentation.
|
||||
`value` | string | Value: The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
|
||||
|
||||
|
||||
|
||||
## DatabaseInstanceFailoverReplicaSpec
|
||||
|
||||
DatabaseInstanceFailoverReplicaSpec is where you can specify a name for the failover replica.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstanceParameters](#CloudSQLInstanceParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name: The name of the failover replica. If specified at instance creation, a failover replica is created for the instance. The name doesn't include the project ID. This property is applicable only to Second Generation instances.
|
||||
|
||||
|
||||
|
||||
## DatabaseInstanceFailoverReplicaStatus
|
||||
|
||||
DatabaseInstanceFailoverReplicaStatus is status of the failover replica.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstanceObservation](#CloudSQLInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`available` | bool | Available: The availability status of the failover replica. A false status indicates that the failover replica is out of sync. The master can only failover to the failover replica when the status is true.
|
||||
|
||||
|
||||
|
||||
## DiskEncryptionConfiguration
|
||||
|
||||
DiskEncryptionConfiguration is disk encryption configuration.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstanceParameters](#CloudSQLInstanceParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`kmsKeyName` | string | KmsKeyName: KMS key resource name
|
||||
|
||||
|
||||
|
||||
## DiskEncryptionStatus
|
||||
|
||||
DiskEncryptionStatus is disk encryption status.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstanceObservation](#CloudSQLInstanceObservation)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`kmsKeyVersionName` | string | KmsKeyVersionName: KMS key version used to encrypt the Cloud SQL instance disk
|
||||
|
||||
|
||||
|
||||
## IPConfiguration
|
||||
|
||||
IPConfiguration is the IP Management configuration.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Settings](#Settings)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`authorizedNetworks` | Optional [[]*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.ACLEntry](#*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.ACLEntry) | AuthorizedNetworks: The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
|
||||
`ipv4Enabled` | Optional bool | Ipv4Enabled: Whether the instance should be assigned an IP address or not.
|
||||
`privateNetwork` | Optional string | PrivateNetwork: The resource link for the VPC network from which the Cloud SQL instance is accessible for private IP. For example, /projects/myProject/global/networks/default. This setting can be updated, but it cannot be removed after it is set.
|
||||
`privateNetworkRef` | [NetworkURIReferencerForCloudSQLInstance](#NetworkURIReferencerForCloudSQLInstance) | PrivateNetworkRef references to a Network and retrieves its URI
|
||||
`requireSsl` | Optional bool | RequireSsl: Whether SSL connections over IP should be enforced or not.
|
||||
|
||||
|
||||
|
||||
## IPMapping
|
||||
|
||||
IPMapping is database instance IP Mapping.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`ipAddress` | string | IPAddress: The IP address assigned.
|
||||
`timeToRetire` | string | TimeToRetire: The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
|
||||
`type` | string | Type: The type of this IP address. A PRIMARY address is a public address that can accept incoming connections. A PRIVATE address is a private address that can accept incoming connections. An OUTGOING address is the source address of connections originating from the instance, if supported.
|
||||
|
||||
|
||||
|
||||
## LocationPreference
|
||||
|
||||
LocationPreference is preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Settings](#Settings)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`followGaeApplication` | Optional string | FollowGaeApplication: The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
|
||||
`zone` | Optional string | Zone: The preferred Compute Engine zone (e.g. us-central1-a, us-central1-b, etc.).
|
||||
|
||||
|
||||
|
||||
## MaintenanceWindow
|
||||
|
||||
MaintenanceWindow specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance purposes.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Settings](#Settings)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`day` | Optional int64 | Day: day of week (1-7), starting on Monday.
|
||||
`hour` | Optional int64 | Hour: hour of day - 0 to 23.
|
||||
`updateTrack` | Optional string | UpdateTrack: Maintenance timing setting: canary (Earlier) or stable (Later).
|
||||
|
||||
|
||||
|
||||
## NetworkURIReferencerForCloudSQLInstance
|
||||
|
||||
NetworkURIReferencerForCloudSQLInstance is an attribute referencer that resolves network uri from a referenced Network and assigns it to a CloudSQLInstance
|
||||
|
||||
Appears in:
|
||||
|
||||
* [IPConfiguration](#IPConfiguration)
|
||||
|
||||
|
||||
|
||||
|
||||
NetworkURIReferencerForCloudSQLInstance supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.NetworkURIReferencer
|
||||
|
||||
|
||||
## OnPremisesConfiguration
|
||||
|
||||
OnPremisesConfiguration is on-premises instance configuration.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstanceParameters](#CloudSQLInstanceParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`hostPort` | string | HostPort: The host and port of the on-premises instance in host:port format
|
||||
|
||||
|
||||
|
||||
## Settings
|
||||
|
||||
Settings is Cloud SQL database instance settings.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CloudSQLInstanceParameters](#CloudSQLInstanceParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`tier` | string | Tier: The tier (or machine type) for this instance, for example db-n1-standard-1 (MySQL instances) or db-custom-1-3840 (PostgreSQL instances). For MySQL instances, this property determines whether the instance is First or Second Generation. For more information, see Instance Settings.
|
||||
`activationPolicy` | Optional string | ActivationPolicy: The activation policy specifies when the instance is activated; it is applicable only when the instance state is RUNNABLE. Valid values: ALWAYS: The instance is on, and remains so even in the absence of connection requests. NEVER: The instance is off; it is not activated, even if a connection request arrives. ON_DEMAND: First Generation instances only. The instance responds to incoming requests, and turns itself off when not in use. Instances with PER_USE pricing turn off after 15 minutes of inactivity. Instances with PER_PACKAGE pricing turn off after 12 hours of inactivity.
|
||||
`authorizedGaeApplications` | Optional []string | AuthorizedGaeApplications: The App Engine app IDs that can access this instance. First Generation instances only.
|
||||
`availabilityType` | Optional string | AvailabilityType: Availability type (PostgreSQL instances only). Potential values: ZONAL: The instance serves data from only one zone. Outages in that zone affect data accessibility. REGIONAL: The instance can serve data from more than one zone in a region (it is highly available). For more information, see Overview of the High Availability Configuration.
|
||||
`crashSafeReplicationEnabled` | Optional bool | CrashSafeReplicationEnabled: Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled. This property is only applicable to First Generation instances.
|
||||
`storageAutoResize` | Optional bool | StorageAutoResize: Configuration to increase storage size automatically. The default value is true. Not used for First Generation instances.
|
||||
`dataDiskType` | Optional string | DataDiskType: The type of data disk: PD_SSD (default) or PD_HDD. Not used for First Generation instances.
|
||||
`pricingPlan` | Optional string | PricingPlan: The pricing plan for this instance. This can be either PER_USE or PACKAGE. Only PER_USE is supported for Second Generation instances.
|
||||
`replicationType` | Optional string | ReplicationType: The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS. This property is only applicable to First Generation instances.
|
||||
`userLabels` | Optional map[string]string | UserLabels: User-provided labels, represented as a dictionary where each label is a single key value pair.
|
||||
`databaseFlags` | Optional [[]*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.DatabaseFlags](#*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.DatabaseFlags) | DatabaseFlags is the array of database flags passed to the instance at startup.
|
||||
`backupConfiguration` | Optional [BackupConfiguration](#BackupConfiguration) | BackupConfiguration is the daily backup configuration for the instance.
|
||||
`ipConfiguration` | Optional [IPConfiguration](#IPConfiguration) | IPConfiguration: The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance. The IPv4 address cannot be disabled for Second Generation instances.
|
||||
`locationPreference` | Optional [LocationPreference](#LocationPreference) | LocationPreference is the location preference settings. This allows the instance to be located as near as possible to either an App Engine app or Compute Engine zone for better performance. App Engine co-location is only applicable to First Generation instances.
|
||||
`maintenanceWindow` | Optional [MaintenanceWindow](#MaintenanceWindow) | MaintenanceWindow: The maintenance window for this instance. This specifies when the instance can be restarted for maintenance purposes. Not used for First Generation instances.
|
||||
`dataDiskSizeGb` | Optional int64 | DataDiskSizeGb: The size of data disk, in GB. The data disk size minimum is 10GB. Not used for First Generation instances.
|
||||
`databaseReplicationEnabled` | Optional bool | DatabaseReplicationEnabled: Configuration specific to read replica instances. Indicates whether replication is enabled or not.
|
||||
`storageAutoResizeLimit` | Optional int64 | StorageAutoResizeLimit: The maximum size to which storage capacity can be automatically increased. The default value is 0, which specifies that there is no limit. Not used for First Generation instances.
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
# gcp.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains the core resources of the Google Cloud Platform.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [Provider](#Provider)
|
||||
|
||||
## Provider
|
||||
|
||||
A Provider configures a GCP 'provider', i.e. a connection to a particular GCP project using a particular GCP service account
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `gcp.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Provider`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [ProviderSpec](#ProviderSpec) | A ProviderSpec defines the desired state of a Provider.
|
||||
|
||||
|
||||
|
||||
## ProviderSpec
|
||||
|
||||
A ProviderSpec defines the desired state of a Provider.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Provider](#Provider)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`credentialsSecretRef` | [v1alpha1.SecretKeySelector](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretkeyselector) | A Secret containing JSON encoded credentials for a Google Service Account that will be used to authenticate to this GCP Provider.
|
||||
`projectID` | string | ProjectID is the project name (not numerical ID) of this GCP Provider.
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
# servicenetworking.gcp.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for GCP service networking services such as connections.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [Connection](#Connection)
|
||||
|
||||
## Connection
|
||||
|
||||
A Connection is a managed resource that represents a Google Cloud Service Networking Connection.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `servicenetworking.gcp.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Connection`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [ConnectionSpec](#ConnectionSpec) | A ConnectionSpec defines the desired state of a Connection.
|
||||
`status` | [ConnectionStatus](#ConnectionStatus) | A ConnectionStatus represents the observed state of a Connection.
|
||||
|
||||
|
||||
|
||||
## ConnectionParameters
|
||||
|
||||
ConnectionParameters define the desired state of a Google Cloud Service Networking Connection. Most fields map direct to a Connection: https://cloud.google.com/service-infrastructure/docs/service-networking/reference/rest/v1/services.connections#Connection
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ConnectionSpec](#ConnectionSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`parent` | string | Parent: The service that is managing peering connectivity for a service producer's organization. For Google services that support this functionality, this value is services/servicenetworking.googleapis.com.
|
||||
`network` | string | Network: The name of service consumer's VPC network that's connected with service producer network, in the following format: `projects/{project}/global/networks/{network}`. `{project}` is a project number, such as in `12345` that includes the VPC service consumer's VPC network. `{network}` is the name of the service consumer's VPC network.
|
||||
`networkRef` | [NetworkURIReferencerForConnection](#NetworkURIReferencerForConnection) | NetworkRef references to a Network and retrieves its URI
|
||||
`reservedPeeringRanges` | Optional []string | ReservedPeeringRanges: The name of one or more allocated IP address ranges for this service producer of type `PEERING`.
|
||||
`reservedPeeringRangeRefs` | [[]*github.com/crossplaneio/stack-gcp/apis/servicenetworking/v1alpha3.GlobalAddressNameReferencerForConnection](#*github.com/crossplaneio/stack-gcp/apis/servicenetworking/v1alpha3.GlobalAddressNameReferencerForConnection) | ReservedPeeringRangeRefs is a set of references to GlobalAddress objects
|
||||
|
||||
|
||||
|
||||
## ConnectionSpec
|
||||
|
||||
A ConnectionSpec defines the desired state of a Connection.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Connection](#Connection)
|
||||
|
||||
|
||||
|
||||
|
||||
ConnectionSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [ConnectionParameters](#ConnectionParameters)
|
||||
|
||||
|
||||
## ConnectionStatus
|
||||
|
||||
A ConnectionStatus represents the observed state of a Connection.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Connection](#Connection)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`peering` | string | Peering: The name of the VPC Network Peering connection that was created by the service producer.
|
||||
`service` | string | Service: The name of the peering service that's associated with this connection, in the following format: `services/{service name}`.
|
||||
|
||||
|
||||
ConnectionStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## GlobalAddressNameReferencerForConnection
|
||||
|
||||
GlobalAddressNameReferencerForConnection is an attribute referencer that resolves name from a referenced GlobalAddress and assigns it to a Connection
|
||||
|
||||
|
||||
|
||||
|
||||
GlobalAddressNameReferencerForConnection supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GlobalAddressNameReferencer
|
||||
|
||||
|
||||
## NetworkURIReferencerForConnection
|
||||
|
||||
NetworkURIReferencerForConnection is an attribute referencer that resolves network uri from a referenced Network and assigns it to a connection
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ConnectionParameters](#ConnectionParameters)
|
||||
|
||||
|
||||
|
||||
|
||||
NetworkURIReferencerForConnection supports all fields of:
|
||||
|
||||
* github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.NetworkURIReferencer
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,395 @@
|
|||
# storage.gcp.crossplane.io/v1alpha3 API Reference
|
||||
|
||||
Package v1alpha3 contains managed resources for GCP storage services such as GCS buckets.
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [Bucket](#Bucket)
|
||||
* [BucketClass](#BucketClass)
|
||||
|
||||
## Bucket
|
||||
|
||||
A Bucket is a managed resource that represents a Google Cloud Storage bucket.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `storage.gcp.crossplane.io/v1alpha3`
|
||||
`kind` | string | `Bucket`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [BucketSpec](#BucketSpec) | A BucketSpec defines the desired state of a Bucket.
|
||||
`status` | [BucketStatus](#BucketStatus) | A BucketStatus represents the observed state of a Bucket.
|
||||
|
||||
|
||||
|
||||
## BucketClass
|
||||
|
||||
A BucketClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `storage.gcp.crossplane.io/v1alpha3`
|
||||
`kind` | string | `BucketClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [BucketClassSpecTemplate](#BucketClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned Bucket.
|
||||
|
||||
|
||||
|
||||
## ACLRule
|
||||
|
||||
ACLRule represents a grant for a role to an entity (user, group or team) for a Google Cloud Storage object or bucket.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketSpecAttrs](#BucketSpecAttrs)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`entity` | string |
|
||||
`entityId` | string |
|
||||
`role` | string |
|
||||
`domain` | string |
|
||||
`email` | string |
|
||||
`projectTeam` | [ProjectTeam](#ProjectTeam) |
|
||||
|
||||
|
||||
|
||||
## BucketClassSpecTemplate
|
||||
|
||||
A BucketClassSpecTemplate is a template for the spec of a dynamically provisioned Bucket.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketClass](#BucketClass)
|
||||
|
||||
|
||||
|
||||
|
||||
BucketClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
* [BucketParameters](#BucketParameters)
|
||||
|
||||
|
||||
## BucketEncryption
|
||||
|
||||
BucketEncryption is a bucket's encryption configuration.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`defaultKmsKeyName` | string | A Cloud KMS key name, in the form projects/P/locations/L/keyRings/R/cryptoKeys/K, that will be used to encrypt objects inserted into this bucket, if no encryption method is specified. The key's location must be the same as the bucket's.
|
||||
|
||||
|
||||
|
||||
## BucketLogging
|
||||
|
||||
BucketLogging holds the bucket's logging configuration, which defines the destination bucket and optional name prefix for the current bucket's logs.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`logBucket` | string | The destination bucket where the current bucket's logs should be placed.
|
||||
`logObjectPrefix` | string | A prefix for log object names.
|
||||
|
||||
|
||||
|
||||
## BucketOutputAttrs
|
||||
|
||||
BucketOutputAttrs represent the subset of metadata for a Google Cloud Storage bucket limited to output (read-only) fields.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketStatus](#BucketStatus)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`bucketPolicyOnly` | [BucketPolicyOnly](#BucketPolicyOnly) | BucketPolicyOnly configures access checks to use only bucket-level IAM policies.
|
||||
`created` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | Created is the creation time of the bucket.
|
||||
`name` | string | Name is the name of the bucket.
|
||||
`retentionPolicy` | [RetentionPolicyStatus](#RetentionPolicyStatus) | Retention policy enforces a minimum retention time for all objects contained in the bucket. A RetentionPolicy of nil implies the bucket has no minimum data retention. This feature is in private alpha release. It is not currently available to most customers. It might be changed in backwards-incompatible ways and is not subject to any SLA or deprecation policy.
|
||||
|
||||
|
||||
|
||||
## BucketParameters
|
||||
|
||||
BucketParameters define the desired state of a Google Cloud Storage Bucket. Most fields map directly to a bucket resource: https://cloud.google.com/storage/docs/json_api/v1/buckets#resource
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketClassSpecTemplate](#BucketClassSpecTemplate)
|
||||
* [BucketSpec](#BucketSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`nameFormat` | string | NameFormat specifies the name of the external Bucket. The first instance of the string '%s' will be replaced with the Kubernetes UID of this Bucket.
|
||||
`serviceAccountSecretRef` | [v1alpha1.SecretReference](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretreference) | ServiceAccountSecretRef contains GCP ServiceAccount secret that will be used for bucket connection secret credentials
|
||||
|
||||
|
||||
BucketParameters supports all fields of:
|
||||
|
||||
* [BucketSpecAttrs](#BucketSpecAttrs)
|
||||
|
||||
|
||||
## BucketPolicyOnly
|
||||
|
||||
BucketPolicyOnly configures access checks to use only bucket-level IAM policies.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketOutputAttrs](#BucketOutputAttrs)
|
||||
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`enabled` | bool | Enabled specifies whether access checks use only bucket-level IAM policies. Enabled may be disabled until the locked time.
|
||||
`lockedTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | LockedTime specifies the deadline for changing Enabled from true to false.
|
||||
|
||||
|
||||
|
||||
## BucketSpec
|
||||
|
||||
A BucketSpec defines the desired state of a Bucket.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Bucket](#Bucket)
|
||||
|
||||
|
||||
|
||||
|
||||
BucketSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
* [BucketParameters](#BucketParameters)
|
||||
|
||||
|
||||
## BucketSpecAttrs
|
||||
|
||||
BucketSpecAttrs represents the full set of metadata for a Google Cloud Storage bucket limited to all input attributes
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketParameters](#BucketParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`acl` | [[]ACLRule](#ACLRule) | ACL is the list of access control rules on the bucket.
|
||||
`defaultObjectAcl` | [[]ACLRule](#ACLRule) | DefaultObjectACL is the list of access controls to apply to new objects when no object ACL is provided.
|
||||
`location` | string | Location is the location of the bucket. It defaults to "US".
|
||||
`storageClass` | string | StorageClass is the default storage class of the bucket. This defines how objects in the bucket are stored and determines the SLA and the cost of storage. Typical values are "MULTI_REGIONAL", "REGIONAL", "NEARLINE", "COLDLINE", "STANDARD" and "DURABLE_REDUCED_AVAILABILITY". Defaults to "STANDARD", which is equivalent to "MULTI_REGIONAL" or "REGIONAL" depending on the bucket's location settings.
|
||||
|
||||
|
||||
BucketSpecAttrs supports all fields of:
|
||||
|
||||
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
|
||||
|
||||
|
||||
## BucketStatus
|
||||
|
||||
A BucketStatus represents the observed state of a Bucket.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Bucket](#Bucket)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`attributes` | [BucketOutputAttrs](#BucketOutputAttrs) | BucketOutputAttrs represent the subset of metadata for a Google Cloud Storage bucket limited to output (read-only) fields.
|
||||
|
||||
|
||||
BucketStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## BucketUpdatableAttrs
|
||||
|
||||
BucketUpdatableAttrs represents the subset of parameters of a Google Cloud Storage bucket that may be updated.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketSpecAttrs](#BucketSpecAttrs)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`bucketPolicyOnly` | [BucketPolicyOnly](#BucketPolicyOnly) | BucketPolicyOnly configures access checks to use only bucket-level IAM policies.
|
||||
`cors` | [[]CORS](#CORS) | The bucket's Cross-Origin Resource Sharing (CORS) configuration.
|
||||
`defaultEventBasedHold` | bool | DefaultEventBasedHold is the default value for event-based hold on newly created objects in this bucket. It defaults to false.
|
||||
`encryption` | [BucketEncryption](#BucketEncryption) | The encryption configuration used by default for newly inserted objects.
|
||||
`labels` | map[string]string | Labels are the bucket's labels.
|
||||
`lifecycle` | [Lifecycle](#Lifecycle) | Lifecycle is the lifecycle configuration for objects in the bucket.
|
||||
`logging` | [BucketLogging](#BucketLogging) | The logging configuration.
|
||||
`predefinedAcl` | string | If not empty, applies a predefined set of access controls. It should be set only when creating a bucket. It is always empty for BucketAttrs returned from the service. See https://cloud.google.com/storage/docs/json_api/v1/buckets/insert for valid values.
|
||||
`predefinedCefaultObjectAcl` | string | If not empty, applies a predefined set of default object access controls. It should be set only when creating a bucket. It is always empty for BucketAttrs returned from the service. See https://cloud.google.com/storage/docs/json_api/v1/buckets/insert for valid values.
|
||||
`requesterPays` | bool | RequesterPays reports whether the bucket is a Requester Pays bucket. Clients performing operations on Requester Pays buckets must provide a user project (see BucketHandle.UserProject), which will be billed for the operations.
|
||||
`retentionPolicy` | [RetentionPolicy](#RetentionPolicy) | Retention policy enforces a minimum retention time for all objects contained in the bucket. A RetentionPolicy of nil implies the bucket has no minimum data retention. This feature is in private alpha release. It is not currently available to most customers. It might be changed in backwards-incompatible ways and is not subject to any SLA or deprecation policy.
|
||||
`versioningEnabled` | bool | VersioningEnabled reports whether this bucket has versioning enabled.
|
||||
`website` | [BucketWebsite](#BucketWebsite) | The website configuration.
|
||||
|
||||
|
||||
|
||||
## BucketWebsite
|
||||
|
||||
BucketWebsite holds the bucket's website configuration, controlling how the service behaves when accessing bucket contents as a web site. See https://cloud.google.com/storage/docs/static-website for more information.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`mainPageSuffix` | string | If the requested object path is missing, the service will ensure the path has a trailing '/', append this suffix, and attempt to retrieve the resulting object. This allows the creation of index.html objects to represent directory pages.
|
||||
`notFundPage` | string | If the requested object path is missing, and any mainPageSuffix object is missing, if applicable, the service will return the named object from this bucket as the content for a 404 Not Found result.
|
||||
|
||||
|
||||
|
||||
## CORS
|
||||
|
||||
CORS is the bucket's Cross-Origin Resource Sharing (CORS) configuration.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`maxAge` | [meta/v1.Duration](https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Duration) | MaxAge is the value to return in the Access-Control-Max-Age header used in preflight responses.
|
||||
`methods` | []string | Methods is the list of HTTP methods on which to include CORS response headers, (GET, OPTIONS, POST, etc) Note: "*" is permitted in the list of methods, and means "any method".
|
||||
`origins` | []string | Origins is the list of Origins eligible to receive CORS response headers. Note: "*" is permitted in the list of origins, and means "any Origin".
|
||||
`responseHeaders` | []string | ResponseHeaders is the list of HTTP headers other than the simple response headers to give permission for the user-agent to share across domains.
|
||||
|
||||
|
||||
|
||||
## Lifecycle
|
||||
|
||||
Lifecycle is the lifecycle configuration for objects in the bucket.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`rules` | [[]LifecycleRule](#LifecycleRule) |
|
||||
|
||||
|
||||
|
||||
## LifecycleAction
|
||||
|
||||
LifecycleAction is a lifecycle configuration action.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [LifecycleRule](#LifecycleRule)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`storageClass` | string | StorageClass is the storage class to set on matching objects if the Action is "SetStorageClass".
|
||||
`type` | string | Type is the type of action to take on matching objects. Acceptable values are "Delete" to delete matching objects and "SetStorageClass" to set the storage class defined in StorageClass on matching objects.
|
||||
|
||||
|
||||
|
||||
## LifecycleCondition
|
||||
|
||||
LifecycleCondition is a set of conditions used to match objects and take an action automatically. All configured conditions must be met for the associated action to be taken.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [LifecycleRule](#LifecycleRule)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`ageInDays` | int64 | AgeInDays is the age of the object in days.
|
||||
`createdBefore` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | CreatedBefore is the time the object was created. This condition is satisfied when an object is created before midnight of the specified date in UTC.
|
||||
`liveness` | [storage.Liveness](https://godoc.org/cloud.google.com/go/storage#Liveness) | Liveness specifies the object's liveness. Relevant only for versioned objects
|
||||
`matchesStorageClasses` | []string | MatchesStorageClasses is the condition matching the object's storage class. Values include "MULTI_REGIONAL", "REGIONAL", "NEARLINE", "COLDLINE", "STANDARD", and "DURABLE_REDUCED_AVAILABILITY".
|
||||
`numNewerVersions` | int64 | NumNewerVersions is the condition matching objects with a number of newer versions. If the value is N, this condition is satisfied when there are at least N versions (including the live version) newer than this version of the object.
|
||||
|
||||
|
||||
|
||||
## LifecycleRule
|
||||
|
||||
LifecycleRule is a lifecycle configuration rule. When all the configured conditions are met by an object in the bucket, the configured action will automatically be taken on that object.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [Lifecycle](#Lifecycle)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`action` | [LifecycleAction](#LifecycleAction) | Action is the action to take when all of the associated conditions are met.
|
||||
`condition` | [LifecycleCondition](#LifecycleCondition) | Condition is the set of conditions that must be met for the associated action to be taken.
|
||||
|
||||
|
||||
|
||||
## ProjectTeam
|
||||
|
||||
ProjectTeam is the project team associated with the entity, if any.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [ACLRule](#ACLRule)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`projectNumber` | string |
|
||||
`team` | string |
|
||||
|
||||
|
||||
|
||||
## RetentionPolicy
|
||||
|
||||
RetentionPolicy enforces a minimum retention time for all objects contained in the bucket. Any attempt to overwrite or delete objects younger than the retention period will result in an error. An unlocked retention policy can be modified or removed from the bucket via the Update method. A locked retention policy cannot be removed or shortened in duration for the lifetime of the bucket. This feature is in private alpha release. It is not currently available to most customers. It might be changed in backwards-incompatible ways and is not subject to any SLA or deprecation policy.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`retentionPeriodSeconds` | int | RetentionPeriod specifies the duration value in seconds that objects need to be retained. Retention duration must be greater than zero and less than 100 years. Note that enforcement of retention periods less than a day is not guaranteed. Such periods should only be used for testing purposes.
|
||||
|
||||
|
||||
|
||||
## RetentionPolicyStatus
|
||||
|
||||
RetentionPolicyStatus output component of storage.RetentionPolicy
|
||||
|
||||
Appears in:
|
||||
|
||||
* [BucketOutputAttrs](#BucketOutputAttrs)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`effectiveTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | EffectiveTime is the time from which the policy was enforced and effective.
|
||||
`isLocked` | bool | IsLocked describes whether the bucket is locked. Once locked, an object retention policy cannot be modified.
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,270 @@
|
|||
# database.rook.crossplane.io/v1alpha1 API Reference
|
||||
|
||||
Package v1alpha1 contains database service resources for Rook
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
* [CockroachCluster](#CockroachCluster)
|
||||
* [CockroachClusterClass](#CockroachClusterClass)
|
||||
* [YugabyteCluster](#YugabyteCluster)
|
||||
* [YugabyteClusterClass](#YugabyteClusterClass)
|
||||
|
||||
## CockroachCluster
|
||||
|
||||
A CockroachCluster configures a Rook 'clusters.cockroachdb.rook.io'
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.rook.crossplane.io/v1alpha1`
|
||||
`kind` | string | `CockroachCluster`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [CockroachClusterSpec](#CockroachClusterSpec) | A CockroachClusterSpec defines the desired state of a CockroachCluster.
|
||||
`status` | [CockroachClusterStatus](#CockroachClusterStatus) | A CockroachClusterStatus defines the current state of a CockroachCluster.
|
||||
|
||||
|
||||
|
||||
## CockroachClusterClass
|
||||
|
||||
A CockroachClusterClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.rook.crossplane.io/v1alpha1`
|
||||
`kind` | string | `CockroachClusterClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [CockroachClusterClassSpecTemplate](#CockroachClusterClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned CockroachCluster.
|
||||
|
||||
|
||||
|
||||
## YugabyteCluster
|
||||
|
||||
A YugabyteCluster configures a Rook 'ybclusters.yugabytedb.rook.io'
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.rook.crossplane.io/v1alpha1`
|
||||
`kind` | string | `YugabyteCluster`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`spec` | [YugabyteClusterSpec](#YugabyteClusterSpec) | A YugabyteClusterSpec defines the desired state of a YugabyteCluster.
|
||||
`status` | [YugabyteClusterStatus](#YugabyteClusterStatus) | A YugabyteClusterStatus defines the current state of a YugabyteCluster.
|
||||
|
||||
|
||||
|
||||
## YugabyteClusterClass
|
||||
|
||||
A YugabyteClusterClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`apiVersion` | string | `database.rook.crossplane.io/v1alpha1`
|
||||
`kind` | string | `YugabyteClusterClass`
|
||||
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
|
||||
`specTemplate` | [YugabyteClusterClassSpecTemplate](#YugabyteClusterClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned YugabyteCluster.
|
||||
|
||||
|
||||
|
||||
## CockroachClusterClassSpecTemplate
|
||||
|
||||
A CockroachClusterClassSpecTemplate is a template for the spec of a dynamically provisioned CockroachCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CockroachClusterClass](#CockroachClusterClass)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [CockroachClusterParameters](#CockroachClusterParameters) | A CockroachClusterParameters defines the desired state of a CockroachCluster.
|
||||
|
||||
|
||||
CockroachClusterClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
|
||||
|
||||
## CockroachClusterParameters
|
||||
|
||||
A CockroachClusterParameters defines the desired state of a CockroachCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CockroachClusterClassSpecTemplate](#CockroachClusterClassSpecTemplate)
|
||||
* [CockroachClusterSpec](#CockroachClusterSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string |
|
||||
`namespace` | string |
|
||||
`annotations` | [v1alpha1.Annotations](../stack-rook/rook-crossplane-io-v1alpha1.md#annotations) | The annotations-related configuration to add/set on each Pod related object.
|
||||
`scope` | [v1alpha1.StorageScopeSpec](../stack-rook/rook-crossplane-io-v1alpha1.md#storagescopespec) |
|
||||
`network` | [NetworkSpec](#NetworkSpec) | NetworkSpec describes network related settings of the cluster
|
||||
`secure` | bool |
|
||||
`cachePercent` | int |
|
||||
`maxSQLMemoryPercent` | int |
|
||||
|
||||
|
||||
|
||||
## CockroachClusterSpec
|
||||
|
||||
A CockroachClusterSpec defines the desired state of a CockroachCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CockroachCluster](#CockroachCluster)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [CockroachClusterParameters](#CockroachClusterParameters) | A CockroachClusterParameters defines the desired state of a CockroachCluster.
|
||||
|
||||
|
||||
CockroachClusterSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## CockroachClusterStatus
|
||||
|
||||
A CockroachClusterStatus defines the current state of a CockroachCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CockroachCluster](#CockroachCluster)
|
||||
|
||||
|
||||
|
||||
|
||||
CockroachClusterStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
## NetworkSpec
|
||||
|
||||
NetworkSpec describes network related settings of the cluster
|
||||
|
||||
Appears in:
|
||||
|
||||
* [CockroachClusterParameters](#CockroachClusterParameters)
|
||||
* [ServerSpec](#ServerSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`ports` | [[]PortSpec](#PortSpec) | Set of named ports that can be configured for this resource
|
||||
|
||||
|
||||
|
||||
## PortSpec
|
||||
|
||||
PortSpec is named port
|
||||
|
||||
Appears in:
|
||||
|
||||
* [NetworkSpec](#NetworkSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string | Name of port
|
||||
`port` | int32 | Port number
|
||||
|
||||
|
||||
|
||||
## ServerSpec
|
||||
|
||||
ServerSpec describes server related settings of the cluster
|
||||
|
||||
Appears in:
|
||||
|
||||
* [YugabyteClusterParameters](#YugabyteClusterParameters)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`replicas` | int32 |
|
||||
`network` | [NetworkSpec](#NetworkSpec) | NetworkSpec describes network related settings of the cluster
|
||||
`volumeClaimTemplate` | [core/v1.PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#persistentvolumeclaim-v1-core) |
|
||||
|
||||
|
||||
|
||||
## YugabyteClusterClassSpecTemplate
|
||||
|
||||
A YugabyteClusterClassSpecTemplate is a template for the spec of a dynamically provisioned YugabyteCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [YugabyteClusterClass](#YugabyteClusterClass)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [YugabyteClusterParameters](#YugabyteClusterParameters) | A YugabyteClusterParameters defines the desired state of a YugabyteCluster.
|
||||
|
||||
|
||||
YugabyteClusterClassSpecTemplate supports all fields of:
|
||||
|
||||
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
|
||||
|
||||
|
||||
## YugabyteClusterParameters
|
||||
|
||||
A YugabyteClusterParameters defines the desired state of a YugabyteCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [YugabyteClusterClassSpecTemplate](#YugabyteClusterClassSpecTemplate)
|
||||
* [YugabyteClusterSpec](#YugabyteClusterSpec)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`name` | string |
|
||||
`namespace` | string |
|
||||
`annotations` | [v1alpha1.Annotations](../stack-rook/rook-crossplane-io-v1alpha1.md#annotations) |
|
||||
`master` | [ServerSpec](#ServerSpec) | ServerSpec describes server related settings of the cluster
|
||||
`tserver` | [ServerSpec](#ServerSpec) | ServerSpec describes server related settings of the cluster
|
||||
|
||||
|
||||
|
||||
## YugabyteClusterSpec
|
||||
|
||||
A YugabyteClusterSpec defines the desired state of a YugabyteCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [YugabyteCluster](#YugabyteCluster)
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`forProvider` | [YugabyteClusterParameters](#YugabyteClusterParameters) | A YugabyteClusterParameters defines the desired state of a YugabyteCluster.
|
||||
|
||||
|
||||
YugabyteClusterSpec supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
|
||||
|
||||
|
||||
## YugabyteClusterStatus
|
||||
|
||||
A YugabyteClusterStatus defines the current state of a YugabyteCluster.
|
||||
|
||||
Appears in:
|
||||
|
||||
* [YugabyteCluster](#YugabyteCluster)
|
||||
|
||||
|
||||
|
||||
|
||||
YugabyteClusterStatus supports all fields of:
|
||||
|
||||
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
# rook.crossplane.io/v1alpha1 API Reference
|
||||
|
||||
Package v1alpha1 contains database service resources for Rook
|
||||
|
||||
This API group contains the following Crossplane resources:
|
||||
|
||||
|
||||
## Annotations
|
||||
|
||||
Annotations are a Crossplane representation of Rook Annotations. Alias of map[string]string.
|
||||
|
||||
|
||||
## StorageScopeSpec
|
||||
|
||||
StorageScopeSpec defines scope or boundaries of storage that the cluster will use for its underlying storage.
|
||||
|
||||
|
||||
Name | Type | Description
|
||||
-----|------|------------
|
||||
`nodeCount` | int |
|
||||
`volumeClaimTemplates` | [[]core/v1.PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#persistentvolumeclaim-v1-core) | PersistentVolumeClaims to use as storage
|
||||
|
||||
|
||||
|
||||
This API documentation was generated by `crossdocs`.
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
title: Configure Your Cloud Provider Account
|
||||
toc: true
|
||||
weight: 230
|
||||
indent: true
|
||||
---
|
||||
|
||||
# Configure Your Cloud Provider Account
|
||||
|
||||
In order for Crossplane to be able to manage resources in a specific cloud
|
||||
provider, you will need to create an account for Crossplane to use. Use the
|
||||
links below for cloud-specific instructions to create an account that can be
|
||||
used throughout the guides:
|
||||
|
||||
* [Google Cloud Platform (GCP) Service Account](cloud-providers/gcp/gcp-provider.md)
|
||||
* [Microsoft Azure Service Principal](cloud-providers/azure/azure-provider.md)
|
||||
* [Amazon Web Services (AWS) IAM User](cloud-providers/aws/aws-provider.md)
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
|
||||
# Adding Amazon Web Services (AWS) to Crossplane
|
||||
|
||||
In this guide, we will walk through the steps necessary to configure your AWS account to be ready for integration with Crossplane. This will be done by adding a [`aw provider`] resource type, which enables Crossplane to communicate with an AWS account.
|
||||
|
||||
## Requirements
|
||||
|
||||
Prior to adding AWS to Crossplane, following steps need to be taken
|
||||
|
||||
- Crossplane is installed in a k8s cluster
|
||||
- AWS Stack is installed in the same cluster
|
||||
- `kubectl` is configured to communicate with the same cluster
|
||||
|
||||
## Step 1: Configure `aws` CLI
|
||||
|
||||
Crossplane uses [AWS security credentials], and stores them as a [secret] which is managed by an [`aw provider`] instance. In addition, the AWS default region is also used for targeting a specific region.
|
||||
Crossplane requires to have [`aws` command line tool] [installed] and [configured]. Once installed, the credentials and configuration will reside in `~/.aws/credentials` and `~/.aws/config` respectively.
|
||||
|
||||
## Step 2: Setup `aws` Provider
|
||||
|
||||
Run [setup.sh] script to read `aws` credentials and region, and create an [`aw provider`] instance in Crossplane:
|
||||
|
||||
```bash
|
||||
./cluster/examples/setup-aws-provider/setup.sh [--profile aws_profile]
|
||||
```
|
||||
|
||||
The `--profile` switch is optional and specifies the [aws named profile] that was set in Step 1. If not provided, the `default` profile will be selected.
|
||||
|
||||
Once the script is successfully executed, Crossplane will use the specified aws account and region in the given named profile to create subsequent AWS managed resources.
|
||||
|
||||
You can confirm the existense of the [`aws provider`] by running:
|
||||
|
||||
```bash
|
||||
kubectl -n crossplane-system get provider/aws-provider
|
||||
```
|
||||
|
||||
## Optional: Setup AWS Provider Manually
|
||||
|
||||
An AWS [user][aws user] with `Administrative` privileges is needed to enable
|
||||
Crossplane to create the required resources. Once the user is provisioned, an
|
||||
[Access Key][] needs to be created so the user can have API access.
|
||||
|
||||
Using the set of [access key credentials][AWS security credentials] for the user
|
||||
with the right access, we need to [install][install-aws] [`aws cli`][aws command
|
||||
line tool], and then [configure][aws-cli-configure] it.
|
||||
|
||||
When the AWS cli is configured, the credentials and configuration will be in
|
||||
`~/.aws/credentials` and `~/.aws/config` respectively. These will be consumed in
|
||||
the next step.
|
||||
|
||||
When configuring the AWS cli, the user credentials could be configured under a
|
||||
specific [AWS named profile][], or under `default`. Without loss of generality,
|
||||
in this guide let's assume that the credentials are configured under the
|
||||
`aws_profile` profile (which could also be `default`). We'll use this profile to
|
||||
setup cloud provider in the next section.
|
||||
|
||||
Crossplane uses the AWS user credentials that were configured in the previous
|
||||
step to create resources in AWS. These credentials will be stored as a
|
||||
[secret][kubernetes secret] in Kubernetes, and will be used by an [AWS
|
||||
provider][aws provider] instance. The default AWS region is also pulled from the
|
||||
cli configuration, and added to the AWS provider.
|
||||
|
||||
To store the credentials as a secret, run:
|
||||
|
||||
```bash
|
||||
# retrieve profile's credentials, save it under 'default' profile, and base64 encode it
|
||||
BASE64ENCODED_AWS_ACCOUNT_CREDS=$(echo -e "[default]\naws_access_key_id = $(aws configure get aws_access_key_id --profile $aws_profile)\naws_secret_access_key = $(aws configure get aws_secret_access_key --profile $aws_profile)" | base64 | tr -d "\n")
|
||||
# retrieve the profile's region from config
|
||||
AWS_REGION=$(aws configure get region --profile ${aws_profile})
|
||||
```
|
||||
|
||||
At this point, the region and the encoded credentials are stored in respective
|
||||
variables. Next, we'll need to create an instance of AWS [provider][aws
|
||||
provider]:
|
||||
|
||||
```bash
|
||||
cat > provider.yaml <<EOF
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: aws-account-creds
|
||||
namespace: crossplane-system
|
||||
type: Opaque
|
||||
data:
|
||||
credentials: ${BASE64ENCODED_AWS_ACCOUNT_CREDS}
|
||||
---
|
||||
apiVersion: aws.crossplane.io/v1alpha3
|
||||
kind: Provider
|
||||
metadata:
|
||||
name: aws-provider
|
||||
spec:
|
||||
region: ${AWS_REGION}
|
||||
credentialsSecretRef:
|
||||
namespace: crossplane-system
|
||||
name: aws-account-creds
|
||||
key: credentials
|
||||
EOF
|
||||
|
||||
# apply it to the cluster:
|
||||
kubectl apply -f "provider.yaml"
|
||||
|
||||
# delete the credentials variable
|
||||
unset BASE64ENCODED_AWS_ACCOUNT_CREDS
|
||||
```
|
||||
|
||||
The output will look like the following:
|
||||
|
||||
```bash
|
||||
secret/aws-user-creds created
|
||||
provider.aws.crossplane.io/aws-provider created
|
||||
```
|
||||
|
||||
The `aws-provider` resource will be used in other resources that we will create,
|
||||
to provide access information to the configured AWS account.
|
||||
|
||||
[`aws provider`]: https://github.com/crossplaneio/stack-aws/blob/master/aws/apis/v1alpha3/types.go#L43
|
||||
[`aws` command line tool]: https://aws.amazon.com/cli/
|
||||
[AWS SDK for GO]: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/setting-up.html
|
||||
[installed]: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html
|
||||
[configured]: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
|
||||
[AWS security credentials]: https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html
|
||||
[secret]:https://kubernetes.io/docs/concepts/configuration/secret/
|
||||
[setup.sh]: github.com/crossplaneio/crossplane/cluster/examples/setup-aws-provider/setup.sh
|
||||
[aws named profile]: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html
|
||||
[aws user]: https://docs.aws.amazon.com/mediapackage/latest/ug/setting-up-create-iam-user.html
|
||||
[Access Key]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html
|
||||
[AWS security credentials]: https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html
|
||||
[aws provider]: https://github.com/crossplaneio/stack-aws/blob/master/apis/v1alpha3/types.go#L43?ref=master
|
||||
[aws command line tool]: https://aws.amazon.com/cli/
|
||||
[install-aws]: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html
|
||||
[aws-cli-configure]: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
|
||||
[kubernetes secret]: https://kubernetes.io/docs/concepts/configuration/secret/
|
||||
[AWS named profile]: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
# Adding Microsoft Azure to Crossplane
|
||||
|
||||
In this guide, we will walk through the steps necessary to configure your Azure account to be ready for integration with Crossplane.
|
||||
The general steps we will take are summarized below:
|
||||
|
||||
* Create a new service principal (account) that Crossplane will use to create and manage Azure resources
|
||||
* Add the required permissions to the account
|
||||
* Consent to the permissions using an administrator account
|
||||
|
||||
## Preparing your Microsoft Azure Account
|
||||
|
||||
In order to manage resources in Azure, you must provide credentials for a Azure service principal that Crossplane can use to authenticate.
|
||||
This assumes that you have already [set up the Azure CLI client](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli?view=azure-cli-latest) with your credentials.
|
||||
|
||||
Create a JSON file that contains all the information needed to connect and authenticate to Azure:
|
||||
|
||||
```console
|
||||
# create service principal with Owner role
|
||||
az ad sp create-for-rbac --sdk-auth --role Owner > crossplane-azure-provider-key.json
|
||||
```
|
||||
|
||||
Take note of the `clientID` value from the JSON file that we just created, and save it to an environment variable:
|
||||
|
||||
```console
|
||||
export AZURE_CLIENT_ID=<clientId value from json file>
|
||||
```
|
||||
|
||||
Now add the required permissions to the service principal that will allow it to manage the necessary resources in Azure:
|
||||
|
||||
```console
|
||||
# add required Azure Active Directory permissions
|
||||
az ad app permission add --id ${AZURE_CLIENT_ID} --api 00000002-0000-0000-c000-000000000000 --api-permissions 1cda74f2-2616-4834-b122-5cb1b07f8a59=Role 78c8a3c8-a07e-4b9e-af1b-b5ccab50a175=Role
|
||||
|
||||
# grant (activate) the permissions
|
||||
az ad app permission grant --id ${AZURE_CLIENT_ID} --api 00000002-0000-0000-c000-000000000000 --expires never
|
||||
```
|
||||
|
||||
You might see an error similar to the following, but that is OK, the permissions should have gone through still:
|
||||
|
||||
```console
|
||||
Operation failed with status: 'Conflict'. Details: 409 Client Error: Conflict for url: https://graph.windows.net/e7985bc4-a3b3-4f37-b9d2-fa256023b1ae/oauth2PermissionGrants?api-version=1.6
|
||||
```
|
||||
|
||||
After these steps are completed, you should have the following file on your local filesystem:
|
||||
|
||||
* `crossplane-azure-provider-key.json`
|
||||
|
||||
## Grant Consent to Application Permissions
|
||||
|
||||
One more step is required to fully grant the permissions to the new service principal.
|
||||
From the Azure Portal, you need to grant consent for the permissions using an admin account.
|
||||
The steps to perform this action are listed below:
|
||||
|
||||
1. `echo ${AZURE_CLIENT_ID}` and note this ID value
|
||||
1. Navigate to the Azure Portal: https://portal.azure.com
|
||||
1. Click `Azure Active Directory`, or find it in the `All services` list
|
||||
1. Click `App registrations (Preview)`
|
||||
1. Click on the application from the list where the application (client) ID matches the value from step 1
|
||||
1. Click `API permissions`
|
||||
1. Click `Grant admin consent for Default Directory`
|
||||
1. Click `Yes`
|
||||
|
||||
## Setup Azure Provider
|
||||
|
||||
Before creating any resources, we need to create and configure an Azure cloud
|
||||
provider resource in Crossplane, which stores the cloud account information in
|
||||
it. All the requests from Crossplane to Azure Cloud will use the credentials
|
||||
attached to this provider resource. The following command assumes that you have
|
||||
a `crossplane-azure-provider-key.json` file that belongs to the account you’d
|
||||
like Crossplane to use.
|
||||
|
||||
```bash
|
||||
BASE64ENCODED_AZURE_ACCOUNT_CREDS=$(base64 crossplane-azure-provider-key.json | tr -d "\n")
|
||||
```
|
||||
|
||||
Now we’ll create our `Secret` that contains the credential and `Provider`
|
||||
resource that refers to that secret:
|
||||
|
||||
```bash
|
||||
cat > provider.yaml <<EOF
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: azure-account-creds
|
||||
namespace: crossplane-system
|
||||
type: Opaque
|
||||
data:
|
||||
credentials: ${BASE64ENCODED_AZURE_ACCOUNT_CREDS}
|
||||
---
|
||||
apiVersion: azure.crossplane.io/v1alpha3
|
||||
kind: Provider
|
||||
metadata:
|
||||
name: azure-provider
|
||||
spec:
|
||||
credentialsSecretRef:
|
||||
namespace: crossplane-system
|
||||
name: azure-account-creds
|
||||
key: credentials
|
||||
EOF
|
||||
|
||||
# apply it to the cluster:
|
||||
kubectl apply -f "provider.yaml"
|
||||
|
||||
# delete the credentials variable
|
||||
unset BASE64ENCODED_AZURE_ACCOUNT_CREDS
|
||||
```
|
||||
|
||||
The output will look like the following:
|
||||
|
||||
```bash
|
||||
secret/azure-user-creds created
|
||||
provider.azure.crossplane.io/azure-provider created
|
||||
```
|
||||
|
||||
The `azure-provider` resource will be used in other resources that we will
|
||||
create, to provide access information to the configured Azure account.
|
||||
|
|
@ -0,0 +1,206 @@
|
|||
# Adding Google Cloud Platform (GCP) to Crossplane
|
||||
|
||||
In this guide, we will walk through the steps necessary to configure your GCP account to be ready for integration with Crossplane.
|
||||
The general steps we will take are summarized below:
|
||||
|
||||
* Create a new example project that all resources will be deployed to
|
||||
* Enable required APIs such as Kubernetes and CloudSQL
|
||||
* Create a service account that will be used to perform GCP operations from Crossplane
|
||||
* Assign necessary roles to the service account
|
||||
* Enable billing
|
||||
|
||||
For your convenience, the specific steps to accomplish those tasks are provided for you below using either the `gcloud` command line tool, or the GCP console in a web browser.
|
||||
You can choose whichever you are more comfortable with.
|
||||
|
||||
## Option 1: gcloud Command Line Tool
|
||||
|
||||
If you have the `gcloud` tool installed, you can run the commands below from the crossplane directory.
|
||||
|
||||
Instructions for installing `gcloud` can be found in the [Google docs](https://cloud.google.com/sdk/install).
|
||||
|
||||
### Using `gcp-credentials.sh`
|
||||
|
||||
In the `cluster/examples` directory you will find a helper script, `gcp-credentials.sh`. This script will prompt you for the organization, project, and billing account that will be used by `gcloud` when creating a project, service account, and credentials file (`crossplane-gcp-provider-key.json`). The chosen project and created service account will have access to the services and roles sufficient to run the Crossplane GCP examples.
|
||||
|
||||
```console
|
||||
$ cluster/examples/gcp-credentials.sh
|
||||
... EXAMPLE OUTPUT ONLY
|
||||
export ORGANIZATION_ID=987654321
|
||||
export PROJECT_ID=crossplane-example-1234
|
||||
export EXAMPLE_SA=example-1234@crossplane-example-1234.iam.gserviceaccount.com
|
||||
export BASE64ENCODED_GCP_PROVIDER_CREDS=$(base64 crossplane-gcp-provider-key.json | tr -d "\n")
|
||||
```
|
||||
|
||||
After running `gcp-credentials.sh`, a series of `export` commands will be shown. Copy and paste the `export` commands that are provided. These variable names will be referenced throughout the Crossplane examples, generally with a `sed` command.
|
||||
|
||||
You will also find a `crossplane-gcp-provider-key.json` file in the current working directory. Be sure to remove this file when you are done with the example projects.
|
||||
|
||||
### Running `gcloud` by hand
|
||||
|
||||
```bash
|
||||
# list your organizations (if applicable), take note of the specific organization ID you want to use
|
||||
# if you have more than one organization (not common)
|
||||
gcloud organizations list
|
||||
|
||||
# create a new project (project id must be <=30 characters)
|
||||
export EXAMPLE_PROJECT_ID=crossplane-example-123
|
||||
gcloud projects create $EXAMPLE_PROJECT_ID --enable-cloud-apis # [--organization $ORGANIZATION_ID]
|
||||
|
||||
# or, record the PROJECT_ID value of an existing project
|
||||
# export EXAMPLE_PROJECT_ID=$(gcloud projects list --filter NAME=$EXAMPLE_PROJECT_NAME --format="value(PROJECT_ID)")
|
||||
|
||||
# link billing to the new project
|
||||
gcloud beta billing accounts list
|
||||
gcloud beta billing projects link $EXAMPLE_PROJECT_ID --billing-account=$ACCOUNT_ID
|
||||
|
||||
# enable Kubernetes API
|
||||
gcloud --project $EXAMPLE_PROJECT_ID services enable container.googleapis.com
|
||||
|
||||
# enable CloudSQL API
|
||||
gcloud --project $EXAMPLE_PROJECT_ID services enable sqladmin.googleapis.com
|
||||
|
||||
# enable Redis API
|
||||
gcloud --project $EXAMPLE_PROJECT_ID services enable redis.googleapis.com
|
||||
|
||||
# enable Compute API
|
||||
gcloud --project $EXAMPLE_PROJECT_ID services enable compute.googleapis.com
|
||||
|
||||
# enable Additional APIs needed for the example or project
|
||||
# See `gcloud services list` for a complete list
|
||||
|
||||
# create service account
|
||||
gcloud --project $EXAMPLE_PROJECT_ID iam service-accounts create example-123 --display-name "Crossplane Example"
|
||||
|
||||
# export service account email
|
||||
export EXAMPLE_SA="example-123@$EXAMPLE_PROJECT_ID.iam.gserviceaccount.com"
|
||||
|
||||
# create service account key (this will create a `crossplane-gcp-provider-key.json` file in your current working directory)
|
||||
gcloud --project $EXAMPLE_PROJECT_ID iam service-accounts keys create --iam-account $EXAMPLE_SA crossplane-gcp-provider-key.json
|
||||
|
||||
# assign roles
|
||||
gcloud projects add-iam-policy-binding $EXAMPLE_PROJECT_ID --member "serviceAccount:$EXAMPLE_SA" --role="roles/iam.serviceAccountUser"
|
||||
gcloud projects add-iam-policy-binding $EXAMPLE_PROJECT_ID --member "serviceAccount:$EXAMPLE_SA" --role="roles/cloudsql.admin"
|
||||
gcloud projects add-iam-policy-binding $EXAMPLE_PROJECT_ID --member "serviceAccount:$EXAMPLE_SA" --role="roles/container.admin"
|
||||
gcloud projects add-iam-policy-binding $EXAMPLE_PROJECT_ID --member "serviceAccount:$EXAMPLE_SA" --role="roles/redis.admin"
|
||||
gcloud projects add-iam-policy-binding $EXAMPLE_PROJECT_ID --member "serviceAccount:$EXAMPLE_SA" --role="roles/compute.networkAdmin"
|
||||
```
|
||||
|
||||
## Option 2: GCP Console in a Web Browser
|
||||
|
||||
If you chose to use the `gcloud` tool, you can skip this section entirely.
|
||||
|
||||
Create a GCP example project which we will use to host our example GKE cluster, as well as our example CloudSQL instance.
|
||||
|
||||
- Login into [GCP Console](https://console.cloud.google.com)
|
||||
- Create a [new project](https://console.cloud.google.com/flows/enableapi?apiid=container.googleapis.com,sqladmin.googleapis.com,redis.googleapis.com) (either stand alone or under existing organization)
|
||||
- Create Example Service Account
|
||||
- Navigate to: [Create Service Account](https://console.cloud.google.com/iam-admin/serviceaccounts)
|
||||
- `Service Account Name`: type "example"
|
||||
- `Service Account ID`: leave auto assigned
|
||||
- `Service Account Description`: type "Crossplane example"
|
||||
- Click `Create` button
|
||||
- This should advance to the next section `2 Grant this service account to project (optional)`
|
||||
- We will assign this account 3 roles:
|
||||
- `Service Account User`
|
||||
- `Cloud SQL Admin`
|
||||
- `Kubernetes Engine Admin`
|
||||
- `Compute Network Admin`
|
||||
- Click `Create` button
|
||||
- This should advance to the next section `3 Grant users access to this service account (optional)`
|
||||
- We don't need to assign any user or admin roles to this account for the example purposes, so you can leave following two fields blank:
|
||||
- `Service account users role`
|
||||
- `Service account admins role`
|
||||
- Next, we will create and export service account key
|
||||
- Click `+ Create Key` button.
|
||||
- This should open a `Create Key` side panel
|
||||
- Select `json` for the Key type (should be selected by default)
|
||||
- Click `Create`
|
||||
- This should show `Private key saved to your computer` confirmation dialog
|
||||
- You also should see `crossplane-example-1234-[suffix].json` file in your browser's Download directory
|
||||
- Save (copy or move) this file into example (this) directory, with new name `crossplane-gcp-provider-key.json`
|
||||
- Enable `Cloud SQL API`
|
||||
- Navigate to [Cloud SQL Admin API](https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview)
|
||||
- Click `Enable`
|
||||
- Enable `Kubernetes Engine API`
|
||||
- Navigate to [Kubernetes Engine API](https://console.developers.google.com/apis/api/container.googleapis.com/overview)
|
||||
- Click `Enable`
|
||||
- Enable `Cloud Memorystore for Redis`
|
||||
- Navigate to [Cloud Memorystore for Redis](https://console.developers.google.com/apis/api/redis.googleapis.com/overview)
|
||||
- Click `Enable`
|
||||
- Enable `Compute Engine API`
|
||||
- Navigate to [Compute Engine API](https://console.developers.google.com/apis/api/compute.googleapis.com/overview)
|
||||
- Click `Enable`
|
||||
|
||||
### Enable Billing
|
||||
|
||||
You will need to enable billing for your account in order to create and use Kubernetes clusters with GKE.
|
||||
|
||||
- Go to [GCP Console](https://console.cloud.google.com)
|
||||
- Select example project
|
||||
- Click `Enable Billing`
|
||||
- Go to [Kubernetes Clusters](https://console.cloud.google.com/kubernetes/list)
|
||||
- Click `Enable Billing`
|
||||
|
||||
## Setup GCP Provider
|
||||
|
||||
Before creating any resources, we need to create and configure a GCP cloud
|
||||
provider resource in Crossplane, which stores the cloud account information in
|
||||
it. All the requests from Crossplane to GCP will use the credentials attached to
|
||||
this provider resource. The following command assumes that you have a
|
||||
`crossplane-gcp-provider-key.json` file that belongs to the account that will be
|
||||
used by Crossplane, which has GCP project id. You should be able to get the
|
||||
project id from the JSON credentials file or from the GCP console. Without loss
|
||||
of generality, let's assume the project id is `my-cool-gcp-project` in this
|
||||
guide.
|
||||
|
||||
First, let's encode the credential file contents and put it in a variable:
|
||||
|
||||
```bash
|
||||
# base64 encode the GCP credentials
|
||||
BASE64ENCODED_GCP_ACCOUNT_CREDS=$(base64 crossplane-gcp-provider-key.json | tr -d "\n")
|
||||
```
|
||||
|
||||
Now we’ll create the `Secret` resource that contains the credential, and
|
||||
`Provider` resource which refers to that secret:
|
||||
|
||||
```bash
|
||||
cat > provider.yaml <<EOF
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: gcp-account-creds
|
||||
namespace: crossplane-system
|
||||
type: Opaque
|
||||
data:
|
||||
credentials: ${BASE64ENCODED_GCP_ACCOUNT_CREDS}
|
||||
---
|
||||
apiVersion: gcp.crossplane.io/v1alpha3
|
||||
kind: Provider
|
||||
metadata:
|
||||
name: gcp-provider
|
||||
spec:
|
||||
# replace this with your own gcp project id
|
||||
projectID: my-cool-gcp-project
|
||||
credentialsSecretRef:
|
||||
namespace: crossplane-system
|
||||
name: gcp-account-creds
|
||||
key: credentials
|
||||
EOF
|
||||
|
||||
# apply it to the cluster:
|
||||
kubectl apply -f "provider.yaml"
|
||||
|
||||
# delete the credentials variable
|
||||
unset BASE64ENCODED_GCP_ACCOUNT_CREDS
|
||||
```
|
||||
|
||||
The output will look like the following:
|
||||
|
||||
```bash
|
||||
secret/gcp-user-creds created
|
||||
provider.gcp.crossplane.io/gcp-provider created
|
||||
```
|
||||
|
||||
The `gcp-provider` resource will be used in other resources that we will
|
||||
create, to provide access information to the configured GCP account.
|
||||
|
|
@ -0,0 +1,464 @@
|
|||
---
|
||||
title: Concepts
|
||||
toc: true
|
||||
weight: 310
|
||||
---
|
||||
# Table of Contents
|
||||
|
||||
1. [Concepts](#concepts)
|
||||
2. [Feature Areas](#feature-areas)
|
||||
3. [Glossary](#glossary)
|
||||
|
||||
# Concepts
|
||||
|
||||
## Control Plane
|
||||
|
||||
Crossplane is an open source multicloud control plane that consists of smart
|
||||
controllers that can work across clouds to enable workload portability,
|
||||
provisioning and full-lifecycle management of infrastructure across a wide range
|
||||
of providers, vendors, regions, and offerings. The control plane presents a
|
||||
declarative management style API that covers a wide range of portable
|
||||
abstractions that facilitate these goals across disparate environments,
|
||||
clusters, regions, and clouds. Crossplane can be thought of as a higher-order
|
||||
orchestrator across cloud providers. For convenience, Crossplane can run
|
||||
directly on-top of an existing Kubernetes cluster without requiring any changes,
|
||||
even though Crossplane does not necessarily schedule or run any containers on
|
||||
the host cluster.
|
||||
|
||||
## Resources and Workloads
|
||||
|
||||
In Crossplane, a *resource* represents an external piece of infrastructure
|
||||
ranging from low level services like clusters and servers, to higher level
|
||||
infrastructure like databases, message queues, buckets, and more. Resources are
|
||||
represented as persistent object within the crossplane, and they typically
|
||||
manage one or more pieces of external infrastructure within a cloud provider or
|
||||
cloud offering. Resources can also represent local or in-cluster services.
|
||||
|
||||
We model *workloads* as schedulable units of work that the user intends to run
|
||||
on a cloud provider. Crossplane will support multiple types of workloads
|
||||
including container and serverless. You can think of workloads as units that run
|
||||
**your** code and applications. Every type of workload has a different kind of
|
||||
payload. For example, a container workload can include a set of objects that
|
||||
will be deployed on a managed Kubernetes cluster, or a reference to helm chart,
|
||||
etc. A serverless workload could include a function that will run on a
|
||||
serverless managed service. Workloads can contain requirements for where and how
|
||||
the workload can run, including regions, providers, affinity, cost, and others
|
||||
that the scheduler can use when assigning the workload.
|
||||
|
||||
## Resource Claims and Resource Classes
|
||||
|
||||
To support workload portability we expose the concept of a resource claim and a
|
||||
resource class. A resource claim is a persistent object that captures the
|
||||
desired configuration of a resource from the perspective of a workload or
|
||||
application. Its configuration is cloud-provider and cloud-offering independent
|
||||
and it’s free of implementation and/or environmental details. A resource claim
|
||||
can be thought of as a request for an actual resource and is typically created
|
||||
by a developer or application owner.
|
||||
|
||||
A resource class is configuration that contains implementation details specific
|
||||
to a certain environment or deployment, and policies related to a kind of
|
||||
resource. A ResourceClass acts as a template with implementation details and
|
||||
policy for resources that will be dynamically provisioned by the workload at
|
||||
deployment time. A resource class is typically created by an admin or
|
||||
infrastructure owner.
|
||||
|
||||
## Dynamic and Static Provisioning
|
||||
|
||||
A resource can be statically or dynamically provisioned. Static provisioning is
|
||||
when an administrator creates the resource manually. They set the configuration
|
||||
required to provision and manage the corresponding external resource within a
|
||||
cloud provider or cloud offering. Once provisioned, resources are available to
|
||||
be bound to resource claims.
|
||||
|
||||
Dynamic provisioning is when an resource claim does not find a matching resource
|
||||
and provisions a new one instead. The newly provisioned resource is
|
||||
automatically bound to the resource claim. To enable dynamic provisioning the
|
||||
administrator needs to create one or more resource class objects.
|
||||
|
||||
## Connection Secrets
|
||||
|
||||
Workloads reference all the resources they consume in their `resources` section.
|
||||
This helps Crossplane setup connectivity between the workload and resource, and
|
||||
create objects that hold connection information. For example, for a database
|
||||
provisioned and managed by Crossplane, a secret will be created that contains a
|
||||
connection string, user and password. This secret will be propagated to the
|
||||
target cluster so that it can be used by the workload.
|
||||
|
||||
## Secure Connectivity
|
||||
|
||||
To provide secure network connectivity between application deployments in a
|
||||
target cluster and the managed services they are using, Crossplane supports
|
||||
provisioning and life-cycle management of networks, subnets, peering, and
|
||||
firewall rules to provide secure connectivity.
|
||||
|
||||
## Stacks
|
||||
|
||||
Stacks extend Crossplane with new functionality. Crossplane provides Stacks for
|
||||
GCP, AWS, and Azure that are installed with a Stack Manager that can download
|
||||
packages, resolve dependencies, and execute controllers. Stacks are designed for
|
||||
simplified RBAC configuration and namespace isolation for improved security in
|
||||
multi-team environments. Stacks are published to a registry where they can be
|
||||
downloaded, explored, and organized.
|
||||
|
||||
Stacks enable the community to add support for more clouds providers and and
|
||||
managed services. Stacks support out-of-tree extensibility so they can be
|
||||
released on their own schedule. A CLI can init, build, publish, install, and
|
||||
uninstall Stacks from developer laptops or in continuous delivery pipelines.
|
||||
|
||||
Stacks for GCP, AWS, and Azure support provisioning managed services (database,
|
||||
cache, buckets), managed clusters (GKE, EKS, AKS), and secure connectivity
|
||||
(networks, subnets, firewall rules). Stacks for independent cloud offerings can
|
||||
be installed alongside the Stacks for GCP, AWS, and Azure to customize
|
||||
Crossplane with the right mix of managed services for your organization.
|
||||
|
||||
# Feature Areas
|
||||
|
||||
Crossplane has four main feature areas: Services, Stacks, Clusters and
|
||||
Workloads.
|
||||
|
||||
## Crossplane Services
|
||||
|
||||
Crossplane supports provisioning managed services using `kubectl`. It applies
|
||||
the Kubernetes pattern for Persistent Volume (PV) claims and classes to managed
|
||||
service provisioning with support for a strong separation of concern between app
|
||||
teams and cluster administrators.
|
||||
|
||||
App teams can choose between cloud-specific and portable services including
|
||||
managed databases, message queues, buckets, data pipelines, and more to define
|
||||
complete applications, build once, and deploy into multiple clouds using
|
||||
continuous delivery pipelines or GitOps flows.
|
||||
|
||||
Cluster administrators can define self-service policies and best-practice
|
||||
configurations to accelerate app delivery and improve security, so app teams can
|
||||
focus on delivering their app instead of cloud-specific infrastructure details.
|
||||
|
||||
Secure connectivity between managed services and managed Kubernetes clusters is
|
||||
also supported in Crossplane such that private networking can be established
|
||||
declaratively using `kubectl`.
|
||||
|
||||
Crossplane is designed to support the following types of managed services.
|
||||
|
||||
### Managed Kubernetes Services
|
||||
|
||||
Managed Kubernetes currently supported for GKE, EKS, AKS.
|
||||
|
||||
Kubernetes clusters are another type of resource that can be dynamically
|
||||
provisioned using a generic resource claim by the application developer and an
|
||||
environment specific resource class by the cluster administrator.
|
||||
|
||||
Future support for additional managed services.
|
||||
|
||||
### Database Services
|
||||
|
||||
Support for PostgreSQL, MySQL, and Redis.
|
||||
|
||||
Database managed services can be statically or dynamically provisioned by
|
||||
Crossplane in AWS, GCP, and Azure. An application developer simply has to
|
||||
specify their general need for a database such as MySQL, without any specific
|
||||
knowledge of what environment that database will run in or even what specific
|
||||
type of database it will be at runtime.
|
||||
|
||||
The cluster administrator specifies a resource class that acts as a template
|
||||
with the implementation details and policy specific to the environment that the
|
||||
generic MySQL resource is being deployed to. This enables the database to be
|
||||
dynamically provisioned at deployment time without the application developer
|
||||
needing to know any of the details, which promotes portability and reusability.
|
||||
|
||||
Future support for additional managed services.
|
||||
|
||||
### Storage Services
|
||||
|
||||
Support for S3, Buckets, and Azure Blob storage.
|
||||
|
||||
Future support for additional managed services.
|
||||
|
||||
### Networking Services
|
||||
|
||||
Support for networks, subnets, and firewall rules.
|
||||
|
||||
Future support for additional managed services.
|
||||
|
||||
### Load Balancing Services
|
||||
|
||||
Future support.
|
||||
|
||||
### Cloud DNS Services
|
||||
|
||||
Future support.
|
||||
|
||||
### Advanced Networking Connectivity Services
|
||||
|
||||
Future support.
|
||||
|
||||
### Big Data Services
|
||||
|
||||
Future support.
|
||||
|
||||
### Machine Learning Services
|
||||
|
||||
Future support.
|
||||
|
||||
## Crossplane Stacks
|
||||
|
||||
Stacks extend Crossplane with new functionality.
|
||||
|
||||
See [Stacks](#stacks).
|
||||
|
||||
## Crossplane Workloads
|
||||
|
||||
Crossplane includes an extensible workload scheduler that observes application
|
||||
policies to select a suitable target cluster from a pool of available clusters.
|
||||
The workload scheduler can be customized to consider a number of criteria
|
||||
including capabilities, availability, reliability, cost, regions, and
|
||||
performance while deploying workloads and their resources. Complex workloads can
|
||||
be modeled as a `KubernetesApplication`.
|
||||
|
||||
## Crossplane Clusters
|
||||
|
||||
Crossplane supports dynamic provisioning of managed Kubernetes clusters from a
|
||||
single control plane with consistent multi-cluster best-practice configuration
|
||||
and secure connectivity between target Kubernetes clusters and the managed
|
||||
services provisioned for applications. Managed Kubernetes clusters can be
|
||||
dynamically provisioned with a `KubernetesCluster`.
|
||||
|
||||
# Glossary
|
||||
|
||||
## Kubernetes
|
||||
|
||||
Crossplane is built on the Kubernetes API machinery as a platform for
|
||||
declarative management. We rely on common terminology from the [Kubernetes
|
||||
Glossary][kubernetes-glossary] where possible, and we don't seek to reproduce
|
||||
that glossary here.
|
||||
|
||||
[kubernetes-glossary]: https://kubernetes.io/docs/reference/glossary/?all=true
|
||||
However we'll summarize some commonly used concepts for convenience.
|
||||
|
||||
### CRD
|
||||
|
||||
A standard Kubernetes Custom Resource Definition (CRD), which defines a new type
|
||||
of resource that can be managed declaratively. This serves as the unit of
|
||||
management in Crossplane. The CRD is composed of spec and status sections and
|
||||
supports API level versioning (e.g., v1alpha1)
|
||||
|
||||
### Controller
|
||||
|
||||
A standard Kubernetes Custom Controller, providing active control loops that own
|
||||
one or more CRDs. Can be implemented in different ways, such as golang code
|
||||
(controller-runtime), templates, functions/hooks, templates, a new DSL, etc. The
|
||||
implementation itself is versioned using semantic versioning (e.g., v1.0.4)
|
||||
|
||||
### Namespace
|
||||
|
||||
Allows logical grouping of resources in Kubernetes that can be secured with RBAC
|
||||
rules.
|
||||
|
||||
## Crossplane
|
||||
|
||||
### Stack
|
||||
|
||||
The unit of extending Crossplane with new functionality. A stack is a Controller
|
||||
that owns one or more CRDs and depends on zero or more CRDs.
|
||||
|
||||
See [Stacks](#stacks).
|
||||
|
||||
### Stack Registry
|
||||
|
||||
A registry where Stacks can be published, downloaded, explored, and categorized.
|
||||
The registry understands a Stack’s custom controller and its CRDs and indexes by
|
||||
both -- you could lookup a custom controller by the CRD name and vice versa.
|
||||
|
||||
### Stack Package Format
|
||||
|
||||
The package format for Stacks that contains the Stack definition, metadata,
|
||||
icons, CRDs, and other Stack specific files.
|
||||
|
||||
### Stack Manager
|
||||
|
||||
The component that is responsible for installing a Stack’s custom controllers
|
||||
and resources in Crossplane. It can download packages, resolve dependencies,
|
||||
install resources and execute controllers. This component is also responsible
|
||||
for managing the complete life-cycle of Stacks, including upgrading them as new
|
||||
versions become available.
|
||||
|
||||
### Application Stack
|
||||
|
||||
App Stacks simplify operations for an app by moving app lifecycle management
|
||||
into a Kubernetes controller that owns an app CRD with a handful of settings
|
||||
required to deploy a new app instance, complete with the managed services it
|
||||
depends on.
|
||||
|
||||
Application Stacks depend on Infrastructure Stacks like stack-gcp, stack-aws,
|
||||
and stack-azure to provide managed services via the Kubernetes API.
|
||||
|
||||
### Infrastructure Stack
|
||||
|
||||
Infrastructure Stacks like stack-gcp, stack-aws, and stack-azure extend
|
||||
Crossplane to support managed service provisioning (DBaaS, cache, buckets),
|
||||
secure connectivity (VPCs, subnets, peering, ACLs, secrets), and provisioning
|
||||
managed Kubernetes clusters on demand to further isolate the blast radius of
|
||||
applications.
|
||||
|
||||
### Cloud Provider Stack
|
||||
|
||||
See [infrastructure-stack](#infrastructure-stack).
|
||||
|
||||
### Cluster
|
||||
|
||||
A Kubernetes cluster.
|
||||
|
||||
### Managed Cluster
|
||||
|
||||
A Managed Kubernetes cluster from a service provider such as GKE, EKS, or AKS.
|
||||
|
||||
### Target Cluster
|
||||
|
||||
A Kubernetes cluster where application deployments and pods are scheduled to
|
||||
run.
|
||||
|
||||
### Control Cluster
|
||||
|
||||
See [Dedicated Crossplane Instance](#dedicated-crossplane-instance).
|
||||
|
||||
### Crossplane Instance
|
||||
|
||||
A Kubernetes cluster with:
|
||||
* Crossplane installed
|
||||
* One or more worker nodes where Crossplane controllers can run
|
||||
* Zero or more Crossplane Stacks installed
|
||||
|
||||
### Dedicated Crossplane Instance
|
||||
|
||||
Crossplane instance running on a dedicated Kubernetes cluster separate from the
|
||||
target Kubernetes cluster(s) where application deployments and pods are
|
||||
scheduled to run.
|
||||
|
||||
### Embedded Crossplane Instance
|
||||
|
||||
Crossplane instance running on a Kubernetes target cluster where app deployments
|
||||
and pods will run.
|
||||
|
||||
### Cloud Provider
|
||||
|
||||
Cloud provider such as GCP, AWS, Azure offering IaaS, cloud networking, and
|
||||
managed services.
|
||||
|
||||
### Managed Service Provider
|
||||
|
||||
Managed service provider such as Elastic Cloud, MLab, PKS that run on cloud
|
||||
provider IaaS.
|
||||
|
||||
### Provider
|
||||
|
||||
A Crossplane kind that connects Crossplane to a cloud provider or managed
|
||||
service provider.
|
||||
|
||||
### Infrastructure
|
||||
|
||||
Infrastructure ranging from low level services like clusters and servers, to
|
||||
higher level infrastructure like databases, message queues, buckets, secure
|
||||
connectivity, managed Kubernetes, and more
|
||||
|
||||
### Project Namespace
|
||||
|
||||
When running a shared control plane or cluster it's a common practice to create
|
||||
separate project namespaces (app-project1-dev) for each app project or team so
|
||||
their resources are kept separate and secure. Crossplane supports this model.
|
||||
|
||||
### App Project Namespace
|
||||
|
||||
See [project-namespace](#project-namespace)
|
||||
|
||||
### Dynamic Provisioning
|
||||
|
||||
Dynamic provisioning is when an resource claim does not find a matching resource
|
||||
and provisions a new one instead. The newly provisioned resource is
|
||||
automatically bound to the resource claim. To enable dynamic provisioning the
|
||||
administrator needs to create one or more resource class objects.
|
||||
|
||||
### Static Provisioning
|
||||
|
||||
Static provisioning is when an administrator creates the resource manually. They
|
||||
set the configuration required to provision and manage the corresponding
|
||||
external resource within a cloud provider or cloud offering. Once provisioned,
|
||||
resources are available to be bound to resource claims.
|
||||
|
||||
### Resource
|
||||
|
||||
A resource represents an external piece of infrastructure ranging from low level
|
||||
services like clusters and servers, to higher level infrastructure like
|
||||
databases, message queues, buckets, and more
|
||||
|
||||
### External Resource
|
||||
|
||||
An actual resource that exists outside Kubernetes, typically in the cloud. AWS
|
||||
RDS and GCP Cloud Memorystore instances are external resources.
|
||||
|
||||
### Managed Resource
|
||||
|
||||
The Crossplane representation of an external resource. The `RDSInstance` and
|
||||
`CloudMemorystoreInstance` Kubernetes kinds are managed resources. A managed
|
||||
resource models the satisfaction of a need; i.e. the need for a Redis Cluster is
|
||||
satisfied by the allocation (aka binding) of a `CloudMemoryStoreInstance`.
|
||||
|
||||
### Resource Claim
|
||||
|
||||
The Crossplane representation of a request for the allocation of a managed
|
||||
resource. Resource claims typically represent the need for a managed resource
|
||||
that implements a particular protocol. `MySQLInstance` and `RedisCluster` are
|
||||
examples of resource claims.
|
||||
|
||||
### Resource Class
|
||||
|
||||
The Crossplane representation of the desired configuration of a managed
|
||||
resource. Resource claims reference a resource class in order to specify how
|
||||
they should be satisfied by a managed resource.
|
||||
|
||||
### Resource Class
|
||||
|
||||
Resource Classes capture reusable, best-practice configurations for a specific
|
||||
managed service. For example, Wordpress requires a MySQL database which can be
|
||||
satisfied by CloudSQL, RDS, or Azure SQL Server, so resource classes would be
|
||||
created for CloudSQL, RDS, and Azure SQL Server.
|
||||
|
||||
### Connection Secret
|
||||
|
||||
A Kubernetes `Secret` encoding all data required to connect to (or consume) an
|
||||
external resource.
|
||||
|
||||
### Claimant
|
||||
|
||||
The Kubernetes representation of a process wishing to connect to a managed
|
||||
resource, typically a `Pod` or some abstraction thereupon such as a `Deployment`
|
||||
or `KubernetesApplication`.
|
||||
|
||||
### Consumer
|
||||
|
||||
See [claimant](#claimant).
|
||||
|
||||
### Workload
|
||||
|
||||
We model workloads as schedulable units of work that the user intends to run on
|
||||
a cloud provider. Crossplane will support multiple types of workloads including
|
||||
container and serverless. You can think of workloads as units that run your code
|
||||
and applications. Every type of workload has a different kind of payload.
|
||||
|
||||
### Kubernetes Application
|
||||
|
||||
A `KubernetesApplication` is a type of workload, with a `KubernetesCluster`
|
||||
label selector used for scheduling, and a series of resource templates
|
||||
representing resources to be deployed to the scheduled cluster, and managed
|
||||
resources are provisioned and securely connected to the application.
|
||||
|
||||
### In-Tree
|
||||
|
||||
In-tree means its source code lives in a core Crossplane git repository.
|
||||
|
||||
### Out-of-Tree
|
||||
|
||||
Out-of-tree means its source code lives outside of a core Crossplane git
|
||||
repository.
|
||||
|
||||
Often used to refer to Crossplane extensions, controllers or Stacks.
|
||||
|
||||
Out-of-tree extensibility enables to the community to build, release, publish,
|
||||
and install Crossplane extensions separately from the core Crossplane repos.
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
---
|
||||
title: Developer Guide
|
||||
toc: true
|
||||
weight: 710
|
||||
---
|
||||
# Developer Guide
|
||||
|
||||
Welcome to the Crossplane Developer Guide!
|
||||
|
||||
## Overview
|
||||
|
||||
Infra Stacks like [stack-gcp][stack-gcp], [stack-aws][stack-aws], and
|
||||
[stack-azure][stack-azure] extend Crossplane to support managed service
|
||||
provisioning (databases, caches, buckets), secure connectivity (VPCs, subnets,
|
||||
peering, ACLs, secrets), and provisioning managed Kubernetes clusters on demand
|
||||
to further isolate the blast radius of applications.
|
||||
|
||||
Infra Stacks are typically pre-built and published to the [Stacks
|
||||
registry][stack-registry], where they can be installed by a cluster
|
||||
administrator using a [`ClusterStackInstall`][stack-install-docs] kind via the
|
||||
Kubernetes API or with the [`stack install`][crossplane-cli-usage] command.
|
||||
|
||||
App Stacks depend on Infra Stacks like [stack-gcp][stack-gcp],
|
||||
[stack-aws][stack-aws], or [stack-azure][stack-azure] to provide the managed
|
||||
services they depend on via the Kubernetes API.
|
||||
|
||||
App Stacks may also be pre-built and published to the [Stacks
|
||||
registry][stack-registry] where they can be deployed by application teams using
|
||||
a [`StackInstall`][crossplane-cli-usage] kind via the Kubernetes API or with
|
||||
the [`stack install`][crossplane-cli-usage] command.
|
||||
|
||||
## Infra Stacks
|
||||
|
||||
### Using Infra Stacks
|
||||
|
||||
The [Crossplane Services Guide][services-user-guide] shows how to use existing
|
||||
Infra Stacks to deploy a Wordpress `Deployment` that securely consumes a MySQL
|
||||
instance from GCP, AWS, or Azure all from `kubectl`.
|
||||
|
||||
### Building Infra Stacks
|
||||
|
||||
Infra Stacks are out-of-tree Crossplane extensions that can be built and
|
||||
published on their own schedule separate from the core Crossplane repos.
|
||||
|
||||
Crossplane enables the community to build a modular, open cloud control plane
|
||||
where any cloud service or capability can be added using the [Stack
|
||||
Manager][stack-manager], an extension manager for the Kubernetes API. Crossplane
|
||||
Stacks simplify the work required to build, publish, install and manage control
|
||||
plane extensions with a powerful RBAC permission model, integrated dependency
|
||||
management, and more.
|
||||
|
||||
The [Services Developer Guide][services-developer-guide] shows how to:
|
||||
|
||||
* Extend existing Infra Stacks ([stack-gcp][stack-gcp], [stack-aws][stack-aws],
|
||||
[stack-azure][stack-azure]) to add more cloud services.
|
||||
* Build a new Infra Stack to add more cloud providers.
|
||||
* Make independent cloud offerings available via the Kubernetes API, so
|
||||
application teams can use them just like standard Kubernetes resources.
|
||||
|
||||
## App Stacks
|
||||
|
||||
### Using App Stacks
|
||||
|
||||
The [Crossplane Stacks Guide][stack-user-guide] guide shows how to use a
|
||||
[portable App Stack][stack-wordpress-registry] that can deploy with any Infra
|
||||
Stack including: [stack-gcp][stack-gcp], [stack-aws][stack-aws], or
|
||||
[stack-azure][stack-azure].
|
||||
|
||||
### Building App Stacks
|
||||
|
||||
To learn how to build a "Hello World" Stack see the [Stacks Quick Start][stack-quick-start].
|
||||
|
||||
For a complete App Stack, see the [portable Wordpress App
|
||||
Stack][stack-wordpress] with a kubebuilder-based app
|
||||
[`Controller`][kubernetes-controller] that owns a `WordressInstance` CRD, builds
|
||||
a complete `KubernetesApplication`, and automates much of what's covered in the
|
||||
[Crossplane Services Guide][services-user-guide] plus dynamic cluster
|
||||
provisioning, so you can provision a complete Wordpress app instance from
|
||||
`kubectl` using a single Kubernetes object.
|
||||
|
||||
## Learn More
|
||||
|
||||
If you have any questions, please drop us a note on [Crossplane
|
||||
Slack][join-crossplane-slack] or [contact us][contact-us]!
|
||||
|
||||
To [learn more][learn-more] checkout these [useful links][learn-more].
|
||||
|
||||
<!-- Named links -->
|
||||
[services-user-guide]: services-guide.md
|
||||
[stack-user-guide]: stacks-guide.md
|
||||
[stack-registry]: https://hub.docker.com/search?q=crossplane&type=image
|
||||
[crossplane-cli-usage]: https://github.com/crossplaneio/crossplane-cli#usage
|
||||
[stack-install-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#installation-flow
|
||||
[stack-gcp]: https://github.com/crossplaneio/stack-gcp
|
||||
[stack-aws]: https://github.com/crossplaneio/stack-aws
|
||||
[stack-azure]: https://github.com/crossplaneio/stack-azure
|
||||
[stack-wordpress]: https://github.com/crossplaneio/sample-stack-wordpress
|
||||
[stack-wordpress-registry]: https://hub.docker.com/r/crossplane/sample-stack-wordpress
|
||||
[stack-manager]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#terminology
|
||||
[services-developer-guide]: services-developer-guide.md
|
||||
[stack-quick-start]: https://github.com/crossplaneio/crossplane-cli#quick-start-stacks
|
||||
[kubernetes-controller]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#custom-controllers
|
||||
[join-crossplane-slack]: https://slack.crossplane.io
|
||||
[contact-us]: https://github.com/crossplaneio/crossplane#contact
|
||||
[learn-more]: learn-more.md
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
title: FAQs
|
||||
toc: true
|
||||
weight: 840
|
||||
indent: true
|
||||
---
|
||||
# Frequently Asked Questions (FAQs)
|
||||
|
||||
### Where did the name Crossplane come from?
|
||||
|
||||
Crossplane is the fusing of cross-cloud control plane. We wanted to use a noun that refers to the entity responsible for connecting different cloud providers and acts as control plane across them. Cross implies “cross-cloud” and “plane” brings in “control plane”.
|
||||
|
||||
### What's up with popsicle?
|
||||
|
||||
We believe in a multi-flavor cloud.
|
||||
|
||||
### Why is Upbound open sourcing this project? What are Upbound’s monetization plans?
|
||||
|
||||
Upbound’s mission is to create a more open cloud-computing platform, with more choice and less lock-in. We believe the Crossplane as an important step towards this vision and that it’s going to take a village to solve this problem. We believe that multicloud control plane is a new category of open source software, and it will ultimately disrupt closed source and proprietary models. Upbound aspires to be a commercial provider of a more open cloud-computing platform.
|
||||
|
||||
### What kind of governance model will be used for Crossplane?
|
||||
|
||||
Crossplane will be an independent project and we plan on making a community driven project and not a vendor driven project. It will have an independent brand, github organization, and an open governance model. It will not be tied to single organization or individual.
|
||||
|
||||
### Will Crossplane be donated to an open source foundation?
|
||||
|
||||
We don’t know yet. We are open to doing so but we’d like to revisit this after the project has gotten some end-user community traction.
|
||||
|
||||
### Does using multicloud mean you will use the lowest common denominator across clouds?
|
||||
|
||||
Not necessarily. There are numerous best of breed cloud offerings that run on multiple clouds. For example, CockroachDB and ElasticSearch are world class implementations of platform software and run well on cloud providers. They compete with managed services offered by a cloud provider. We believe that by having an open control plane for them to integrate with, and providing a common API, CLI and UI for all of these services, that more of these offerings will exist and get first-class experience in the cloud.
|
||||
|
||||
### How are resources and claims related to PersistentVolumes in Kubernetes?
|
||||
|
||||
We modeled resource claims and classes after PersistentVolumes and PersistentVolumeClaims in Kubernetes. We believe many of the lessons learned from managing volumes in Kubernetes apply to managing resources within cloud providers. One notable exception is that we avoided creating a plugin model within Crossplane.
|
||||
|
||||
### How is workload scheduling related to pod scheduling in Kubernetes?
|
||||
|
||||
We modeled workload scheduling after the Pod scheduler in Kubernetes. We believe many of the lessons learned from Pod scheduling apply to scheduling workloads across cloud providers.
|
||||
|
||||
### Can I use Crossplane to consistently provision and manage multiple Kubernetes clusters?
|
||||
|
||||
Crossplane includes a portable API for Kubernetes clusters that will include common configuration including node pools, auto-scalers, taints, admission controllers, etc. These will be applied to the specific implementations within the cloud providers like EKS, GKE and AKS. We see the Kubernetes Cluster API to be something that will be used by administrators and not developers.
|
||||
|
||||
### Other attempts at building a higher level API on-top of a multitude of inconsistent lower level APIs have not been successful, will Crossplane not have the same issues?
|
||||
|
||||
We agree that building a consistent higher level API on top of multitudes of inconsistent lower level API's is well known to be fraught with peril (e.g. dumbing down to lowest common denominator, or resulting in so loosely defined an API as to be impossible to practically develop real portable applications on top of it).
|
||||
|
||||
Crossplane follows a different approach here. The portable API extracts the pieces that are common across all implementations, and from the perspective of the workload. The rest of the implementation details are captured in full fidelity by the admin in resource classes. The combination of the two is what results in full configuration that can be deployed. We believe this to be a reasonable tradeoff that avoids the dumbing down to lowest common denominator problem, while still enabling portability.
|
||||
|
|
@ -0,0 +1,427 @@
|
|||
# Deploying GitLab in AWS
|
||||
|
||||
This user guide will walk you through GitLab application deployment using Crossplane managed resources and
|
||||
the official GitLab Helm chart.
|
||||
|
||||
The following components are dynamically provisioned and configured during this guide:
|
||||
|
||||
* An RDS Postgres database
|
||||
* A Redis cluster
|
||||
* A sample Gitlab application
|
||||
|
||||
|
||||
|
||||
|
||||
## Pre-requisites
|
||||
|
||||
* Before starting this guide, you should have already [configured your AWS account](../../cloud-providers/aws/aws-provider.md) for use with Crossplane.
|
||||
* You should also have an AWS credentials file at `~/.aws/credentials` already on your local filesystem.
|
||||
* [Helm](https://docs.helm.sh/using_helm/), minimum version `v2.10.0+`.
|
||||
* [jq](https://stedolan.github.io/jq/) - commandline JSON processor `v1.5+`
|
||||
* [AWS cli](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)
|
||||
|
||||
## Preparation
|
||||
|
||||
### EKS Cluster
|
||||
Follow [GitLab instruction](https://docs.gitlab.com/charts/installation/cloud/eks.html#scripted-cluster-creation) to create and bootstrap EKS Kubernetes cluster
|
||||
|
||||
### Crossplane
|
||||
|
||||
Using the newly provisioned cluster:
|
||||
|
||||
- Install Crossplane from master channel using the [Crossplane Installation Guide](../install-crossplane.md#master)
|
||||
- Install the AWS stack into Crossplane using the [AWS stack section](../install-crossplane.md#aws-stack) of the install guide.
|
||||
- Obtain [Cloud Provider Credentials](../cloud-providers.md)
|
||||
|
||||
#### Region
|
||||
- Export the region of the EKS cluster you're provisioned for this demo
|
||||
```
|
||||
export REGION=region-of-eks-west-1
|
||||
```
|
||||
|
||||
#### EKS kubeconfig
|
||||
- Obtain EKS Cluster credentials and set as your current context
|
||||
```bash
|
||||
aws eks --region $REGION update-kubeconfig --name [your-CLUSTER_NAME]
|
||||
```
|
||||
|
||||
#### AWS provider
|
||||
|
||||
Create provider:
|
||||
```console
|
||||
sed -e "s|REGION|$REGION|g;s|BASE64ENCODED_AWS_PROVIDER_CREDS|`base64 ~/.aws/credentials | tr -d '\n'`|g;" cluster/examples/gitlab/aws/provider.yaml | kubectl create -f -
|
||||
```
|
||||
|
||||
- Verify AWS provider was successfully registered by the crossplane
|
||||
```bash
|
||||
kubectl get providers.aws.crossplane.io -n crossplane-system
|
||||
kubectl get secrets -n crossplane-system
|
||||
```
|
||||
|
||||
- You should see output similar to:
|
||||
|
||||
```bash
|
||||
NAME PROJECT-ID AGE
|
||||
demo-aws your-project-123456 11m
|
||||
NAME TYPE DATA AGE
|
||||
default-token-974db kubernetes.io/service-account-token 3 2d16h
|
||||
demo-aws-creds Opaque 1 103s
|
||||
```
|
||||
|
||||
#### Create an RDS subnet group
|
||||
1. Navigate to the aws console in same region as the EKS cluster
|
||||
1. Navigate to `RDS` service
|
||||
1. Navigate to `Subnet groups` in left hand pane
|
||||
1. Click `Create DB Subnet Group`
|
||||
1. Name your subnet i.e. `eks-db-subnets`
|
||||
1. Select the VPC created in the EKS VPC step
|
||||
1. Click `Add all subnets related to this VPC`
|
||||
1. Click Create
|
||||
1. Export the db subnet group name
|
||||
```console
|
||||
export RDS_SUBNET_GROUP_NAME=replace-with-DBSubnetgroup-name
|
||||
```
|
||||
#### Create an RDS/Redis Security Group (example only)
|
||||
|
||||
> Note: This will make your RDS and Redis instance visible from anywhere on the internet.
|
||||
This is for **EXAMPLE PURPOSES ONLY** and is **NOT RECOMMENDED** for production system.
|
||||
|
||||
1. Navigate to ec2 in the same region as the EKS cluster
|
||||
1. Click: security groups
|
||||
1. Click `Create Security Group`
|
||||
1. Name it, ex. `bad-idea-public-visibility`
|
||||
1. Give it a description
|
||||
1. Select the same VPC as the EKS cluster.
|
||||
1. On the Inbound Rules tab, choose `Add Rule`.
|
||||
- For Type, choose `Custom TCP Rule`
|
||||
- For Port Range, type `6379`
|
||||
- For Source, choose `Anywhere` from drop down or type: `0.0.0.0/0`
|
||||
- Click `Add Rule` again
|
||||
- For Type, choose `PostgreSQL`
|
||||
- For Source, choose `Anywhere` from drop down or type: `0.0.0.0/0`
|
||||
1. Choose Add another rule if you need to add more IP addresses or different port ranges.
|
||||
1. Click: Create
|
||||
1. Export the security group id
|
||||
```console
|
||||
export REDIS_SECURITY_GROUP=replace-with-security-group-id
|
||||
export RDS_SECURITY_GROUP=replace-with-security-group-id
|
||||
```
|
||||
|
||||
#### Create an Elasticache Subnet Group
|
||||
1. Navigate to the aws console in same region as the EKS cluster
|
||||
1. Navigate to `Elasticache` service
|
||||
1. Navigate to `Subnet groups` in left hand pane
|
||||
1. Click `Create Subnet Group`
|
||||
1. Name your subnet i.e. `redis-subnets`
|
||||
1. Select the VPC created in the EKS VPC step
|
||||
1. Click `Add all subnets related to this VPC`
|
||||
1. Click Create
|
||||
1. Export the db subnet group name
|
||||
|
||||
```console
|
||||
export REDIS_SUBNET_GROUP=replace-me-with-redis-subnet-group
|
||||
```
|
||||
|
||||
|
||||
#### Resource Classes
|
||||
Create Crossplane Resource Class needed to provision managed resources for GitLab applications
|
||||
|
||||
```bash
|
||||
sed -e "s|REDIS_SECURITY_GROUP|$REDIS_SECURITY_GROUP|g;s|REDIS_SUBNET_GROUP|$REDIS_SUBNET_GROUP|g;s|REGION|$REGION|g;s|RDS_SUBNET_GROUP_NAME|$RDS_SUBNET_GROUP_NAME|g;s|RDS_SECURITY_GROUP|$RDS_SECURITY_GROUP|g" cluster/examples/gitlab/aws/resource-classes/* | kubectl create -f -
|
||||
```
|
||||
|
||||
```
|
||||
resourceclass.core.crossplane.io/standard-aws-bucket created
|
||||
resourceclass.core.crossplane.io/standard-aws-postgres created
|
||||
resourceclass.core.crossplane.io/standard-aws-redis created
|
||||
```
|
||||
|
||||
Verify
|
||||
|
||||
```bash
|
||||
kubectl get resourceclasses -n crossplane-system
|
||||
```
|
||||
|
||||
```
|
||||
NAME PROVISIONER PROVIDER-REF RECLAIM-POLICY AGE
|
||||
standard-aws-bucket s3buckets.storage.aws.crossplane.io/v1alpha1 demo-aws Delete 17s
|
||||
standard-aws-postgres rdsinstance.database.aws.crossplane.io/v1alpha1 demo-aws Delete 17s
|
||||
standard-aws-redis replicationgroup.cache.aws.crossplane.io/v1alpha1 demo-aws Delete 17s
|
||||
```
|
||||
|
||||
#### Resource Claims
|
||||
Provision Managed Resources required by GitLab application using Crossplane Resource Claims.
|
||||
|
||||
Note: you can use a separate command for each claim file, or create all claims in one command, like so:
|
||||
|
||||
```bash
|
||||
kubectl create -Rf cluster/examples/gitlab/aws/resource-claims/
|
||||
```
|
||||
```
|
||||
postgresqlinstance.database.crossplane.io/gitlab-postgresql created
|
||||
rediscluster.cache.crossplane.io/gitlab-redis created
|
||||
bucket.storage.crossplane.io/gitlab-artifacts created
|
||||
bucket.storage.crossplane.io/gitlab-backups-tmp created
|
||||
bucket.storage.crossplane.io/gitlab-backups created
|
||||
bucket.storage.crossplane.io/gitlab-externaldiffs created
|
||||
bucket.storage.crossplane.io/gitlab-lfs created
|
||||
bucket.storage.crossplane.io/gitlab-packages created
|
||||
bucket.storage.crossplane.io/gitlab-pseudonymizer created
|
||||
bucket.storage.crossplane.io/gitlab-registry created
|
||||
bucket.storage.crossplane.io/gitlab-uploads created
|
||||
```
|
||||
|
||||
Verify that the resource claims were successfully provisioned.
|
||||
```bash
|
||||
kubectl get -f cluster/examples/gitlab/aws/resource-claims/postgres.yaml
|
||||
kubectl get -f cluster/examples/gitlab/aws/resource-claims/redis.yaml
|
||||
```
|
||||
|
||||
```
|
||||
NAME STATUS CLASS VERSION AGE
|
||||
gitlab-postgresql Bound standard-aws-postgres 9.6 5m27s
|
||||
---
|
||||
NAME STATUS CLASS VERSION AGE
|
||||
gitlab-redis Bound standard-aws-redis 3.2 7m10s
|
||||
```
|
||||
|
||||
```bash
|
||||
# check all bucket claims
|
||||
kubectl get -f cluster/examples/gitlab/aws/resource-claims/buckets/
|
||||
```
|
||||
```text
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-artifacts Bound standard-aws-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-backups-tmp Bound standard-aws-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-backups Bound standard-aws-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-externaldiffs Bound standard-aws-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-lfs Bound standard-aws-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-packages Bound standard-aws-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-pseudonymizer Bound standard-aws-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-registry Bound standard-aws-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-uploads Bound standard-aws-bucket 4m49s
|
||||
```
|
||||
|
||||
What we are looking for is for `STATUS` value to become `Bound` which indicates the managed resource was successfully provisioned and is ready for consumption
|
||||
|
||||
##### Resource Claims Connection Secrets
|
||||
Verify that every resource has created a connection secret
|
||||
```bash
|
||||
kubectl get secrets -n default
|
||||
```
|
||||
```
|
||||
NAME TYPE DATA AGE
|
||||
default-token-mzsgg kubernetes.io/service-account-token 3 5h42m
|
||||
gitlab-artifacts Opaque 4 6m41s
|
||||
gitlab-backups Opaque 4 7m6s
|
||||
gitlab-backups-tmp Opaque 4 7m7s
|
||||
gitlab-externaldiffs Opaque 4 7m5s
|
||||
gitlab-lfs Opaque 4 7m4s
|
||||
gitlab-packages Opaque 4 2m28s
|
||||
gitlab-postgresql Opaque 3 30m
|
||||
gitlab-pseudonymizer Opaque 4 7m2s
|
||||
gitlab-redis Opaque 1 28m
|
||||
gitlab-registry Opaque 4 7m1s
|
||||
gitlab-uploads Opaque 4 7m1s
|
||||
```
|
||||
|
||||
Note: Kubernetes cluster claim is created in "privileged" mode; thus the kubernetes cluster resource secret is located in `crossplane-system` namespace, however, you will not need to use this secret for our GitLab demo deployment.
|
||||
|
||||
At this point, all GitLab managed resources should be ready to consume and this completes the Crossplane resource provisioning phase.
|
||||
|
||||
#### Managed Resource Secrets
|
||||
|
||||
##### Convert Secrets and Export Valuess
|
||||
GitLab requires to provide connection information in the specific format per cloud provider.
|
||||
In addition, we need to extract endpoints and additional managed resource properties and add them to helm values.
|
||||
|
||||
There is an [ongoing effort](https://github.com/crossplaneio/crossplane/issues/489) to improve secret consumption from GitLab such that secrets produced by Crossplane controllers are directly consumed without transformation.
|
||||
|
||||
We will use a convenience script for this purpose.
|
||||
Note: your output may be different
|
||||
```bash
|
||||
./cluster/examples/gitlab/aws/secrets.sh
|
||||
```
|
||||
```
|
||||
Current cluster kubectl context: eks_you-project-123456_us-central1-a_eks-a2345dfb1-asdf-11e9-ac37-9cb6d08bde99
|
||||
---
|
||||
Source cluster secrets:
|
||||
NAME TYPE DATA AGE
|
||||
default-token-mzsgg kubernetes.io/service-account-token 3 2d7h
|
||||
gitlab-artifacts Opaque 4 34h
|
||||
gitlab-backups Opaque 4 34h
|
||||
gitlab-backups-tmp Opaque 4 34h
|
||||
gitlab-externaldiffs Opaque 4 34h
|
||||
gitlab-lfs Opaque 4 34h
|
||||
gitlab-packages Opaque 4 34h
|
||||
gitlab-postgresql Opaque 3 2d2h
|
||||
gitlab-pseudonymizer Opaque 4 34h
|
||||
gitlab-redis Opaque 1 2d2h
|
||||
gitlab-registry Opaque 4 34h
|
||||
gitlab-uploads Opaque 4 34h
|
||||
---
|
||||
Generate PostgreSQL secret and values file
|
||||
secret/gitlab-postgresql created
|
||||
---
|
||||
Generate Redis values file
|
||||
---
|
||||
Generate Buckets secrets
|
||||
secret/bucket-artifacts created
|
||||
secret/bucket-backups-tmp created
|
||||
secret/bucket-backups created
|
||||
secret/bucket-externaldiffs created
|
||||
secret/bucket-lfs created
|
||||
secret/bucket-packages created
|
||||
secret/bucket-pseudonymizer created
|
||||
secret/bucket-registry created
|
||||
secret/bucket-uploads created
|
||||
|
||||
```
|
||||
|
||||
## Install
|
||||
Render the official GitLab Helm chart with the generated values files, and your settings into a `gitlab-aws.yaml` file.
|
||||
See [GitLab Helm Documentation](https://docs.gitlab.com/charts/installation/deployment.html) for the additional details
|
||||
|
||||
```bash
|
||||
helm repo add gitlab https://charts.gitlab.io/
|
||||
helm repo update
|
||||
helm fetch gitlab/gitlab --version v1.7.1
|
||||
helm template gitlab-1.7.1.tgz --name gitlab-demo --namespace default \
|
||||
-f cluster/examples/gitlab/aws/values-buckets.yaml \
|
||||
-f cluster/examples/gitlab/aws/values-redis.yaml \
|
||||
-f cluster/examples/gitlab/aws/values-psql.yaml \
|
||||
--set global.hosts.domain=[your.domain] \
|
||||
--set global.hosts.hostSuffix=demo \
|
||||
--set certmanager-issuer.email=email@account.io > gitlab-aws.yaml
|
||||
```
|
||||
|
||||
Examine `gitlab-aws.yaml` to familiarize yourself with all GitLab components.
|
||||
|
||||
Install GitLab
|
||||
Note: your output may look different:
|
||||
```bash
|
||||
kubectl create -f gitlab-aws.yaml
|
||||
```
|
||||
|
||||
Validate GitLab components:
|
||||
|
||||
```bash
|
||||
kubectl get jobs,deployments,statefulsets
|
||||
```
|
||||
|
||||
It usually takes few minutes for all GitLab components to get initialized and be ready.
|
||||
|
||||
Note: During the initialization "wait", some pods could automatically restart, but this should stabilize once all the
|
||||
dependent components become available.
|
||||
|
||||
Note: There also could be intermittent `ImagePullBackOff`, but those, similar to above should clear up by themselves.
|
||||
|
||||
Note: It appears the `gitlab-demo-unicorn-test-runner-*` (job/pod) will Error and will not re-run, unless the pod is resubmitted.
|
||||
|
||||
After few minutes your output for:
|
||||
```bash
|
||||
kubectl get pod
|
||||
```
|
||||
Should look similar to:
|
||||
```bash
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
gitlab-demo-certmanager-59f887dc9-jppl7 1/1 Running 0 9m
|
||||
gitlab-demo-gitaly-0 1/1 Running 0 9m
|
||||
gitlab-demo-gitlab-runner-fcc9cc7cf-c7pzz 0/1 Init:0/1 0 9m
|
||||
gitlab-demo-gitlab-shell-57b887755c-kqm89 1/1 Running 0 8m
|
||||
gitlab-demo-gitlab-shell-57b887755c-vzqkf 1/1 Running 0 9m
|
||||
gitlab-demo-issuer.0-ddzwp 0/1 Completed 0 9m
|
||||
gitlab-demo-migrations.0-2h5px 1/1 Running 2 9m
|
||||
gitlab-demo-nginx-ingress-controller-7bf4f7574d-cznfl 1/1 Running 0 9m
|
||||
gitlab-demo-nginx-ingress-controller-7bf4f7574d-f5wjz 1/1 Running 0 9m
|
||||
gitlab-demo-nginx-ingress-controller-7bf4f7574d-mxqpz 1/1 Running 0 9m
|
||||
gitlab-demo-nginx-ingress-default-backend-5886cb59c7-bjnrt 1/1 Running 0 9m
|
||||
gitlab-demo-nginx-ingress-default-backend-5886cb59c7-gchhp 1/1 Running 0 9m
|
||||
gitlab-demo-prometheus-server-64897864cf-p4sd7 2/2 Running 0 9m
|
||||
gitlab-demo-registry-746bbb488f-xjlhp 1/1 Running 0 8m
|
||||
gitlab-demo-registry-746bbb488f-xxpcr 1/1 Running 0 9m
|
||||
gitlab-demo-shared-secrets.0-mr7-2v5cf 0/1 Completed 0 9m
|
||||
gitlab-demo-sidekiq-all-in-1-5dd8b5b9d-58p72 1/1 Running 0 9m
|
||||
gitlab-demo-task-runner-7c477b48dc-d5nf6 1/1 Running 0 9m
|
||||
gitlab-demo-unicorn-6dd757db97-4vqgc 1/2 ImagePullBackOff 0 9m
|
||||
gitlab-demo-unicorn-6dd757db97-nmglt 2/2 Running 0 8m
|
||||
gitlab-demo-unicorn-test-runner-f2ttk 0/1 Error 0 9m
|
||||
```
|
||||
|
||||
Note: if `ImagePullBackOff` error Pod does not get auto-cleared, consider deleting the pod.
|
||||
A new pod should come up with "Running" STATUS.
|
||||
|
||||
## Use
|
||||
Retrieve the DNS name using GitLab ingress componenet:
|
||||
```bash
|
||||
kubectl get ingress
|
||||
```
|
||||
You should see following ingress configurations:
|
||||
```
|
||||
NAME HOSTS ADDRESS PORTS AGE
|
||||
gitlab-demo-registry registry-demo.upbound.app 35.222.163.203 80, 443 14m
|
||||
gitlab-demo-unicorn gitlab-demo.upbound.app 35.222.163.203 80, 443 14m
|
||||
```
|
||||
|
||||
Navigate your browser to https://gitlab-demo.[your-domain], and if everything ran successfully, you should see:
|
||||
|
||||

|
||||
|
||||
## Uninstall
|
||||
|
||||
### GitLab
|
||||
To remove the GitLab application: run:
|
||||
```bash
|
||||
kubectl delete -f gitlab-aws.yaml
|
||||
```
|
||||
|
||||
### Crossplane
|
||||
|
||||
Delete all managed resources by running:
|
||||
```bash
|
||||
kubectl delete -Rf cluster/examples/gitlab/aws/resource-claims
|
||||
```
|
||||
```
|
||||
bucket.storage.crossplane.io "gitlab-artifacts" deleted
|
||||
bucket.storage.crossplane.io "gitlab-backups-tmp" deleted
|
||||
bucket.storage.crossplane.io "gitlab-backups" deleted
|
||||
bucket.storage.crossplane.io "gitlab-externaldiffs" deleted
|
||||
bucket.storage.crossplane.io "gitlab-lfs" deleted
|
||||
bucket.storage.crossplane.io "gitlab-packages" deleted
|
||||
bucket.storage.crossplane.io "gitlab-pseudonymizer" deleted
|
||||
bucket.storage.crossplane.io "gitlab-registry" deleted
|
||||
bucket.storage.crossplane.io "gitlab-uploads" deleted
|
||||
postgresqlinstance.database.crossplane.io "gitlab-postgresql" deleted
|
||||
rediscluster.cache.crossplane.io "gitlab-redis" deleted
|
||||
```
|
||||
|
||||
Verify that all resource claims have been removed:
|
||||
```bash
|
||||
kubectl get -Rf cluster/examples/gitlab/aws/resource-claims
|
||||
```
|
||||
Note: typically it may take few seconds for Crossplane to process the request.
|
||||
By running resource and provider removal in the same command or back-to-back, we are running the risk of having orphaned resource.
|
||||
I.E., a resource that could not be cleaned up because the provider is no longer available.
|
||||
|
||||
Delete all resource classes:
|
||||
```bash
|
||||
kubectl delete -Rf cluster/examples/gitlab/aws/resource-classes/
|
||||
```
|
||||
```
|
||||
resourceclass.core.crossplane.io "standard-aws-bucket" deleted
|
||||
resourceclass.core.crossplane.io "standard-aws-postgres" deleted
|
||||
resourceclass.core.crossplane.io "standard-aws-redis" deleted
|
||||
```
|
||||
|
||||
Delete aws-provider and secrets
|
||||
```bash
|
||||
kubectl delete -f cluster/examples/gitlab/aws/provider.yaml
|
||||
```
|
||||
|
|
@ -0,0 +1,402 @@
|
|||
# Deploying GitLab in GCP
|
||||
|
||||
This user guide will walk you through GitLab application deployment using Crossplane managed resources and
|
||||
the official GitLab Helm chart.
|
||||
|
||||
## Pre-requisites
|
||||
|
||||
* [Helm](https://docs.helm.sh/using_helm/), minimum version `v2.10.0+`.
|
||||
* [jq](https://stedolan.github.io/jq/) - commandline JSON processor `v1.5+`
|
||||
|
||||
|
||||
## Preparation
|
||||
|
||||
### GKE Cluster
|
||||
Follow [GitLab instruction](https://docs.gitlab.com/charts/installation/cloud/gke.html#scripted-cluster-creation) to create and bootstrap GKE Kubernetes cluster
|
||||
|
||||
- Obtain GKE cluster credentials
|
||||
```bash
|
||||
gcloud container clusters get-credentials [your-gke-cluster] --zone [your-cluster-zone] --project [your-gcp-project]
|
||||
```
|
||||
|
||||
- Configure `kubectl` current context to point to your GKE cluster where you want to deploy GitLab application.
|
||||
|
||||
Note: this step is optional since: `gcloud container clusters get-credentials` will automatically set the current context to newly connected cluster
|
||||
```bash
|
||||
kubectl config get-contexts
|
||||
kubectl config set-context [your-cluster-context]
|
||||
```
|
||||
|
||||
### Crossplane
|
||||
|
||||
Using the newly provisioned cluster:
|
||||
|
||||
- Install Crossplane from master channel using the [Crossplane Installation Guide](../install-crossplane.md#master)
|
||||
- Install the GCP stack into Crossplane using the [GCP stack section](../install-crossplane.md#gcp-stack) of the install guide.
|
||||
- Obtain [Cloud Provider Credentials](../cloud-providers.md)
|
||||
|
||||
#### GCP Provider
|
||||
It is essential to make sure that the GCP Service Account used by the Crossplane GCP Provider has the following Roles:
|
||||
|
||||
Cloud SQL Admin
|
||||
Kubernetes Engine Admin
|
||||
Service Account User
|
||||
Cloud Memorystore Redis Admin
|
||||
Storage Admin
|
||||
|
||||
Using GCP Service Account `gcp-credentials.json`:
|
||||
- Generate BASE64ENCODED_GCP_PROVIDER_CREDS encoded value:
|
||||
```bash
|
||||
base64 gcp-credentials.json | tr -d "\n"
|
||||
```
|
||||
|
||||
- Update [provider.yaml](../../cluster/examples/gitlab/gcp/provider.yaml) replacing `BASE64ENCODED_GCP_PROVIDER_CREDS`
|
||||
- Update [provider.yaml](../../cluster/examples/gitlab/gcp/provider.yaml) replacing `PROJECT_ID` with `project_id` from the credentials.json
|
||||
|
||||
#### GCS
|
||||
It is recommended to create a separate GCP Service Account dedicated to storage operations only, i.e. with a reduced IAM role set, for example: `StorageAdmin` only.
|
||||
|
||||
Follow the same step as for GCP credentials to create and obtain `gcs-credentials.json`
|
||||
- Generate BASE64ENCODED_GCS_PROVIDER_CREDS encoded value:
|
||||
```bash
|
||||
base64 gcs-credentials.json | tr -d "\n"
|
||||
```
|
||||
|
||||
Otherwise, you can use `BASE64ENCODED_GCP_PROVIDER_CREDS` in place of `BASE64ENCODED_GCS_PROVIDER_CREDS`
|
||||
|
||||
- Update [provider.yaml](../../cluster/examples/gitlab/gcp/provider.yaml) replacing `BASE64ENCODED_GCS_PROVIDER_CREDS`
|
||||
|
||||
##### GCS Interoperability
|
||||
- Navigate to: https://console.cloud.google.com/storage/settings in your GCP project
|
||||
- Click on `Interoperability` Tab
|
||||
- Using `Interoperable storage access keys` generate `BASE64ENCODED` values
|
||||
- `BASE64ENCODED_GCS_INTEROP_ACCESS_KEY`
|
||||
- `BASE64ENCODED_GCS_INTEROP_SECRET`
|
||||
- Update [provider.yaml](../../cluster/examples/gitlab/gcp/provider.yaml) replacing:
|
||||
- `BASE64ENCODED_GCS_INTEROP_ACCESS_KEY`
|
||||
- `BASE64ENCODED_GCS_INTEROP_SECRET`
|
||||
|
||||
#### Create
|
||||
- Create GCP provider:
|
||||
```bash
|
||||
kubectl create -f cluster/examples/gitlab/gcp/provider.yaml
|
||||
```
|
||||
- Verify GCP provider was successfully registered by the crossplane
|
||||
```bash
|
||||
kubectl get providers.gcp.crossplane.io -n crossplane-system
|
||||
kubectl get secrets -n crossplane-system
|
||||
```
|
||||
|
||||
- You should see output similar to:
|
||||
|
||||
```bash
|
||||
NAME PROJECT-ID AGE
|
||||
demo-gcp your-project-123456 11m
|
||||
NAME TYPE DATA AGE
|
||||
default-token-974db kubernetes.io/service-account-token 3 2d16h
|
||||
demo-gcp-creds Opaque 1 103s
|
||||
demo-gcs-creds Opaque 3 2d11h
|
||||
```
|
||||
|
||||
#### Resource Classes
|
||||
Create Crossplane Resource Class needed to provision managed resources for GitLab applications
|
||||
|
||||
```bash
|
||||
kubectl create -f cluster/examples/gitlab/gcp/resource-classes/
|
||||
```
|
||||
```
|
||||
resourceclass.core.crossplane.io/standard-gcp-bucket created
|
||||
resourceclass.core.crossplane.io/standard-gcp-cluster created
|
||||
resourceclass.core.crossplane.io/standard-gcp-postgres created
|
||||
resourceclass.core.crossplane.io/standard-gcp-redis created
|
||||
```
|
||||
|
||||
Verify
|
||||
```bash
|
||||
kubectl get resourceclasses -n crossplane-system
|
||||
```
|
||||
```
|
||||
NAME PROVISIONER PROVIDER-REF RECLAIM-POLICY AGE
|
||||
standard-gcp-bucket bucket.storage.gcp.crossplane.io/v1alpha1 demo-gcp Delete 17s
|
||||
standard-gcp-cluster gkecluster.compute.gcp.crossplane.io/v1alpha1 demo-gcp Delete 17s
|
||||
standard-gcp-postgres cloudsqlinstance.database.gcp.crossplane.io/v1alpha1 demo-gcp Delete 17s
|
||||
standard-gcp-redis cloudmemorystoreinstance.cache.gcp.crossplane.io/v1alpha1 demo-gcp Delete 17s
|
||||
```
|
||||
|
||||
#### Resource Claims
|
||||
Provision Managed Resources required by GitLab application using Crossplane Resource Claims.
|
||||
|
||||
Note: you can use a separate command for each claim file, or create all claims in one command, like so:
|
||||
|
||||
```bash
|
||||
kubectl create -Rf cluster/examples/gitlab/gcp/resource-claims/
|
||||
```
|
||||
```
|
||||
bucket.storage.crossplane.io/gitlab-artifacts created
|
||||
bucket.storage.crossplane.io/gitlab-backups-tmp created
|
||||
bucket.storage.crossplane.io/gitlab-backups created
|
||||
bucket.storage.crossplane.io/gitlab-externaldiffs created
|
||||
bucket.storage.crossplane.io/gitlab-lfs created
|
||||
bucket.storage.crossplane.io/gitlab-packages created
|
||||
bucket.storage.crossplane.io/gitlab-pseudonymizer created
|
||||
bucket.storage.crossplane.io/gitlab-registry created
|
||||
bucket.storage.crossplane.io/gitlab-uploads created
|
||||
postgresqlinstance.database.crossplane.io/gitlab-postgresql created
|
||||
rediscluster.cache.crossplane.io/gitlab-redis created
|
||||
```
|
||||
|
||||
Verify that the resource claims were successfully provisioned.
|
||||
```bash
|
||||
kubectl get -f cluster/examples/gitlab/gcp/resource-claims/postgres.yaml
|
||||
kubectl get -f cluster/examples/gitlab/gcp/resource-claims/redis.yaml
|
||||
```
|
||||
|
||||
```
|
||||
NAME STATUS CLUSTER-CLASS CLUSTER-REF AGE
|
||||
gitlab-gke Bound standard-gcp-cluster gke-af012df6-6e2a-11e9-ac37-9cb6d08bde99 4m7s
|
||||
---
|
||||
NAME STATUS CLASS VERSION AGE
|
||||
gitlab-postgresql Bound standard-gcp-postgres 9.6 5m27s
|
||||
---
|
||||
NAME STATUS CLASS VERSION AGE
|
||||
gitlab-redis Bound standard-gcp-redis 3.2 7m10s
|
||||
```
|
||||
|
||||
```bash
|
||||
# check all bucket claims
|
||||
kubectl get -f cluster/examples/gitlab/gcp/resource-claims/buckets/
|
||||
```
|
||||
```text
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-artifacts Bound standard-gcp-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-backups-tmp Bound standard-gcp-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-backups Bound standard-gcp-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-externaldiffs Bound standard-gcp-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-lfs Bound standard-gcp-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-packages Bound standard-gcp-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-pseudonymizer Bound standard-gcp-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-registry Bound standard-gcp-bucket 4m49s
|
||||
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
|
||||
gitlab-uploads Bound standard-gcp-bucket 4m49s
|
||||
```
|
||||
|
||||
What we are looking for is for `STATUS` value to become `Bound` which indicates the managed resource was successfully provisioned and is ready for consumption
|
||||
|
||||
##### Resource Claims Connection Secrets
|
||||
Verify that every resource has created a connection secret
|
||||
```bash
|
||||
kubectl get secrets -n default
|
||||
```
|
||||
```
|
||||
NAME TYPE DATA AGE
|
||||
default-token-mzsgg kubernetes.io/service-account-token 3 5h42m
|
||||
gitlab-artifacts Opaque 4 6m41s
|
||||
gitlab-backups Opaque 4 7m6s
|
||||
gitlab-backups-tmp Opaque 4 7m7s
|
||||
gitlab-externaldiffs Opaque 4 7m5s
|
||||
gitlab-lfs Opaque 4 7m4s
|
||||
gitlab-packages Opaque 4 2m28s
|
||||
gitlab-postgresql Opaque 3 30m
|
||||
gitlab-pseudonymizer Opaque 4 7m2s
|
||||
gitlab-redis Opaque 1 28m
|
||||
gitlab-registry Opaque 4 7m1s
|
||||
gitlab-uploads Opaque 4 7m1s
|
||||
```
|
||||
|
||||
At this point, all GitLab managed resources should be ready to consume and this completes the Crossplane resource provisioning phase.
|
||||
|
||||
#### Managed Resource Secrets
|
||||
|
||||
##### Convert Secrets and Export Values
|
||||
GitLab requires to provide connection information in the specific format per cloud provider.
|
||||
In addition, we need to extract endpoints and additional managed resource properties and add them to helm values.
|
||||
|
||||
There is an [ongoing effort](https://github.com/crossplaneio/crossplane/issues/489) to improve secret consumption from GitLab such that secrets produced by Crossplane controllers are directly consumed without transformation.
|
||||
|
||||
We will use a convenience script for this purpose.
|
||||
Note: your output may be different
|
||||
```bash
|
||||
./cluster/examples/gitlab/gcp/secrets.sh
|
||||
```
|
||||
```
|
||||
Current cluster kubectl context: gke_you-project-123456_us-central1-a_gke-a2345dfb1-asdf-11e9-ac37-9cb6d08bde99
|
||||
---
|
||||
Source cluster secrets:
|
||||
NAME TYPE DATA AGE
|
||||
default-token-mzsgg kubernetes.io/service-account-token 3 2d7h
|
||||
gitlab-artifacts Opaque 4 34h
|
||||
gitlab-backups Opaque 4 34h
|
||||
gitlab-backups-tmp Opaque 4 34h
|
||||
gitlab-externaldiffs Opaque 4 34h
|
||||
gitlab-lfs Opaque 4 34h
|
||||
gitlab-packages Opaque 4 34h
|
||||
gitlab-postgresql Opaque 3 2d2h
|
||||
gitlab-pseudonymizer Opaque 4 34h
|
||||
gitlab-redis Opaque 1 2d2h
|
||||
gitlab-registry Opaque 4 34h
|
||||
gitlab-uploads Opaque 4 34h
|
||||
---
|
||||
Generate PostgreSQL secret and values file
|
||||
secret/gitlab-postgresql created
|
||||
---
|
||||
Generate Redis values file
|
||||
---
|
||||
Generate Buckets secrets
|
||||
secret/bucket-artifacts created
|
||||
secret/bucket-backups-tmp created
|
||||
secret/bucket-backups created
|
||||
secret/bucket-externaldiffs created
|
||||
secret/bucket-lfs created
|
||||
secret/bucket-packages created
|
||||
secret/bucket-pseudonymizer created
|
||||
secret/bucket-registry created
|
||||
secret/bucket-uploads created
|
||||
|
||||
```
|
||||
|
||||
## Install
|
||||
Render the official GitLab Helm chart with the generated values files, and your settings into a `gitlab-gcp.yaml` file.
|
||||
See [GitLab Helm Documentation](https://docs.gitlab.com/charts/installation/deployment.html) for the additional details
|
||||
|
||||
```bash
|
||||
helm repo add gitlab https://charts.gitlab.io/
|
||||
helm repo update
|
||||
helm fetch gitlab/gitlab --version v1.7.1
|
||||
helm template gitlab-1.7.1.tgz --name gitlab-demo --namespace default \
|
||||
-f cluster/examples/gitlab/gcp/values-buckets.yaml \
|
||||
-f cluster/examples/gitlab/gcp/values-redis.yaml \
|
||||
-f cluster/examples/gitlab/gcp/values-psql.yaml \
|
||||
--set global.hosts.domain=your.domain \
|
||||
--set global.hosts.hostSuffix=demo \
|
||||
--set certmanager-issuer.email=email@account.io > gitlab-gcp.yaml
|
||||
```
|
||||
|
||||
Examine `gitlab-gcp.yaml` to familiarize yourself with all GitLab components.
|
||||
|
||||
Install GitLab
|
||||
Note: your output may look different:
|
||||
```bash
|
||||
kubectl create -f gitlab-gcp.yaml
|
||||
```
|
||||
|
||||
Validate GitLab components:
|
||||
|
||||
```bash
|
||||
kubectl get jobs,deployments,statefulsets
|
||||
```
|
||||
|
||||
It usually takes few minutes for all GitLab components to get initialized and be ready.
|
||||
|
||||
Note: During the initialization "wait", some pods could automatically restart, but this should stabilize once all the
|
||||
dependent components become available.
|
||||
|
||||
Note: There also could be intermittent `ImagePullBackOff`, but those, similar to above should clear up by themselves.
|
||||
|
||||
Note: It appears the `gitlab-demo-unicorn-test-runner-*` (job/pod) will Error and will not re-run, unless the pod is resubmitted.
|
||||
|
||||
After few minutes your output for:
|
||||
```bash
|
||||
kubectl get pod
|
||||
```
|
||||
Should look similar to:
|
||||
```bash
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
gitlab-demo-certmanager-59f887dc9-jppl7 1/1 Running 0 9m
|
||||
gitlab-demo-gitaly-0 1/1 Running 0 9m
|
||||
gitlab-demo-gitlab-runner-fcc9cc7cf-c7pzz 0/1 Init:0/1 0 9m
|
||||
gitlab-demo-gitlab-shell-57b887755c-kqm89 1/1 Running 0 8m
|
||||
gitlab-demo-gitlab-shell-57b887755c-vzqkf 1/1 Running 0 9m
|
||||
gitlab-demo-issuer.0-ddzwp 0/1 Completed 0 9m
|
||||
gitlab-demo-migrations.0-2h5px 1/1 Running 2 9m
|
||||
gitlab-demo-nginx-ingress-controller-7bf4f7574d-cznfl 1/1 Running 0 9m
|
||||
gitlab-demo-nginx-ingress-controller-7bf4f7574d-f5wjz 1/1 Running 0 9m
|
||||
gitlab-demo-nginx-ingress-controller-7bf4f7574d-mxqpz 1/1 Running 0 9m
|
||||
gitlab-demo-nginx-ingress-default-backend-5886cb59c7-bjnrt 1/1 Running 0 9m
|
||||
gitlab-demo-nginx-ingress-default-backend-5886cb59c7-gchhp 1/1 Running 0 9m
|
||||
gitlab-demo-prometheus-server-64897864cf-p4sd7 2/2 Running 0 9m
|
||||
gitlab-demo-registry-746bbb488f-xjlhp 1/1 Running 0 8m
|
||||
gitlab-demo-registry-746bbb488f-xxpcr 1/1 Running 0 9m
|
||||
gitlab-demo-shared-secrets.0-mr7-2v5cf 0/1 Completed 0 9m
|
||||
gitlab-demo-sidekiq-all-in-1-5dd8b5b9d-58p72 1/1 Running 0 9m
|
||||
gitlab-demo-task-runner-7c477b48dc-d5nf6 1/1 Running 0 9m
|
||||
gitlab-demo-unicorn-6dd757db97-4vqgc 1/2 ImagePullBackOff 0 9m
|
||||
gitlab-demo-unicorn-6dd757db97-nmglt 2/2 Running 0 8m
|
||||
gitlab-demo-unicorn-test-runner-f2ttk 0/1 Error 0 9m
|
||||
```
|
||||
|
||||
Note: if `ImagePullBackOff` error Pod does not get auto-cleared, consider deleting the pod.
|
||||
A new pod should come up with "Running" STATUS.
|
||||
|
||||
## Use
|
||||
Retrieve the DNS name using GitLab ingress componenet:
|
||||
```bash
|
||||
kubectl get ingress
|
||||
```
|
||||
You should see following ingress configurations:
|
||||
```
|
||||
NAME HOSTS ADDRESS PORTS AGE
|
||||
gitlab-demo-registry registry-demo.upbound.app 35.222.163.203 80, 443 14m
|
||||
gitlab-demo-unicorn gitlab-demo.upbound.app 35.222.163.203 80, 443 14m
|
||||
```
|
||||
|
||||
Navigate your browser to https://gitlab-demo.upbound.app, and if everything ran successfully, you should see:
|
||||
|
||||

|
||||
|
||||
## Uninstall
|
||||
|
||||
### GitLab
|
||||
To remove the GitLab application run:
|
||||
```bash
|
||||
kubectl delete -f gitlab-gcp.yaml
|
||||
```
|
||||
|
||||
### Crossplane
|
||||
|
||||
Delete all managed resources by running:
|
||||
```bash
|
||||
kubectl delete -Rf cluster/examples/gitlab/gcp/resource-claims
|
||||
```
|
||||
```
|
||||
bucket.storage.crossplane.io "gitlab-artifacts" deleted
|
||||
bucket.storage.crossplane.io "gitlab-backups-tmp" deleted
|
||||
bucket.storage.crossplane.io "gitlab-backups" deleted
|
||||
bucket.storage.crossplane.io "gitlab-externaldiffs" deleted
|
||||
bucket.storage.crossplane.io "gitlab-lfs" deleted
|
||||
bucket.storage.crossplane.io "gitlab-packages" deleted
|
||||
bucket.storage.crossplane.io "gitlab-pseudonymizer" deleted
|
||||
bucket.storage.crossplane.io "gitlab-registry" deleted
|
||||
bucket.storage.crossplane.io "gitlab-uploads" deleted
|
||||
postgresqlinstance.database.crossplane.io "gitlab-postgresql" deleted
|
||||
rediscluster.cache.crossplane.io "gitlab-redis" deleted
|
||||
```
|
||||
|
||||
Verify that all resource claims have been removed:
|
||||
```bash
|
||||
kubectl get -Rf cluster/examples/gitlab/gcp/resource-claims
|
||||
```
|
||||
Note: typically it may take few seconds for Crossplane to process the request.
|
||||
By running resource and provider removal in the same command or back-to-back, we are running the risk of having orphaned resource.
|
||||
I.E., a resource that could not be cleaned up because the provider is no longer available.
|
||||
|
||||
Delete all resource classes:
|
||||
```bash
|
||||
kubectl delete -Rf cluster/examples/gitlab/gcp/resource-classes/
|
||||
```
|
||||
```
|
||||
resourceclass.core.crossplane.io "standard-gcp-bucket" deleted
|
||||
resourceclass.core.crossplane.io "standard-gcp-postgres" deleted
|
||||
resourceclass.core.crossplane.io "standard-gcp-redis" deleted
|
||||
```
|
||||
|
||||
Delete gcp-provider and secrets
|
||||
```bash
|
||||
kubectl delete -f cluster/examples/gitlab/gcp/provider.yaml
|
||||
```
|
||||
|
After Width: | Height: | Size: 54 KiB |
|
|
@ -0,0 +1,276 @@
|
|||
---
|
||||
title: Install Crossplane
|
||||
toc: true
|
||||
weight: 220
|
||||
indent: true
|
||||
---
|
||||
# Install Crossplane
|
||||
|
||||
Crossplane can be easily installed into any existing Kubernetes cluster using the regularly published Helm chart.
|
||||
The Helm chart contains all the custom resources and controllers needed to deploy and configure Crossplane.
|
||||
|
||||
## Pre-requisites
|
||||
|
||||
* [Kubernetes cluster](https://kubernetes.io/docs/setup/)
|
||||
* For example [Minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/), minimum version `v0.28+`
|
||||
* [Helm](https://docs.helm.sh/using_helm/), minimum version `v2.12.0+`.
|
||||
* For Helm 2, make sure Tiller is initialized with sufficient permissions to work on `crossplane-system` namespace.
|
||||
|
||||
## Installation
|
||||
|
||||
Helm charts for Crossplane are currently published to the `alpha` and `master` channels.
|
||||
In the future, `beta` and `stable` will also be available.
|
||||
|
||||
> If you're using Helm 3, make sure you create the `crossplane-system` namespace (or the namespace you'd like to install
|
||||
crossplane) beforehand since Helm 3 does not create that for you automatically anymore.
|
||||
|
||||
### Alpha
|
||||
|
||||
The alpha channel is the most recent release of Crossplane that is considered ready for testing by the community.
|
||||
|
||||
```console
|
||||
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
|
||||
```
|
||||
|
||||
### Master
|
||||
|
||||
The `master` channel contains the latest commits, with all automated tests passing.
|
||||
`master` is subject to instability, incompatibility, and features may be added or removed without much prior notice.
|
||||
It is recommended to use one of the more stable channels, but if you want the absolute newest Crossplane installed, then you can use the `master` channel.
|
||||
|
||||
To install the Helm chart from master, you will need to pass the specific version returned by the `search` command:
|
||||
|
||||
```console
|
||||
helm repo add crossplane-master https://charts.crossplane.io/master/
|
||||
helm search crossplane
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-master/crossplane --version <version>
|
||||
```
|
||||
|
||||
For example:
|
||||
|
||||
```console
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-master/crossplane --version 0.0.0-249.637ccf9
|
||||
```
|
||||
|
||||
## Installing Cloud Provider Stacks
|
||||
|
||||
You can add additional functionality to Crossplane's control plane by installing Crossplane Stacks. For example, each
|
||||
supported cloud provider has its own corresponding stack that contains all the functionality for that particular cloud.
|
||||
After a cloud provider's stack is installed, you will be able to provision and manage resources within that cloud
|
||||
from Crossplane.
|
||||
|
||||
### Installation with Helm
|
||||
|
||||
> This method is not supported with Helm 3, please see [Manual Installation](#manual-installation) if you're using Helm 3.
|
||||
|
||||
You can include deployment of additional infrastructure stacks into your helm installation by setting `clusterStacks.<stack-name>.deploy` to `true`.
|
||||
|
||||
For example, the following will install `master` version of the GCP stack:
|
||||
|
||||
```console
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-master/crossplane --set clusterStacks.gcp.deploy=true --set clusterStacks.gcp.version=master
|
||||
```
|
||||
|
||||
See [helm configuration parameters](#configuration) for supported stacks and parameters.
|
||||
|
||||
### Manual Installation
|
||||
|
||||
After Crossplane has been installed, it is possible to extend Crossplane's functionality by installing Crossplane stacks.
|
||||
|
||||
#### GCP Stack
|
||||
|
||||
To get started with Google Cloud Platform (GCP), create a file named `stack-gcp.yaml` with the following content:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: gcp
|
||||
---
|
||||
apiVersion: stacks.crossplane.io/v1alpha1
|
||||
kind: ClusterStackInstall
|
||||
metadata:
|
||||
name: stack-gcp
|
||||
namespace: gcp
|
||||
spec:
|
||||
package: "crossplane/stack-gcp:master"
|
||||
```
|
||||
|
||||
Then you can install the GCP stack into Crossplane in the `gcp` namespace with the following command:
|
||||
|
||||
```console
|
||||
kubectl apply -f stack-gcp.yaml
|
||||
```
|
||||
|
||||
#### AWS Stack
|
||||
|
||||
To get started with Amazon Web Services (AWS), create a file named `stack-aws.yaml` with the following content:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: aws
|
||||
---
|
||||
apiVersion: stacks.crossplane.io/v1alpha1
|
||||
kind: ClusterStackInstall
|
||||
metadata:
|
||||
name: stack-aws
|
||||
namespace: aws
|
||||
spec:
|
||||
package: "crossplane/stack-aws:master"
|
||||
```
|
||||
|
||||
Then you can install the AWS stack into Crossplane in the `aws` namespace with the following command:
|
||||
|
||||
```console
|
||||
kubectl apply -f stack-aws.yaml
|
||||
```
|
||||
|
||||
#### Azure Stack
|
||||
|
||||
To get started with Microsoft Azure, create a file named `stack-azure.yaml` with the following content:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: azure
|
||||
---
|
||||
apiVersion: stacks.crossplane.io/v1alpha1
|
||||
kind: ClusterStackInstall
|
||||
metadata:
|
||||
name: stack-azure
|
||||
namespace: azure
|
||||
spec:
|
||||
package: "crossplane/stack-azure:master"
|
||||
```
|
||||
|
||||
Then you can install the Azure stack into Crossplane in the `azure` namespace with the following command:
|
||||
|
||||
```console
|
||||
kubectl apply -f stack-azure.yaml
|
||||
```
|
||||
|
||||
#### Rook Stack
|
||||
|
||||
To get started with Rook, create a file named `stack-rook.yaml` with the following content:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: rook
|
||||
---
|
||||
apiVersion: stacks.crossplane.io/v1alpha1
|
||||
kind: ClusterStackInstall
|
||||
metadata:
|
||||
name: stack-rook
|
||||
namespace: rook
|
||||
spec:
|
||||
package: "crossplane/stack-rook:master"
|
||||
```
|
||||
|
||||
Then you can install the Rook stack into Crossplane in the `rook` namespace with the following command:
|
||||
|
||||
```console
|
||||
kubectl apply -f stack-rook.yaml
|
||||
```
|
||||
|
||||
### Uninstalling Cloud Provider Stacks
|
||||
|
||||
The cloud provider stacks can be uninstalled simply by deleting the stack resources from the cluster with a command similar to what's shown below.
|
||||
**Note** that this will also **delete** any resources that Crossplane has provisioned in the cloud provider if their `ReclaimPolicy` is set to `Delete`.
|
||||
|
||||
After you have ensured that you are completely done with all your cloud provider resources, you can then run one of the commands below,
|
||||
depending on which cloud provider you are removing, to remove its stack from Crossplane:
|
||||
|
||||
#### Uninstalling GCP
|
||||
|
||||
```console
|
||||
kubectl delete -f stack-gcp.yaml
|
||||
```
|
||||
|
||||
#### Uninstalling AWS
|
||||
|
||||
```console
|
||||
kubectl delete -f stack-aws.yaml
|
||||
```
|
||||
|
||||
#### Uninstalling Azure
|
||||
|
||||
```console
|
||||
kubectl delete -f stack-azure.yaml
|
||||
```
|
||||
|
||||
#### Uninstalling Rook
|
||||
|
||||
```console
|
||||
kubectl delete -f stack-rook.yaml
|
||||
```
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `crossplane` deployment:
|
||||
|
||||
```console
|
||||
helm delete --purge crossplane
|
||||
```
|
||||
|
||||
That command removes all Kubernetes components associated with Crossplane, including all the custom resources and controllers.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following tables lists the configurable parameters of the Crossplane chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
| -------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| `image.repository` | Image | `crossplane/crossplane` |
|
||||
| `image.tag` | Image tag | `master` |
|
||||
| `image.pullPolicy` | Image pull policy | `Always` |
|
||||
| `imagePullSecrets` | Names of image pull secrets to use | `dockerhub` |
|
||||
| `replicas` | The number of replicas to run for the Crossplane operator | `1` |
|
||||
| `deploymentStrategy` | The deployment strategy for the Crossplane operator | `RollingUpdate` |
|
||||
| `clusterStacks.aws.deploy` | Deploy AWS stack | `false`
|
||||
| `clusterStacks.aws.version` | AWS stack version to deploy | `<latest released version>`
|
||||
| `clusterStacks.gcp.deploy` | Deploy GCP stack | `false`
|
||||
| `clusterStacks.gcp.version` | GCP stack version to deploy | `<latest released version>`
|
||||
| `clusterStacks.azure.deploy` | Deploy Azure stack | `false`
|
||||
| `clusterStacks.azure.version` | Azure stack version to deploy | `<latest released version>`
|
||||
| `clusterStacks.rook.deploy` | Deploy Rook stack | `false`
|
||||
| `clusterStacks.rook.version` | Rook stack version to deploy | `<latest released version>`
|
||||
|
||||
### Command Line
|
||||
|
||||
You can pass the settings with helm command line parameters.
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
|
||||
For example, the following command will install Crossplane with an image pull policy of `IfNotPresent`.
|
||||
|
||||
```console
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane --set image.pullPolicy=IfNotPresent
|
||||
```
|
||||
|
||||
### Settings File
|
||||
|
||||
Alternatively, a yaml file that specifies the values for the above parameters (`values.yaml`) can be provided while installing the chart.
|
||||
|
||||
```console
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane -f values.yaml
|
||||
```
|
||||
|
||||
Here are the sample settings to get you started.
|
||||
|
||||
```yaml
|
||||
replicas: 1
|
||||
|
||||
deploymentStrategy: RollingUpdate
|
||||
|
||||
image:
|
||||
repository: crossplane/crossplane
|
||||
tag: master
|
||||
pullPolicy: Always
|
||||
|
||||
imagePullSecrets:
|
||||
- dockerhub
|
||||
```
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
title: Learn More
|
||||
toc: true
|
||||
weight: 810
|
||||
---
|
||||
# Learn More
|
||||
|
||||
If you have any questions, please drop us a note on [Crossplane Slack][join-crossplane-slack] or [contact us][contact-us]!
|
||||
|
||||
***Learn more about using Crossplane***
|
||||
- [GitLab deploys into multiple clouds from kubectl using Crossplane](https://about.gitlab.com/2019/05/20/gitlab-first-deployed-kubernetes-api-to-multiple-clouds/)
|
||||
- [CNCF Talks & Community Presentations](https://www.youtube.com/playlist?list=PL510POnNVaaZJj9OG6PbgsZvgYbhwJRyE)
|
||||
- [Software Engineering Daily - Intro Podcast](https://softwareengineeringdaily.com/2019/01/02/crossplane-multicloud-control-plane-with-bassam-tabbara/)
|
||||
- [Crossplane Architecture](https://docs.google.com/document/d/1whncqdUeU2cATGEJhHvzXWC9xdK29Er45NJeoemxebo/edit?usp=sharing)
|
||||
- [Latest Design Docs](https://github.com/crossplaneio/crossplane/tree/master/design)
|
||||
- [Roadmap](https://github.com/crossplaneio/crossplane/blob/master/ROADMAP.md)
|
||||
|
||||
***Writing Kubernetes controllers to extend Crossplane***
|
||||
- [Keep the Space Shuttle Flying: Writing Robust Operators](https://www.youtube.com/watch?v=uf97lOApOv8)
|
||||
- [Best practices for building Kubernetes Operators](https://cloud.google.com/blog/products/containers-kubernetes/best-practices-for-building-kubernetes-operators-and-stateful-apps)
|
||||
- [Programming Kubernetes Book](https://www.oreilly.com/library/view/programming-kubernetes/9781492047094/)
|
||||
- [Crossplane Reconciler Patterns](https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-reconciler-patterns.md)
|
||||
- [Contributor Guide](https://github.com/crossplaneio/crossplane/blob/master/CONTRIBUTING.md)
|
||||
|
||||
***Join the growing Crossplane community and get involved!***
|
||||
- Join our [Community Slack](https://slack.crossplane.io/)!
|
||||
- Submit an issue on [GitHub](https://github.com/crossplaneio/crossplane)
|
||||
- Attend our bi-weekly [Community Meeting](https://github.com/crossplaneio/crossplane#community-meeting)
|
||||
- Join our bi-weekly live stream: [The Binding Status](https://github.com/crossplaneio/tbs)
|
||||
- Subscribe to our [YouTube Channel](https://www.youtube.com/channel/UC19FgzMBMqBro361HbE46Fw)
|
||||
- Drop us a note on Twitter: [@crossplane_io](https://twitter.com/crossplane_io)
|
||||
- Email us: [info@crossplane.io](mailto:info@crossplane.io)
|
||||
|
||||
<!-- Named links -->
|
||||
[join-crossplane-slack]: https://slack.crossplane.io
|
||||
[contact-us]: https://github.com/crossplaneio/crossplane#contact
|
||||
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 292 KiB |
|
After Width: | Height: | Size: 375 KiB |
|
|
@ -0,0 +1,310 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 1312.19 279.51" style="enable-background:new 0 0 1312.19 279.51;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{clip-path:url(#SVGID_2_);fill:#F7D186;}
|
||||
.st1{clip-path:url(#SVGID_4_);fill:#FF9234;}
|
||||
.st2{clip-path:url(#SVGID_6_);enable-background:new ;}
|
||||
.st3{clip-path:url(#SVGID_8_);}
|
||||
.st4{clip-path:url(#SVGID_10_);}
|
||||
.st5{clip-path:url(#SVGID_12_);fill:#FFCD3C;}
|
||||
.st6{clip-path:url(#SVGID_14_);enable-background:new ;}
|
||||
.st7{clip-path:url(#SVGID_16_);}
|
||||
.st8{clip-path:url(#SVGID_18_);}
|
||||
.st9{clip-path:url(#SVGID_20_);fill:#F3807B;}
|
||||
.st10{clip-path:url(#SVGID_22_);enable-background:new ;}
|
||||
.st11{clip-path:url(#SVGID_24_);}
|
||||
.st12{clip-path:url(#SVGID_26_);}
|
||||
.st13{clip-path:url(#SVGID_28_);fill:#35D0BA;}
|
||||
.st14{clip-path:url(#SVGID_30_);fill:#D8AE64;}
|
||||
.st15{clip-path:url(#SVGID_32_);fill:#004680;}
|
||||
.st16{clip-path:url(#SVGID_34_);fill:#004680;}
|
||||
.st17{clip-path:url(#SVGID_36_);fill:#004680;}
|
||||
.st18{clip-path:url(#SVGID_38_);fill:#004680;}
|
||||
.st19{clip-path:url(#SVGID_40_);fill:#004680;}
|
||||
.st20{clip-path:url(#SVGID_42_);fill:#004680;}
|
||||
.st21{clip-path:url(#SVGID_44_);fill:#004680;}
|
||||
.st22{clip-path:url(#SVGID_46_);fill:#004680;}
|
||||
.st23{clip-path:url(#SVGID_48_);fill:#004680;}
|
||||
.st24{clip-path:url(#SVGID_50_);fill:#004680;}
|
||||
</style>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_1_" d="M115.47,94.13c-8.4,0-15.22,6.81-15.22,15.22v143.2c0,8.4,6.81,15.22,15.22,15.22s15.22-6.81,15.22-15.22
|
||||
v-143.2C130.68,100.94,123.87,94.13,115.47,94.13"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="89.53" y="83.41" class="st0" width="51.87" height="195.07"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_3_" d="M176.53,75.36c0.05-0.96,0.07-1.93,0.07-2.9c0-0.95-0.02-1.89-0.07-2.82
|
||||
c-1.47-32.22-28.06-57.88-60.64-57.88S56.72,37.42,55.25,69.64c-0.04,0.94-0.07,1.88-0.07,2.82c0,1.04,0.03,2.07,0.08,3.09
|
||||
c-0.02,0.5-0.08,1-0.08,1.51v99.64c0,19.06,15.59,34.65,34.65,34.65h52.14c19.06,0,34.65-15.59,34.65-34.65V77.07
|
||||
C176.62,76.49,176.56,75.93,176.53,75.36"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="44.47" y="1.04" class="st1" width="142.87" height="221.04"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_5_" d="M55.55,69.64c-0.04,0.93-0.06,1.87-0.06,2.82c0,1.04,0.02,2.07,0.08,3.09c-0.02,0.51-0.08,1-0.08,1.52
|
||||
v99.64c0,19.05,15.59,34.64,34.64,34.64h52.14c19.06,0,34.65-15.59,34.65-34.64V77.07c0-0.58-0.06-1.14-0.09-1.71
|
||||
c0.05-0.96,0.07-1.93,0.07-2.89c0-0.95-0.02-1.89-0.06-2.82c-1.47-32.22-28.06-57.88-60.64-57.88
|
||||
C83.61,11.76,57.02,37.42,55.55,69.64z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_6_">
|
||||
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st2">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_7_" x="16.08" y="24.9" width="197.24" height="197.24"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_8_">
|
||||
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st3">
|
||||
<defs>
|
||||
|
||||
<rect id="SVGID_9_" x="9.23" y="92.99" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -54.1638 118.2926)" width="212.95" height="63.07"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_10_">
|
||||
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st4">
|
||||
<defs>
|
||||
<rect id="SVGID_11_" x="54.67" y="9.89" width="124.35" height="201.53"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_12_">
|
||||
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="7.4" y="16.22" class="st5" width="216.62" height="216.62"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_13_" d="M55.55,69.64c-0.04,0.93-0.06,1.87-0.06,2.82c0,1.04,0.02,2.07,0.08,3.09c-0.02,0.51-0.08,1-0.08,1.52
|
||||
v99.64c0,19.05,15.59,34.64,34.64,34.64h52.14c19.06,0,34.65-15.59,34.65-34.64V77.07c0-0.58-0.06-1.14-0.09-1.71
|
||||
c0.05-0.96,0.07-1.93,0.07-2.89c0-0.95-0.02-1.89-0.06-2.82c-1.47-32.22-28.06-57.88-60.64-57.88
|
||||
C83.61,11.76,57.02,37.42,55.55,69.64z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_14_">
|
||||
<use xlink:href="#SVGID_13_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st6">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_15_" x="-37.52" y="-28.7" width="207.96" height="207.96"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_16_">
|
||||
<use xlink:href="#SVGID_15_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st7">
|
||||
<defs>
|
||||
|
||||
<rect id="SVGID_17_" x="-40.95" y="35.1" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -33.3744 68.1028)" width="212.95" height="78.48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_18_">
|
||||
<use xlink:href="#SVGID_17_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st8">
|
||||
<defs>
|
||||
<rect id="SVGID_19_" x="54.67" y="9.89" width="124.35" height="201.53"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_20_">
|
||||
<use xlink:href="#SVGID_19_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="-48.24" y="-39.42" class="st9" width="227.51" height="227.51"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_21_" d="M55.55,69.64c-0.04,0.93-0.06,1.87-0.06,2.82c0,1.04,0.02,2.07,0.08,3.09c-0.02,0.51-0.08,1-0.08,1.52
|
||||
v99.64c0,19.05,15.59,34.64,34.64,34.64h52.14c19.06,0,34.65-15.59,34.65-34.64V77.07c0-0.58-0.06-1.14-0.09-1.71
|
||||
c0.05-0.96,0.07-1.93,0.07-2.89c0-0.95-0.02-1.89-0.06-2.82c-1.47-32.22-28.06-57.88-60.64-57.88
|
||||
C83.61,11.76,57.02,37.42,55.55,69.64z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_22_">
|
||||
<use xlink:href="#SVGID_21_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st10">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_23_" x="61.1" y="69.92" width="197.24" height="197.24"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_24_">
|
||||
<use xlink:href="#SVGID_23_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st11">
|
||||
<defs>
|
||||
|
||||
<rect id="SVGID_25_" x="53.98" y="137.74" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -72.6974 163.0359)" width="212.95" height="63.07"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_26_">
|
||||
<use xlink:href="#SVGID_25_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st12">
|
||||
<defs>
|
||||
<rect id="SVGID_27_" x="54.67" y="9.89" width="124.35" height="201.53"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_28_">
|
||||
<use xlink:href="#SVGID_27_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="52.14" y="60.96" class="st13" width="216.62" height="216.62"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_29_" d="M104.38,211.52l26.4,26.39V211.3C130.78,211.3,103.72,211.52,104.38,211.52"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_30_">
|
||||
<use xlink:href="#SVGID_29_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="93.65" y="200.58" class="st14" width="47.85" height="48.06"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_31_" d="M307.52,195.1c-38.8,0-70.21-31.6-70.21-70.41c0-38.6,31.4-70.21,70.21-70.21c20.2,0,39.6,8.8,52.81,24
|
||||
c4.2,5,3.8,12.2-1,16.4c-4.8,4.4-12.2,3.8-16.4-1c-9-10.2-21.8-16-35.4-16c-25.8,0-47.01,21-47.01,46.8
|
||||
c0,26,21.2,47.01,47.01,47.01c13.6,0,26.4-5.8,35.4-16c4.2-4.8,11.6-5.4,16.4-1c4.8,4.2,5.2,11.4,1,16.4
|
||||
C347.12,186.3,327.72,195.1,307.52,195.1"/>
|
||||
</defs>
|
||||
<use xlink:href="#SVGID_31_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
|
||||
<clipPath id="SVGID_32_">
|
||||
<use xlink:href="#SVGID_31_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="226.59" y="43.77" class="st15" width="147.35" height="162.05"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_33_" d="M438.53,98.89c0,6.4-5.2,11.6-11.8,11.6c-12.8,0-22.4,10.4-22.4,24.6v48.41c0,6.4-5.2,11.6-11.6,11.6
|
||||
c-6.4,0-11.6-5.2-11.6-11.6V96.49c0-6.4,5.2-11.6,11.6-11.6c5.4,0,9.8,3.6,11.2,8.6c6.8-4,14.6-6.2,22.8-6.2
|
||||
C433.33,87.29,438.53,92.49,438.53,98.89"/>
|
||||
</defs>
|
||||
<use xlink:href="#SVGID_33_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
|
||||
<clipPath id="SVGID_34_">
|
||||
<use xlink:href="#SVGID_33_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="370.4" y="74.17" class="st16" width="78.84" height="131.65"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_35_" d="M497.53,195.7c-30.4,0-55-24.8-55-55c0-30.4,24.6-55.21,55-55.21c30.4,0,55.21,24.8,55.21,55.21
|
||||
C552.74,170.9,527.94,195.7,497.53,195.7 M497.53,108.69c-17.6,0-31.8,14.4-31.8,32c0,17.4,14.2,31.8,31.8,31.8
|
||||
c17.6,0,31.8-14.4,31.8-31.8C529.34,123.09,515.14,108.69,497.53,108.69"/>
|
||||
</defs>
|
||||
<use xlink:href="#SVGID_35_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
|
||||
<clipPath id="SVGID_36_">
|
||||
<use xlink:href="#SVGID_35_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="431.81" y="74.77" class="st17" width="131.65" height="131.65"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_37_" d="M571.94,174.9c-2.8-5.8-0.2-12.8,5.6-15.4c6-2.8,12.8-0.2,15.4,5.6c1.6,3.2,6,6.8,13.8,6.8
|
||||
c10.8,0,14.6-6.6,14.6-11c0-6-1.6-7.8-17.2-11.8c-7-1.6-14.2-3.4-20.4-7.4c-8.4-5.6-13-14-13-24.4c0-8.2,3.6-16.4,9.8-22.4
|
||||
c6.6-6.4,15.8-10,26.2-10c14.8,0,27.41,7.2,32.8,19c2.8,5.8,0.2,12.6-5.6,15.4c-5.8,2.8-12.8,0.2-15.4-5.6
|
||||
c-1.2-2.6-5-5.6-11.8-5.6c-9.2,0-12.6,5.8-12.6,9.2c0,4,0.8,5.6,15.6,9.4c13,3.2,34.8,8.6,34.8,34.2c0,8.6-3.6,17.2-10,23.6
|
||||
c-5,4.8-13.8,10.6-27.8,10.6C590.94,195.1,577.54,187.3,571.94,174.9"/>
|
||||
</defs>
|
||||
<use xlink:href="#SVGID_37_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
|
||||
<clipPath id="SVGID_38_">
|
||||
<use xlink:href="#SVGID_37_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="560.02" y="74.17" class="st18" width="95.25" height="131.65"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_39_" d="M663.75,174.9c-2.8-5.8-0.2-12.8,5.6-15.4c6-2.8,12.8-0.2,15.4,5.6c1.6,3.2,6,6.8,13.8,6.8
|
||||
c10.8,0,14.6-6.6,14.6-11c0-6-1.6-7.8-17.2-11.8c-7-1.6-14.2-3.4-20.4-7.4c-8.4-5.6-13-14-13-24.4c0-8.2,3.6-16.4,9.8-22.4
|
||||
c6.6-6.4,15.8-10,26.2-10c14.81,0,27.41,7.2,32.8,19c2.8,5.8,0.2,12.6-5.6,15.4c-5.8,2.8-12.8,0.2-15.4-5.6
|
||||
c-1.2-2.6-5-5.6-11.8-5.6c-9.2,0-12.6,5.8-12.6,9.2c0,4,0.8,5.6,15.6,9.4c13,3.2,34.8,8.6,34.8,34.2c0,8.6-3.6,17.2-10,23.6
|
||||
c-5,4.8-13.8,10.6-27.8,10.6C682.75,195.1,669.35,187.3,663.75,174.9"/>
|
||||
</defs>
|
||||
<use xlink:href="#SVGID_39_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
|
||||
<clipPath id="SVGID_40_">
|
||||
<use xlink:href="#SVGID_39_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="651.83" y="74.17" class="st19" width="95.25" height="131.65"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_41_" d="M859.17,139.9c0,14.8-5,28.4-14.4,38.61c-9.8,10.6-23.2,16.6-38,16.6c-10.6,0-20.6-3.2-29-8.8v47.2
|
||||
c0,6.4-5.4,11.6-11.8,11.6c-6.4,0-11.6-5.2-11.6-11.6V96.49c0-6.4,5.2-11.6,11.6-11.6c5.4,0,10.2,3.8,11.4,9
|
||||
c8.6-5.8,18.8-9,29.4-9c14.8,0,28.2,5.8,38,16.4C854.17,111.49,859.17,125.29,859.17,139.9 M835.96,139.9
|
||||
c0-18.4-12.2-31.8-29.2-31.8c-16.8,0-29,13.4-29,31.8c0,18.4,12.2,31.8,29,31.8C823.77,171.7,835.96,158.3,835.96,139.9"/>
|
||||
</defs>
|
||||
<use xlink:href="#SVGID_41_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
|
||||
<clipPath id="SVGID_42_">
|
||||
<use xlink:href="#SVGID_41_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="743.64" y="74.17" class="st20" width="126.25" height="181.65"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_43_" d="M889.77,195.1c-6.4,0-11.6-5.2-11.6-11.6V66.29c0-6.4,5.2-11.6,11.6-11.6c6.4,0,11.8,5.2,11.8,11.6V183.5
|
||||
C901.57,189.9,896.17,195.1,889.77,195.1"/>
|
||||
</defs>
|
||||
<use xlink:href="#SVGID_43_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
|
||||
<clipPath id="SVGID_44_">
|
||||
<use xlink:href="#SVGID_43_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="867.45" y="43.97" class="st21" width="44.84" height="161.85"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_45_" d="M1025.38,96.49v87.01c0,6.4-5.2,11.6-11.6,11.6c-5.6,0-10.2-3.8-11.4-9c-8.4,5.8-18.6,9-29.4,9
|
||||
c-14.8,0-28.2-5.8-38.01-16.6c-9.2-10-14.4-23.8-14.4-38.4c0-14.8,5.2-28.6,14.4-38.61c9.8-10.8,23.21-16.6,38.01-16.6
|
||||
c10.8,0,21,3.2,29.4,9c1.2-5.2,5.8-9,11.4-9C1020.18,84.89,1025.38,90.09,1025.38,96.49 M1002.18,140.1c0-18.6-12.4-32-29.2-32
|
||||
c-17,0-29.2,13.4-29.2,32c0,18.4,12.2,31.8,29.2,31.8C989.78,171.9,1002.18,158.5,1002.18,140.1"/>
|
||||
</defs>
|
||||
<use xlink:href="#SVGID_45_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
|
||||
<clipPath id="SVGID_46_">
|
||||
<use xlink:href="#SVGID_45_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="909.85" y="74.17" class="st22" width="126.25" height="131.65"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_47_" d="M1136.79,132.7v50.8c0,6.4-5.2,11.6-11.8,11.6c-6.4,0-11.6-5.2-11.6-11.6v-50.8
|
||||
c0-11.8-6.6-24.6-21.4-24.6c-13.4,0-23.4,10.6-23.4,24.6v0.8v0.8v49.2c0,6.4-5.2,11.6-11.6,11.6c-6.4,0-11.6-5.2-11.6-11.6v-49.4
|
||||
v-1.4V96.49c0-6.4,5.2-11.6,11.6-11.6c4.8,0,8.8,2.8,10.6,6.8c7-4.4,15.4-6.8,24.4-6.8
|
||||
C1117.39,84.89,1136.79,105.49,1136.79,132.7"/>
|
||||
</defs>
|
||||
<use xlink:href="#SVGID_47_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
|
||||
<clipPath id="SVGID_48_">
|
||||
<use xlink:href="#SVGID_47_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="1034.66" y="74.17" class="st23" width="112.85" height="131.65"/>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_49_" d="M1207.2,196.1c-14.8,0-28.2-6.4-38.01-17.2c-9.4-10-14.4-23.81-14.4-38.4c0-31.61,22.2-55.21,51.4-55.21
|
||||
c29.41,0,50.8,23.2,50.8,55.21c0,6.4-5.2,11.6-11.8,11.6h-65.41c4,12.2,14.4,20.8,27.4,20.8c7.83,0,14.48-1.65,19.23-6.21
|
||||
c1.44-1.38,2.7-3.03,3.77-4.99c3.4-5.6,10.6-7.2,16-4c5.6,3.4,7.2,10.6,4,16C1241.2,189.9,1225.6,196.1,1207.2,196.1
|
||||
M1179.59,128.7h52.61c-4-13.8-15-20.2-26-20.2C1195.4,108.49,1183.79,114.89,1179.59,128.7"/>
|
||||
</defs>
|
||||
<use xlink:href="#SVGID_49_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
|
||||
<clipPath id="SVGID_50_">
|
||||
<use xlink:href="#SVGID_49_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<rect x="1144.07" y="74.57" class="st24" width="123.65" height="132.25"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
|
|
@ -0,0 +1,133 @@
|
|||
# Deploying PostgreSQL Databases
|
||||
|
||||
This user guide will walk you through how to deploy a PostgreSQL database across many different environments with a focus on portability and reusability.
|
||||
The database will be dynamically provisioned in the cloud provider of your choice at the request of the application developer via a `ResourceClaim` and created with the environment specific information that the administrator providers in a `ResourceClass`.
|
||||
The commands in this guide assume you are running from a terminal/shell at the root of the [Crossplane repo](https://github.com/crossplaneio/crossplane/).
|
||||
|
||||
## Install Crossplane
|
||||
|
||||
The first step will be to install Crossplane and any desired cloud provider stacks by following the steps in the [Crossplane install guide](install-crossplane.md).
|
||||
|
||||
## Add Cloud Provider
|
||||
|
||||
Next you'll need to add your cloud provider credentials to Crossplane using [these provider specific steps](cloud-providers.md).
|
||||
|
||||
After those steps are completed, you should have the cloud provider credentials saved in a file on your local filesystem, for which the path will be stored in the environment variable `PROVIDER_KEY_FILE` in the next section.
|
||||
|
||||
## Set Environment Variables
|
||||
|
||||
After your cloud provider credentials have been created/added, let's set the following environment variables that have different values for each provider,
|
||||
but will allow the rest of the steps to be consistent across all of them.
|
||||
You only need to set the variables for your chosen cloud provider, you can ignore the other ones.
|
||||
|
||||
### Google Cloud Platform (GCP)
|
||||
|
||||
```console
|
||||
export PROVIDER=GCP
|
||||
export provider=gcp
|
||||
export PROVIDER_KEY_FILE=crossplane-${provider}-provider-key.json
|
||||
export DATABASE_TYPE=cloudsqlinstances
|
||||
export versionfield=databaseVersion
|
||||
```
|
||||
|
||||
### Microsoft Azure
|
||||
|
||||
```console
|
||||
export PROVIDER=AZURE
|
||||
export provider=azure
|
||||
export PROVIDER_KEY_FILE=crossplane-${provider}-provider-key.json
|
||||
export DATABASE_TYPE=postgresqlservers
|
||||
export versionfield=version
|
||||
```
|
||||
|
||||
### Amazon Web Services (AWS)
|
||||
|
||||
```console
|
||||
export PROVIDER=AWS
|
||||
export provider=aws
|
||||
export PROVIDER_KEY_FILE=~/.aws/credentials
|
||||
export DATABASE_TYPE=rdsinstances
|
||||
export versionfield=engineVersion
|
||||
```
|
||||
|
||||
## Create a PostgreSQL Resource Class
|
||||
|
||||
Let's create a `ResourceClass` that acts as a "blueprint" that contains the environment specific details of how a general request from the application to create a PostgreSQL database should be fulfilled.
|
||||
This is a task that the administrator should complete, since they will have the knowledge and privileges for the specific environment details.
|
||||
|
||||
```console
|
||||
sed "s/BASE64ENCODED_${PROVIDER}_PROVIDER_CREDS/`base64 ${PROVIDER_KEY_FILE} | tr -d '\n'`/g;" cluster/examples/database/${provider}/postgresql/provider.yaml | kubectl create -f -
|
||||
kubectl create -f cluster/examples/database/${provider}/postgresql/resource-class.yaml
|
||||
```
|
||||
|
||||
## Create a PostgreSQL Resource Claim
|
||||
|
||||
After the administrator has created the PostgreSQL `ResourceClass` "blueprint", the application developer is now free to create a PostgreSQL `ResourceClaim`.
|
||||
This is a general request for a PostgreSQL database to be used by their application and it requires no environment specific information, allowing our applications to express their need for a database in a very portable way.
|
||||
|
||||
```console
|
||||
kubectl create namespace demo
|
||||
kubectl -n demo create -f cluster/examples/database/${provider}/postgresql/resource-claim.yaml
|
||||
```
|
||||
|
||||
## Check Status of PostgreSQL Provisioning
|
||||
|
||||
We can follow along with the status of the provisioning of the database resource with the below commands.
|
||||
Note that the first command gives us the status of the `ResourceClaim` (general request for a database by the application),
|
||||
and the second command gives the status of the environment specific database resource that Crossplane is provisioning using the `ResourceClass` "blueprint".
|
||||
|
||||
```console
|
||||
kubectl -n demo get postgresqlinstance -o custom-columns=NAME:.metadata.name,STATUS:.status.bindingPhase,CLASS:.spec.classRef.name,VERSION:.spec.engineVersion,AGE:.metadata.creationTimestamp
|
||||
kubectl -n crossplane-system get ${DATABASE_TYPE} -o custom-columns=NAME:.metadata.name,STATUS:.status.bindingPhase,STATE:.status.state,CLASS:.spec.classRef.name,VERSION:.spec.${versionfield},AGE:.metadata.creationTimestamp
|
||||
```
|
||||
|
||||
## Access the PostgreSQL Database
|
||||
|
||||
Once the dynamic provisioning process has finished creating and preparing the database, the status output will look similar to the following:
|
||||
|
||||
```console
|
||||
> kubectl -n demo get postgresqlinstance -o custom-columns=NAME:.metadata.name,STATUS:.status.bindingPhase,CLASS:.spec.classRef.name,VERSION:.spec.engineVersion,AGE:.metadata.creationTimestamp
|
||||
NAME STATUS CLASS VERSION AGE
|
||||
cloud-postgresql-claim Bound cloud-postgresql 9.6 2018-12-23T04:00:11Z
|
||||
|
||||
> kubectl -n crossplane-system get ${DATABASE_TYPE} -o custom-columns=NAME:.metadata.name,STATUS:.status.bindingPhase,STATE:.status.state,CLASS:.spec.classRef.name,VERSION:.spec.${versionfield},AGE:.metadata.creationTimestamp
|
||||
NAME STATUS STATE CLASS VERSION AGE
|
||||
postgresql-3ef70bf9-0667-11e9-99e1-080027cf2340 Bound Ready cloud-postgresql 9.6 2018-12-23T04:00:12Z
|
||||
```
|
||||
|
||||
Note that both the general `postgresqlinstance` `ResourceClaim` and the cloud provider specific PostgreSQL database have the `Bound` status, meaning the dynamic provisioning is done and the resource is ready for consumption.
|
||||
|
||||
The connection information will be stored in a secret specified via the `writeConnectionSecretTo` field.
|
||||
Since the secret is base64 encoded, we'll need to decode its fields to view them in plain-text.
|
||||
To view all the connection information in plain-text, run the following command:
|
||||
|
||||
```console
|
||||
for r in endpoint username password; do echo -n "${r}: "; kubectl -n demo get secret cloud-postgresql-claim -o jsonpath='{.data.'"${r}"'}' | base64 -D; echo; done
|
||||
```
|
||||
|
||||
A workload or pod manifest will usually reference this connection information through injecting the secret contents into environment variables in the manifest.
|
||||
You can see this in action as an example in the [Azure Workload example](https://github.com/crossplaneio/crossplane/blob/release-0.1/cluster/examples/workloads/wordpress-azure/workload.yaml#L47-L62).
|
||||
|
||||
More information about consuming secrets from manifests can be found in the [Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/secret/#use-cases).
|
||||
|
||||
## Clean-up
|
||||
|
||||
When you are finished with the PostgreSQL instance from this guide, you can clean up all the resources by running the below commands.
|
||||
|
||||
First, delete the resource claim, which will start the operation of deleting the PostgreSQL database from your cloud provider.
|
||||
|
||||
```console
|
||||
kubectl -n demo delete -f cluster/examples/database/${provider}/postgresql/resource-claim.yaml
|
||||
```
|
||||
|
||||
Next. delete the `ResourceClass` "blueprint":
|
||||
|
||||
```console
|
||||
kubectl delete -f cluster/examples/database/${provider}/postgresql/resource-class.yaml
|
||||
```
|
||||
|
||||
Finally, delete the cloud provider credentials from your local environment:
|
||||
|
||||
```console
|
||||
kubectl delete -f cluster/examples/database/${provider}/postgresql/provider.yaml
|
||||
```
|
||||
|
|
@ -0,0 +1,382 @@
|
|||
---
|
||||
title: Getting Started
|
||||
toc: true
|
||||
weight: 210
|
||||
---
|
||||
# Getting Started
|
||||
|
||||
This guide will demonstrate using Crossplane to deploy a portable MySQL database
|
||||
on the Google Cloud Platform (GCP). It serves as an initial introduction to
|
||||
Crossplane, but only displays a small set of its features.
|
||||
|
||||
In this guide we will:
|
||||
|
||||
1. [Install Crossplane](#install-crossplane)
|
||||
1. [Add your GCP project to Crossplane](#add-your-gcp-project-to-crossplane)
|
||||
1. [Provision a MySQL instance using CloudSQL](#provision-a-mysql-instance)
|
||||
1. [Define a class of CloudSQL instance for dynamic provisioning](#define-a-class-of-cloudsql-instance)
|
||||
|
||||
## Install Crossplane
|
||||
|
||||
We'll start by installing Crossplane using [Helm]. You'll need a working
|
||||
Kubernetes cluster ([minikube] or [kind] will do just fine). Crossplane is
|
||||
currently in alpha, so we'll use the `alpha` channel:
|
||||
|
||||
```bash
|
||||
# Crossplane lives in the crossplane-system namespace by convention.
|
||||
kubectl create namespace crossplane-system
|
||||
|
||||
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
|
||||
```
|
||||
|
||||
Once Crossplane is installed we'll need to install the a [stack] for our cloud
|
||||
provider - in this case GCP. Installing the GCP stack teaches Crossplane how to
|
||||
provision and maanage things in GCP. You install it by creating a
|
||||
`ClusterStackInstall`:
|
||||
|
||||
```yaml
|
||||
apiVersion: stacks.crossplane.io/v1alpha1
|
||||
kind: ClusterStackInstall
|
||||
metadata:
|
||||
name: stack-gcp
|
||||
namespace: crossplane-system
|
||||
spec:
|
||||
package: "crossplane/stack-gcp:master"
|
||||
```
|
||||
|
||||
Save the above as `stack.yaml`, and apply it by running:
|
||||
|
||||
```bash
|
||||
kubectl apply -f stack.yaml
|
||||
```
|
||||
|
||||
We've now installed Crossplane with GCP support! Take a look at the [Crossplane
|
||||
installation guide] for more installation options, and to learn how to install
|
||||
support for other cloud providers such as Amazon Web Services and Microsoft
|
||||
Azure.
|
||||
|
||||
## Add Your GCP Project to Crossplane
|
||||
|
||||
We've taught Crossplane how to work with GCP - now we must tell it how to
|
||||
connect to your GCP project. We'll do this by creating a Crossplane `Provider`
|
||||
that specifies the project name and some GCP service account credentials to use:
|
||||
|
||||
```yaml
|
||||
apiVersion: gcp.crossplane.io/v1alpha3
|
||||
kind: Provider
|
||||
metadata:
|
||||
name: example-provider
|
||||
spec:
|
||||
# Make sure to update your project's name here.
|
||||
projectID: my-cool-gcp-project
|
||||
credentialsSecretRef:
|
||||
name: example-gcp-credentials
|
||||
namespace: crossplane-system
|
||||
key: credentials.json
|
||||
```
|
||||
|
||||
Save the above `Provider` as `provider.yaml`, save your Google Application
|
||||
Credentials as `credentials.json`, then run:
|
||||
|
||||
```bash
|
||||
kubectl -n crossplane-system create secret example-gcp-credentials --from-file=credentials.json
|
||||
kubectl apply -f provider.yaml
|
||||
```
|
||||
|
||||
Crossplane can now manage your GCP project! Your service account will need the
|
||||
CloudSQL Admin role for this guide. Check out GCP's [Getting Started With
|
||||
Authentication] guide if you need help creating a service account and
|
||||
downloading its `credentials.json` file, and Crossplane's [GCP provider
|
||||
documentation] for detailed instructions on setting up your project and service
|
||||
account permissions.
|
||||
|
||||
## Provision a MySQL Instance
|
||||
|
||||
GCP provides MySQL databases using [CloudSQL] instances. Crossplane uses a
|
||||
resource and claim pattern to provision and manage cloud resources like CloudSQL
|
||||
instances - if you've ever used [persistent volumes in Kubernetes] you've seen
|
||||
this pattern before. The simplest way to start using a new MySQL instance on GCP
|
||||
is to provision a `CloudSQLInstance`, then claim it via a `MySQLInstance`. We
|
||||
call this process _static provisioning_.
|
||||
|
||||
|
||||
```yaml
|
||||
apiVersion: database.gcp.crossplane.io/v1beta1
|
||||
kind: CloudSQLInstance
|
||||
metadata:
|
||||
name: example-cloudsql-instance
|
||||
spec:
|
||||
providerRef:
|
||||
name: example-provider
|
||||
writeConnectionSecretToRef:
|
||||
name: example-cloudsql-connection-details
|
||||
namespace: crossplane-system
|
||||
forProvider:
|
||||
databaseVersion: MYSQL_5_6
|
||||
region: us-west2
|
||||
settings:
|
||||
tier: db-n1-standard-1
|
||||
dataDiskType: PD_SSD
|
||||
dataDiskSizeGb: 10
|
||||
ipConfiguration:
|
||||
ipv4Enabled: true
|
||||
```
|
||||
|
||||
First we create a CloudSQL instance. Save the above as `cloudsql.yaml`, then
|
||||
apply it:
|
||||
|
||||
```bash
|
||||
kubectl apply -f cloudsql.yaml
|
||||
```
|
||||
|
||||
Crossplane is now creating the `CloudSQLInstance`! Before we can use it, we need
|
||||
to claim it.
|
||||
|
||||
```yaml
|
||||
apiVersion: database.crossplane.io/v1alpha1
|
||||
kind: MySQLInstance
|
||||
metadata:
|
||||
name: example-mysql-claim
|
||||
spec:
|
||||
resourceRef:
|
||||
apiVersion: database.gcp.crossplane.io/v1beta1
|
||||
kind: CloudSQLInstance
|
||||
name: example-cloudsql-instance
|
||||
writeConnectionSecretToRef:
|
||||
name: example-mysql-connection-details
|
||||
```
|
||||
|
||||
Save the above as `mysql.yaml`, and once again apply it:
|
||||
|
||||
```bash
|
||||
kubectl --namespace default apply -f mysql.yaml
|
||||
```
|
||||
|
||||
In Crossplane cloud provider specific resources like the `CloudSQLInstance` we
|
||||
created above are called _managed resources_. They're considered infrastructure,
|
||||
like a Kubernetes `Node` or `PersistentVolume`. Managed resources exist at the
|
||||
cluster scope (they're not namespaced) and let you specify nitty-gritty provider
|
||||
specific configuration details. Managed resources that have reached `v1beta1`
|
||||
are a high fidelity representation of their underlying cloud provider resource,
|
||||
and can be updated to change their configuration after provisioning. We _claim_
|
||||
these resources by submitting a _resource claim_ like the `MySQLInstance` above.
|
||||
Resource claims are namespaced, and indicate that the managed resource they
|
||||
claim is in use by _binding_ to it. You can also use resource claims to
|
||||
_dynamically provision_ managed resources on-demand - we'll discuss that in the
|
||||
next section of this guide.
|
||||
|
||||
Soon your new `MySQLInstance` should be online. You can use `kubectl` to
|
||||
inspect its status. If you see `Bound` under the `STATUS` column, it's ready to
|
||||
use!
|
||||
|
||||
```bash
|
||||
$ kubectl --namespace default get mysqlinstance example-mysql-claim
|
||||
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
|
||||
example-mysql-claim Bound CloudSQLInstance example-cloudsql-instance 4m
|
||||
```
|
||||
|
||||
You'll find all the details you need to connect to your new MySQL instance saved
|
||||
in the Kubernetes `Secret` you specified via `writeConnectionSecretToRef`, ready
|
||||
to [use with your Kubernetes pods].
|
||||
|
||||
```bash
|
||||
$ kubectl --namespace default describe secret example-mysql-connection-details
|
||||
Name: example-mysql-connection-details
|
||||
Namespace: default
|
||||
Type: Opaque
|
||||
|
||||
Data
|
||||
====
|
||||
serverCACertificateCommonName: 98 bytes
|
||||
serverCACertificateInstance: 25 bytes
|
||||
username: 4 bytes
|
||||
password: 27 bytes
|
||||
publicIP: 13 bytes
|
||||
serverCACertificateCertSerialNumber: 1 bytes
|
||||
serverCACertificateCreateTime: 24 bytes
|
||||
serverCACertificateExpirationTime: 24 bytes
|
||||
serverCACertificateSha1Fingerprint: 40 bytes
|
||||
endpoint: 13 bytes
|
||||
serverCACertificateCert: 1272 bytes
|
||||
```
|
||||
|
||||
That's all there is to static provisioning with Crossplane! We've created a
|
||||
`CloudSQLInstance` as cluster scoped infrastructure, then claimed it as a
|
||||
`MySQLInstance`. You can use `kubectl describe` to view the detailed
|
||||
configuration and status of your `CloudSqlInstance`.
|
||||
|
||||
```bash
|
||||
$ kubectl describe example-cloudsql-instance
|
||||
Name: example-cloudsql-instance
|
||||
Annotations: crossplane.io/external-name: example-cloudsql-instance
|
||||
API Version: database.gcp.crossplane.io/v1beta1
|
||||
Kind: CloudSQLInstance
|
||||
Spec:
|
||||
For Provider:
|
||||
Database Version: MYSQL_5_6
|
||||
Gce Zone: us-west2-b
|
||||
Instance Type: CLOUD_SQL_INSTANCE
|
||||
Region: us-west2
|
||||
Settings:
|
||||
Activation Policy: ALWAYS
|
||||
Backup Configuration:
|
||||
Start Time: 17:00
|
||||
Data Disk Size Gb: 10
|
||||
Data Disk Type: PD_SSD
|
||||
Ip Configuration:
|
||||
ipv4Enabled: true
|
||||
Location Preference:
|
||||
Zone: us-west2-b
|
||||
Pricing Plan: PER_USE
|
||||
Replication Type: SYNCHRONOUS
|
||||
Storage Auto Resize: true
|
||||
Tier: db-n1-standard-1
|
||||
Provider Ref:
|
||||
Name: example-provider
|
||||
Write Connection Secret To Ref:
|
||||
Name: example-cloudsql-connection-details
|
||||
Namespace: crossplane-system
|
||||
Status:
|
||||
At Provider:
|
||||
Backend Type: SECOND_GEN
|
||||
Connection Name: my-cool-gcp-project:us-west2:example-cloudsql-instance
|
||||
Gce Zone: us-west2-b
|
||||
Ip Addresses:
|
||||
Ip Address: 8.8.8.8
|
||||
Type: PRIMARY
|
||||
Project: my-cool-gcp-project
|
||||
Self Link: https://www.googleapis.com/sql/v1beta4/projects/my-cool-gcp-project/instances/example-cloudsql-instance
|
||||
Service Account Email Address: REDACTED@gcp-sa-cloud-sql.iam.gserviceaccount.com
|
||||
State: RUNNABLE
|
||||
Binding Phase: Bound
|
||||
Conditions:
|
||||
Last Transition Time: 2019-10-25T08:09:16Z
|
||||
Reason: Successfully reconciled managed resource
|
||||
Status: True
|
||||
Type: Synced
|
||||
Last Transition Time: 2019-10-25T08:09:12Z
|
||||
Reason: Successfully resolved managed resource references to other resources
|
||||
Status: True
|
||||
Type: ReferencesResolved
|
||||
Last Transition Time: 2019-10-25T08:09:16Z
|
||||
Reason: Managed resource is available for use
|
||||
Status: True
|
||||
Type: Ready
|
||||
```
|
||||
|
||||
Pay attention to the `Ready` and `Synced` conditions above. `Ready` represents
|
||||
the availability of the CloudSQL instance while `Synced` reflects whether
|
||||
Crossplane is successfully applying your specified CloudSQL configuration.
|
||||
|
||||
## Define a Class of CloudSQL Instance
|
||||
|
||||
Now that we've learned how to statically provision and claim managed resources
|
||||
it's time to try out _dynamic provisioning_. Dynamic provisioning allows us to
|
||||
define a class of managed resource - a _resource class_ - that will be used to
|
||||
automatically satisfy resource claims when they are created.
|
||||
|
||||
Here's a resource class that will dynamically provision Cloud SQL instances with
|
||||
the same settings as the `CloudSqlInstance` we provisioned earlier in the guide:
|
||||
|
||||
```yaml
|
||||
apiVersion: database.gcp.crossplane.io/v1beta1
|
||||
kind: CloudSQLInstanceClass
|
||||
metadata:
|
||||
name: example-cloudsql-class
|
||||
annotations:
|
||||
resourceclass.crossplane.io/is-default-class: "true"
|
||||
labels:
|
||||
guide: getting-started
|
||||
specTemplate:
|
||||
providerRef:
|
||||
name: example
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
forProvider:
|
||||
databaseVersion: MYSQL_5_6
|
||||
region: us-west2
|
||||
settings:
|
||||
tier: db-n1-standard-1
|
||||
dataDiskType: PD_SSD
|
||||
dataDiskSizeGb: 10
|
||||
ipConfiguration:
|
||||
ipv4Enabled: true
|
||||
```
|
||||
|
||||
Save the above as `cloudsql-class.yaml` and apply it to enable dynamic
|
||||
provisioning of `CloudSqlInstance` managed resources:
|
||||
|
||||
```bash
|
||||
kubectl apply -f cloudsql-class.yaml
|
||||
```
|
||||
|
||||
Now you can omit the `resourceRef` when you create resource claims. Save the
|
||||
below resource claim as `mysql-dynamic-claim.yaml`:
|
||||
|
||||
```yaml
|
||||
apiVersion: database.crossplane.io/v1alpha1
|
||||
kind: MySQLInstance
|
||||
metadata:
|
||||
name: example-mysql-dynamic-claim
|
||||
spec:
|
||||
classSelector:
|
||||
matchLabels:
|
||||
guide: getting-started
|
||||
writeConnectionSecretToRef:
|
||||
name: example-mysql-dynamic-connection-details
|
||||
```
|
||||
|
||||
When you apply this `MySQLInstance` claim you'll see that it dynamically
|
||||
provisions a new `CloudSQLInstance` to satisfy the resource claim:
|
||||
|
||||
```bash
|
||||
$ kubectl --namespace default apply -f mysql-dynamic-claim.yaml
|
||||
mysqlinstance.database.crossplane.io/example-mysql-dynamic-claim created
|
||||
|
||||
$ kubectl get mysqlinstance example-mysql-dynamic-claim
|
||||
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
|
||||
example-mysql-dynamic-claim CloudSQLInstanceClass example-cloudsql-class CloudSQLInstance default-example-mysql-dynamic-claim-bwpzd 47s
|
||||
```
|
||||
|
||||
You just dynamically provisioned a `CloudSQLInstance`! You can find the name of
|
||||
your new `CloudSQLInstance` under the `RESOURCE-NAME` column when you run
|
||||
`kubectl describe mysqlinstance`. Reuse the resource class as many times as you
|
||||
like; simply submit more `MySQLInstance` resource claims to create more CloudSQL
|
||||
instances.
|
||||
|
||||
You may have noticed that your resource claim included a `classSelector`. The
|
||||
class selector lets you select which resource class to use by [matching its
|
||||
labels]. Resource claims like `MySQLInstance` can match different kinds of
|
||||
resource class using label selectors, so you could just as easily use the
|
||||
exact same `MySQLInstance` to create an Amazon Relational Database Service (RDS)
|
||||
instance by creating an `RDSInstanceClass` labelled as `guide: getting-started`.
|
||||
When multiple resource classes match the class selector, a matching class is
|
||||
chosen at random. Claims can be matched to classes by either:
|
||||
|
||||
* Specifying a `classRef` to a specific resource class.
|
||||
* Specifying a `classSelector` that matches one or more resource classes.
|
||||
* Omitting both of the above and defaulting to a resource class [annotated] as
|
||||
`resourceclass.crossplane.io/is-default-class: "true"`.
|
||||
|
||||
## Next Steps
|
||||
|
||||
* Add additional [cloud provider stacks](cloud-providers.md) to Crossplane.
|
||||
* Explore the [Services Guide](services-guide.md) and the [Stacks Guide](stacks-guide.md).
|
||||
* Learn more about [Crossplane concepts](concepts.md).
|
||||
* See what managed resources are [currently supported](api.md) for each provider.
|
||||
* Build [your own stacks](developer-guide.md)!
|
||||
|
||||
<!-- Named Links -->
|
||||
|
||||
[Helm]: https://helm.sh
|
||||
[minikube]: https://kubernetes.io/docs/tasks/tools/install-minikube/
|
||||
[kind]: https://github.com/kubernetes-sigs/kind
|
||||
[stack]: concepts.md#stacks
|
||||
[Crossplane installation guide]: install-crossplane.md
|
||||
[Getting Started With Authentication]: https://cloud.google.com/docs/authentication/getting-started
|
||||
[GCP provider documentation]: gcp-provider.md
|
||||
[CloudSQL]: https://cloud.google.com/sql/docs/mysql/
|
||||
[Persistent volumes in Kubernetes]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
|
||||
[use with your Kubernetes pods]: https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets
|
||||
[matching its labels]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
|
||||
[annotated]: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
---
|
||||
title: Related Projects
|
||||
toc: true
|
||||
weight: 850
|
||||
indent: true
|
||||
---
|
||||
# Related Projects
|
||||
|
||||
While there are many projects that address similar issues, none of them encapsulate the full use case that Crossplane addresses. This list is not exhaustive and is not meant to provide a deep analysis of the following projects, but instead to motivate why Crossplane was created.
|
||||
|
||||
## Open Service Broker and Service Catalog
|
||||
|
||||
The [Open Service Broker](https://www.openservicebrokerapi.org/) and the [Kubernetes Service Catalog](https://kubernetes.io/docs/concepts/extend-kubernetes/service-catalog/) are able to dynamically provision managed services in multiple cloud providers from Kubernetes. As a result it shares similar goals with Crossplane. However, service broker is not designed for workload portability, does not have a good separation of concern, and does not offer any integration with workload and resource scheduling. Service brokers can not span multiple cloud providers at once.
|
||||
|
||||
## Kubernetes Federation
|
||||
|
||||
The [federation-v2](https://github.com/kubernetes-sigs/federation-v2) project offers a single control plane that can span multiple Kubernetes clusters. It’s being incubated in SIG-multicluster. Crossplane shares some of the goals of managing multiple Kubernetes clusters and also the core principles of creating a higher level control plane, scheduler and controllers that span clusters. While the federation-v2 project is scoped to just Kubernetes clusters, Crossplane supports non-container workloads, and orchestrating resources that run as managed services including databases, message queues, buckets, and others. The federation effort focuses on defining Kubernetes objects that can be templatized, and propagated to other Kubernetes clusters. Crossplane focuses on defining portable workload abstractions across cloud providers and offerings. We have considered taking a dependency on the federation-v2 work within Crossplane, although it’s not clear at this point if this would accelerate the Crossplane effort.
|
||||
|
||||
## AWS Service Operator
|
||||
|
||||
The [AWS Service Operator](https://github.com/awslabs/aws-service-operator) is a recent project that implements a set of Kubernetes controllers that are able to provision managed services in AWS. It defines a set of CRDs for managed services like DynamoDB, and controllers that can provision them via AWS CloudFormation. It is similar to Crossplane in that it can provision managed services in AWS. Crossplane goes a lot further by offering workload portability across cloud multiple cloud providers, separation of concern, and a scheduler for workload and resources.
|
||||
|
||||
## AWS CloudFormation, GCP Deployment Manager, and Others
|
||||
|
||||
These products offer a declarative model for deploying and provisioning infrastructure in each of the respective cloud providers. They only work for one cloud provider and do not solve the problem of workload portability. These products are generally closed source, and offer little or no extensibility points. We have considered using some of these products as a way to implement resource controllers in Crossplane.
|
||||
|
||||
## Terraform
|
||||
|
||||
[Terraform](https://www.terraform.io/) is a popular tool for provisioning infrastructure across cloud providers. It offers a declarative configuration language with support for templating, composability, referential integrity and dependency management. Terraform can dynamically provision infrastructure and perform changes when the tool is run by a human. Unlike Crossplane, Terraform does not support workload portability across cloud providers, and does not have any active controllers that can react to failures, or make changes to running infrastructure without human intervention. Terraform attempts to solve multicloud at the tool level, while Crossplane is at the API and control plane level. Terraform is open source under a MPL license, and follows an open core business model, with a number of its features closed source. We are evaluating whether we can use Terraform to accelerate the development of resource controllers in Crossplane.
|
||||
|
||||
## Pulumi
|
||||
|
||||
[Pulumi](https://www.pulumi.com/) is a product that is based on terraform and uses most of its providers. Instead of using a configuration language, Pulumi uses popular programming languages like Typescript to capture the configuration. At runtime, Pulumi generates a DAG of resources just like terraform and applies it to cloud providers. Pulumi has an early model for workload portability that is implemented using language abstractions. Unlike Crossplane, it does not have any active controllers that can react to failures, or make changes to running infrastructure without human intervention, nor does it support workload scheduling. Pulumi attempts to solve multicloud scenarios at the language level, while Crossplane is at the API and control plane level. Pulumi is open source under a APL2 license but a number of features require using their SaaS offering.
|
||||
|
|
@ -0,0 +1,143 @@
|
|||
---
|
||||
title: Services Guide
|
||||
toc: true
|
||||
weight: 410
|
||||
---
|
||||
|
||||
# Services Guide
|
||||
This guide is an overview of enabling cloud service provisioning on an existing
|
||||
Kubernetes target cluster, including how to integrate Crossplane with existing
|
||||
cloud networking configurations to provide secure managed service connectivity.
|
||||
Step-by-step instructions are provided for [GCP][gcp-services-guide],
|
||||
[AWS][aws-services-guide], and [Azure][azure-services-guide].
|
||||
|
||||
To dynamically provision a new Kubernetes target cluster see the Stacks Guides
|
||||
for [GCP][stack-guide-gcp], [AWS][stack-guide-aws], and
|
||||
[Azure][stack-guide-azure].
|
||||
|
||||
## Table of Contents
|
||||
1. [Introduction](#introduction)
|
||||
1. [Secure network connectivity for cloud
|
||||
services](#secure-network-connectivity-for-cloud-services)
|
||||
1. [Dynamic provisioning with claims and
|
||||
classes](#dynamic-provisioning-with-claims-and-classes)
|
||||
1. [Connection secrets for pods in a
|
||||
deployment](#connection-secrets-for-pods-in-a-deployment)
|
||||
1. [Next Steps](#next-steps)
|
||||
1. [Learn More](#learn-more)
|
||||
|
||||
## Introduction
|
||||
Cloud service provisioning can be added to existing clusters by
|
||||
installing Crossplane directly onto the target cluster. Crossplane is designed
|
||||
to integrate with existing cloud networking and security resources, so managed
|
||||
services like RDS, CloudSQL, and Azure DB can be provisioned using Kubernetes
|
||||
objects and securely consumed by pods in a cluster.
|
||||
|
||||
Crossplane achieves this by:
|
||||
1. establishing secure network connectivity between the worker nodes in a
|
||||
cluster and cloud services
|
||||
1. populating Kuberentes `Secrets` that pods in a `Deployment` can use to
|
||||
securely access the managed service
|
||||
|
||||
## Secure network connectivity for cloud services
|
||||
Crossplane currently supports private IP secure connectivity for AWS, GCP, and
|
||||
Azure Stacks. Managed services instances are made available on the cluster's
|
||||
prviate network(s) so pods can access them. Crossplane also supports
|
||||
configuring ingress/egress rules to further restrict allowed network traffic.
|
||||
|
||||
While each cloud provider uses different resources for establishing secure
|
||||
connectivity between a Kubernetes cluster (EKS, GKE, AKS) and managed services
|
||||
(RDS, CloudSQL, and Azure DB), the basic pattern is the same:
|
||||
1. Configure cluster networking
|
||||
* network(s) and subnet(s) - L3 networking for the worker nodes
|
||||
1. Enable managed service access:
|
||||
* private service connection / endpoint - make services available via
|
||||
peering or other
|
||||
* private IP range(s) or subnet group - the private IPs a managed service
|
||||
will get
|
||||
* security groups or network rules - to restrict network traffic
|
||||
1. Provision a managed service instance
|
||||
* creates an instance e.g. MySQL from RDS, CloudSQL, or Azure DB
|
||||
* assigns a private IP from the private IP range above
|
||||
1. Securely use the managed service with secrets
|
||||
* pods on a cluster node can access the managed service via private IP
|
||||
* pods use credentials to securely connect to a managed service
|
||||
|
||||
Crossplane provides Kubernetes resources for all of the above, so you can define
|
||||
a secure connectivity model for the managed services you want to make available
|
||||
for self-service provisioning in the cluster using claims and classes.
|
||||
|
||||
## Dynamic provisioning with claims and classes
|
||||
Crossplane employs a layered architecture consisting of managed resources that
|
||||
represent a cloud service, and resource claims and classes that enable dynamic
|
||||
provisioning of those services.
|
||||
|
||||
Managed resources are high fidelity representations of the API resources that
|
||||
make up a cloud service. They're not portable across clouds. A
|
||||
`CloudSQLInstance` is an example of a managed resource - it's relevant only to
|
||||
the Google Cloud Platform (GCP) and exposes all of the nitty gritty
|
||||
configuration details of a CloudSQL instance. The networking and security
|
||||
Kubernetes resources mentioned above fall into this category.
|
||||
|
||||
Resource claims and classes are the next layer up. Resource claims like
|
||||
`MySQLInstance` enable dynamic provisioning of managed resources by matching a
|
||||
claim to a class like a `CloudSQLInstanceClass` that provides the detailed
|
||||
configuration template to provision a new cloud service instance. Resource
|
||||
classes can reference secure connectivity resources (networks), such that new
|
||||
instances of that class can be made available on the cluster's private network.
|
||||
Resource classes, cluster networking, and secure connectivity resources are
|
||||
designed to work together to enable self-service provisioning of securely
|
||||
connected cloud services in a Kubernetes cluster.
|
||||
|
||||
Resource claims can be matched to a class in several ways:
|
||||
1. rely on a class marked `resourceclass.crossplane.io/is-default-class:
|
||||
"true"`
|
||||
1. match on class labels using a `claim.spec.classSelector`
|
||||
1. use a `claim.spec.classRef` to a specific class
|
||||
|
||||
The first two methods rely on a default class of service or use a
|
||||
`classSelector` that matches any suitable resource class available in the
|
||||
target cluster. As such, the first two methods are considered portable
|
||||
resource claims that can be used in any cluster that provides the desired class
|
||||
of service. You may have one cluster using GCP and another cluster using AWS,
|
||||
and the same claim can be used in either cluster so long as the claim can be
|
||||
matched to a suitable class of cloud service.
|
||||
|
||||
The third method uses an explicit `classRef` to a specific resource class like
|
||||
a `CloudSQLInstanceClass` which means the claim may only be used with that
|
||||
class. Since resource classes are specific to a single cloud, claims that use
|
||||
a `classRef` are not portable across different cloud providers.
|
||||
|
||||
## Connection secrets for pods in a deployment
|
||||
Resource claims automatically write a connection secret that pods in a
|
||||
deployment can use to securely access the underlying cloud service. The claim's
|
||||
`writeConnectionSecretToRef` field is used to specify the name of the secret
|
||||
that should be created, which can then be used in the deployment's
|
||||
configuration. Since the claim is created in Kubernetes, and the secret is
|
||||
automatically populated by Crossplane, all cloud service secrets are managed
|
||||
automatically without leaving Kubernetes.
|
||||
|
||||
## Next steps
|
||||
Step-by-step instructions for enabling cloud service provisioning on an
|
||||
existing cluster are provided in the service guides for:
|
||||
* [GCP][gcp-services-guide]
|
||||
* [AWS][aws-services-guide]
|
||||
* [Azure][azure-services-guide]
|
||||
|
||||
### Learn More
|
||||
* [Join Crossplane Slack][join-crossplane-slack]
|
||||
* [Contact Us][contact-us]
|
||||
* [Learn More][learn-more]
|
||||
|
||||
<!-- Named links -->
|
||||
[gcp-services-guide]: services/gcp-services-guide.md
|
||||
[aws-services-guide]: services/aws-services-guide.md
|
||||
[azure-services-guide]: services/azure-services-guide.md
|
||||
|
||||
[stack-guide-gcp]: stacks-guide-gcp.md
|
||||
[stack-guide-aws]: stacks-guide-aws.md
|
||||
[stack-guide-azure]: stacks-guide-azure.md
|
||||
|
||||
[contact-us]: https://github.com/crossplaneio/crossplane#contact
|
||||
[join-crossplane-slack]: https://slack.crossplane.io
|
||||
[learn-more]: learn-more.md
|
||||
|
|
@ -0,0 +1,461 @@
|
|||
---
|
||||
title: Using AWS Services
|
||||
toc: true
|
||||
weight: 430
|
||||
indent: true
|
||||
---
|
||||
|
||||
# AWS Services Guide
|
||||
|
||||
This user guide will walk you through Wordpress application deployment using
|
||||
Crossplane managed resources and the official Wordpress Docker image.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Pre-requisites](#pre-requisites)
|
||||
1. [Preparation](#preparation)
|
||||
1. [Set Up Crossplane](#set-up-crossplane)
|
||||
1. [Install in Target Cluster](#install-in-target-cluster)
|
||||
1. [Cloud Provider](#cloud-provider)
|
||||
1. [Configure Managed Service Access](#configure-managed-service-access)
|
||||
1. [Resource Classes](#resource-classes)
|
||||
1. [Provision MySQL](#provision-mysql)
|
||||
1. [Resource Claim](#resource-claim)
|
||||
1. [Install Wordpress](#install-wordpress)
|
||||
1. [Clean Up](#clean-up)
|
||||
1. [Conclusion and Next Steps](#conclusion-and-next-steps)
|
||||
|
||||
## Pre-requisites
|
||||
|
||||
These tools are required to complete this guide. They must be installed on your
|
||||
local machine.
|
||||
|
||||
* [kubectl][install-kubectl]
|
||||
* [Helm][using-helm], minimum version `v2.10.0+`.
|
||||
|
||||
## Preparation
|
||||
|
||||
This guide assumes that you have already [installed][aws-cli-install] and
|
||||
[configured][aws-cli-configure]. It also assumes an existing EKS cluster,
|
||||
configured in a VPC with three public subnets (i.e. exposed to the internet).
|
||||
|
||||
In order to utilize these pre-existing resources, set environment variables that
|
||||
can be used when creating resources necessary to deploy Wordpress.
|
||||
|
||||
```bash
|
||||
export CLUSTER_NAME=yourclustername
|
||||
export REGION=yourclusterregion
|
||||
export VPC_ID=yourvpcid
|
||||
export SUBNET_ONE_ID=yourpublicsubnetoneid
|
||||
export SUBNET_TWO_ID=yourpublicsubnettwoid
|
||||
export SUBNET_THREE_ID=yourpublicsubnetthreeid
|
||||
```
|
||||
|
||||
## Set Up Crossplane
|
||||
|
||||
To keep your resource configuration organized, start by creating a new
|
||||
directory:
|
||||
|
||||
```bash
|
||||
mkdir wordpress && cd $_
|
||||
```
|
||||
|
||||
### Install in Target Cluster
|
||||
|
||||
Assuming you are [connected][eks-kubectl] to your EKS cluster via `kubectl`:
|
||||
|
||||
1. Install Crossplane from alpha channel. (See the [Crossplane Installation
|
||||
Guide][crossplane-install] for more information.)
|
||||
|
||||
```bash
|
||||
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
|
||||
```
|
||||
|
||||
2. Install the AWS stack into Crossplane. (See the [AWS stack
|
||||
section][aws-stack-install] of the install guide for more information.)
|
||||
|
||||
```bash
|
||||
cat > stack-aws.yaml <<EOF
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: aws
|
||||
---
|
||||
apiVersion: stacks.crossplane.io/v1alpha1
|
||||
kind: ClusterStackInstall
|
||||
metadata:
|
||||
name: stack-aws
|
||||
namespace: crossplane-system
|
||||
spec:
|
||||
package: "crossplane/stack-aws:master"
|
||||
EOF
|
||||
|
||||
kubectl apply -f stack-aws.yaml
|
||||
```
|
||||
|
||||
3. Obtain AWS credentials. (See the [Cloud Provider Credentials][cloud-creds]
|
||||
docs for more information.)
|
||||
|
||||
### Cloud Provider
|
||||
|
||||
It is essential to make sure that the AWS user credentials are configured in
|
||||
Crossplane as a provider. Please follow the steps in the AWS [provider
|
||||
guide][aws-provider-guide] for more information.
|
||||
|
||||
### Configure Managed Service Access
|
||||
|
||||
Before you setup an RDS instance, you will need to create a subnet group for it
|
||||
to be provisioned into, as well as a security group to determine how it can be
|
||||
accessed
|
||||
|
||||
* Define an AWS `DBSubnetGroup` in `aws-dbsubnet.yaml` and create it:
|
||||
|
||||
```bash
|
||||
cat > aws-dbsubnet.yaml <<EOF
|
||||
apiVersion: storage.aws.crossplane.io/v1alpha3
|
||||
kind: DBSubnetGroup
|
||||
metadata:
|
||||
name: sample-dbsubnetgroup
|
||||
spec:
|
||||
groupName: sample_dbsubnetgroup
|
||||
description: EKS vpc to rds
|
||||
subnetIds:
|
||||
- ${SUBNET_ONE_ID}
|
||||
- ${SUBNET_TWO_ID}
|
||||
- ${SUBNET_THREE_ID}
|
||||
tags:
|
||||
- key: name
|
||||
value: sample-dbsubnetgroup
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
EOF
|
||||
|
||||
kubectl apply -f aws-dbsubnet.yaml
|
||||
```
|
||||
|
||||
* Define an AWS `SecurityGroup` in `aws-sg.yaml` and create it:
|
||||
|
||||
```bash
|
||||
cat > aws-sg.yaml <<EOF
|
||||
apiVersion: network.aws.crossplane.io/v1alpha3
|
||||
kind: SecurityGroup
|
||||
metadata:
|
||||
name: sample-rds-sg
|
||||
spec:
|
||||
vpcId: ${VPC_ID}
|
||||
groupName: sample-rds-sg
|
||||
description: open rds access to crossplane workload
|
||||
reclaimPolicy: Delete
|
||||
ingress:
|
||||
- fromPort: 3306
|
||||
toPort: 3306
|
||||
protocol: tcp
|
||||
cidrBlocks:
|
||||
- cidrIp: 0.0.0.0/0
|
||||
description: all ips
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
EOF
|
||||
|
||||
kubectl apply -f aws-sg.yaml
|
||||
```
|
||||
|
||||
### Resource Classes
|
||||
|
||||
Cloud-specific resource classes are used to define a reusable configuration for
|
||||
a specific managed resource. Wordpress requires a MySQL database, which can be
|
||||
satisfied by an [AWS RDS][aws-rds] instance.
|
||||
|
||||
* Define an AWS RDS `RDSInstanceClass` in `aws-mysql-standard.yaml` and create
|
||||
it:
|
||||
|
||||
```yaml
|
||||
cat > aws-mysql-standard.yaml <<EOF
|
||||
apiVersion: database.aws.crossplane.io/v1beta1
|
||||
kind: RDSInstanceClass
|
||||
metadata:
|
||||
name: standard-mysql
|
||||
annotations:
|
||||
resourceclass.crossplane.io/is-default-class: "true"
|
||||
specTemplate:
|
||||
forProvider:
|
||||
dbInstanceClass: db.t2.small
|
||||
masterUsername: masteruser
|
||||
vpcSecurityGroupIDRefs:
|
||||
- name: sample-rds-sg
|
||||
dbSubnetGroupNameRef:
|
||||
name: sample-dbsubnetgroup
|
||||
allocatedStorage: 20
|
||||
engine: mysql
|
||||
skipFinalSnapshotBeforeDeletion: true
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
reclaimPolicy: Delete
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
EOF
|
||||
|
||||
kubectl apply -f aws-mysql-standard.yaml
|
||||
```
|
||||
|
||||
Note that we are referencing the security group and subnet group we created
|
||||
earlier.
|
||||
|
||||
* You should see the following output:
|
||||
|
||||
> rdsinstanceclass.database.aws.crossplane.io/aws-mysql-standard created
|
||||
|
||||
* You can verify creation with the following command and output:
|
||||
|
||||
```bash
|
||||
$ kubectl get rdsinstanceclasses.database.aws.crossplane.io
|
||||
NAME PROVIDER-REF RECLAIM-POLICY AGE
|
||||
standard-mysql aws-provider Delete 11s
|
||||
```
|
||||
|
||||
You are free to create more AWS `RDSInstanceClass` instances to define more
|
||||
potential configurations. For instance, you may create `large-aws-rds` with
|
||||
field `size: 100`.
|
||||
|
||||
## Provision MySQL
|
||||
|
||||
### Resource Claims
|
||||
|
||||
Resource claims are used for dynamic provisioning of a managed resource (like a
|
||||
MySQL instance) by matching the claim to a resource class. This can be done in
|
||||
several ways: (a) rely on the default class marked
|
||||
`resourceclass.crossplane.io/is-default-class: "true"`, (b) use a
|
||||
`claim.spec.classRef` to a specific class, or (c) match on class labels using a
|
||||
`claim.spec.classSelector`.
|
||||
|
||||
*Note: claims may also be used in [static provisioning] with a reference to an
|
||||
existing managed resource.*
|
||||
|
||||
In the `RDSInstanceClass` above, we added the default annotation, so our claim
|
||||
will default to it automatically if no other classes exist with said annotation.
|
||||
If there are multiple classes annotated as default, one will be chosen at
|
||||
random.
|
||||
|
||||
* Define a `MySQLInstance` claim in `mysql-claim.yaml` and create it:
|
||||
|
||||
```bash
|
||||
cat > mysql-claim.yaml <<EOF
|
||||
apiVersion: database.crossplane.io/v1alpha1
|
||||
kind: MySQLInstance
|
||||
metadata:
|
||||
name: mysql-claim
|
||||
spec:
|
||||
writeConnectionSecretToRef:
|
||||
name: wordpressmysql
|
||||
engineVersion: "5.6"
|
||||
EOF
|
||||
|
||||
kubectl apply -f mysql-claim.yaml
|
||||
```
|
||||
|
||||
What we are looking for is for the `STATUS` value to become `Bound` which
|
||||
indicates the managed resource was successfully provisioned and is ready for
|
||||
consumption. You can see when claim is bound using the following:
|
||||
|
||||
```bash
|
||||
$ kubectl get mysqlinstances
|
||||
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
|
||||
mysql-claim Bound RDSInstanceClass standard-mysql RDSInstance default-mysql-claim-5p66w 9s
|
||||
```
|
||||
|
||||
If the `STATUS` is blank, we are still waiting for the claim to become bound.
|
||||
You can observe resource creation progression using the following:
|
||||
|
||||
```bash
|
||||
$ kubectl describe mysqlinstance mysql-claim
|
||||
Name: mysql-claim
|
||||
Namespace: default
|
||||
Labels: <none>
|
||||
Annotations: kubectl.kubernetes.io/last-applied-configuration:
|
||||
{"apiVersion":"database.crossplane.io/v1alpha1","kind":"MySQLInstance","metadata":{"annotations":{},"name":"mysql-claim","namespace":"defa...
|
||||
API Version: database.crossplane.io/v1alpha1
|
||||
Kind: MySQLInstance
|
||||
Metadata:
|
||||
Creation Timestamp: 2019-10-24T19:59:18Z
|
||||
Finalizers:
|
||||
finalizer.resourceclaim.crossplane.io
|
||||
Generation: 3
|
||||
Resource Version: 6425
|
||||
Self Link: /apis/database.crossplane.io/v1alpha1/namespaces/default/mysqlinstances/mysql-claim
|
||||
UID: c3aca763-f698-11e9-a957-12a4af141bea
|
||||
Spec:
|
||||
Class Ref:
|
||||
API Version: database.aws.crossplane.io/v1beta1
|
||||
Kind: RDSInstanceClass
|
||||
Name: standard-mysql
|
||||
UID: 6cf90617-f698-11e9-b058-028a0ecde201
|
||||
Engine Version: 5.6
|
||||
Resource Ref:
|
||||
API Version: database.aws.crossplane.io/v1beta1
|
||||
Kind: RDSInstance
|
||||
Name: app-project1-dev-mysql-claim-8shd2
|
||||
Write Connection Secret To Ref:
|
||||
Name: wordpressmysql
|
||||
Status:
|
||||
Conditions:
|
||||
Last Transition Time: 2019-10-24T19:59:20Z
|
||||
Reason: Managed claim is waiting for managed resource to become bindable
|
||||
Status: False
|
||||
Type: Ready
|
||||
Last Transition Time: 2019-10-24T19:59:20Z
|
||||
Reason: Successfully reconciled managed resource
|
||||
Status: True
|
||||
Type: Synced
|
||||
Events: <none>
|
||||
```
|
||||
|
||||
## Install Wordpress
|
||||
|
||||
Installing Wordpress requires creating a Kubernetes `Deployment` and load
|
||||
balancer `Service`. We will point the deployment to the `wordpressmysql` secret
|
||||
that we specified in our claim above for the Wordpress container environment
|
||||
variables. It should have been populated with our MySQL connection details after
|
||||
the claim became `Bound`.
|
||||
|
||||
* Check to make sure `wordpressmysql` exists and is populated:
|
||||
|
||||
```bash
|
||||
$ kubectl describe secret wordpressmysql
|
||||
Name: wordpressmysql
|
||||
Namespace: default
|
||||
Labels: <none>
|
||||
Annotations: crossplane.io/propagate-from-name: c3aca763-f698-11e9-a957-12a4af141bea
|
||||
crossplane.io/propagate-from-namespace: crossplane-system
|
||||
crossplane.io/propagate-from-uid: c539fcef-f698-11e9-a957-12a4af141bea
|
||||
|
||||
Type: Opaque
|
||||
|
||||
Data
|
||||
====
|
||||
endpoint: 83 bytes
|
||||
password: 27 bytes
|
||||
username: 10 bytes
|
||||
```
|
||||
|
||||
* Define the `Deployment` and `Service` in `wordpress-app.yaml` and create it:
|
||||
|
||||
```bash
|
||||
cat > wordpress-app.yaml <<EOF
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: wordpress
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: wordpress
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
containers:
|
||||
- name: wordpress
|
||||
image: wordpress:4.6.1-apache
|
||||
env:
|
||||
- name: WORDPRESS_DB_HOST
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wordpressmysql
|
||||
key: endpoint
|
||||
- name: WORDPRESS_DB_USER
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wordpressmysql
|
||||
key: username
|
||||
- name: WORDPRESS_DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wordpressmysql
|
||||
key: password
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: wordpress
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: wordpress
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
selector:
|
||||
app: wordpress
|
||||
type: LoadBalancer
|
||||
EOF
|
||||
|
||||
kubectl apply -f wordpress-app.yaml
|
||||
```
|
||||
|
||||
* You can verify creation with the following command and output:
|
||||
|
||||
```bash
|
||||
$ kubectl get -f wordpress-app.yaml
|
||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||
deployment.apps/wordpress 1/1 1 1 11m
|
||||
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
service/wordpress LoadBalancer 10.0.128.30 52.168.69.6 80:32587/TCP 11m
|
||||
```
|
||||
|
||||
If the `EXTERNAL-IP` field of the `LoadBalancer` is `<pending>`, wait until it
|
||||
becomes available, then navigate to the address. You should see the following:
|
||||
|
||||

|
||||
|
||||
## Clean Up
|
||||
|
||||
Because we put all of our configuration in a single directory, we can delete it
|
||||
all with this command:
|
||||
|
||||
```bash
|
||||
kubectl delete -f wordpress/
|
||||
```
|
||||
|
||||
If you would like to also uninstall Crossplane and the AWS stack, run the
|
||||
following command:
|
||||
|
||||
```bash
|
||||
kubectl delete namespace crossplane-system
|
||||
```
|
||||
|
||||
## Conclusion and Next Steps
|
||||
|
||||
In this guide we:
|
||||
|
||||
* Configured RDS to communicate with EKS
|
||||
* Installed Crossplane from the alpha channel
|
||||
* Installed the AWS stack
|
||||
* Setup an AWS `Provider` with our account
|
||||
* Created a `RDSInstanceClass` with configuration for an AWS RDS instance
|
||||
* Created a `MySQLInstance` claim that was defaulted to the `mysql-standard`
|
||||
resource class
|
||||
* Created a `Deployment` and `Service` to run Wordpress on our EKS Cluster and
|
||||
assign an external IP address to it
|
||||
|
||||
If you would like to try out a similar workflow using a different cloud
|
||||
provider, take a look at the other [services guides][services]. If you would
|
||||
like to learn more about stacks, checkout the [stacks guide][stacks].
|
||||
|
||||
<!-- Named links -->
|
||||
[install-kubectl]: https://kubernetes.io/docs/tasks/tools/install-kubectl/
|
||||
[using-helm]: https://docs.helm.sh/using_helm/
|
||||
[crossplane-install]: ../install-crossplane.md#alpha
|
||||
[cloud-creds]: ../cloud-providers.md
|
||||
[aws-provider-guide]: ../cloud-providers/aws/aws-provider.md
|
||||
[aws-rds]: https://aws.amazon.com/rds/
|
||||
[services]: ../services-guide.md
|
||||
[stacks]: ../stacks-guide.md
|
||||
[aws-stack-install]: ../install-crossplane.md#aws-stack
|
||||
[eks-kubectl]: https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html
|
||||
[static provisioning]: ../concepts.md#dynamic-and-static-provisioning
|
||||
|
|
@ -0,0 +1,480 @@
|
|||
---
|
||||
title: Using Azure Services
|
||||
toc: true
|
||||
weight: 440
|
||||
indent: true
|
||||
---
|
||||
|
||||
# Azure Services Guide
|
||||
|
||||
This user guide will walk you through Wordpress application deployment using
|
||||
Crossplane managed resources and the official Wordpress Docker image.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Pre-requisites](#pre-requisites)
|
||||
1. [Preparation](#preparation)
|
||||
1. [Set Up Crossplane](#set-up-crossplane)
|
||||
1. [Install in Target Cluster](#install-in-target-cluster)
|
||||
1. [Cloud Provider](#cloud-provider)
|
||||
1. [Resource Classes](#resource-classes)
|
||||
1. [Configure Managed Service Access](#configure-managed-service-access)
|
||||
1. [Provision MySQL](#provision-mysql)
|
||||
1. [Resource Claim](#resource-claim)
|
||||
1. [Virtual Network Rule](#virtual-network-rule)
|
||||
1. [Install Wordpress](#install-wordpress)
|
||||
1. [Clean Up](#clean-up)
|
||||
1. [Conclusion and Next Steps](#conclusion-and-next-steps)
|
||||
|
||||
## Pre-requisites
|
||||
|
||||
These tools are required to complete this guide. They must be installed on your
|
||||
local machine.
|
||||
|
||||
* [Azure CLI][azure-cli]
|
||||
* Make sure to [login][azure-login] after installation.
|
||||
* [kubectl][install-kubectl]
|
||||
* kubectl also be installed using the Azure CLI: `az aks install-cli`
|
||||
* [Helm][using-helm], minimum version `v2.10.0+`.
|
||||
* [jq][jq-docs] - command line JSON processor `v1.5+`
|
||||
|
||||
|
||||
## Preparation
|
||||
|
||||
This guide assumes that you have setup the Azure CLI and are logged in to your
|
||||
desired account. It also assumes that you have an existing AKS cluster in a
|
||||
Virtual Network. Make sure to populate the environment variables below with the
|
||||
relevant values for your AKS cluster.
|
||||
|
||||
*Note: environment variables are used throughout this guide.*
|
||||
|
||||
```bash
|
||||
export AKS_RESOURCE_GROUP=myAKSResourceGroup
|
||||
export AKS_VNET=myAKSVnet
|
||||
export AKS_NAME=myAKSName
|
||||
export AKS_REGION=myRegion
|
||||
export SUBSCRIPTION_ID=$(az account list | jq -j '.[0].id')
|
||||
```
|
||||
|
||||
## Set Up Crossplane
|
||||
|
||||
### Install in Target Cluster
|
||||
|
||||
Assuming you are [connected][aks-kubectl] to your AKS cluster via `kubectl`:
|
||||
|
||||
1. Install Crossplane from alpha channel. (See the [Crossplane Installation
|
||||
Guide][crossplane-install] for more information.)
|
||||
|
||||
```bash
|
||||
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
|
||||
```
|
||||
|
||||
2. Install the Azure stack into Crossplane. (See the [Azure stack
|
||||
section][azure-stack-install] of the install guide for more information.)
|
||||
|
||||
```yaml
|
||||
cat > stack-azure.yaml <<EOF
|
||||
apiVersion: stacks.crossplane.io/v1alpha1
|
||||
kind: ClusterStackInstall
|
||||
metadata:
|
||||
name: stack-azure
|
||||
namespace: crossplane-system
|
||||
spec:
|
||||
package: "crossplane/stack-azure:master"
|
||||
EOF
|
||||
|
||||
kubectl apply -f stack-azure.yaml
|
||||
```
|
||||
|
||||
3. Obtain Azure credentials. (See the [Cloud Provider Credentials][cloud-creds]
|
||||
docs for more information.)
|
||||
|
||||
### Cloud Provider
|
||||
|
||||
It is essential to make sure that the Azure user credentials are configured in
|
||||
Crossplane as a provider. Please follow the steps in the Azure [provider
|
||||
guide][azure-provider-guide] for more information.
|
||||
|
||||
### Resource Classes
|
||||
|
||||
To keep your resource configuration organized, start by creating a new
|
||||
directory:
|
||||
|
||||
```bash
|
||||
mkdir wordpress && cd $_
|
||||
```
|
||||
|
||||
Resource classes are used to define a reusable configuration for a specific
|
||||
managed service. Wordpress requires a MySQL database, which can be satisfied by
|
||||
an [Azure Database for MySQL][azure-mysql] instance.
|
||||
|
||||
* Define an Azure MySQL `SQLServerClass` in `azure-mysql-standard.yaml` and
|
||||
create it:
|
||||
|
||||
```yaml
|
||||
cat > azure-mysql-standard.yaml <<EOF
|
||||
---
|
||||
apiVersion: database.azure.crossplane.io/v1alpha3
|
||||
kind: SQLServerClass
|
||||
metadata:
|
||||
name: azure-mysql-standard
|
||||
labels:
|
||||
size: standard
|
||||
demo: "true"
|
||||
specTemplate:
|
||||
adminLoginName: myadmin
|
||||
resourceGroupName: $AKS_RESOURCE_GROUP
|
||||
location: $AKS_REGION
|
||||
sslEnforced: false
|
||||
version: "5.6"
|
||||
pricingTier:
|
||||
tier: GeneralPurpose
|
||||
vcores: 2
|
||||
family: Gen5
|
||||
storageProfile:
|
||||
storageGB: 25
|
||||
backupRetentionDays: 7
|
||||
geoRedundantBackup: false
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
providerRef:
|
||||
name: azure-provider
|
||||
reclaimPolicy: Delete
|
||||
EOF
|
||||
|
||||
kubectl apply -f azure-mysql-standard.yaml
|
||||
```
|
||||
|
||||
* You should see the following output:
|
||||
|
||||
> sqlserverclass.database.azure.crossplane.io/azure-mysql-standard created
|
||||
|
||||
|
||||
* You can verify creation with the following command and output:
|
||||
|
||||
```bash
|
||||
$ kubectl get sqlserverclasses
|
||||
NAME PROVIDER-REF RECLAIM-POLICY AGE
|
||||
azure-mysql-standard azure-provider Delete 17s
|
||||
```
|
||||
|
||||
You are free to create more Azure `SQLServerClass` instances to define more
|
||||
potential configurations. For instance, you may create `large-azure-mysql` with
|
||||
field `storageGB: 100`.
|
||||
|
||||
### Configure Managed Service Access
|
||||
|
||||
In order for the AKS cluster to talk to the MySQL Database, you must condigure a
|
||||
`Microsoft.Sql` service endpoint on the AKS Virtual Network for all subnets. If
|
||||
you do not already have this configured, Azure has a [guide][service endpoint]
|
||||
on how to set it up.
|
||||
|
||||
## Provision MySQL
|
||||
|
||||
### Resource Claims
|
||||
|
||||
Resource claims are used for dynamic provisioning of a managed resource (like a
|
||||
MySQL instance) by matching the claim to a resource class. This can be done in
|
||||
several ways: (a) rely on the default class marked
|
||||
`resourceclass.crossplane.io/is-default-class: "true"`, (b) use a
|
||||
`claim.spec.classRef` to a specific class, or (c) match on class labels using a
|
||||
`claim.spec.classSelector`.
|
||||
|
||||
*Note: claims may also be used in [static provisioning] with a reference to an
|
||||
existing managed resource.*
|
||||
|
||||
In the `SQLServerClass` above, we added the labels `size: standard` and `demo:
|
||||
"true"`, so our claim will be scheduled to that class using the labels are
|
||||
specified in the `claim.spec.classSelector`. If there are multiple classes which
|
||||
match the specified label(s) one will be chosen at random.
|
||||
|
||||
* Define a `MySQLInstance` claim in `mysql-claim.yaml` and create it:
|
||||
|
||||
```yaml
|
||||
cat > mysql-claim.yaml <<EOF
|
||||
apiVersion: database.crossplane.io/v1alpha1
|
||||
kind: MySQLInstance
|
||||
metadata:
|
||||
name: mysql-claim
|
||||
spec:
|
||||
classSelector:
|
||||
matchLabels:
|
||||
size: standard
|
||||
demo: "true"
|
||||
engineVersion: "5.6"
|
||||
writeConnectionSecretToRef:
|
||||
name: wordpressmysql
|
||||
EOF
|
||||
|
||||
kubectl apply -f mysql-claim.yaml
|
||||
```
|
||||
|
||||
What we are looking for is for the `STATUS` value to become `Bound` which
|
||||
indicates the managed resource was successfully provisioned and is ready for
|
||||
consumption. You can see when claim is bound using the following:
|
||||
|
||||
```bash
|
||||
$ kubectl get mysqlinstances
|
||||
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
|
||||
mysql-claim Bound SQLServerClass azure-mysql-standard MySQLServer default-mysql-claim-bm4ft 9s
|
||||
```
|
||||
|
||||
If the `STATUS` is blank, we are still waiting for the claim to become bound.
|
||||
You can observe resource creation progression using the following:
|
||||
|
||||
```bash
|
||||
$ kubectl describe mysqlinstance mysql-claim
|
||||
Name: mysql-claim
|
||||
Namespace: default
|
||||
Labels: <none>
|
||||
Annotations: kubectl.kubernetes.io/last-applied-configuration:
|
||||
{"apiVersion":"database.crossplane.io/v1alpha1","kind":"MySQLInstance","metadata":{"annotations":{},"name":"mysql-claim","namespace":"defa...
|
||||
API Version: database.crossplane.io/v1alpha1
|
||||
Kind: MySQLInstance
|
||||
Metadata:
|
||||
Creation Timestamp: 2019-10-28T15:43:28Z
|
||||
Finalizers:
|
||||
finalizer.resourceclaim.crossplane.io
|
||||
Generation: 3
|
||||
Resource Version: 11072
|
||||
Self Link: /apis/database.crossplane.io/v1alpha1/namespaces/default/mysqlinstances/mysql-claim
|
||||
UID: afff42b3-f999-11e9-a2d5-c64d758a651f
|
||||
Spec:
|
||||
Class Ref:
|
||||
API Version: database.azure.crossplane.io/v1alpha3
|
||||
Kind: SQLServerClass
|
||||
Name: azure-mysql-standard
|
||||
UID: 5710f3db-f999-11e9-a2d5-c64d758a651f
|
||||
Class Selector:
|
||||
Match Labels:
|
||||
Demo: true
|
||||
Size: standard
|
||||
Engine Version: 5.6
|
||||
Resource Ref:
|
||||
API Version: database.azure.crossplane.io/v1alpha3
|
||||
Kind: MySQLServer
|
||||
Name: default-mysql-claim-bm4ft
|
||||
UID: b02c1389-f999-11e9-a2d5-c64d758a651f
|
||||
Write Connection Secret To Ref:
|
||||
Name: wordpressmysql
|
||||
Status:
|
||||
Conditions:
|
||||
Last Transition Time: 2019-10-28T15:43:29Z
|
||||
Reason: Managed claim is waiting for managed resource to become bindable
|
||||
Status: False
|
||||
Type: Ready
|
||||
Last Transition Time: 2019-10-28T15:43:29Z
|
||||
Reason: Successfully reconciled managed resource
|
||||
Status: True
|
||||
Type: Synced
|
||||
Events: <none>
|
||||
```
|
||||
|
||||
*Note: You must wait until the claim becomes bound before continuing with this
|
||||
guide. It could take a few minutes for Azure to complete MySQL creation.*
|
||||
|
||||
### Virtual Network Rule
|
||||
|
||||
Before we install Wordpress, we need establish connectivity between our MySQL
|
||||
database and our AKS cluster. We can do this by creating a [Virtual Network
|
||||
Rule][azure-vnet-rule].
|
||||
|
||||
* Set `MYSQL_NAME` environment variable:
|
||||
|
||||
```bash
|
||||
export MYSQL_NAME=$(kubectl get -o json mysqlinstance mysql-claim | jq -j '.spec.resourceRef.name')
|
||||
```
|
||||
|
||||
* Define a `MySQLServerVirtualNetworkRule` in `wordpress-vnet-rule.yaml` and
|
||||
create it:
|
||||
|
||||
```yaml
|
||||
cat > wordpress-vnet-rule.yaml <<EOF
|
||||
---
|
||||
apiVersion: database.azure.crossplane.io/v1alpha3
|
||||
kind: MySQLServerVirtualNetworkRule
|
||||
metadata:
|
||||
name: wordpress-vnet-rule
|
||||
spec:
|
||||
name: wordpress-vnet-rule
|
||||
serverName: ${MYSQL_NAME}
|
||||
resourceGroupName: ${AKS_RESOURCE_GROUP}
|
||||
properties:
|
||||
virtualNetworkSubnetId: /subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${AKS_RESOURCE_GROUP}/providers/Microsoft.Network/virtualNetworks/${AKS_VNET}/subnets/aks-subnet
|
||||
providerRef:
|
||||
name: azure-provider
|
||||
reclaimPolicy: Delete
|
||||
EOF
|
||||
|
||||
kubectl apply -f wordpress-vnet-rule.yaml
|
||||
```
|
||||
|
||||
* You can verify creation with the following command and output:
|
||||
|
||||
```bash
|
||||
$ kubectl get mysqlservervirtualnetworkrules
|
||||
NAME STATE AGE
|
||||
wordpress-vnet-rule Ready 17s
|
||||
```
|
||||
|
||||
## Install Wordpress
|
||||
|
||||
Installing Wordpress requires creating a Kubernetes `Deployment` and load
|
||||
balancer `Service`. We will point the deployment to the `wordpressmysql` secret
|
||||
that we specified in our claim above for the Wordpress container environment
|
||||
variables. It should have been populated with our MySQL connection details after
|
||||
the claim became `Bound`.
|
||||
|
||||
* Check to make sure `wordpressmysql` exists and is populated:
|
||||
|
||||
```bash
|
||||
$ kubectl describe secret wordpressmysql
|
||||
Name: wordpressmysql
|
||||
Namespace: default
|
||||
Labels: <none>
|
||||
Annotations: crossplane.io/propagate-from-name: 084b9476-f99e-11e9-a2d5-c64d758a651f
|
||||
crossplane.io/propagate-from-namespace: crossplane-system
|
||||
crossplane.io/propagate-from-uid: 2e71f6f9-f99e-11e9-a2d5-c64d758a651f
|
||||
|
||||
Type: Opaque
|
||||
|
||||
Data
|
||||
====
|
||||
endpoint: 50 bytes
|
||||
password: 27 bytes
|
||||
username: 33 bytes
|
||||
```
|
||||
|
||||
* Define the `Deployment` and `Service` in `wordpress-app.yaml` and create it:
|
||||
|
||||
```yaml
|
||||
cat > wordpress-app.yaml <<EOF
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: wordpress
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: wordpress
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
containers:
|
||||
- name: wordpress
|
||||
image: wordpress:4.6.1-apache
|
||||
env:
|
||||
- name: WORDPRESS_DB_HOST
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wordpressmysql
|
||||
key: endpoint
|
||||
- name: WORDPRESS_DB_USER
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wordpressmysql
|
||||
key: username
|
||||
- name: WORDPRESS_DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wordpressmysql
|
||||
key: password
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: wordpress
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: wordpress
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
selector:
|
||||
app: wordpress
|
||||
type: LoadBalancer
|
||||
EOF
|
||||
|
||||
kubectl apply -f wordpress-app.yaml
|
||||
```
|
||||
|
||||
* You can verify creation with the following command and output:
|
||||
|
||||
```bash
|
||||
$ kubectl get -f wordpress-app.yaml
|
||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||
deployment.apps/wordpress 1/1 1 1 11m
|
||||
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
service/wordpress LoadBalancer 10.0.128.30 52.168.69.6 80:32587/TCP 11m
|
||||
```
|
||||
|
||||
If the `EXTERNAL-IP` field of the `LoadBalancer` is `<pending>`, wait until it
|
||||
becomes available, then navigate to the address. You should see the following:
|
||||
|
||||

|
||||
|
||||
|
||||
## Clean Up
|
||||
|
||||
Because we put all of our configuration in a single directory, we can delete it
|
||||
all with this command:
|
||||
|
||||
```bash
|
||||
kubectl delete -f wordpress/
|
||||
```
|
||||
|
||||
If you would like to also uninstall Crossplane and the AWS stack, run the
|
||||
following command:
|
||||
|
||||
```bash
|
||||
kubectl delete namespace crossplane-system
|
||||
```
|
||||
|
||||
## Conclusion and Next Steps
|
||||
|
||||
In this guide we:
|
||||
|
||||
* Installed Crossplane from alpha channel
|
||||
* Installed the Azure stack
|
||||
* Setup an Azure `Provider` with our account
|
||||
* Created a `SQLServerClass` in the ` with configuration for a MySQL database on
|
||||
Azure
|
||||
* Created a `MySQLInstance` claim in the that was scheduled to the
|
||||
`mysql-standard` resource class
|
||||
* Created a `MySQLServerVirtualNetworkRule` to establish secure connectivity
|
||||
between our AKS Cluster and MySQL database
|
||||
* Created a `Deployment` and `Service` to run Wordpress on our AKS Cluster and
|
||||
assign an external IP address to it
|
||||
|
||||
If you would like to try out a similar workflow using a different cloud
|
||||
provider, take a look at the other [services guides][services]. If you would
|
||||
like to learn more about stacks, checkout the [stacks guide][stacks].
|
||||
|
||||
<!-- Named links -->
|
||||
[azure-cli]: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest
|
||||
[azure-login]: https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli?view=azure-cli-latest
|
||||
[install-kubectl]: https://kubernetes.io/docs/tasks/tools/install-kubectl/
|
||||
[using-helm]: https://docs.helm.sh/using_helm/
|
||||
[jq-docs]: https://stedolan.github.io/jq/
|
||||
[service endpoint]: https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoint-policies-overview
|
||||
[aks-kubectl]: https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough#connect-to-the-cluster
|
||||
|
||||
[crossplane-install]: ../install-crossplane.md#alpha
|
||||
[azure-stack-install]: ../install-crossplane.md#azure-stack
|
||||
[cloud-creds]: ../cloud-providers.md
|
||||
|
||||
[azure-provider-guide]: ../cloud-providers/azure/azure-provider.md
|
||||
|
||||
[azure-mysql]: https://azure.microsoft.com/en-us/services/mysql/
|
||||
[azure-vnet-rule]: https://docs.microsoft.com/en-us/azure/mysql/concepts-data-access-and-security-vnet
|
||||
[static provisioning]: ../concepts.md#dynamic-and-static-provisioning
|
||||
|
||||
[services]: ../services-guide.md
|
||||
[stacks]: ../stacks-guide.md
|
||||
|
|
@ -0,0 +1,529 @@
|
|||
---
|
||||
title: Using GCP Services
|
||||
toc: true
|
||||
weight: 420
|
||||
indent: true
|
||||
---
|
||||
|
||||
# GCP Services Guide
|
||||
|
||||
This user guide will walk you through Wordpress application deployment using
|
||||
your existing Kubernetes cluster and Crossplane managed resources. We will:
|
||||
* Install Crossplane to your cluster.
|
||||
* Create necessary resource classes for MySQL database instance.
|
||||
* Create network resources to get GKE cluster to connect to MySQL instance.
|
||||
* Deploy Wordpress.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Pre-requisites](#pre-requisites)
|
||||
1. [Preparation](#preparation)
|
||||
1. [Set Up Crossplane](#set-up-crossplane)
|
||||
1. [Install in Target Cluster](#install-in-target-cluster)
|
||||
1. [Cloud Provider](#cloud-provider)
|
||||
1. [Resource Classes](#resource-classes)
|
||||
1. [Configure Managed Service Access](#configure-managed-service-access)
|
||||
1. [Provision MySQL](#provision-mysql)
|
||||
1. [Resource Claim](#resource-claim)
|
||||
1. [Install Wordpress](#install-wordpress)
|
||||
1. [Clean Up](#clean-up)
|
||||
1. [Conclusion and Next Steps](#conclusion-and-next-steps)
|
||||
|
||||
## Pre-requisites
|
||||
|
||||
* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
|
||||
* A GKE cluster.
|
||||
|
||||
## Preparation
|
||||
|
||||
This guide assumes that you have setup the gcloud CLI and are logged in to your
|
||||
desired account.
|
||||
|
||||
*Note: environment variables are used throughout this guide. You should use your
|
||||
own values.*
|
||||
|
||||
Run the following:
|
||||
```bash
|
||||
export PROJECT_ID=crossplane-playground # the project that all resources reside.
|
||||
export NETWORK_NAME=default # the network that your GKE cluster lives in.
|
||||
export SUBNETWORK_NAME=default # the subnetwork that your GKE cluster lives in.
|
||||
```
|
||||
|
||||
## Set Up Crossplane
|
||||
|
||||
### Installation
|
||||
|
||||
Assuming you are
|
||||
[connected](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl)
|
||||
to your GKE cluster via `kubectl`:
|
||||
|
||||
* Install Crossplane from alpha channel using the [Crossplane Installation
|
||||
Guide](../install-crossplane.md#alpha)
|
||||
* Install the GCP stack into Crossplane using the [GCP stack
|
||||
section](../install-crossplane.md#gcp-stack) of the install guide.
|
||||
|
||||
To keep your resource configuration organized, start by creating a new
|
||||
directory:
|
||||
|
||||
```bash
|
||||
mkdir wordpress && cd $_
|
||||
```
|
||||
|
||||
### Cloud Provider
|
||||
|
||||
It is essential to make sure that the GCP user credentials are configured in
|
||||
Crossplane as a provider. Please follow the steps in the GCP [provider
|
||||
guide](../cloud-providers/gcp/gcp-provider.md) for more information.
|
||||
|
||||
### Resource Classes
|
||||
|
||||
Resource classes are used to define a reusable configuration for a specific
|
||||
managed service. Wordpress requires a MySQL database, which can be satisfied by
|
||||
a [Google Cloud SQL Instance](https://cloud.google.com/sql/docs/mysql/).
|
||||
|
||||
* Define a GCP CloudSQL class `CloudSQLInstanceClass`:
|
||||
|
||||
```bash
|
||||
cat > gcp-mysql-standard.yaml <<EOF
|
||||
---
|
||||
apiVersion: database.gcp.crossplane.io/v1beta1
|
||||
kind: CloudSQLInstanceClass
|
||||
metadata:
|
||||
name: standard-cloudsql
|
||||
labels:
|
||||
size: standard
|
||||
specTemplate:
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
forProvider:
|
||||
databaseVersion: MYSQL_5_7
|
||||
region: us-central1
|
||||
settings:
|
||||
tier: db-n1-standard-1
|
||||
dataDiskType: PD_SSD
|
||||
dataDiskSizeGb: 10
|
||||
# Note from GCP Docs: Your Cloud SQL instances are not created in your VPC network.
|
||||
# They are created in the service producer network (a VPC network internal to Google) that is then connected (peered) to your VPC network.
|
||||
ipConfiguration:
|
||||
privateNetwork: projects/$PROJECT_ID/global/networks/$NETWORK_NAME
|
||||
providerRef:
|
||||
name: gcp-provider
|
||||
reclaimPolicy: Delete
|
||||
EOF
|
||||
|
||||
kubectl apply -f gcp-mysql-standard.yaml
|
||||
```
|
||||
|
||||
* You can verify creation with the following command and output:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get cloudsqlinstanceclasses
|
||||
```
|
||||
*Output*
|
||||
```bash
|
||||
NAME PROVIDER-REF RECLAIM-POLICY AGE
|
||||
standard-cloudsql gcp-provider Delete 11s
|
||||
```
|
||||
|
||||
You are free to create more GCP `CloudSQLInstanceClass` instances to define more
|
||||
potential configurations. For instance, you may create `large-gcp-mysql` with
|
||||
field `storageGB: 100`.
|
||||
|
||||
### Configure Managed Service Access
|
||||
|
||||
Before we install Wordpress, we need to establish connectivity between the the
|
||||
MySQL database and the GKE cluster. We can do this by creating a [Private
|
||||
Service
|
||||
Connection](https://cloud.google.com/vpc/docs/configure-private-services-access).
|
||||
|
||||
You can create it by following the instructions at the link above, or you could
|
||||
use Crossplane to do it:
|
||||
|
||||
* Create a `GlobalAddress` and `Connection` resources:
|
||||
|
||||
```bash
|
||||
cat > network.yaml <<EOF
|
||||
---
|
||||
# example-globaladdress defines the IP range that will be allocated for cloud services connecting
|
||||
# to the instances in the given Network.
|
||||
apiVersion: compute.gcp.crossplane.io/v1alpha3
|
||||
kind: GlobalAddress
|
||||
metadata:
|
||||
name: example-globaladdress
|
||||
spec:
|
||||
providerRef:
|
||||
name: gcp-provider
|
||||
reclaimPolicy: Delete
|
||||
name: example-globaladdress
|
||||
purpose: VPC_PEERING
|
||||
addressType: INTERNAL
|
||||
prefixLength: 16
|
||||
network: projects/$PROJECT_ID/global/networks/$NETWORK_NAME
|
||||
---
|
||||
# example-connection is what allows cloud services to use the allocated GlobalAddress for communication. Behind
|
||||
# the scenes, it creates a VPC peering to the network that those service instances actually live.
|
||||
apiVersion: servicenetworking.gcp.crossplane.io/v1alpha3
|
||||
kind: Connection
|
||||
metadata:
|
||||
name: example-connection
|
||||
spec:
|
||||
providerRef:
|
||||
name: gcp-provider
|
||||
reclaimPolicy: Delete
|
||||
parent: services/servicenetworking.googleapis.com
|
||||
network: projects/$PROJECT_ID/global/networks/$NETWORK_NAME
|
||||
reservedPeeringRangeRefs:
|
||||
- name: example-globaladdress
|
||||
EOF
|
||||
|
||||
kubectl apply -f network.yaml
|
||||
```
|
||||
|
||||
* You can verify creation with the following command and output:
|
||||
|
||||
*Command*
|
||||
|
||||
```bash
|
||||
kubectl describe connection.servicenetworking.gcp.crossplane.io example-connection
|
||||
```
|
||||
|
||||
*Output*
|
||||
|
||||
```yaml
|
||||
Name: example-connection
|
||||
Namespace:
|
||||
Labels: <none>
|
||||
Annotations: crossplane.io/external-name: example-connection
|
||||
kubectl.kubernetes.io/last-applied-configuration:
|
||||
{"apiVersion":"servicenetworking.gcp.crossplane.io/v1alpha3","kind":"Connection","metadata":{"annotations":{},"name":"example-connection"}...
|
||||
API Version: servicenetworking.gcp.crossplane.io/v1alpha3
|
||||
Kind: Connection
|
||||
Metadata:
|
||||
Creation Timestamp: 2019-10-28T14:10:23Z
|
||||
Finalizers:
|
||||
finalizer.managedresource.crossplane.io
|
||||
Generation: 1
|
||||
Resource Version: 7245
|
||||
Self Link: /apis/servicenetworking.gcp.crossplane.io/v1alpha3/connections/example-connection
|
||||
UID: aeae7e4d-f98c-11e9-8275-42010a800122
|
||||
Spec:
|
||||
Network: projects/crossplane-playground/global/networks/default
|
||||
Parent: services/servicenetworking.googleapis.com
|
||||
Provider Ref:
|
||||
Name: gcp-provider
|
||||
Reclaim Policy: Delete
|
||||
Reserved Peering Ranges:
|
||||
example-globaladdress
|
||||
Status:
|
||||
Conditions:
|
||||
Last Transition Time: 2019-10-28T14:10:23Z
|
||||
Reason: Successfully resolved managed resource references to other resources
|
||||
Status: True
|
||||
Type: ReferencesResolved
|
||||
Last Transition Time: 2019-10-28T14:10:23Z
|
||||
Reason: Managed resource is being created
|
||||
Status: False
|
||||
Type: Ready
|
||||
Last Transition Time: 2019-10-28T14:10:23Z
|
||||
Reason: Successfully reconciled managed resource
|
||||
Status: True
|
||||
Type: Synced
|
||||
Events: <none>
|
||||
```
|
||||
|
||||
We are looking for the `Connection` resource to report `Type: Ready` `Status:
|
||||
True` in its `status.conditions`.
|
||||
|
||||
## Provision
|
||||
|
||||
### Resource Claim
|
||||
|
||||
Resource claims are used for dynamic provisioning of a managed resource (like a
|
||||
MySQL instance) by matching the claim to a resource class. This can be done in
|
||||
several ways: (a) rely on the default class marked
|
||||
`resourceclass.crossplane.io/is-default-class: "true"`, (b) use a
|
||||
`claim.spec.classRef` to a specific class, or (c) match on class labels using a
|
||||
`claim.spec.classSelector`.
|
||||
|
||||
*Note: claims may also be used in [static
|
||||
provisioning](../concepts.md#dynamic-and-static-provisioning) with a reference
|
||||
to an existing managed resource.*
|
||||
|
||||
In the `CloudSQLInstanceClass` above, we added the label `size: standard`, so
|
||||
our claim will be scheduled to that class using the label is specified in the
|
||||
`claim.spec.classSelector`. If there are multiple classes which match the
|
||||
specified label(s) one will be chosen at random.
|
||||
|
||||
* Define a `MySQLInstance` claim in `mysql-claim.yaml`:
|
||||
|
||||
```bash
|
||||
cat > mysql-claim.yaml <<EOF
|
||||
---
|
||||
apiVersion: database.crossplane.io/v1alpha1
|
||||
kind: MySQLInstance
|
||||
metadata:
|
||||
name: mysql-claim
|
||||
spec:
|
||||
classSelector:
|
||||
matchLabels:
|
||||
size: standard
|
||||
engineVersion: "5.7"
|
||||
# A secret is exported by providing the secret name
|
||||
# to export it under. This is the name of the secret
|
||||
# in the crossplane cluster, and it's scoped to this claim's namespace.
|
||||
writeConnectionSecretToRef:
|
||||
name: wordpressmysql
|
||||
EOF
|
||||
|
||||
kubectl apply -f mysql-claim.yaml
|
||||
```
|
||||
|
||||
What we are looking for is for the claim's `STATUS` value to become `Bound`
|
||||
which indicates the managed resource was successfully provisioned and is ready
|
||||
for consumption. You can see when claim is bound using the following:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get mysqlinstances
|
||||
```
|
||||
|
||||
*Output*
|
||||
```bash
|
||||
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
|
||||
mysql-claim Bound CloudSQLInstanceClass standard-cloudsql CloudSQLInstance default-mysql-claim-vtnf7 3m
|
||||
```
|
||||
|
||||
If the `STATUS` is blank, we are still waiting for the claim to become bound.
|
||||
You can observe resource creation progression using the following:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl describe mysqlinstance mysql-claim
|
||||
```
|
||||
|
||||
*Output*
|
||||
```
|
||||
Name: mysql-claim
|
||||
Namespace: default
|
||||
Labels: <none>
|
||||
Annotations: kubectl.kubernetes.io/last-applied-configuration:
|
||||
{"apiVersion":"database.crossplane.io/v1alpha1","kind":"MySQLInstance","metadata":{"annotations":{},"name":"mysql-claim","namespace":"defa...
|
||||
API Version: database.crossplane.io/v1alpha1
|
||||
Kind: MySQLInstance
|
||||
Metadata:
|
||||
Creation Timestamp: 2019-10-28T14:18:55Z
|
||||
Finalizers:
|
||||
finalizer.resourceclaim.crossplane.io
|
||||
Generation: 3
|
||||
Resource Version: 9011
|
||||
Self Link: /apis/database.crossplane.io/v1alpha1/namespaces/default/mysqlinstances/mysql-claim
|
||||
UID: e0329d69-f98d-11e9-8275-42010a800122
|
||||
Spec:
|
||||
Class Ref:
|
||||
API Version: database.gcp.crossplane.io/v1beta1
|
||||
Kind: CloudSQLInstanceClass
|
||||
Name: standard-cloudsql
|
||||
UID: 431580bd-f989-11e9-8275-42010a800122
|
||||
Class Selector:
|
||||
Match Labels:
|
||||
Size: standard
|
||||
Engine Version: 5.7
|
||||
Resource Ref:
|
||||
API Version: database.gcp.crossplane.io/v1beta1
|
||||
Kind: CloudSQLInstance
|
||||
Name: default-mysql-claim-vtnf7
|
||||
UID: e07c42c5-f98d-11e9-8275-42010a800122
|
||||
Write Connection Secret To Ref:
|
||||
Name: wordpressmysql
|
||||
Status:
|
||||
Conditions:
|
||||
Last Transition Time: 2019-10-28T14:18:56Z
|
||||
Reason: Managed claim is waiting for managed resource to become bindable
|
||||
Status: False
|
||||
Type: Ready
|
||||
Last Transition Time: 2019-10-28T14:18:56Z
|
||||
Reason: Successfully reconciled managed resource
|
||||
Status: True
|
||||
Type: Synced
|
||||
Events: <none>
|
||||
```
|
||||
|
||||
*Note: You must wait until the claim becomes bound before continuing with this
|
||||
guide. It could take a few minutes for GCP to complete CloudSQL creation.*
|
||||
|
||||
## Install Wordpress
|
||||
|
||||
Installing Wordpress requires creating a Kubernetes `Deployment` and load
|
||||
balancer `Service`. We will point the deployment to the `wordpressmysql` secret
|
||||
that we specified in our claim above for the Wordpress container environment
|
||||
variables. It should have been populated with our MySQL connection details after
|
||||
the claim became `Bound`.
|
||||
|
||||
> Binding status tells you whether your resource has been provisioned and ready
|
||||
to use. Crossplane binds the actual resource to the claim via changing the
|
||||
readiness condition to `Bound`. This happens only when the resource is ready to
|
||||
be consumed.
|
||||
|
||||
* Check to make sure `wordpressmysql` exists and is populated:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl describe secret wordpressmysql
|
||||
```
|
||||
|
||||
*Output*
|
||||
```bash
|
||||
Name: wordpressmysql
|
||||
Namespace: default
|
||||
Labels: <none>
|
||||
Annotations: crossplane.io/propagate-from-name: 330cccf5-f991-11e9-8275-42010a800122
|
||||
crossplane.io/propagate-from-namespace: crossplane-system
|
||||
crossplane.io/propagate-from-uid: 33581ec7-f991-11e9-8275-42010a800122
|
||||
|
||||
Type: Opaque
|
||||
|
||||
Data
|
||||
====
|
||||
endpoint: 10 bytes
|
||||
password: 27 bytes
|
||||
publicIP: 13 bytes
|
||||
serverCACertificateCert: 1272 bytes
|
||||
serverCACertificateCommonName: 98 bytes
|
||||
serverCACertificateCreateTime: 24 bytes
|
||||
serverCACertificateExpirationTime: 24 bytes
|
||||
privateIP: 10 bytes
|
||||
serverCACertificateCertSerialNumber: 1 bytes
|
||||
serverCACertificateInstance: 25 bytes
|
||||
serverCACertificateSha1Fingerprint: 40 bytes
|
||||
username: 4 bytes
|
||||
```
|
||||
|
||||
* Define the `Deployment` and `Service` in `wordpress.yaml`:
|
||||
|
||||
```bash
|
||||
cat > wordpress.yaml <<EOF
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: wordpress
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: wordpress
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
containers:
|
||||
- name: wordpress
|
||||
image: wordpress:4.6.1-apache
|
||||
env:
|
||||
- name: WORDPRESS_DB_HOST
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wordpressmysql
|
||||
key: endpoint
|
||||
- name: WORDPRESS_DB_USER
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wordpressmysql
|
||||
key: username
|
||||
- name: WORDPRESS_DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: wordpressmysql
|
||||
key: password
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: wordpress
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: wordpress
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
selector:
|
||||
app: wordpress
|
||||
type: LoadBalancer
|
||||
EOF
|
||||
|
||||
kubectl apply -f wordpress.yaml
|
||||
```
|
||||
|
||||
* You can verify creation with the following command and output:
|
||||
|
||||
*Command*
|
||||
|
||||
```bash
|
||||
kubectl get -f wordpress.yaml
|
||||
```
|
||||
|
||||
*Output*
|
||||
|
||||
```bash
|
||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||
deployment.apps/wordpress 1/1 1 1 77s
|
||||
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
service/wordpress LoadBalancer 10.12.3.121 35.223.147.148 80:30287/TCP 77s
|
||||
```
|
||||
|
||||
If the `EXTERNAL-IP` field of the `LoadBalancer` is `<pending>`, wait until it
|
||||
becomes available, then navigate to the address. You should see the following:
|
||||
|
||||

|
||||
|
||||
## Clean Up
|
||||
|
||||
Because we put all of our configuration in a single directory, we can delete it
|
||||
all with this command:
|
||||
|
||||
```bash
|
||||
kubectl delete -f wordpress/
|
||||
```
|
||||
|
||||
If you would like to also uninstall Crossplane and the AWS stack, run the
|
||||
following command:
|
||||
|
||||
```bash
|
||||
kubectl delete namespace crossplane-system
|
||||
```
|
||||
|
||||
## Conclusion and Next Steps
|
||||
|
||||
We're done!
|
||||
|
||||
In this guide, we:
|
||||
|
||||
* Set up Crossplane on our GKE Cluster.
|
||||
* Installed Crossplane GCP Stack.
|
||||
* Created resource classes for MySQL database.
|
||||
* Provisioned a MySQL database on GCP using Crossplane.
|
||||
* Connected our GKE cluster to our MySQL database.
|
||||
* Installed Wordpress to our GKE cluster.
|
||||
|
||||
In this guide, we used an existing GKE cluster but actually Crossplane can
|
||||
provision a Kubernetes cluster from GCP just like it provisions a MySQL
|
||||
database.
|
||||
|
||||
We deployed Wordpress using bare `Deployment` and `Service` resources but there
|
||||
is actually a Wordpress App stack that creates these resources for us!
|
||||
|
||||
Check out the [stacks guides](../stacks-guide.md)!
|
||||
|
||||
## References
|
||||
|
||||
* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
|
||||
* [Crossplane Installation Guide](../install-crossplane.md#alpha)
|
||||
* [GCP Stack Installation](../install-crossplane.md#gcp-stack)
|
||||
* [GCP Provider Guide](../cloud-providers/gcp/gcp-provider.md)
|
||||
* [Google Cloud SQL Instance](https://cloud.google.com/sql/docs/mysql/)
|
||||
* [Default Resource Classes One-Pager](https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-default-resource-class.md)
|
||||
* [Google Private Service Connection](https://cloud.google.com/vpc/docs/configure-private-services-access)
|
||||
|
After Width: | Height: | Size: 155 KiB |
|
|
@ -0,0 +1,578 @@
|
|||
---
|
||||
title: "Stacks Guide: AWS Setup"
|
||||
toc: true
|
||||
weight: 530
|
||||
indent: true
|
||||
---
|
||||
|
||||
# Stacks Guide: AWS Setup
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Stacks Guide: AWS Setup](#stacks-guide-aws-setup)
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [Introduction](#introduction)
|
||||
- [Install the AWS stack](#install-the-aws-stack)
|
||||
- [Validate the installation](#validate-the-installation)
|
||||
- [Configure the AWS account](#configure-the-aws-account)
|
||||
- [Set Up Network Configuration](#set-up-network-configuration)
|
||||
- [TL;DR](#tldr)
|
||||
- [Behind the scenes](#behind-the-scenes)
|
||||
- [Configure Resource Classes](#configure-resource-classes)
|
||||
- [TL;DR](#tldr-1)
|
||||
- [More Details](#more-details)
|
||||
- [Recap](#recap)
|
||||
- [Next Steps](#next-steps)
|
||||
|
||||
## Introduction
|
||||
|
||||
In this guide, we will set up an AWS provider in Crossplane so that we can
|
||||
install and use the [WordPress sample stack][sample-WordPress-stack], which
|
||||
depends on MySQL and Kubernetes!
|
||||
|
||||
Before we begin, you will need:
|
||||
|
||||
- Everything from the [Crossplane Stacks Guide][stacks-guide] before the cloud
|
||||
provider setup
|
||||
- The `kubectl` (v1.15+) tool installed and pointing to a Crossplane cluster
|
||||
- The [Crossplane CLI][crossplane-cli] installed
|
||||
- An account on [AWS][aws]
|
||||
- The [aws cli][aws command line tool] installed
|
||||
|
||||
At the end, we will have:
|
||||
|
||||
- A Crossplane cluster configured to use AWS
|
||||
- A typical AWS network configured to support secure connectivity between
|
||||
resources
|
||||
- Support in Crossplane cluster for satisfying MySQL and Kubernetes claims
|
||||
- A slightly better understanding of:
|
||||
- The way AWS is configured in Crossplane
|
||||
- The way dependencies for cloud-portable workloads are configured in
|
||||
Crossplane
|
||||
|
||||
We will **not** be covering the core concepts in this guide, but feel free to
|
||||
check out the [Crossplane concepts document][crossplane-concepts] for that.
|
||||
|
||||
## Install the AWS stack
|
||||
|
||||
After Crossplane has been installed, it can be extended with more functionality
|
||||
by installing a [Crossplane Stack][stack-docs]! Let's install the [stack for
|
||||
Amazon Web Services][stack-aws] (AWS) to add support for that cloud provider.
|
||||
|
||||
The namespace where we install the stack, is also the one in which the provider
|
||||
secret will reside. The name of this namespace is arbitrary, and we are calling
|
||||
it `crossplane-system` in this guide. Let's create it:
|
||||
|
||||
```bash
|
||||
# namespace for AWS stack and provider secret
|
||||
kubectl create namespace crossplane-system
|
||||
```
|
||||
|
||||
Now we install the AWS stack using Crossplane CLI. Since this is an
|
||||
infrastructure stack, we need to specify that it's cluster-scoped by passing the
|
||||
`--cluster` flag.
|
||||
|
||||
```bash
|
||||
kubectl crossplane stack generate-install --cluster 'crossplane/stack-aws:master' stack-aws | kubectl apply --namespace crossplane-system -f -
|
||||
```
|
||||
|
||||
The rest of this guide assumes that the AWS stack is installed within
|
||||
`crossplane-system` namespace.
|
||||
|
||||
### Validate the installation
|
||||
|
||||
To check to see whether our stack installed correctly, we can look at the status
|
||||
of our stack:
|
||||
|
||||
```bash
|
||||
kubectl -n crossplane-system get stack
|
||||
```
|
||||
|
||||
It should look something like:
|
||||
|
||||
```bash
|
||||
NAME READY VERSION AGE
|
||||
stack-aws True 0.0.2 45s
|
||||
```
|
||||
|
||||
## Configure the AWS account
|
||||
|
||||
It is essential to make sure that the AWS user credentials are configured in
|
||||
Crossplane as a provider. Please follow the steps in the AWS [provider
|
||||
guide][aws-provider-guide] for more information.
|
||||
|
||||
## Set Up Network Configuration
|
||||
|
||||
In this section we build a simple AWS network configuration, by creating
|
||||
corresponding Crossplane managed resources. These resources are cluster scoped,
|
||||
so don't belong to a specific namespace. This network configuration enables
|
||||
resources in the WordPress stack to communicate securely. In this guide, we will use
|
||||
the [sample AWS network configuration][] in the Crossplane repository. You can read
|
||||
more [here][crossplane-aws-networking-docs] about network secure connectivity
|
||||
configurations in Crossplane.
|
||||
|
||||
### TL;DR
|
||||
|
||||
Apply the sample network configuration resources:
|
||||
|
||||
```bash
|
||||
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/aws/network-config?ref=master
|
||||
```
|
||||
|
||||
And you're done! You can check the status of the provisioning by running:
|
||||
|
||||
```bash
|
||||
kubectl get -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/aws/network-config?ref=master
|
||||
```
|
||||
|
||||
When all resources have the `Ready` condition in `True` state, the provisioning
|
||||
is complete. You can now move on to the next section, or keep reading below for
|
||||
more details about the managed resources that we created.
|
||||
|
||||
### Behind the scenes
|
||||
|
||||
When configured in AWS, WordPress resources map to an EKS cluster and an RDS
|
||||
database instance. In order to make the RDS instance accessible from the EKS
|
||||
cluster, they both need to live within the same VPC. However, a VPC is not the
|
||||
only AWS resource that needs to be created to provide inter-resource
|
||||
connectivity. In general, a **Network Configuration** which consists of a set of
|
||||
VPCs, Subnets, Security Groups, Route Tables, IAM Roles and other resources is
|
||||
required for this purpose. For more information, see [AWS resource
|
||||
connectivity][aws-resource-connectivity] design document.
|
||||
|
||||
To inspect the resources that we created above, let's run:
|
||||
|
||||
```bash
|
||||
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/aws/network-config?ref=master > network-config.yaml
|
||||
```
|
||||
|
||||
This will save the sample network configuration resources locally in
|
||||
`network-config.yaml`. Please note that the AWS parameters that are used in
|
||||
these resources (like `cidrBlock`, `region`, etc...) are arbitrarily chosen in
|
||||
this solution and could be configured to implement other
|
||||
[configurations][eks-user-guide].
|
||||
|
||||
Below we inspect each of these resources in more details.
|
||||
|
||||
- **`VPC`** Represents an AWS [Virtual Private Network][] (VPC).
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: network.aws.crossplane.io/v1alpha3
|
||||
kind: VPC
|
||||
metadata:
|
||||
name: sample-vpc
|
||||
spec:
|
||||
cidrBlock: 192.168.0.0/16
|
||||
enableDnsSupport: true
|
||||
enableDnsHostNames: true
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
```
|
||||
|
||||
- **`Subnet`** Represents an AWS [Subnet][]. For this configuration we create
|
||||
one Subnet per each availability zone in the selected region.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: network.aws.crossplane.io/v1alpha3
|
||||
kind: Subnet
|
||||
metadata:
|
||||
name: sample-subnet1
|
||||
spec:
|
||||
cidrBlock: 192.168.64.0/18
|
||||
vpcIdRef:
|
||||
name: sample-vpc
|
||||
availabilityZone: us-west-2a
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
---
|
||||
apiVersion: network.aws.crossplane.io/v1alpha3
|
||||
kind: Subnet
|
||||
metadata:
|
||||
name: sample-subnet2
|
||||
spec:
|
||||
cidrBlock: 192.168.128.0/18
|
||||
vpcIdRef:
|
||||
name: sample-vpc
|
||||
availabilityZone: us-west-2b
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
---
|
||||
apiVersion: network.aws.crossplane.io/v1alpha3
|
||||
kind: Subnet
|
||||
metadata:
|
||||
name: sample-subnet3
|
||||
spec:
|
||||
cidrBlock: 192.168.192.0/18
|
||||
vpcIdRef:
|
||||
name: sample-vpc
|
||||
availabilityZone: us-west-2c
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
```
|
||||
|
||||
- **`InternetGateway`** Represents an AWS [Internet Gateway][] which allows the
|
||||
resources in the VPC to have access to the Internet. Since the WordPress
|
||||
application will be accessed from the internet, this resource is required in
|
||||
the network configuration.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: network.aws.crossplane.io/v1alpha3
|
||||
kind: InternetGateway
|
||||
metadata:
|
||||
name: sample-internetgateway
|
||||
spec:
|
||||
vpcIdRef:
|
||||
name: sample-vpc
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
```
|
||||
|
||||
- **`RouteTable`** Represents an AWS [Route Table][], which specifies rules to
|
||||
direct traffic in a virtual network. We use a Route Table to redirect internet
|
||||
traffic from all Subnets to the Internet Gateway instance.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: network.aws.crossplane.io/v1alpha3
|
||||
kind: RouteTable
|
||||
metadata:
|
||||
name: sample-routetable
|
||||
spec:
|
||||
vpcIdRef:
|
||||
name: sample-vpc
|
||||
routes:
|
||||
- destinationCidrBlock: 0.0.0.0/0
|
||||
gatewayIdRef:
|
||||
name: sample-internetgateway
|
||||
associations:
|
||||
- subnetIdRef:
|
||||
name: sample-subnet1
|
||||
- subnetIdRef:
|
||||
name: sample-subnet2
|
||||
- subnetIdRef:
|
||||
name: sample-subnet3
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
```
|
||||
|
||||
- **`SecurityGroup`** Represents an AWS [Security Group][], which controls
|
||||
inbound and outbound traffic to EC2 instances.
|
||||
|
||||
We need two security groups in this configuration:
|
||||
|
||||
- A security group to assign later to the EKS cluster workers, so they have
|
||||
the right permissions to communicate with each API server
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: network.aws.crossplane.io/v1alpha3
|
||||
kind: SecurityGroup
|
||||
metadata:
|
||||
name: sample-cluster-sg
|
||||
spec:
|
||||
vpcIdRef:
|
||||
name: sample-vpc
|
||||
groupName: my-cool-ekscluster-sg
|
||||
description: Cluster communication with worker nodes
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
```
|
||||
|
||||
- A security group to assign later to the RDS database instance, which
|
||||
allows the instance to accept traffic from worker nodes.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: network.aws.crossplane.io/v1alpha3
|
||||
kind: SecurityGroup
|
||||
metadata:
|
||||
name: sample-rds-sg
|
||||
spec:
|
||||
vpcIdRef:
|
||||
name: sample-vpc
|
||||
groupName: my-cool-rds-sg
|
||||
description: open rds access to crossplane workload
|
||||
reclaimPolicy: Delete
|
||||
ingress:
|
||||
- fromPort: 3306
|
||||
toPort: 3306
|
||||
protocol: tcp
|
||||
cidrBlocks:
|
||||
- cidrIp: 0.0.0.0/0
|
||||
description: all ips
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
```
|
||||
|
||||
- **`DBSubnetGroup`** Represents an AWS [Database Subnet Group][] that stores a
|
||||
set of existing Subnets in different availability zones, from which an IP
|
||||
address is chosen and assigned to the RDS instance.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: database.aws.crossplane.io/v1alpha3
|
||||
kind: DBSubnetGroup
|
||||
metadata:
|
||||
name: sample-dbsubnetgroup
|
||||
spec:
|
||||
groupName: my-cool-dbsubnetgroup
|
||||
description: EKS vpc to rds
|
||||
subnetIdRefs:
|
||||
- name: sample-subnet1
|
||||
- name: sample-subnet2
|
||||
- name: sample-subnet3
|
||||
tags:
|
||||
- key: name
|
||||
value: my-cool-dbsubnetgroup
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
```
|
||||
|
||||
- **`IAMRole`** Represents An AWS [IAM Role][], which assigns a set of access
|
||||
policies to the AWS principal that assumes it. We create a role, and later add
|
||||
policies to it and then assign the role to the cluster. This grants the
|
||||
permissions the cluster needs to communicate with other resources in AWS.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: identity.aws.crossplane.io/v1alpha3
|
||||
kind: IAMRole
|
||||
metadata:
|
||||
name: sample-eks-cluster-role
|
||||
spec:
|
||||
roleName: my-cool-eks-cluster-role
|
||||
description: a role that gives a cool power
|
||||
assumeRolePolicyDocument: |
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Principal": {
|
||||
"Service": "eks.amazonaws.com"
|
||||
},
|
||||
"Action": "sts:AssumeRole"
|
||||
}
|
||||
]
|
||||
}
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
```
|
||||
|
||||
- **`IAMRolePolicyAttachment`** Represents an AWS [IAM Role Policy][], which
|
||||
defines a certain permission in an IAM Role. We need two policies to create
|
||||
and assign to the IAM Role above, so the cluster my communicate with other
|
||||
AWS resources.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: identity.aws.crossplane.io/v1alpha3
|
||||
kind: IAMRolePolicyAttachment
|
||||
metadata:
|
||||
name: sample-role-servicepolicy
|
||||
spec:
|
||||
roleNameRef:
|
||||
name: sample-eks-cluster-role
|
||||
# wellknown policy arn
|
||||
policyArn: arn:aws:iam::aws:policy/AmazonEKSServicePolicy
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
---
|
||||
apiVersion: identity.aws.crossplane.io/v1alpha3
|
||||
kind: IAMRolePolicyAttachment
|
||||
metadata:
|
||||
name: sample-role-clusterpolicy
|
||||
spec:
|
||||
roleNameRef:
|
||||
name: sample-eks-cluster-role
|
||||
# wellknown policy arn
|
||||
policyArn: arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
```
|
||||
|
||||
As you probably have noticed, some resources are referencing other resources in
|
||||
their YAML representations. For instance for `Subnet` resource we have:
|
||||
|
||||
```yaml
|
||||
...
|
||||
vpcIdRef:
|
||||
name: sample-vpc
|
||||
...
|
||||
```
|
||||
|
||||
Such cross resource referencing is a Crossplane feature that enables managed
|
||||
resources to retrieve other resources attributes. This creates a *blocking
|
||||
dependency*, preventing the dependent resource from being created before the referred
|
||||
resource is ready. In the example above, `Subnet` will be blocked until the
|
||||
referred `VPC` is created, and then it retrieves its `vpcId`. For more
|
||||
information, see [Cross Resource Referencing][].
|
||||
|
||||
## Configure Resource Classes
|
||||
|
||||
Once we have the network configuration set up, we need to tell Crossplane how to
|
||||
satisfy WordPress's claims (that will be created when we later install the
|
||||
WordPress stack) for a database and a Kubernetes cluster. The [Resource
|
||||
Classes][resource-claims-docs] serve as templates for the corresponding resource
|
||||
claims.
|
||||
|
||||
In this guide, we will use the [sample AWS resource classes][] in Crossplane
|
||||
repository.
|
||||
|
||||
### TL;DR
|
||||
|
||||
Apply the sample AWS resource classes:
|
||||
|
||||
```bash
|
||||
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/aws/resource-classes?ref=master
|
||||
```
|
||||
|
||||
And you're done! Note that these resources do not immediately provision external
|
||||
AWS resources, as they only serve as as template classes.
|
||||
|
||||
### More Details
|
||||
|
||||
To inspect the resource classes that we created above, run:
|
||||
|
||||
```bash
|
||||
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/aws/resource-classes?ref=master > resource-classes.yaml
|
||||
```
|
||||
|
||||
This will save the sample resource classes YAML locally in
|
||||
`resource-classes.yaml`. As mentioned above, these resource classes serve as
|
||||
templates and could be configured depending on the specific needs that are
|
||||
needed from the underlying resources. For instance, in the sample resources the
|
||||
`RDSInstanceClass` has `size: 20`, which will result in RDS databases of size 20
|
||||
once a claim is submitted for this class. In addition, it's possible to have
|
||||
multiple classes defined for the same claim kind, but our sample has defined
|
||||
only one class for each resource type.
|
||||
|
||||
Below we inspect each of these resource classes in more details:
|
||||
|
||||
- **`RDSInstanceClass`** Represents a resource that serves as a template to
|
||||
create an [RDS Database Instance][].
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: database.aws.crossplane.io/v1beta1
|
||||
kind: RDSInstanceClass
|
||||
metadata:
|
||||
name: standard-mysql
|
||||
annotations:
|
||||
resourceclass.crossplane.io/is-default-class: "true"
|
||||
specTemplate:
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
forProvider:
|
||||
dbInstanceClass: db.t2.small
|
||||
masterUsername: cool_user
|
||||
vpcSecurityGroupIDRefs:
|
||||
- name: sample-rds-sg
|
||||
dbSubnetGroupNameRef:
|
||||
name: sample-dbsubnetgroup
|
||||
allocatedStorage: 20
|
||||
engine: mysql
|
||||
skipFinalSnapshotBeforeDeletion: true
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
reclaimPolicy: Delete
|
||||
```
|
||||
|
||||
- **`EKSClusterClass`** Represents a resource that serves as a template to create an [EKS Cluster][].
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: compute.aws.crossplane.io/v1alpha3
|
||||
kind: EKSClusterClass
|
||||
metadata:
|
||||
name: standard-cluster
|
||||
annotations:
|
||||
resourceclass.crossplane.io/is-default-class: "true"
|
||||
specTemplate:
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
region: us-west-2
|
||||
roleARNRef:
|
||||
name: sample-eks-cluster-role
|
||||
vpcIdRef:
|
||||
name: sample-vpc
|
||||
subnetIdRefs:
|
||||
- name: sample-subnet1
|
||||
- name: sample-subnet2
|
||||
- name: sample-subnet3
|
||||
securityGroupIdRefs:
|
||||
- name: sample-cluster-sg
|
||||
workerNodes:
|
||||
nodeInstanceType: m3.medium
|
||||
nodeAutoScalingGroupMinSize: 1
|
||||
nodeAutoScalingGroupMaxSize: 1
|
||||
nodeGroupName: demo-nodes
|
||||
clusterControlPlaneSecurityGroupRef:
|
||||
name: sample-cluster-sg
|
||||
providerRef:
|
||||
name: aws-provider
|
||||
reclaimPolicy: Delete
|
||||
```
|
||||
|
||||
These resources will be the default resource classes for the corresponding
|
||||
claims (`resourceclass.crossplane.io/is-default-class: "true"` annotation). For
|
||||
more details about resource claims and how they work, see the documentation on
|
||||
[resource claims][resource-claims-docs], and [resource class selection].
|
||||
|
||||
## Recap
|
||||
|
||||
To recap what we've set up now in our environment:
|
||||
|
||||
- A Crossplane Provider resource for AWS
|
||||
- A Network Configuration to have secure connectivity between resources
|
||||
- An EKSClusterClass and an RDSInstanceClass with the right configuration to use
|
||||
the mentioned networking setup.
|
||||
|
||||
## Next Steps
|
||||
|
||||
Next we'll set up a Crossplane App Stack and use it! Head [back over to the
|
||||
Stacks Guide document][stacks-guide-continue] so we can pick up where we left
|
||||
off.
|
||||
|
||||
<!-- Links -->
|
||||
[crossplane-concepts]: concepts.md
|
||||
[stacks-guide]: stacks-guide.md
|
||||
[aws]: https://aws.amazon.com
|
||||
[stack-aws]: https://github.com/crossplaneio/stack-aws
|
||||
[sample-wordpress-stack]: https://github.com/crossplaneio/sample-stack-wordpress
|
||||
[stack-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#crossplane-stacks
|
||||
[aws command line tool]: https://aws.amazon.com/cli/
|
||||
[crossplane-cli]: https://github.com/crossplaneio/crossplane-cli/tree/release-0.2
|
||||
[Virtual Private Network]: https://aws.amazon.com/vpc/
|
||||
[Subnet]: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#vpc-subnet-basics
|
||||
[aws-resource-connectivity]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-resource-connectivity-mvp.md#amazon-web-services
|
||||
[Internet Gateway]: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html
|
||||
[Route Table]: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html
|
||||
[Security Group]: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html
|
||||
[Database Subnet Group]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html
|
||||
[IAM Role]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html
|
||||
[IAM Role Policy]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html
|
||||
[stacks-guide-continue]: stacks-guide.md#install-support-for-our-application-into-crossplane
|
||||
[resource-claims-docs]: concepts.md#resource-claims-and-resource-classes
|
||||
[eks-user-guide]: https://docs.aws.amazon.com/eks/latest/userguide/create-public-private-vpc.html
|
||||
[Cross Resource Referencing]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-cross-resource-referencing.md
|
||||
[sample AWS network configuration]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/aws/network-config?ref=master
|
||||
[sample AWS resource classes]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/aws/resource-classes?ref=master
|
||||
[RDS Database Instance]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.html
|
||||
[EKS Cluster]: https://docs.aws.amazon.com/eks/latest/userguide/clusters.html
|
||||
[resource-classes-docs]: concepts.md#resource-claims-and-resource-classes
|
||||
[resource class selection]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-simple-class-selection.md
|
||||
[crossplane-aws-networking-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-resource-connectivity-mvp.md#amazon-web-services
|
||||
[aws-provider-guide]: cloud-providers/aws/aws-provider.md
|
||||
|
|
@ -0,0 +1,455 @@
|
|||
---
|
||||
title: "Stacks Guide: Azure Setup"
|
||||
toc: true
|
||||
weight: 540
|
||||
indent: true
|
||||
---
|
||||
|
||||
# Stacks Guide: Azure Setup
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Stacks Guide: Azure Setup](#stacks-guide-azure-setup)
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [Introduction](#introduction)
|
||||
- [Install the Azure Stack](#install-the-azure-stack)
|
||||
- [Validate the installation](#validate-the-installation)
|
||||
- [Configure Azure Account](#configure-azure-account)
|
||||
- [Set Up Network Configuration](#set-up-network-configuration)
|
||||
- [TL;DR](#tldr)
|
||||
- [Behind the scenes](#behind-the-scenes)
|
||||
- [Configure Resource Classes](#configure-resource-classes)
|
||||
- [TL;DR](#tldr-1)
|
||||
- [More Details](#more-details)
|
||||
- [Post Stack Installation Network Configuration](#post-stack-installation-network-configuration)
|
||||
- [Recap](#recap)
|
||||
- [Next Steps](#next-steps)
|
||||
|
||||
## Introduction
|
||||
|
||||
In this guide, we will set up an Azure provider in Crossplane so that we can
|
||||
install and use the [WordPress sample stack][sample-WordPress-stack], which
|
||||
depends on MySQL and Kubernetes!
|
||||
|
||||
Before we begin, you will need:
|
||||
|
||||
- Everything from the [Crossplane Stacks Guide][stacks-guide] before the cloud
|
||||
provider setup
|
||||
- The `kubectl` (v1.15+) tool installed and pointing to a Crossplane cluster
|
||||
- The [Crossplane CLI][crossplane-cli] installed
|
||||
- An account on [Azure][azure]
|
||||
- The [jq][jq] tool for interacting with some JSON
|
||||
|
||||
At the end, we will have:
|
||||
|
||||
- A Crossplane cluster configured to use Azure
|
||||
- A typical Azure network configured to support secure connectivity between
|
||||
resources
|
||||
- Support in Crossplane cluster for satisfying MySQL and Kubernetes claims
|
||||
- A slightly better understanding of:
|
||||
- The way Azure is configured in Crossplane
|
||||
- The way dependencies for cloud-portable workloads are configured in
|
||||
Crossplane
|
||||
|
||||
We will **not** be covering the core concepts in this guide, but feel free to
|
||||
check out the [Crossplane concepts document][crossplane-concepts] for that.
|
||||
|
||||
## Install the Azure Stack
|
||||
|
||||
After Crossplane has been installed, it can be extended with more functionality
|
||||
by installing a [Crossplane Stack][stack-docs]! Let's install the [stack for
|
||||
Microsoft Azure][stack-azure] to add support for that cloud provider.
|
||||
|
||||
The namespace where we install the stack, is also the one in which the provider
|
||||
secret will reside. The name of this namespace is arbitrary, and we are calling
|
||||
it `crossplane-system` in this guide. Let's create it:
|
||||
|
||||
```bash
|
||||
# namespace for Azure stack and provider secret
|
||||
kubectl create namespace crossplane-system
|
||||
```
|
||||
|
||||
Now we install the Azure stack using Crossplane CLI. Since this is an
|
||||
infrastructure stack, we need to specify that it's cluster-scoped by passing the
|
||||
`--cluster` flag.
|
||||
|
||||
```bash
|
||||
kubectl crossplane stack generate-install --cluster 'crossplane/stack-azure:master' stack-azure | kubectl apply --namespace crossplane-system -f -
|
||||
```
|
||||
|
||||
The rest of this guide assumes that the Azure stack is installed within
|
||||
`crossplane-system` namespace.
|
||||
|
||||
### Validate the installation
|
||||
|
||||
To check to see whether our stack installed correctly, we can look at the status
|
||||
of our stack:
|
||||
|
||||
```bash
|
||||
kubectl -n crossplane-system get stack
|
||||
```
|
||||
|
||||
It should look something like:
|
||||
|
||||
```bash
|
||||
NAME READY VERSION AGE
|
||||
stack-azure True 0.0.2 45s
|
||||
```
|
||||
|
||||
## Configure Azure Account
|
||||
|
||||
We will make use of the following services on Azure:
|
||||
|
||||
- Resource Group
|
||||
- Azure Kubernetes Service
|
||||
- Azure Database for MySQL
|
||||
- Virtual Network
|
||||
- Subnetwork
|
||||
- Virtual Network Rule
|
||||
|
||||
It is essential to make sure that the Azure user credentials are configured in
|
||||
Crossplane as a provider. Please follow the steps [provider
|
||||
guide][azure-provider-guide] for more information.
|
||||
|
||||
## Set Up Network Configuration
|
||||
|
||||
In this section we build a simple Azure virtual network configuration, by
|
||||
creating corresponding Crossplane managed resources. These resources are cluster
|
||||
scoped, so don't belong to a specific namespace. This network configuration
|
||||
enables resources in the WordPress stack to communicate securely. In this guide, we
|
||||
will use the [sample Azure network configuration][] in the Crossplane repository.
|
||||
You can read more [here][crossplane-azure-networking-docs] about network secure
|
||||
connectivity configurations in Crossplane.
|
||||
|
||||
### TL;DR
|
||||
|
||||
Apply the sample network configuration resources:
|
||||
|
||||
```bash
|
||||
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/azure/network-config?ref=master
|
||||
```
|
||||
|
||||
And you're done! You can check the status of the provisioning by running:
|
||||
|
||||
```bash
|
||||
kubectl get -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/azure/network-config?ref=master
|
||||
```
|
||||
|
||||
When all resources have the `Ready` condition in `True` state, the provisioning
|
||||
is complete. You can now move on to the next section, or keep reading below for
|
||||
more details about the managed resources that we created.
|
||||
|
||||
### Behind the scenes
|
||||
|
||||
In order to provision Azure resources, a [Resource
|
||||
Group][azure-resource-group-docs] is needed to to logically group resources
|
||||
together. In addition, WordPress resources map to an AKS cluster and a SQLServer
|
||||
database instance. To make the database instance securely accessible from the
|
||||
cluster, they both need to live within the same Virtual Network. However, a
|
||||
Virtual Network is not the only Azure resource that is needed to provide
|
||||
inter-resource connectivity. In general, a **Network Configuration** which
|
||||
consists of a set of Virtual Networks, Subnets, VNet Rules and other resource is
|
||||
required for this purpose. For more information, see [Azure resource
|
||||
connectivity][azure-resource-connectivity] design document.
|
||||
|
||||
To inspect the resources that we created above, let's run:
|
||||
|
||||
```bash
|
||||
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/azure/network-config?ref=master > network-config.yaml
|
||||
```
|
||||
|
||||
This will save the sample network configuration resources locally in
|
||||
`network-config.yaml`. Please note that the Azure parameters that are used in
|
||||
these resources (like `addresPrefixes`, `location`, etc...) are arbitrarily
|
||||
chosen in this solution and could be configured to implement other
|
||||
[configurations][azure-network-configuration].
|
||||
|
||||
Below we inspect each of these resources in more details.
|
||||
|
||||
- **`ResourceGroup`** Represents an Azure [Resource
|
||||
Group][azure-resource-group-docs], that is used to logically group resources
|
||||
together.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: azure.crossplane.io/v1alpha3
|
||||
kind: ResourceGroup
|
||||
metadata:
|
||||
name: sample-rg
|
||||
spec:
|
||||
name: my-cool-rg
|
||||
location: Central US
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: azure-provider
|
||||
```
|
||||
|
||||
- **`VirtualNetwork`** Represents an Azure [Virtual
|
||||
Network][azure-virtual-network].
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: network.azure.crossplane.io/v1alpha3
|
||||
kind: VirtualNetwork
|
||||
metadata:
|
||||
name: sample-vnet
|
||||
spec:
|
||||
name: my-cool-vnet
|
||||
resourceGroupNameRef:
|
||||
name: sample-rg
|
||||
location: Central US
|
||||
properties:
|
||||
addressSpace:
|
||||
addressPrefixes:
|
||||
- 10.2.0.0/16
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: azure-provider
|
||||
```
|
||||
|
||||
- **`Subnet`** Represents an Azure [Subnet][azure-virtual-network].
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: network.azure.crossplane.io/v1alpha3
|
||||
kind: Subnet
|
||||
metadata:
|
||||
name: sample-subnet
|
||||
spec:
|
||||
name: my-cool-subnet
|
||||
resourceGroupNameRef:
|
||||
name: sample-rg
|
||||
virtualNetworkNameRef:
|
||||
name: sample-vnet
|
||||
properties:
|
||||
addressPrefix: 10.2.0.0/24
|
||||
serviceEndpoints:
|
||||
- service: Microsoft.Sql
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: azure-provider
|
||||
```
|
||||
|
||||
As you probably have noticed, some resources are referencing other resources in
|
||||
their YAML representations. For instance for `Subnet` resource we have:
|
||||
|
||||
```yaml
|
||||
...
|
||||
virtualNetworkNameRef:
|
||||
name: sample-vnet
|
||||
...
|
||||
```
|
||||
|
||||
Such cross resource referencing is a Crossplane feature that enables managed
|
||||
resources to retrieve other resources attributes. This creates a *blocking
|
||||
dependency*, preventing the dependent resource from being created before the referred
|
||||
resource is ready. In the example above, `Subnet` will be blocked until the
|
||||
referred `VirtualNetwork` is created, and then it retrieves its `name`. For more
|
||||
information, see [Cross Resource Referencing][].
|
||||
|
||||
## Configure Resource Classes
|
||||
|
||||
Once we have the network set up, we also need to tell Crossplane how to satisfy
|
||||
WordPress's claims (that will be created when we later install the WordPress
|
||||
stack) for a database and a Kubernetes cluster. The [Resource
|
||||
Classes][resource-claims-and-classes-docs] serve as templates for the
|
||||
corresponding resource claims.
|
||||
|
||||
In this guide, we will use the [sample Azure resource classes][]in Crossplane
|
||||
repository.
|
||||
|
||||
### TL;DR
|
||||
|
||||
Apply the sample Azure resource classes:
|
||||
|
||||
```bash
|
||||
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/azure/resource-classes?ref=master
|
||||
```
|
||||
|
||||
And you're done! Note that these resources do not immediately provision external
|
||||
Azure resources, as they only serve as template classes.
|
||||
|
||||
### More Details
|
||||
|
||||
To inspect the resource classes that we created above, run:
|
||||
|
||||
```bash
|
||||
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/azure/resource-classes?ref=master > resource-classes.yaml
|
||||
```
|
||||
|
||||
This will save the sample resource classes YAML locally in
|
||||
`resource-classes.yaml`. As mentioned above, these resource classes serve as
|
||||
templates and could be configured depending on the specific needs that are
|
||||
needed from the underlying resources. For instance, in the sample resources the
|
||||
`SQLServerClass` has `storageGB: 25`, which will result in SQLServer databases
|
||||
of size 25 once a claim is submitted for this class. In addition, it's possible
|
||||
to have multiple classes defined for the same claim kind, but our sample has
|
||||
defined only one class for each resource type.
|
||||
|
||||
Below we inspect each of these resource classes in more details:
|
||||
|
||||
- **`SQLServerClass`** Represents a resource that defines the blueprint for how
|
||||
a "standard" [Azure MySQL Server][azure-mysql-database] should be dynamically
|
||||
provisioned
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: database.azure.crossplane.io/v1alpha3
|
||||
kind: SQLServerClass
|
||||
metadata:
|
||||
name: standard-mysql
|
||||
annotations:
|
||||
resourceclass.crossplane.io/is-default-class: "true"
|
||||
specTemplate:
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
adminLoginName: my-cool-login
|
||||
resourceGroupNameRef:
|
||||
name: sample-rg
|
||||
location: Central US
|
||||
sslEnforced: false
|
||||
version: "5.6"
|
||||
pricingTier:
|
||||
tier: GeneralPurpose
|
||||
vcores: 2
|
||||
family: Gen5
|
||||
storageProfile:
|
||||
storageGB: 25
|
||||
backupRetentionDays: 7
|
||||
geoRedundantBackup: false
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: azure-provider
|
||||
```
|
||||
|
||||
- **`AKSClusterClass`** Represents a resource that serves as a template to
|
||||
create an [Azure Kubernetes Engine][azure-aks](AKS).
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: compute.azure.crossplane.io/v1alpha3
|
||||
kind: AKSClusterClass
|
||||
metadata:
|
||||
name: standard-cluster
|
||||
annotations:
|
||||
resourceclass.crossplane.io/is-default-class: "true"
|
||||
specTemplate:
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
resourceGroupNameRef:
|
||||
name: sample-rg
|
||||
vnetSubnetIDRef:
|
||||
name: sample-subnet
|
||||
location: Central US
|
||||
version: "1.12.8"
|
||||
nodeCount: 1
|
||||
nodeVMSize: Standard_B2s
|
||||
dnsNamePrefix: crossplane-aks
|
||||
disableRBAC: false
|
||||
writeServicePrincipalTo:
|
||||
name: akscluster-net
|
||||
namespace: crossplane-system
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: azure-provider
|
||||
```
|
||||
|
||||
These resources will be the default resource classes for the corresponding
|
||||
claims (`resourceclass.crossplane.io/is-default-class: "true"` annotation). For
|
||||
more details about resource claims and how they work, see the documentation on
|
||||
[resource claims][resource-claims-and-classes-docs], and [resource class
|
||||
selection].
|
||||
|
||||
## Post Stack Installation Network Configuration
|
||||
|
||||
After the WordPress stack is installed, we will need the AKS Cluster it
|
||||
provisions to be able to communicate with the MySQL database it provisions. In
|
||||
Azure, we can do so using a [Virtual Network Rule][azure-vnet-rule]. However,
|
||||
the rule cannot be created until after the MySQLInstance claim is created and
|
||||
satisfied, so we will start a short script to continually check if the database
|
||||
exists, and will create the rule if so.
|
||||
|
||||
```bash
|
||||
cat > vnet-rule.yaml <<EOF
|
||||
apiVersion: database.azure.crossplane.io/v1alpha3
|
||||
kind: MySQLServerVirtualNetworkRule
|
||||
metadata:
|
||||
name: sample-vnet-rule
|
||||
spec:
|
||||
name: my-cool-vnet-rule
|
||||
serverName: MYSQL_NAME
|
||||
resourceGroupNameRef:
|
||||
name: sample-rg
|
||||
properties:
|
||||
virtualNetworkSubnetIdRef:
|
||||
name: sample-subnet
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: azure-provider
|
||||
EOF
|
||||
|
||||
cat > vnetwatch.sh <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
trap 'exit 1' SIGINT
|
||||
|
||||
echo -n "waiting for mysql endpoint..." >&2
|
||||
while kubectl get mysqlservers -o yaml | grep -q 'items: \[\]'; do
|
||||
echo -n "." >&2
|
||||
sleep 5
|
||||
done
|
||||
echo "done" >&2
|
||||
|
||||
export MYSQL_NAME=$(kubectl get mysqlservers -o=jsonpath='{.items[0].metadata.name}')
|
||||
|
||||
sed "s/MYSQL_NAME/$MYSQL_NAME/g" vnet-rule.yaml | kubectl apply -f -
|
||||
|
||||
EOF
|
||||
|
||||
chmod +x vnetwatch.sh && ./vnetwatch.sh
|
||||
```
|
||||
|
||||
The script should be left running in the background while we go through the rest
|
||||
of the guide and install the WordPress stack.
|
||||
|
||||
## Recap
|
||||
|
||||
To recap what we've set up now in our environment:
|
||||
|
||||
- A Crossplane Provider resource for Azure
|
||||
- A Network Configuration to have secure connectivity between resources
|
||||
- An CloudSQLInstanceClass and an GKEClusterClass with the right configuration
|
||||
to use the mentioned networking setup.
|
||||
- A script that will create our Virtual Network Rule when our MySQL database
|
||||
name comes available.
|
||||
|
||||
## Next Steps
|
||||
|
||||
Next we'll set up a Crossplane App Stack and use it! Head [back over to the
|
||||
Stacks Guide document][stacks-guide-continue] so we can pick up where we left
|
||||
off.
|
||||
|
||||
<!-- Links -->
|
||||
[crossplane-concepts]: concepts.md
|
||||
[sample-wordpress-stack]: https://github.com/crossplaneio/sample-stack-wordpress
|
||||
[crossplane-cli]: https://github.com/crossplaneio/crossplane-cli/tree/release-0.2
|
||||
[crossplane-azure-networking-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-resource-connectivity-mvp.md#microsoft-azure
|
||||
[stacks-guide]: stacks-guide.md
|
||||
[provider-azure-guide]: cloud-providers/azure/azure-provider.md
|
||||
[stack-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#crossplane-stacks
|
||||
[stack-azure]: https://github.com/crossplaneio/stack-azure
|
||||
[azure]: https://azure.microsoft.com
|
||||
[azure-vnet-rule]: https://docs.microsoft.com/en-us/azure/mysql/concepts-data-access-and-security-vnet
|
||||
[azure-resource-group-docs]: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview
|
||||
[stacks-guide-continue]: stacks-guide.md#install-support-for-our-application-into-crossplane
|
||||
[jq]: https://stedolan.github.io/jq/
|
||||
[azure-virtual-network]: https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-overview
|
||||
[azure-resource-connectivity]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-resource-connectivity-mvp.md#microsoft-azure
|
||||
[azure-network-configuration]: https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-using-network-configuration-file
|
||||
[sample Azure resource classes]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/azure/resource-classes?ref=master
|
||||
[azure-mysql-database]: https://azure.microsoft.com/en-us/services/mysql/
|
||||
[azure-aks]: https://azure.microsoft.com/en-us/services/kubernetes-service/
|
||||
[resource-claims-and-classes-docs]: https://github.com/crossplaneio/crossplane/blob/master/docs/concepts.md#resource-claims-and-resource-classes
|
||||
[sample Azure network configuration]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/azure/network-config?ref=master
|
||||
[Cross Resource Referencing]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-cross-resource-referencing.md
|
||||
[resource class selection]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-simple-class-selection.md
|
||||
[azure-provider-guide]: cloud-providers/azure/azure-provider.md
|
||||
|
|
@ -0,0 +1,424 @@
|
|||
---
|
||||
title: "Stacks Guide: GCP Setup"
|
||||
toc: true
|
||||
weight: 520
|
||||
indent: true
|
||||
---
|
||||
|
||||
# Stacks Guide: GCP Setup
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Stacks Guide: GCP Setup](#stacks-guide-gcp-setup)
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [Introduction](#introduction)
|
||||
- [Install the GCP Stack](#install-the-gcp-stack)
|
||||
- [Configure GCP Account](#configure-gcp-account)
|
||||
- [Set up cloud provider credentials](#set-up-cloud-provider-credentials)
|
||||
- [Configure Crossplane Provider for GCP](#configure-crossplane-provider-for-gcp)
|
||||
- [Set Up Network Configuration](#set-up-network-configuration)
|
||||
- [TL;DR](#tldr)
|
||||
- [Behind the scenes](#behind-the-scenes)
|
||||
- [Configure Resources Classes](#configure-resources-classes)
|
||||
- [TL;DR](#tldr-1)
|
||||
- [More Details](#more-details)
|
||||
- [Recap](#recap)
|
||||
- [Next Steps](#next-steps)
|
||||
|
||||
## Introduction
|
||||
|
||||
In this guide, we will set up a GCP provider in Crossplane so that we can
|
||||
install and use the [WordPress sample stack][sample-wordpress-stack], which
|
||||
depends on MySQL and Kubernetes!
|
||||
|
||||
Before we begin, you will need:
|
||||
|
||||
- Everything from the [Crossplane Stacks Guide][stacks-guide] before the
|
||||
cloud provider setup
|
||||
- The `kubectl` (v1.15+) tool installed and pointing to a Crossplane cluster
|
||||
- The [Crossplane CLI][crossplane-cli] installed
|
||||
- An account on [Google Cloud Platform][gcp]
|
||||
|
||||
At the end, we will have:
|
||||
|
||||
- A Crossplane control cluster configured to use GCP
|
||||
- A typical GCP network configured to support secure connectivity between
|
||||
resources
|
||||
- Support in Crossplane cluster for satisfying MySQL and Kubernetes claims
|
||||
- A slightly better understanding of:
|
||||
- The way GCP is configured in Crossplane
|
||||
- The way dependencies for cloud-portable workloads are configured in
|
||||
Crossplane
|
||||
|
||||
We will **not** be covering the core concepts in this guide, but feel free to
|
||||
check out the [Crossplane concepts document][crossplane-concepts] for that.
|
||||
|
||||
## Install the GCP Stack
|
||||
|
||||
After Crossplane has been installed, it can be extended with more
|
||||
functionality by installing a [Crossplane Stack][stack-docs]! Let's
|
||||
install the [stack for Google Cloud Platform][stack-gcp] (GCP) to add
|
||||
support for that cloud provider.
|
||||
|
||||
The namespace where we install the stack, is also the one in which the provider
|
||||
secret will reside. The name of this namespace is arbitrary, and we are calling
|
||||
it `crossplane-system` in this guide. Let's create it:
|
||||
|
||||
```bash
|
||||
# namespace for GCP stack and provider secret
|
||||
kubectl create namespace crossplane-system
|
||||
```
|
||||
|
||||
Now we install the GCP stack using Crossplane CLI. Since this is an
|
||||
infrastructure stack, we need to specify that it's cluster-scoped by passing the
|
||||
`--cluster` flag.
|
||||
|
||||
```bash
|
||||
kubectl crossplane stack generate-install --cluster 'crossplane/stack-gcp:master' stack-gcp | kubectl apply --namespace crossplane-system -f -
|
||||
```
|
||||
|
||||
The rest of this guide assumes that the GCP stack is installed within
|
||||
`crossplane-system` namespace.
|
||||
|
||||
To check to see whether our stack installed correctly, we can look at
|
||||
the status of our stack:
|
||||
|
||||
```bash
|
||||
kubectl -n crossplane-system get stack
|
||||
```
|
||||
|
||||
It should look something like:
|
||||
|
||||
```bash
|
||||
NAME READY VERSION AGE
|
||||
stack-gcp True 0.0.2 5m19s
|
||||
```
|
||||
|
||||
## Configure GCP Account
|
||||
|
||||
We will make use of the following services on GCP:
|
||||
|
||||
- GKE
|
||||
- CloudSQL Instance
|
||||
- Network
|
||||
- Subnetwork
|
||||
- GlobalAddress
|
||||
- Private Service Connection
|
||||
|
||||
For all these to work, you need to enable the following [APIs][gcp-enable-apis]
|
||||
in your GCP project:
|
||||
|
||||
- Compute Engine API
|
||||
- Service Networking API
|
||||
- Kubernetes Engine API
|
||||
|
||||
We will also need to tell Crossplane how to use the credentials for the GCP
|
||||
account. For this exercise, the GCP account that we will tell Crossplane about
|
||||
should have the following [roles][gcp-assign-roles] assigned:
|
||||
|
||||
- Cloud SQL Admin
|
||||
- Compute Network Admin
|
||||
- Kubernetes Engine Admin
|
||||
- Service Account User
|
||||
|
||||
### Set up cloud provider credentials
|
||||
|
||||
It is essential to make sure that the GCP user credentials are configured in
|
||||
Crossplane as a provider. Please follow the steps in the GCP [provider
|
||||
guide][gcp-provider-guide] for more information.
|
||||
|
||||
## Set Up Network Configuration
|
||||
|
||||
In this section we build a simple GCP network configuration, by creating
|
||||
corresponding Crossplane managed resources. These resources are cluster scoped,
|
||||
so don't belong to a specific namespace. This network configuration enables
|
||||
resources in the WordPress stack to communicate securely. In this guide, we will use
|
||||
the [sample GCP network configuration][] in the Crossplane repository. You can read
|
||||
more [here][crossplane-gcp-networking-docs] about network secure connectivity
|
||||
configurations in Crossplane.
|
||||
|
||||
### TL;DR
|
||||
|
||||
Apply the sample network configuration resources:
|
||||
|
||||
```bash
|
||||
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/gcp/network-config?ref=master
|
||||
```
|
||||
|
||||
And you're done! You can check the status of the provisioning by running:
|
||||
|
||||
```bash
|
||||
kubectl get -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/gcp/network-config?ref=master
|
||||
```
|
||||
|
||||
When all resources have the `Ready` condition in `True` state, the provisioning
|
||||
is complete. You can now move on to the next section, or keep reading below for
|
||||
more details about the managed resources that we created.
|
||||
|
||||
### Behind the scenes
|
||||
|
||||
WordPress needs a MySQL database and a Kubernetes cluster. But these
|
||||
two resources need a private network to communicate securely. So, we
|
||||
need to set up the network before we set up the database and the
|
||||
Kubernetes cluster.
|
||||
|
||||
To inspect the resources that we created above, let's run:
|
||||
|
||||
```bash
|
||||
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/gcp/network-config?ref=master > network-config.yaml
|
||||
```
|
||||
|
||||
This will save the sample network configuration resources locally in
|
||||
`network-config.yaml`. Please note that the GCP parameters that are used in these
|
||||
resources (like `ipCidrRange`, `region`, etc...) are arbitrarily chosen in this
|
||||
solution and could be configured to implement other
|
||||
[configurations][gcp-network-configuration].
|
||||
|
||||
Below we inspect each of these resources in more details.
|
||||
|
||||
- **`Network`** Represents a GCP [Virtual Private Cloud (VPC)
|
||||
Network][gcp-network-configuration], that all cloud instances we'll create
|
||||
will use.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: compute.gcp.crossplane.io/v1alpha3
|
||||
kind: Network
|
||||
metadata:
|
||||
name: sample-network
|
||||
spec:
|
||||
name: my-cool-network
|
||||
autoCreateSubnetworks: false
|
||||
routingConfig:
|
||||
routingMode: REGIONAL
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: gcp-provider
|
||||
```
|
||||
|
||||
- **`Subnetwork`** Represents a GCP [Virtual Private Cloud Subnetwork][gcp-network-configuration], which
|
||||
defines IP ranges to be used by GKE cluster.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: compute.gcp.crossplane.io/v1alpha3
|
||||
kind: Subnetwork
|
||||
metadata:
|
||||
name: sample-subnetwork
|
||||
spec:
|
||||
name: my-cool-subnetwork
|
||||
region: us-central1
|
||||
ipCidrRange: "192.168.0.0/24"
|
||||
privateIpGoogleAccess: true
|
||||
secondaryIpRanges:
|
||||
- rangeName: pods
|
||||
ipCidrRange: 10.0.0.0/8
|
||||
- rangeName: services
|
||||
ipCidrRange: 172.16.0.0/16
|
||||
networkRef:
|
||||
name: sample-network
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: gcp-provider
|
||||
```
|
||||
|
||||
- **`GlobalAddress`** Represents a GCP [Global Address][gcp-ip-address], which defines the IP
|
||||
range that will be allocated for cloud services connecting to the instances in the given Network.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: compute.gcp.crossplane.io/v1alpha3
|
||||
kind: GlobalAddress
|
||||
metadata:
|
||||
name: sample-globaladdress
|
||||
spec:
|
||||
name: my-cool-globaladdress
|
||||
purpose: VPC_PEERING
|
||||
addressType: INTERNAL
|
||||
prefixLength: 16
|
||||
networkRef:
|
||||
name: sample-network
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: gcp-provider
|
||||
```
|
||||
|
||||
- **`Connection`** Represents a GCP [Connection][gcp-connection], which allows
|
||||
cloud services to use the allocated GlobalAddress for communication. Behind
|
||||
the scenes, it creates a VPC peering to the network that those service
|
||||
instances actually live.
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: servicenetworking.gcp.crossplane.io/v1alpha3
|
||||
kind: Connection
|
||||
metadata:
|
||||
name: sample-connection
|
||||
spec:
|
||||
parent: services/servicenetworking.googleapis.com
|
||||
networkRef:
|
||||
name: sample-network
|
||||
reservedPeeringRangeRefs:
|
||||
- name: sample-globaladdress
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: gcp-provider
|
||||
```
|
||||
|
||||
As you probably have noticed, some resources are referencing other resources
|
||||
in their YAML representations. For instance for `Subnetwork` resource we have:
|
||||
|
||||
```yaml
|
||||
...
|
||||
networkRef:
|
||||
name: sample-network
|
||||
...
|
||||
```
|
||||
|
||||
Such cross resource referencing is a Crossplane feature that enables managed
|
||||
resources to retrieve other resources attributes. This creates a *blocking
|
||||
dependency*, preventing the dependent resource from being created before the referred
|
||||
resource is ready. In the example above, `Subnetwork` will be blocked until the
|
||||
referred `Network` is created, and then it retrieves its id. For more
|
||||
information, see [Cross Resource Referencing][].
|
||||
|
||||
## Configure Resources Classes
|
||||
|
||||
Once we have the network configuration set up, we need to tell Crossplane how to
|
||||
satisfy WordPress's claims (that will be created when we later install the
|
||||
WordPress stack) for a database and a Kubernetes cluster. The resource classes
|
||||
serve as templates for the corresponding resource claims. For more information,
|
||||
refer to [Resource Classes][resource-claims-and-classes-docs] design document.
|
||||
|
||||
In this guide, we will use the [sample GCP resource classes] in Crossplane
|
||||
repository.
|
||||
|
||||
### TL;DR
|
||||
|
||||
Apply the sample GCP resource classes:
|
||||
|
||||
```bash
|
||||
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/gcp/resource-classes?ref=master
|
||||
```
|
||||
|
||||
And you're done! Note that these resources do not immediately provision external GCP resourcs.
|
||||
|
||||
### More Details
|
||||
|
||||
To inspect the resource classes that we created above, run:
|
||||
|
||||
```bash
|
||||
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/gcp/resource-classes?ref=master > resource-classes.yaml
|
||||
```
|
||||
|
||||
This will save the sample resource classes YAML locally in
|
||||
`resource-classes.yaml`. As mentioned above, these resource classes serve as
|
||||
templates and could be configured depending on the specific needs that are
|
||||
needed from the underlying resources. For instance, in the sample resources the
|
||||
`CloudSQLInstanceClass` has `storageGB: 10`, which will result in databases of
|
||||
size 10GB once a claim is submitted for this class. In addition, it's possible
|
||||
to have multiple classes defined for the same claim kind, but our sample has
|
||||
defined only one class for each resource type.
|
||||
|
||||
Below we inspect each of these resource classes in more details:
|
||||
|
||||
- **`CloudSQLInstanceClass`** Represents a resource that serves as a template to
|
||||
create a [Cloud SQL Database Instance][gcp-cloudsql].
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: database.gcp.crossplane.io/v1beta1
|
||||
kind: CloudSQLInstanceClass
|
||||
metadata:
|
||||
name: standard-mysql
|
||||
annotations:
|
||||
resourceclass.crossplane.io/is-default-class: "true"
|
||||
specTemplate:
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
forProvider:
|
||||
databaseVersion: MYSQL_5_7
|
||||
region: us-central1
|
||||
settings:
|
||||
tier: db-n1-standard-1
|
||||
dataDiskType: PD_SSD
|
||||
dataDiskSizeGb: 10
|
||||
ipConfiguration:
|
||||
privateNetworkRef:
|
||||
name: sample-network
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: gcp-provider
|
||||
```
|
||||
|
||||
- **`GKEClusterClass`** Represents a resource that serves as a template to
|
||||
create a [Kubernetes Engine][gcp-gke] (GKE).
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: compute.gcp.crossplane.io/v1alpha3
|
||||
kind: GKEClusterClass
|
||||
metadata:
|
||||
name: standard-cluster
|
||||
annotations:
|
||||
resourceclass.crossplane.io/is-default-class: "true"
|
||||
specTemplate:
|
||||
machineType: n1-standard-1
|
||||
numNodes: 1
|
||||
zone: us-central1-b
|
||||
networkRef:
|
||||
name: sample-network
|
||||
subnetworkRef:
|
||||
name: sample-subnetwork
|
||||
enableIPAlias: true
|
||||
clusterSecondaryRangeName: pods
|
||||
servicesSecondaryRangeName: services
|
||||
reclaimPolicy: Delete
|
||||
providerRef:
|
||||
name: gcp-provider
|
||||
```
|
||||
|
||||
These resources will be the default resource classes for the corresponding
|
||||
claims (`resourceclass.crossplane.io/is-default-class: "true"` annotation). For
|
||||
more details about resource claims and how they work, see the documentation on
|
||||
[resource claims][resource-claims-and-classes-docs], and [resource class selection].
|
||||
|
||||
## Recap
|
||||
|
||||
To recap what we've set up now in our environment:
|
||||
|
||||
- A Crossplane Provider resource for GCP
|
||||
- A Network Configuration to have secure connectivity between resources
|
||||
- An CloudSQLInstanceClass and an GKEClusterClass with the right configuration to use
|
||||
the mentioned networking setup.
|
||||
|
||||
## Next Steps
|
||||
|
||||
Next we'll set up a Crossplane App Stack and use it! Head [back over to
|
||||
the Stacks Guide document][stacks-guide-continue] so we can pick up
|
||||
where we left off.
|
||||
|
||||
<!-- Links -->
|
||||
[crossplane-concepts]: concepts.md
|
||||
[crossplane-cli]: https://github.com/crossplaneio/crossplane-cli/tree/release-0.2
|
||||
[crossplane-gcp-networking-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-resource-connectivity-mvp.md#google-cloud-platform
|
||||
[stacks-guide]: https://github.com/crossplaneio/crossplane/blob/master/docs/stacks-guide.md
|
||||
[gcp-credentials]: https://github.com/crossplaneio/crossplane/blob/master/cluster/examples/gcp-credentials.sh
|
||||
[gcp-enable-apis]: https://cloud.google.com/endpoints/docs/openapi/enable-api
|
||||
[gcp-assign-roles]: https://cloud.google.com/iam/docs/granting-roles-to-service-accounts
|
||||
[gcp]: https://cloud.google.com/
|
||||
[stacks-guide-continue]: https://github.com/crossplaneio/crossplane/blob/master/docs/stacks-guide.md#install-support-for-our-application-into-crossplane
|
||||
[sample-wordpress-stack]: https://github.com/crossplaneio/sample-stack-wordpress
|
||||
[stack-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#crossplane-stacks
|
||||
[stack-gcp]: https://github.com/crossplaneio/stack-gcp
|
||||
[resource-claims-and-classes-docs]: https://github.com/crossplaneio/crossplane/blob/master/docs/concepts.md#resource-claims-and-resource-classes
|
||||
[cloud-provider-setup-gcp]: https://github.com/crossplaneio/crossplane/blob/master/docs/cloud-providers/gcp/gcp-provider.md
|
||||
[gcp-network-configuration]: https://cloud.google.com/vpc/docs/vpc
|
||||
[Cross Resource Referencing]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-cross-resource-referencing.md
|
||||
[sample GCP resource classes]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/gcp/resource-classes?ref=master
|
||||
[gcp-cloudsql]: https://cloud.google.com/sql/
|
||||
[gcp-gke]: https://cloud.google.com/kubernetes-engine/
|
||||
[sample GCP network configuration]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/gcp/network-config?ref=master
|
||||
[gcp-ip-address]: https://cloud.google.com/compute/docs/ip-addresses/
|
||||
[gcp-connection]: https://cloud.google.com/vpc/docs/configure-private-services-access
|
||||
[resource class selection]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-simple-class-selection.md
|
||||
[gcp-provider-guide]: cloud-providers/gcp/gcp-provider.md
|
||||
|
|
@ -0,0 +1,873 @@
|
|||
---
|
||||
title: "Stacks Guide: Rook"
|
||||
toc: true
|
||||
weight: 550
|
||||
indent: true
|
||||
---
|
||||
|
||||
# Stacks Guide: Rook
|
||||
|
||||
> Note: this guide does not follow along with the other stacks guides. It
|
||||
> deploys a different application (Yugastore) and involves using the GCP stack
|
||||
> along with the Rook stack.
|
||||
|
||||
This user guide will walk you through [Yugastore] application deployment using
|
||||
Crossplane's [Rook] stack to run [YugabyteDB] in a Google Cloud [GKE] Kubernetes
|
||||
cluster. To do so, we will broadly:
|
||||
|
||||
1. Provision a GKE Kubernetes cluster
|
||||
1. Install the Rook [Yugabyte operator] into the GKE cluster
|
||||
1. Provision a YugabyteDB cluster and deploy the Yugastore app into the GKE
|
||||
cluster
|
||||
|
||||
... all using Crossplane!
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Pre-requisites](#pre-requisites)
|
||||
1. [Preparation](#preparation)
|
||||
1. [Set Up Crossplane](#set-up-crossplane)
|
||||
1. [Install in Standalone Control
|
||||
Cluster](#install-in-standalone-control-cluster)
|
||||
1. [GCP Provider](#gcp-provider)
|
||||
1. [Rook Provider](#rook-provider)
|
||||
1. [Resource Classes](#resource-classes)
|
||||
1. [Provision Target Cluster](#provision-target-cluster)
|
||||
1. [Provision GKE Cluster with a Resource
|
||||
Claim](#provision-gke-cluster-with-a-resource-claim)
|
||||
1. [Install Rook Yugabyte Operator with a
|
||||
KubernetesApplication](#install-rook-yugabyte-operator-with-a-kubernetesapplication)
|
||||
1. [Deploy Yugastore into Target Cluster](#deploy-yugastore-into-target-cluster)
|
||||
1. [Provision YugabyteDB with a Resource
|
||||
Claim](#provision-yugabytedb-with-a-resource-claim)
|
||||
1. [Provision Yugastore with a
|
||||
KubernetesApplication](#provision-yugastore-with-a-kubernetesapplication)
|
||||
1. [Results](#results)
|
||||
1. [Cleanup](#cleanup)
|
||||
1. [Conclusion and Next Steps](#conclusion-and-next-steps)
|
||||
|
||||
## Pre-requisites
|
||||
|
||||
These tools are required to complete this guide. They must be installed on your
|
||||
local machine.
|
||||
|
||||
* [kubectl][install-kubectl]
|
||||
* kubectl also be installed using the Azure CLI: `az aks install-cli`
|
||||
* [Helm][using-helm], minimum version `v2.10.0+`.
|
||||
|
||||
|
||||
## Preparation
|
||||
|
||||
This guide assumes that you have an existing Kubernetes cluster, which will
|
||||
serve as the Crossplane control cluster. Good options for running local
|
||||
Kubernetes clusters include [KIND] and [Minikube].
|
||||
|
||||
In order to utilize GCP services, we must set the `PROJECT_ID` of the GCP
|
||||
project we want to use. Run the following:
|
||||
```bash
|
||||
export PROJECT_ID=crossplane-playground # the project that all resources reside.
|
||||
```
|
||||
|
||||
## Set Up Crossplane
|
||||
|
||||
### Install in Standalone Control Cluster
|
||||
|
||||
Using your local Kubernetes cluster:
|
||||
|
||||
1. Install Crossplane from the alpha channel. (See the [Crossplane Installation
|
||||
Guide][crossplane-install] for more information.)
|
||||
|
||||
```bash
|
||||
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
|
||||
```
|
||||
|
||||
2. Install the GCP stack into Crossplane. (See the [GCP stack
|
||||
section][gcp-stack-install] of the install guide for more information.)
|
||||
|
||||
```bash
|
||||
cat > stack-gcp.yaml <<EOF
|
||||
apiVersion: stacks.crossplane.io/v1alpha1
|
||||
kind: ClusterStackInstall
|
||||
metadata:
|
||||
name: stack-gcp
|
||||
namespace: crossplane-system
|
||||
spec:
|
||||
package: "crossplane/stack-gcp:master"
|
||||
EOF
|
||||
|
||||
kubectl apply -f stack-gcp.yaml
|
||||
```
|
||||
|
||||
3. Install the Rook stack into Crossplane (See the [Rook stack
|
||||
section][rook-stack-install] of the install guide for more information.)
|
||||
|
||||
```bash
|
||||
cat > stack-rook.yaml <<EOF
|
||||
apiVersion: stacks.crossplane.io/v1alpha1
|
||||
kind: ClusterStackInstall
|
||||
metadata:
|
||||
name: stack-rook
|
||||
namespace: crossplane-system
|
||||
spec:
|
||||
package: "crossplane/stack-rook:master"
|
||||
EOF
|
||||
|
||||
kubectl apply -f stack-rook.yaml
|
||||
```
|
||||
|
||||
4. Obtain GCP credentials. (See the [Cloud Provider Credentials][cloud-creds]
|
||||
docs for more information.)
|
||||
|
||||
### GCP Provider
|
||||
|
||||
Using the service account json `crossplane-gcp-provider-key.json` that you
|
||||
acquired from GCP:
|
||||
|
||||
* Generate Base64 encoded value to store in a `Secret`:
|
||||
|
||||
```bash
|
||||
export BASE64ENCODED_GCP_PROVIDER_CREDS=$(base64 crossplane-gcp-provider-key.json | tr -d "\n")
|
||||
```
|
||||
|
||||
* Define a GCP `Provider` (using the `PROJECT_ID` environment variable we set
|
||||
above) and `Secret`:
|
||||
|
||||
```bash
|
||||
cat > gcp-provider.yaml <<EOF
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
credentials.json: $BASE64ENCODED_GCP_PROVIDER_CREDS
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: gcp-provider-creds
|
||||
namespace: crossplane-system
|
||||
type: Opaque
|
||||
---
|
||||
apiVersion: gcp.crossplane.io/v1alpha3
|
||||
kind: Provider
|
||||
metadata:
|
||||
name: gcp-provider
|
||||
spec:
|
||||
credentialsSecretRef:
|
||||
name: gcp-provider-creds
|
||||
namespace: crossplane-system
|
||||
key: credentials.json
|
||||
projectID: $PROJECT_ID
|
||||
EOF
|
||||
|
||||
kubectl apply -f gcp-provider.yaml
|
||||
unset BASE64ENCODED_GCP_PROVIDER_CREDS # we don't need this anymore.
|
||||
```
|
||||
|
||||
* Verify GCP provider was successfully registered by the crossplane
|
||||
|
||||
```bash
|
||||
kubectl get providers.gcp.crossplane.io
|
||||
kubectl -n crossplane-system get secrets
|
||||
```
|
||||
|
||||
### Rook Provider
|
||||
|
||||
Rook differs from traditional cloud provider stacks in that it does not come
|
||||
with a Rook `Provider` custom resource. The reason for this is that Rook runs in
|
||||
any Kubernetes cluster. Therefore, it utilizes the general Kubernetes `Provider`
|
||||
custom resource that is packaged as part of the core Crossplane installation. We
|
||||
will see how to use this `Provider` type further along in this guide.
|
||||
|
||||
#### TL;DR
|
||||
|
||||
If you want to skip the rest of the guide and just deploy Yugastore, you can
|
||||
run:
|
||||
|
||||
```bash
|
||||
kubectl apply -k https://github.com/crossplaneio/crossplane//cluster/examples/rook/yugastore?ref=master
|
||||
```
|
||||
|
||||
And you're done! You can check the status of the provisioning by running:
|
||||
|
||||
```bash
|
||||
kubectl get -k https://github.com/crossplaneio/crossplane//cluster/examples/rook/yugastore?ref=master
|
||||
```
|
||||
|
||||
If you did not opt for this shortcut, keep reading.
|
||||
|
||||
### Resource Classes
|
||||
|
||||
To keep all configuration organized in a single location, create a new
|
||||
directory:
|
||||
|
||||
```bash
|
||||
mkdir yugastore && cd $_
|
||||
```
|
||||
|
||||
In order to dynamically provision resources, we need to create resources classes
|
||||
that contain details about how the resources should be provisioned. For
|
||||
Yugastore, we will need resource classes that are capable of fulfilling a
|
||||
`KubernetesCluster` claim and a `PostgreSQLInstance` claim. The
|
||||
`GKEClusterClass` is relatively straightforward in that it configures a
|
||||
`GKECluster` and utilizes our previously created GCP `Provider` for
|
||||
provisioning.
|
||||
|
||||
```bash
|
||||
cat > gkeclass.yaml <<EOF
|
||||
apiVersion: compute.gcp.crossplane.io/v1alpha3
|
||||
kind: GKEClusterClass
|
||||
metadata:
|
||||
name: standard-gke
|
||||
labels:
|
||||
app: yugastore
|
||||
specTemplate:
|
||||
machineType: n1-standard-1
|
||||
numNodes: 1
|
||||
zone: us-central1-b
|
||||
providerRef:
|
||||
name: gcp-provider
|
||||
reclaimPolicy: Delete
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
EOF
|
||||
|
||||
kubectl apply -f gkeclass.yaml
|
||||
```
|
||||
|
||||
The `YugabyteClusterClass` is less clear. Starting with the provider, we
|
||||
reference a `Provider` that does not currently exist. Because resource classes
|
||||
only store configuration data, this is okay as long as the provider exists when
|
||||
the class is referenced by a claim. As previously mentioned, this provider will
|
||||
be a Kubernetes `Provider` which we will create after the `GKECluster` is
|
||||
created and its connection secret is propagated.
|
||||
|
||||
The `forProvider` section of the `YugabyteClusterClass` also differs somewhat
|
||||
from other resource classes. While resource classes like `GKEClusterClass`
|
||||
specify configuration for a 3rd party API, `YugabyteClusterClass` specifies
|
||||
configuration for a Kubernetes [CustomResourceDefinition] (CRD) instance in a
|
||||
target cluster. When the `YugabyteClusterClass` is used to create a
|
||||
`YugabyteCluster` managed resource in the Crossplane control cluster, the Rook
|
||||
stack reaches out to the target Kubernetes cluster using the Kubernetes
|
||||
`Provider` referenced above and creates a Rook `YBCluster` [instance]. The stack
|
||||
trusts that the CRD kind has been installed in the target cluster and it will
|
||||
fail to provision the resource it has not (more on this below).
|
||||
|
||||
```bash
|
||||
cat > yugabyteclass.yaml <<EOF
|
||||
apiVersion: database.rook.crossplane.io/v1alpha1
|
||||
kind: YugabyteClusterClass
|
||||
metadata:
|
||||
name: yuga-cluster
|
||||
labels:
|
||||
app: yugastore
|
||||
specTemplate:
|
||||
providerRef:
|
||||
name: yugastore-k8s-provider
|
||||
reclaimPolicy: Delete
|
||||
writeConnectionSecretsToNamespace: crossplane-system
|
||||
forProvider:
|
||||
name: hello-ybdb-cluster
|
||||
namespace: rook-yugabytedb
|
||||
master:
|
||||
# Replica count for Master.
|
||||
replicas: 3
|
||||
network:
|
||||
ports:
|
||||
- name: yb-master-ui
|
||||
port: 7000 # default value
|
||||
- name: yb-master-rpc
|
||||
port: 7100 # default value
|
||||
# Volume claim template for Master
|
||||
volumeClaimTemplate:
|
||||
metadata:
|
||||
name: datadir
|
||||
spec:
|
||||
accessModes: [ "ReadWriteOnce" ]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
storageClassName: standard
|
||||
tserver:
|
||||
# Replica count for TServer
|
||||
replicas: 3
|
||||
network:
|
||||
ports:
|
||||
- name: yb-tserver-ui
|
||||
port: 9000
|
||||
- name: yb-tserver-rpc
|
||||
port: 9100 # default value
|
||||
- name: ycql
|
||||
port: 9042 # default value
|
||||
- name: yedis
|
||||
port: 6379 # default value
|
||||
- name: ysql
|
||||
port: 5433 # default value
|
||||
# Volume claim template for TServer
|
||||
volumeClaimTemplate:
|
||||
metadata:
|
||||
name: datadir
|
||||
spec:
|
||||
accessModes: [ "ReadWriteOnce" ]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
storageClassName: standard
|
||||
EOF
|
||||
|
||||
kubectl apply -f yugabyteclass.yaml
|
||||
```
|
||||
|
||||
## Provision Target Cluster
|
||||
|
||||
### Provision GKE Cluster with a Resource Claim
|
||||
|
||||
Now that our classes have been created, we need to provision the GKE cluster by
|
||||
creating a `KubernetesCluster` claim.
|
||||
|
||||
```bash
|
||||
cat > k8sclaim.yaml <<EOF
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: yugastore-app
|
||||
labels:
|
||||
app: yugastore
|
||||
---
|
||||
apiVersion: kubernetes.crossplane.io/v1alpha1
|
||||
kind: Provider
|
||||
metadata:
|
||||
name: yugastore-k8s-provider
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
credentialsSecretRef:
|
||||
name: yugastore-k8s-secret
|
||||
namespace: yugastore-app
|
||||
---
|
||||
apiVersion: compute.crossplane.io/v1alpha1
|
||||
kind: KubernetesCluster
|
||||
metadata:
|
||||
name: yugastore-k8s
|
||||
namespace: yugastore-app
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
classSelector:
|
||||
matchLabels:
|
||||
app: yugastore
|
||||
writeConnectionSecretToRef:
|
||||
name: yugastore-k8s-secret
|
||||
EOF
|
||||
|
||||
kubectl apply -f k8sclaim.yaml
|
||||
```
|
||||
|
||||
You can view the status of the `KubernetesCluster` claim as it waits for the GKE
|
||||
cluster to come available:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get kubernetesclusters -n yugastore-app
|
||||
```
|
||||
*Output*
|
||||
```bash
|
||||
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
|
||||
yugastore-k8s Bound GKEClusterClass standard-gke GKECluster yugastore-app-yugastore-k8s-vdhjq 23m
|
||||
```
|
||||
|
||||
You can view the status of the `GKECluster` itself as it is created:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get gkeclusters.compute.gcp.crossplane.io yugastore-app-yugastore-k8s-vdhjq
|
||||
```
|
||||
*Output*
|
||||
```bash
|
||||
NAME STATUS STATE CLUSTER-NAME ENDPOINT CLUSTER-CLASS LOCATION RECLAIM-POLICY AGE
|
||||
yugastore-app-yugastore-k8s-vdhjq Bound RUNNING gke-20a8dd85-b76c-4041-bc77-36c13ee28e37 35.224.89.145 standard-gke us-central1-b Delete 5m41s
|
||||
```
|
||||
|
||||
Here we have created a namespace `yugastore-app` for our Yugastore namespaced
|
||||
resources to use and also create a Kubernetes `Provider` the references the
|
||||
secret propagated by the `KubernetesCluster` claim. If you look back at the
|
||||
`YugabyteClusterClass` we created above, this `yugastore-k8s-provider` is
|
||||
referenced, so once the secret is propagated, the Rook stack will be able to use
|
||||
it to provision a `YugabyteCluster`. However, before we get to that, we need to
|
||||
deploy the Rook Yugabyte operator into the Kubernetes cluster.
|
||||
|
||||
### Install Rook Yugabyte Operator with a KubernetesApplication
|
||||
|
||||
While this is quite a large set of configuration, all it is doing is taking the
|
||||
Rook Yugabyte [operator YAML] and packaging it into a Crossplane
|
||||
`KubernetesApplication` resource so that we can deploy it into our newly created
|
||||
GKE cluster. The `KubernetesApplication` kind is a Crossplane custom resource
|
||||
that allows you to provision a bundle of Kubernetes-native types into a remote
|
||||
cluster (our GKE cluster in this scenario). For instance, the Rook operator
|
||||
`KubernetesApplication` below specifies that we would like two `Namespace`
|
||||
objects and one of each of the `CustomResourceDefinition`, `ClusterRole`,
|
||||
`ServiceAccount`, `ClusterRoleBinding`, and `Deployment` types. For more
|
||||
information on the fields and scheduling of the `KubernetesApplication`, check
|
||||
out the [design doc][complex-workload-design] for complex workloads.
|
||||
|
||||
```bash
|
||||
cat > rook-operator.yaml <<EOF
|
||||
apiVersion: workload.crossplane.io/v1alpha1
|
||||
kind: KubernetesApplication
|
||||
metadata:
|
||||
name: rook-yugabyte
|
||||
namespace: yugastore-app
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
resourceSelector:
|
||||
matchLabels:
|
||||
operator: rook-yugabyte
|
||||
clusterSelector:
|
||||
matchLabels:
|
||||
app: yugastore
|
||||
resourceTemplates:
|
||||
- metadata:
|
||||
name: rook-namespace
|
||||
labels:
|
||||
operator: rook-yugabyte
|
||||
spec:
|
||||
template:
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: rook-yugabytedb-system
|
||||
- metadata:
|
||||
name: rook-app-namespace
|
||||
labels:
|
||||
operator: rook-yugabyte
|
||||
spec:
|
||||
template:
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: rook-yugabytedb
|
||||
labels:
|
||||
app: yugastore
|
||||
- metadata:
|
||||
name: rook-crds
|
||||
labels:
|
||||
operator: rook-yugabyte
|
||||
spec:
|
||||
template:
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: ybclusters.yugabytedb.rook.io
|
||||
spec:
|
||||
group: yugabytedb.rook.io
|
||||
names:
|
||||
kind: YBCluster
|
||||
listKind: YBClusterList
|
||||
singular: ybcluster
|
||||
plural: ybclusters
|
||||
scope: Namespaced
|
||||
version: v1alpha1
|
||||
- metadata:
|
||||
name: rook-clusterrole
|
||||
labels:
|
||||
operator: rook-yugabyte
|
||||
spec:
|
||||
template:
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: rook-yugabytedb-operator
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- services
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- create
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
- apiGroups:
|
||||
- apps
|
||||
resources:
|
||||
- statefulsets
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- create
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
- apiGroups:
|
||||
- yugabytedb.rook.io
|
||||
resources:
|
||||
- "*"
|
||||
verbs:
|
||||
- "*"
|
||||
- metadata:
|
||||
name: rook-serviceaccount
|
||||
labels:
|
||||
operator: rook-yugabyte
|
||||
spec:
|
||||
template:
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: rook-yugabytedb-operator
|
||||
namespace: rook-yugabytedb-system
|
||||
- metadata:
|
||||
name: rook-serviceaccount
|
||||
labels:
|
||||
operator: rook-yugabyte
|
||||
spec:
|
||||
template:
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: rook-yugabytedb-operator
|
||||
namespace: rook-yugabytedb-system
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: rook-yugabytedb-operator
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: rook-yugabytedb-operator
|
||||
namespace: rook-yugabytedb-system
|
||||
- metadata:
|
||||
name: rook-serviceaccount
|
||||
labels:
|
||||
operator: rook-yugabyte
|
||||
spec:
|
||||
template:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: rook-yugabytedb-operator
|
||||
namespace: rook-yugabytedb-system
|
||||
labels:
|
||||
app: rook-yugabytedb-operator
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: rook-yugabytedb-operator
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: rook-yugabytedb-operator
|
||||
spec:
|
||||
serviceAccountName: rook-yugabytedb-operator
|
||||
containers:
|
||||
- name: rook-yugabytedb-operator
|
||||
image: rook/yugabytedb:master
|
||||
args: ["yugabytedb", "operator"]
|
||||
env:
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: POD_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
EOF
|
||||
|
||||
kubectl apply -f rook-operator.yaml
|
||||
```
|
||||
|
||||
You can view the status of the `KubernetesApplication` as its resources are
|
||||
created:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get kubernetesapplication -n yugastore-app
|
||||
```
|
||||
*Output*
|
||||
```bash
|
||||
NAME CLUSTER STATUS DESIRED SUBMITTED
|
||||
rook-yugabyte yugastore-k8s Submitted 7 7
|
||||
```
|
||||
|
||||
You can also view the individual `KubernetesApplicationResources` as they are
|
||||
created:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get kubernetesapplicationresources -n yugastore-app
|
||||
```
|
||||
*Output*
|
||||
```bash
|
||||
rook-app-namespace Namespace rook-yugabytedb yugastore-k8s Submitted
|
||||
rook-clusterrole ClusterRole rook-yugabytedb-operator yugastore-k8s Submitted
|
||||
rook-crds CustomResourceDefinition ybclusters.yugabytedb.rook.io yugastore-k8s Submitted
|
||||
rook-namespace Namespace rook-yugabytedb-system yugastore-k8s Submitted
|
||||
rook-serviceaccount Deployment rook-yugabytedb-operator yugastore-k8s Submitted
|
||||
```
|
||||
|
||||
It is not unusual for the `rook-yugabytedb-operator` to fail on first attempt.
|
||||
It is reliant on the `ClusterRole` and will fail if it is not present when the
|
||||
container starts. However, the Crossplane `workload` controllers will take care
|
||||
of recreating it for us!
|
||||
|
||||
## Deploy Yugastore into Target Cluster
|
||||
|
||||
### Provision YugabyteDB with a Resource Claim
|
||||
|
||||
Now that we have a GKE cluster up and running with the Rook Yugabyte operator
|
||||
installed, we can create our YugabyteDB cluster.
|
||||
|
||||
```bash
|
||||
cat > yugabyteclaim.yaml <<EOF
|
||||
apiVersion: database.crossplane.io/v1alpha1
|
||||
kind: PostgreSQLInstance
|
||||
metadata:
|
||||
name: yugastore-db
|
||||
namespace: yugastore-app
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
classSelector:
|
||||
matchLabels:
|
||||
app: yugastore
|
||||
writeConnectionSecretToRef:
|
||||
name: yugastore-db-secret
|
||||
EOF
|
||||
|
||||
kubectl apply -f yugabyteclaim.yaml
|
||||
```
|
||||
|
||||
You can view the status of the `PostgreSQLInstance` claim as it waits for the
|
||||
`YugastoreCluster` to come available:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get postgresqlinstances -n yugastore-app
|
||||
```
|
||||
*Output*
|
||||
```bash
|
||||
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
|
||||
yugastore-db Bound YugabyteClusterClass yuga-cluster YugabyteCluster yugastore-app-yugastore-db-t9xmf 8m38s
|
||||
```
|
||||
|
||||
You can view the status of `YugabyteCluster` itself as it is created:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get yugabyteclusters.database.rook.crossplane.io yugastore-app-yugastore-db-t9xmf
|
||||
```
|
||||
*Output*
|
||||
```bash
|
||||
NAME AGE
|
||||
yugastore-app-yugastore-db-t9xmf 12m
|
||||
```
|
||||
|
||||
### Provision Yugastore with a KubernetesApplication
|
||||
|
||||
Now that we have a GKE cluster up and running with the Rook Yugabyte operator
|
||||
installed, we can create our YugabyteDB cluster and install Yugastore alongside
|
||||
it.
|
||||
|
||||
```bash
|
||||
cat > yugastore.yaml <<EOF
|
||||
apiVersion: workload.crossplane.io/v1alpha1
|
||||
kind: KubernetesApplication
|
||||
metadata:
|
||||
name: yugastore
|
||||
namespace: yugastore-app
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
resourceSelector:
|
||||
matchLabels:
|
||||
app: yugastore
|
||||
clusterSelector:
|
||||
matchLabels:
|
||||
app: yugastore
|
||||
resourceTemplates:
|
||||
- metadata:
|
||||
name: yugastore-namespace
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
template:
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: rook-yugastore
|
||||
labels:
|
||||
app: yugastore
|
||||
- metadata:
|
||||
name: yugastore-deployment
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
template:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
namespace: rook-yugastore
|
||||
name: yugastore
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: yugastore
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
containers:
|
||||
- name: yugastore
|
||||
image: gcr.io/crossplane-playground/yugastore:latest
|
||||
imagePullPolicy: Always
|
||||
command: ["/usr/local/yugastore/bin/start-for-crossplane.sh"]
|
||||
env:
|
||||
- name: DB_HOST
|
||||
value: "yb-tserver-hello-ybdb-cluster-1.yb-tservers-hello-ybdb-cluster.rook-yugabytedb.svc.cluster.local"
|
||||
- name: APP_HOST
|
||||
value: "localhost"
|
||||
- name: APP_PORT
|
||||
value: "3001"
|
||||
ports:
|
||||
- containerPort: 3001
|
||||
name: yugastore
|
||||
livenessProbe:
|
||||
exec:
|
||||
command:
|
||||
- cat
|
||||
- healthy
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
- metadata:
|
||||
name: yugastore-service
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
template:
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
namespace: rook-yugastore
|
||||
name: yugastore
|
||||
labels:
|
||||
app: yugastore
|
||||
spec:
|
||||
ports:
|
||||
- port: 3001
|
||||
selector:
|
||||
app: yugastore
|
||||
type: LoadBalancer
|
||||
EOF
|
||||
|
||||
kubectl apply -f yugastore.yaml
|
||||
```
|
||||
|
||||
You can view the status of the Yugastore `KubernetesApplication` as its
|
||||
resources are created:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get kubernetesapplication yugastore -n yugastore-app
|
||||
```
|
||||
*Output*
|
||||
```bash
|
||||
NAME CLUSTER STATUS DESIRED SUBMITTED
|
||||
yugastore yugastore-k8s Submitted 3 3
|
||||
```
|
||||
|
||||
You can also view the individual `KubernetesApplicationResources` as they are
|
||||
created:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get kubernetesapplicationresources -n yugastore-app --selector=app=yugastore
|
||||
```
|
||||
*Output*
|
||||
```bash
|
||||
NAME TEMPLATE-KIND TEMPLATE-NAME CLUSTER STATUS
|
||||
yugastore-deployment Deployment yugastore yugastore-k8s Submitted
|
||||
yugastore-namespace Namespace rook-yugastore yugastore-k8s Submitted
|
||||
yugastore-service Service yugastore yugastore-k8s Submitted
|
||||
```
|
||||
|
||||
## Results
|
||||
|
||||
We are primarily interested in the `yugastore-service` as that is what will open
|
||||
the Yugastore app to the internet. After it is assigned an external IP address,
|
||||
it can be retrieved with the following:
|
||||
|
||||
*Command*
|
||||
```bash
|
||||
kubectl get kubernetesapplicationresources yugastore-service -n yugastore-app -o=jsonpath='{.status.remote.loadBalancer.ingress[0].ip}'
|
||||
```
|
||||
*Output*
|
||||
```bash
|
||||
130.211.206.157
|
||||
```
|
||||
|
||||
Now if you point your browser to port `3001` at the external IP that the service
|
||||
was assigned, you should see the Yugastore app running!
|
||||
|
||||

|
||||
|
||||
## Cleanup
|
||||
|
||||
Since all of our configuration is in a single directory, we can cleanup all of
|
||||
our infrastructure with a single command:
|
||||
|
||||
```bash
|
||||
kubectl delete -f yugastore/
|
||||
```
|
||||
|
||||
## Conclusion and Next Steps
|
||||
|
||||
In this guide we:
|
||||
|
||||
* Setup a local Kubernetes cluster with Crossplane, stack-gcp, and stack-rook
|
||||
installed
|
||||
* Provisioned a GKE Kubernetes cluster
|
||||
* Installed the Rook Yugabyte operator into the GKE cluster
|
||||
* Created a YugabyteDB cluster in the GKE cluster
|
||||
* Deployed Yugastore to the GKE cluster, using the YugabyteDB cluster as its
|
||||
database
|
||||
|
||||
If you would like to learn more about stacks, checkout the other [stacks
|
||||
guides][stacks]. If you have an existing cluster that you want to provision
|
||||
resources in, checkout the [services guide][services].
|
||||
|
||||
<!-- Named links -->
|
||||
[Yugastore]: https://github.com/yugabyte/yugastore
|
||||
[Rook]: https://rook.io/
|
||||
[Yugabyte operator]: https://rook.io/docs/rook/v1.1/yugabytedb.html
|
||||
[YugabyteDB]: https://www.yugabyte.com/
|
||||
[GKE]: https://cloud.google.com/kubernetes-engine/
|
||||
|
||||
[KIND]: https://kind.sigs.k8s.io/
|
||||
[Minikube]: https://github.com/kubernetes/minikube
|
||||
|
||||
[install-kubectl]: https://kubernetes.io/docs/tasks/tools/install-kubectl/
|
||||
[using-helm]: https://docs.helm.sh/using_helm/
|
||||
|
||||
[crossplane-install]: install-crossplane.md#alpha
|
||||
[gcp-stack-install]: install-crossplane.md#gcp-stack
|
||||
[rook-stack-install]: install-crossplane.md#rook-stack
|
||||
[cloud-creds]: cloud-providers/gcp/gcp-provider.md
|
||||
|
||||
[CustomResourceDefinition]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/
|
||||
[instance]: https://rook.io/docs/rook/v1.1/yugabytedb-cluster-crd.html
|
||||
[operator YAML]: https://github.com/rook/rook/blob/master/cluster/examples/kubernetes/yugabytedb/operator.yaml
|
||||
[complex-workload-design]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-complex-workloads.md#design
|
||||
|
||||
[services]: services-guide.md
|
||||
[stacks]: stacks-guide.md
|
||||
|
|
@ -0,0 +1,364 @@
|
|||
---
|
||||
title: "Stacks Guide"
|
||||
toc: true
|
||||
weight: 510
|
||||
indent: false
|
||||
---
|
||||
|
||||
# Stacks Guide
|
||||
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Introduction](#introduction)
|
||||
2. [Concepts](#concepts)
|
||||
3. [Before you get started](#before-you-get-started)
|
||||
4. [Install the Crossplane CLI](#install-the-crossplane-cli)
|
||||
5. [Install and configure Crossplane](#install-and-configure-crossplane)
|
||||
6. [Install support for our application into
|
||||
Crossplane](#install-support-for-our-application-into-crossplane)
|
||||
7. [Create a Wordpress](#create-a-wordpress)
|
||||
8. [Clean up](#clean-up)
|
||||
9. [Conclusion](#conclusion)
|
||||
10. [Next steps](#next-steps)
|
||||
11. [References](#references)
|
||||
|
||||
## Introduction
|
||||
|
||||
Welcome to the Crossplane Stack guide! In this document, we will:
|
||||
|
||||
* Learn how to install an existing stack
|
||||
* Interact with a stack to see how to use it
|
||||
* Glimpse what is possible with a stack
|
||||
* Touch a little bit on how stacks work
|
||||
|
||||
We will **not**:
|
||||
|
||||
* Learn first principles (see the [concepts
|
||||
document][crossplane-concepts] for that level of detail)
|
||||
* Develop our own stack from scratch (go to [this development
|
||||
guide][stack-developer-guide] to learn how to do that)
|
||||
|
||||
Let's go!
|
||||
|
||||
## Concepts
|
||||
|
||||
There are a bunch of things you might want to know to fully understand
|
||||
what's happening in this document. This guide won't cover them, but
|
||||
there are other ones that do. Here are some links!
|
||||
|
||||
* [Crossplane concepts][crossplane-concepts]
|
||||
* [Kubernetes concepts][kubernetes-concepts]
|
||||
|
||||
## Before you get started
|
||||
|
||||
This guide assumes you are using a *nix-like environment. It also
|
||||
assumes you have a basic working familiarity with the following:
|
||||
|
||||
* The terminal environment
|
||||
* Setting up cloud provider accounts for the cloud provider you want to
|
||||
use
|
||||
* [Kubernetes][kubernetes-docs] and [kubectl][kubectl-docs]
|
||||
|
||||
You will need:
|
||||
|
||||
* A *nix-like environment
|
||||
* A cloud provider account, for the cloud provider of your choice (out
|
||||
of the supported providers)
|
||||
* A locally-configured kubectl which points to a configured Kubernetes
|
||||
cluster. We will put Crossplane in this cluster, and we'll refer to it
|
||||
as the control cluster.
|
||||
|
||||
## Install the Crossplane CLI
|
||||
|
||||
To interact with stacks, we're going to use the [Crossplane
|
||||
CLI][crossplane-cli], because it's more convenient. To install it, we
|
||||
can use the one-line curl bash:
|
||||
|
||||
```
|
||||
RELEASE=v0.2.0 && curl -sL https://raw.githubusercontent.com/crossplaneio/crossplane-cli/"${RELEASE}"/bootstrap.sh | RELEASE=${RELEASE} bash
|
||||
```
|
||||
|
||||
To use the latest release, you can use `master` as the `RELEASE` instead
|
||||
of using a specific version.
|
||||
|
||||
## Install and configure Crossplane
|
||||
|
||||
To use Crossplane, we'll need to install and configure it. In this case,
|
||||
we want to use Crossplane with a cloud provider, so we'll need to
|
||||
configure the provider.
|
||||
|
||||
### Install Crossplane
|
||||
|
||||
The recommended way of installing Crossplane is by using
|
||||
[helm][helm-install]. We can grab the most stable version currently
|
||||
available by using:
|
||||
|
||||
```
|
||||
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
|
||||
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
|
||||
```
|
||||
|
||||
For more options for installing, including how to install a more
|
||||
bleeding-edge version, or how to uninstall, see the [full install
|
||||
documentation][crossplane-install-docs].
|
||||
|
||||
### Create the application namespace
|
||||
|
||||
[Kubernetes namespaces][kubernetes-namespaces-docs] are used to isolate
|
||||
resources in the same cluster, and we'll use them in our Crossplane
|
||||
control cluster too. Let's create a namespace for our application's
|
||||
resources. We'll call it `app-project1-dev` for the purposes of this
|
||||
guide, but any name can be used.
|
||||
|
||||
```
|
||||
kubectl create namespace app-project1-dev
|
||||
```
|
||||
|
||||
The reason we need to create the namespace before we configure the cloud
|
||||
provider is because we will be setting up some cloud provider
|
||||
configuration in that namespace. The configuration will help our
|
||||
application not care about which specific provider it uses. For more
|
||||
details on how this works, see the Crossplane documentation on [portable
|
||||
classes][portable-classes-docs].
|
||||
|
||||
### Configure support for your cloud provider
|
||||
|
||||
Next we'll set up support for our cloud provider of choice! See the
|
||||
provider-specific guides:
|
||||
|
||||
* [AWS][aws-setup]
|
||||
* [GCP][gcp-setup]
|
||||
* [Azure][azure-setup]
|
||||
|
||||
Then come back here! Don't worry; we'll still be here when you're ready.
|
||||
|
||||
Don't see your favorite cloud provider? [Help us add
|
||||
support][provider-stack-developer-guide] for it!
|
||||
|
||||
## Install support for our application into Crossplane
|
||||
|
||||
Now that we've got Crossplane set up and configured to use a cloud
|
||||
provider, we're ready to add support for creating WordPresses! We'll do
|
||||
this using a Crossplane Stack. For more information about stacks, see
|
||||
the [full Stack documentation][stack-docs].
|
||||
|
||||
We can use the [Crossplane CLI][crossplane-cli] to install our stack which adds support for
|
||||
Wordpress. Let's install it into a namespace for our project, which
|
||||
we'll call `app-project1-dev` for the purposes of this guide. To install
|
||||
to the current namespace, `install` can be used, but since we want to
|
||||
install to a specific namespace, we will use `generate-install`:
|
||||
|
||||
```
|
||||
kubectl crossplane stack generate-install 'crossplane/sample-stack-wordpress:latest' 'sample-stack-wordpress' | kubectl apply --namespace app-project1-dev -f -
|
||||
```
|
||||
|
||||
Using the `generate-install` command and piping the output to `kubectl
|
||||
apply` instead of using the `install` command gives us more control over
|
||||
how the stack's installation is handled. Everything is a Kubernetes
|
||||
object!
|
||||
|
||||
This pulls the stack package from a registry to install it into
|
||||
Crossplane. For more details about how to use the CLI, see the
|
||||
[documentation for the CLI][crossplane-cli-docs]. For more details about how stacks work behind
|
||||
the scenes, see the documentation about the [stack
|
||||
manager][stack-manager-docs] and the [stack
|
||||
format][stack-format-docs].
|
||||
|
||||
## Create a Wordpress
|
||||
|
||||
Now that Crossplane supports Wordpress creation, we can ask Crossplane
|
||||
to spin up a Wordpress for us. We can do this by creating a Kubernetes
|
||||
resource that our Wordpress stack will recognize:
|
||||
|
||||
```
|
||||
cat > my-wordpress.yaml <<EOF
|
||||
apiVersion: wordpress.samples.stacks.crossplane.io/v1alpha1
|
||||
kind: WordpressInstance
|
||||
metadata:
|
||||
name: my-wordpressinstance
|
||||
EOF
|
||||
|
||||
kubectl apply --namespace app-project1-dev -f my-wordpress.yaml
|
||||
```
|
||||
|
||||
To validate that it has been set up correctly, we can run:
|
||||
|
||||
```
|
||||
kubectl -n app-project1-dev get stack
|
||||
```
|
||||
|
||||
The output should look something like:
|
||||
|
||||
```
|
||||
NAME READY VERSION AGE
|
||||
sample-stack-wordpress True 0.0.1 48s
|
||||
```
|
||||
|
||||
If the control cluster doesn't recognize the Wordpress instance type, it
|
||||
could be because the stack is still being installed. Wait a few seconds,
|
||||
and try creating the Wordpress instance again.
|
||||
|
||||
### Wait
|
||||
|
||||
The Wordpress can take a while to spin up, because behind the scenes
|
||||
Crossplane is creating all of its dependendencies, which is a database
|
||||
and Kubernetes cluster. To check the status, you can use [the trace
|
||||
command](https://github.com/crossplaneio/crossplane-cli/tree/master/docs/trace-command.md)
|
||||
of the Crossplane CLI.
|
||||
|
||||
```
|
||||
# Get the name of the Kubernetes Application resource which is the top level workload definiton for our Wordpress instance
|
||||
K8S_APP_NAME=$(kubectl get -n app-project1-dev kubernetesapplication -lstack=sample-stack-wordpress -o=jsonpath='{.items[0].metadata.name}')
|
||||
|
||||
# Run the trace command
|
||||
kubectl crossplane trace -n app-project1-dev kubernetesapplication "${K8S_APP_NAME}"
|
||||
```
|
||||
|
||||
You can also check the status of individual Crossplane resources that
|
||||
Crossplane is creating for us:
|
||||
|
||||
```
|
||||
# The claim for the database
|
||||
kubectl get -n app-project1-dev mysqlinstance
|
||||
# The claim for the Kubernetes cluster
|
||||
kubectl get -n app-project1-dev kubernetescluster
|
||||
|
||||
# The workload definition
|
||||
kubectl get -n app-project1-dev kubernetesapplication
|
||||
# The things created on the Kubernetes cluster as part of the workload
|
||||
kubectl get -n app-project1-dev kubernetesapplicationresource
|
||||
```
|
||||
|
||||
For validation that these resources are spinning up, you can check in
|
||||
the usual way for your cloud provider, or you can ask for the
|
||||
statuses of some of the cloud-specific Kubernetes resources provided by
|
||||
the infrastructure stack that we installed.
|
||||
|
||||
For more information about how Crossplane manages databases and
|
||||
Kubernetes clusters for us, see the more complete documentation about
|
||||
[claims][claims-docs], [resource classes][resource-classes-docs], and
|
||||
[workloads][workloads-docs].
|
||||
|
||||
### Use
|
||||
|
||||
Once everything has been created, the ip address for the Wordpress
|
||||
instance will show up in the [Crossplane
|
||||
KubernetesApplicationResource][kubernetesapplicationresource-docs]
|
||||
which represents the workload's service. Here's a way to watch for the
|
||||
ip:
|
||||
|
||||
```
|
||||
kubectl get --watch kubernetesapplicationresource -n app-project1-dev -o custom-columns='NAME:.metadata.name,NAMESPACE:.spec.template.metadata.namespace,KIND:.spec.template.kind,SERVICE-EXTERNAL-IP:.status.remote.loadBalancer.ingress[0].ip'
|
||||
```
|
||||
|
||||
The ip will show up on the one which has a `Service` kind.
|
||||
|
||||
If you navigate to the ip, you should see the Wordpress first-time
|
||||
start-up screen in your browser.
|
||||
|
||||
If you see it, things are working!
|
||||
|
||||
## Clean up
|
||||
|
||||
When we want to get rid of everything, we can delete the Wordpress
|
||||
instance and let Crossplane and Kubernetes clean up the rest. To read
|
||||
more about how cleanup works, see the documentation on reclaim policies
|
||||
in Crossplane and garbage collection in Kubernetes.
|
||||
|
||||
To delete the Wordpress instance:
|
||||
|
||||
```
|
||||
kubectl delete -n app-project1-dev wordpressinstance my-wordpressinstance
|
||||
```
|
||||
|
||||
We can also remove the stack, using the Crossplane CLI:
|
||||
|
||||
```
|
||||
kubectl crossplane stack uninstall sample-stack-wordpress -n app-project1-dev
|
||||
```
|
||||
|
||||
Removing the stack removes any Wordpress instances that were created.
|
||||
|
||||
The cloud provider stack can also be removed using the `kubectl
|
||||
crossplane stack uninstall` command. Use `kubectl crossplane stack list`
|
||||
to see what's installed.
|
||||
|
||||
## Conclusion
|
||||
|
||||
We're done!
|
||||
|
||||
In this guide, we:
|
||||
|
||||
* Set up Crossplane on a control cluster
|
||||
* Installed functionality for a cloud provider
|
||||
* Extended Crossplane to manage Wordpress workloads for us
|
||||
* Created a Wordpress workload
|
||||
* Got some initial exposure to some of the tools and concepts of
|
||||
Crossplane, Crossplane Stacks, and the Crossplane CLI
|
||||
|
||||
## Next steps
|
||||
|
||||
Crossplane can do a lot.
|
||||
|
||||
Now that we've gone through how to use a Crossplane Stack, you may want
|
||||
to learn more about which stacks are available, or about how to write
|
||||
your own stack.
|
||||
|
||||
To learn more about which stacks are available, check out the [stack registry][stack-registry].
|
||||
|
||||
To learn more about how to write your own stack, see the [stack developer
|
||||
guide][stack-developer-guide].
|
||||
|
||||
## References
|
||||
|
||||
* [The Crossplane Concepts guide][crossplane-concepts]
|
||||
* [Crossplane API Reference][crossplane-api-reference]
|
||||
* [The Stacks Concepts guide][stack-concepts]
|
||||
* [Crossplane Install Guide][crossplane-install-docs]
|
||||
* [The Crossplane CLI][crossplane-cli]
|
||||
* [Stacks Quick Start][stack-quick-start]
|
||||
* [Stacks Developer Guide][stack-developer-guide]
|
||||
* [Stack Registry][stack-registry]
|
||||
* [Provider Stack Developer Guide][provider-stack-developer-guide]
|
||||
* [AWS documentation][aws-docs]
|
||||
* [GCP documentation][gcp-docs]
|
||||
* [Azure documentation][azure-docs]
|
||||
* [Kubernetes documentation][kubernetes-docs]
|
||||
|
||||
<!-- Named links -->
|
||||
[crossplane-cli]: https://github.com/crossplaneio/crossplane-cli/tree/release-0.2
|
||||
[crossplane-cli-docs]: https://github.com/crossplaneio/crossplane-cli/blob/release-0.2/README.md
|
||||
[crossplane-concepts]: concepts.md
|
||||
[crossplane-install-docs]: install-crossplane.md
|
||||
[crossplane-api-reference]: api.md
|
||||
|
||||
[kubernetesapplicationresource-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-complex-workloads.md
|
||||
[claims-docs]: concepts.md#resource-claims-and-resource-classes
|
||||
[resource-classes-docs]: concepts.md#resource-claims-and-resource-classes
|
||||
[portable-classes-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-default-resource-class.md
|
||||
[workloads-docs]: concepts.md#resources-and-workloads
|
||||
|
||||
[kubernetes-concepts]: https://kubernetes.io/docs/concepts/
|
||||
[kubernetes-docs]: https://kubernetes.io/docs/home/
|
||||
[kubernetes-namespaces-docs]: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
|
||||
[kubectl-docs]: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
|
||||
|
||||
[helm-install]: https://github.com/helm/helm#install
|
||||
|
||||
[aws-docs]: https://docs.aws.amazon.com/
|
||||
[gcp-docs]: https://cloud.google.com/docs/
|
||||
[azure-docs]: https://docs.microsoft.com/azure/
|
||||
|
||||
[aws-setup]: stacks-guide-aws.md
|
||||
[gcp-setup]: stacks-guide-gcp.md
|
||||
[azure-setup]: stacks-guide-azure.md
|
||||
|
||||
[stack-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#crossplane-stacks
|
||||
[stack-quick-start]: https://github.com/crossplaneio/crossplane-cli/tree/release-0.2#quick-start-stacks
|
||||
[stack-concepts]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#crossplane-stacks
|
||||
[stack-registry]: https://hub.docker.com/search?q=crossplane&type=image
|
||||
[stack-manager-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#installation-flow
|
||||
[stack-format-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#stack-package-format
|
||||
[stack-developer-guide]: developer-guide.md
|
||||
[provider-stack-developer-guide]: developer-guide.md
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
---
|
||||
title: Troubleshooting
|
||||
toc: true
|
||||
weight: 820
|
||||
indent: true
|
||||
---
|
||||
# Troubleshooting
|
||||
|
||||
* [Using the trace command](#using-the-trace-command)
|
||||
* [Resource Status and Conditions](#resource-status-and-conditions)
|
||||
* [Crossplane Logs](#crossplane-logs)
|
||||
* [Pausing Crossplane](#pausing-crossplane)
|
||||
* [Deleting a Resource Hangs](#deleting-a-resource-hangs)
|
||||
|
||||
## Using the trace command
|
||||
|
||||
The [Crossplane CLI](https://github.com/crossplaneio/crossplane-cli) trace
|
||||
command provides a holistic view for a particular object and related
|
||||
ones to ease debugging and troubleshooting process. It finds the
|
||||
relevant Crossplane resources for a given one and provides detailed
|
||||
information as well as an overview indicating what could be wrong.
|
||||
|
||||
Usage:
|
||||
```
|
||||
kubectl crossplane trace TYPE[.GROUP] NAME [-n| --namespace NAMESPACE] [--kubeconfig KUBECONFIG] [-o| --outputFormat dot]
|
||||
```
|
||||
|
||||
Examples:
|
||||
```
|
||||
# Trace a KubernetesApplication
|
||||
kubectl crossplane trace KubernetesApplication wordpress-app-83f04457-0b1b-4532-9691-f55cf6c0da6e -n app-project1-dev
|
||||
|
||||
# Trace a MySQLInstance
|
||||
kubectl crossplane trace MySQLInstance wordpress-mysql-83f04457-0b1b-4532-9691-f55cf6c0da6e -n app-project1-dev
|
||||
```
|
||||
|
||||
For more information, see [the trace command documentation](https://github.com/crossplaneio/crossplane-cli/tree/master/docs/trace-command.md).
|
||||
|
||||
## Resource Status and Conditions
|
||||
|
||||
Most Crossplane resources have a `status` section that can represent the current
|
||||
state of that particular resource. Running `kubectl describe` against a
|
||||
Crossplane resource will frequently give insightful information about its
|
||||
condition. For example, to determine the status of a MySQLInstance resource
|
||||
claim, run:
|
||||
|
||||
```shell
|
||||
kubectl -n app-project1-dev describe mysqlinstance mysql-claim
|
||||
```
|
||||
|
||||
This should produce output that includes:
|
||||
|
||||
```console
|
||||
Status:
|
||||
Conditions:
|
||||
Last Transition Time: 2019-09-16T13:46:42Z
|
||||
Reason: Managed claim is waiting for managed resource to become bindable
|
||||
Status: False
|
||||
Type: Ready
|
||||
Last Transition Time: 2019-09-16T13:46:42Z
|
||||
Reason: Successfully reconciled managed resource
|
||||
Status: True
|
||||
Type: Synced
|
||||
```
|
||||
|
||||
Most Crossplane resources set exactly two condition types; `Ready` and `Synced`.
|
||||
`Ready` represents the availability of the resource itself - whether it is
|
||||
creating, deleting, available, unavailable, binding, etc. `Synced` represents
|
||||
the success of the most recent attempt to 'reconcile' the _desired_ state of the
|
||||
resource with its _actual_ state. The `Synced` condition is the first place you
|
||||
should look when a Crossplane resource is not behaving as expected.
|
||||
|
||||
## Crossplane Logs
|
||||
|
||||
The next place to look to get more information or investigate a failure would
|
||||
be in the Crossplane pod logs, which should be running in the
|
||||
`crossplane-system` namespace. To get the current Crossplane logs, run the
|
||||
following:
|
||||
|
||||
```shell
|
||||
kubectl -n crossplane-system logs -lapp=crossplane
|
||||
```
|
||||
|
||||
Remember that much of Crossplane's functionality is provided by Stacks. You can
|
||||
use `kubectl logs` to view Stack logs too, though Stacks may not run in the
|
||||
`crossplane-system` namespace.
|
||||
|
||||
## Pausing Crossplane
|
||||
|
||||
Sometimes, for example when you encounter a bug. it can be useful to pause
|
||||
Crossplane if you want to stop it from actively attempting to manage your
|
||||
resources. To pause Crossplane without deleting all of its resources, run the
|
||||
following command to simply scale down its deployment:
|
||||
|
||||
```bash
|
||||
kubectl -n crossplane-system scale --replicas=0 deployment/crossplane
|
||||
```
|
||||
|
||||
Once you have been able to rectify the problem or smooth things out, you can unpause Crossplane simply by scaling its deployment back up:
|
||||
|
||||
```bash
|
||||
kubectl -n crossplane-system scale --replicas=1 deployment/crossplane
|
||||
```
|
||||
|
||||
Remember that much of Crossplane's functionality is provided by Stacks. You can
|
||||
use `kubectl scale` to pause Stack pods too, though Stacks may not run in the
|
||||
`crossplane-system` namespace.
|
||||
|
||||
## Deleting a Resource Hangs
|
||||
|
||||
The resources that Crossplane manages will automatically be cleaned up so as not
|
||||
to leave anything running behind. This is accomplished by using finalizers, but
|
||||
in certain scenarios the finalizer can prevent the Kubernetes object from
|
||||
getting deleted.
|
||||
|
||||
To deal with this, we essentially want to patch the object to remove its
|
||||
finalizer, which will then allow it to be deleted completely. Note that this
|
||||
won't necessarily delete the external resource that Crossplane was managing, so
|
||||
you will want to go to your cloud provider's console and look there for any
|
||||
lingering resources to clean up.
|
||||
|
||||
In general, a finalizer can be removed from an object with this command:
|
||||
|
||||
```console
|
||||
kubectl patch <resource-type> <resource-name> -p '{"metadata":{"finalizers": []}}' --type=merge
|
||||
```
|
||||
|
||||
For example, for a Workload object (`workloads.compute.crossplane.io`) named
|
||||
`test-workload`, you can remove its finalizer with:
|
||||
|
||||
```console
|
||||
kubectl patch workloads.compute.crossplane.io test-workload -p '{"metadata":{"finalizers": []}}' --type=merge
|
||||
```
|
||||
|
After Width: | Height: | Size: 1.1 MiB |