EdgeContainerCluster


Property Value
Google Cloud Service Name Edge container
Google Cloud Service Documentation /distributed-cloud/edge/latest/docs
Google Cloud REST Resource Name v1beta1.projects.locations.clusters
Google Cloud REST Resource Documentation /distributed-cloud/edge/latest/docs/reference/container/rest/v1/projects.locations.clusters
Config Connector Resource Short Names gcpedgecontainercluster
gcpedgecontainerclusters
edgecontainercluster
Config Connector Service Name edgecontainer.googleapis.com
Config Connector Resource Fully Qualified Name edgecontainerclusters.edgecontainer.cnrm.cloud.google.com
Can Be Referenced by IAMPolicy/IAMPolicyMember No
Config Connector Default Average Reconcile Interval In Seconds 600

Custom Resource Definition Properties

Spec

Schema

authorization:
  adminUsers:
    usernameRef:
      external: string
      name: string
      namespace: string
controlPlane:
  local:
    machineFilter: string
    nodeCount: integer
    nodeLocation: string
    sharedDeploymentPolicy: string
  remote:
    nodeLocation: string
controlPlaneEncryption:
  kmsKeyActiveVersion: string
  kmsKeyRef:
    external: string
    name: string
    namespace: string
  kmsKeyState: string
  kmsStatus:
  - code: integer
    message: string
defaultMaxPodsPerNode: integer
externalLoadBalancerIpv4AddressPools:
- string
fleet:
  membership: string
  projectRef:
    external: string
    name: string
    namespace: string
location: string
maintenancePolicy:
  window:
    recurringWindow:
      recurrence: string
      window:
        endTime: string
        startTime: string
networking:
  clusterIpv4CidrBlocks:
  - string
  clusterIpv6CidrBlocks:
  - string
  networkType: string
  servicesIpv4CidrBlocks:
  - string
  servicesIpv6CidrBlocks:
  - string
projectRef:
  external: string
  name: string
  namespace: string
releaseChannel: string
resourceID: string
systemAddonsConfig:
  ingress:
    disabled: boolean
    ipv4Vip: string
targetVersion: string
Fields

authorization

Required

object

Immutable. RBAC policy that will be applied and managed by GEC.

authorization.adminUsers

Required

object

User that will be granted the cluster-admin role on the cluster, providing full access to the cluster. Currently, this is a singular field, but will be expanded to allow multiple admins in the future.

authorization.adminUsers.usernameRef

Required

object

authorization.adminUsers.usernameRef.external

Optional

string

Allowed value: The `email` field of an `IAMServiceAccount` resource.

authorization.adminUsers.usernameRef.name

Optional

string

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

authorization.adminUsers.usernameRef.namespace

Optional

string

Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/

controlPlane

Optional

object

The configuration of the cluster control plane.

controlPlane.local

Optional

object

Immutable. Local control plane configuration.

controlPlane.local.machineFilter

Optional

string

Only machines matching this filter will be allowed to host control plane nodes. The filtering language accepts strings like "name=", and is documented here: [AIP-160](https://google.aip.dev/160).

controlPlane.local.nodeCount

Optional

integer

The number of nodes to serve as replicas of the Control Plane. Only 1 and 3 are supported.

controlPlane.local.nodeLocation

Optional

string

Immutable. Name of the Google Distributed Cloud Edge zones where this node pool will be created. For example: 'us-central1-edge-customer-a'.

controlPlane.local.sharedDeploymentPolicy

Optional

string

Policy configuration about how user applications are deployed. Possible values: ["SHARED_DEPLOYMENT_POLICY_UNSPECIFIED", "ALLOWED", "DISALLOWED"].

controlPlane.remote

Optional

object

Immutable. Remote control plane configuration.

controlPlane.remote.nodeLocation

Optional

string

Immutable. Name of the Google Distributed Cloud Edge zones where this node pool will be created. For example: 'us-central1-edge-customer-a'.

controlPlaneEncryption

Optional

object

Remote control plane disk encryption options. This field is only used when enabling CMEK support.

controlPlaneEncryption.kmsKeyActiveVersion

Optional

string

The Cloud KMS CryptoKeyVersion currently in use for protecting control plane disks. Only applicable if kms_key is set.

controlPlaneEncryption.kmsKeyRef

Optional

object

controlPlaneEncryption.kmsKeyRef.external

Optional

string

Allowed value: The `selfLink` field of a `KMSCryptoKey` resource.

controlPlaneEncryption.kmsKeyRef.name

Optional

string

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

controlPlaneEncryption.kmsKeyRef.namespace

Optional

string

Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/

controlPlaneEncryption.kmsKeyState

Optional

string

Availability of the Cloud KMS CryptoKey. If not 'KEY_AVAILABLE', then nodes may go offline as they cannot access their local data. This can be caused by a lack of permissions to use the key, or if the key is disabled or deleted.

controlPlaneEncryption.kmsStatus

Optional

list (object)

Error status returned by Cloud KMS when using this key. This field may be populated only if 'kms_key_state' is not 'KMS_KEY_STATE_KEY_AVAILABLE'. If populated, this field contains the error status reported by Cloud KMS.

controlPlaneEncryption.kmsStatus[]

Optional

object

controlPlaneEncryption.kmsStatus[].code

Optional

integer

The status code, which should be an enum value of google.rpc.Code.

controlPlaneEncryption.kmsStatus[].message

Optional

string

A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.

defaultMaxPodsPerNode

Optional

integer

The default maximum number of pods per node used if a maximum value is not specified explicitly for a node pool in this cluster. If unspecified, the Kubernetes default value will be used.

externalLoadBalancerIpv4AddressPools

Optional

list (string)

Address pools for cluster data plane external load balancing.

externalLoadBalancerIpv4AddressPools[]

Optional

string

fleet

Required

object

Immutable. Fleet related configuration. Fleets are a Google Cloud concept for logically organizing clusters, letting you use and manage multi-cluster capabilities and apply consistent policies across your systems.

fleet.membership

Optional

string

The name of the managed Hub Membership resource associated to this cluster. Membership names are formatted as 'projects//locations/global/membership/'.

fleet.projectRef

Required

object

The number of the Fleet host project where this cluster will be registered.

fleet.projectRef.external

Optional

string

Allowed value: string of the format `projects/{{value}}`, where {{value}} is the `number` field of a `Project` resource.

fleet.projectRef.name

Optional

string

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

fleet.projectRef.namespace

Optional

string

Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/

location

Required

string

Immutable. The location of the resource.

maintenancePolicy

Optional

object

Cluster-wide maintenance policy configuration.

maintenancePolicy.window

Required*

object

Specifies the maintenance window in which maintenance may be performed.

maintenancePolicy.window.recurringWindow

Required*

object

Represents an arbitrary window of time that recurs.

maintenancePolicy.window.recurringWindow.recurrence

Optional

string

An RRULE (https://tools.ietf.org/html/rfc5545#section-3.8.5.3) for how this window recurs. They go on for the span of time between the start and end time.

maintenancePolicy.window.recurringWindow.window

Optional

object

Represents an arbitrary window of time.

maintenancePolicy.window.recurringWindow.window.endTime

Optional

string

The time that the window ends. The end time must take place after the start time.

maintenancePolicy.window.recurringWindow.window.startTime

Optional

string

The time that the window first starts.

networking

Required

object

Fleet related configuration. Fleets are a Google Cloud concept for logically organizing clusters, letting you use and manage multi-cluster capabilities and apply consistent policies across your systems.

networking.clusterIpv4CidrBlocks

Required

list (string)

Immutable. All pods in the cluster are assigned an RFC1918 IPv4 address from these blocks. Only a single block is supported. This field cannot be changed after creation.

networking.clusterIpv4CidrBlocks[]

Required

string

networking.clusterIpv6CidrBlocks

Optional

list (string)

Immutable. If specified, dual stack mode is enabled and all pods in the cluster are assigned an IPv6 address from these blocks alongside from an IPv4 address. Only a single block is supported. This field cannot be changed after creation.

networking.clusterIpv6CidrBlocks[]

Optional

string

networking.networkType

Optional

string

IP addressing type of this cluster i.e. SINGLESTACK_V4 vs DUALSTACK_V4_V6.

networking.servicesIpv4CidrBlocks

Required

list (string)

Immutable. All services in the cluster are assigned an RFC1918 IPv4 address from these blocks. Only a single block is supported. This field cannot be changed after creation.

networking.servicesIpv4CidrBlocks[]

Required

string

networking.servicesIpv6CidrBlocks

Optional

list (string)

Immutable. If specified, dual stack mode is enabled and all services in the cluster are assigned an IPv6 address from these blocks alongside from an IPv4 address. Only a single block is supported. This field cannot be changed after creation.

networking.servicesIpv6CidrBlocks[]

Optional

string

projectRef

Required

object

The project that this resource belongs to.

projectRef.external

Optional

string

Allowed value: The `name` field of a `Project` resource.

projectRef.name

Optional

string

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

projectRef.namespace

Optional

string

Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/

releaseChannel

Optional

string

The release channel a cluster is subscribed to. Possible values: ["RELEASE_CHANNEL_UNSPECIFIED", "NONE", "REGULAR"].

resourceID

Optional

string

Immutable. Optional. The name of the resource. Used for creation and acquisition. When unset, the value of `metadata.name` is used as the default.

systemAddonsConfig

Optional

object

Config that customers are allowed to define for GDCE system add-ons.

systemAddonsConfig.ingress

Optional

object

Config for the Ingress add-on which allows customers to create an Ingress object to manage external access to the servers in a cluster. The add-on consists of istiod and istio-ingress.

systemAddonsConfig.ingress.disabled

Optional

boolean

Whether Ingress is disabled.

systemAddonsConfig.ingress.ipv4Vip

Optional

string

Ingress VIP.

targetVersion

Optional

string

The target cluster version. For example: "1.5.0".

* Field is required when parent field is specified

Status

Schema

clusterCaCertificate: string
conditions:
- lastTransitionTime: string
  message: string
  reason: string
  status: string
  type: string
controlPlaneVersion: string
createTime: string
endpoint: string
maintenanceEvents:
- createTime: string
  endTime: string
  operation: string
  schedule: string
  startTime: string
  state: string
  targetVersion: string
  type: string
  updateTime: string
  uuid: string
nodeVersion: string
observedGeneration: integer
port: integer
status: string
updateTime: string
Fields
clusterCaCertificate

string

The PEM-encoded public certificate of the cluster's CA.

conditions

list (object)

Conditions represent the latest available observation of the resource's current state.

conditions[]

object

conditions[].lastTransitionTime

string

Last time the condition transitioned from one status to another.

conditions[].message

string

Human-readable message indicating details about last transition.

conditions[].reason

string

Unique, one-word, CamelCase reason for the condition's last transition.

conditions[].status

string

Status is the status of the condition. Can be True, False, Unknown.

conditions[].type

string

Type is the type of the condition.

controlPlaneVersion

string

The control plane release version.

createTime

string

The time the cluster was created, in RFC3339 text format.

endpoint

string

The IP address of the Kubernetes API server.

maintenanceEvents

list (object)

All the maintenance events scheduled for the cluster, including the ones ongoing, planned for the future and done in the past (up to 90 days).

maintenanceEvents[]

object

maintenanceEvents[].createTime

string

The time when the maintenance event request was created.

maintenanceEvents[].endTime

string

The time when the maintenance event ended, either successfully or not. If the maintenance event is split into multiple maintenance windows, end_time is only updated when the whole flow ends.

maintenanceEvents[].operation

string

The operation for running the maintenance event. Specified in the format projects/*/locations/*/operations/*. If the maintenance event is split into multiple operations (e.g. due to maintenance windows), the latest one is recorded.

maintenanceEvents[].schedule

string

The schedule of the maintenance event.

maintenanceEvents[].startTime

string

The time when the maintenance event started.

maintenanceEvents[].state

string

Indicates the maintenance event state.

maintenanceEvents[].targetVersion

string

The target version of the cluster.

maintenanceEvents[].type

string

Indicates the maintenance event type.

maintenanceEvents[].updateTime

string

The time when the maintenance event message was updated.

maintenanceEvents[].uuid

string

UUID of the maintenance event.

nodeVersion

string

The lowest release version among all worker nodes. This field can be empty if the cluster does not have any worker nodes.

observedGeneration

integer

ObservedGeneration is the generation of the resource that was most recently observed by the Config Connector controller. If this is equal to metadata.generation, then that means that the current reported status reflects the most recent desired state of the resource.

port

integer

The port number of the Kubernetes API server.

status

string

Indicates the status of the cluster.

updateTime

string

The time the cluster was last updated, in RFC3339 text format.

Sample YAML(s)

EdgeContainerCluster Local Control Plane

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: edgecontainer.cnrm.cloud.google.com/v1beta1
kind: EdgeContainerCluster
metadata:
  name: edgecontainercluster-local-control-plane-sample
  labels:
    label-one: "value-one"
spec:
  projectRef:
    # Replace ${PROJECT_ID?} with your Google Cloud project id
    external: ${PROJECT_ID?}
  location: us-central1
  networking:
    clusterIpv4CidrBlocks: ["10.0.0.0/16"]
    servicesIpv4CidrBlocks: ["10.1.0.0/16"]
  fleet:
    projectRef:
      # Replace ${PROJECT_NUMBER?} with your Google Cloud project number
      external: projects/${PROJECT_NUMBER?}
  authorization:
    adminUsers:
      usernameRef:
        # Replace ${CLUSTER_ADMIN_ACCOUNT?} with your user account or service account
        external: ${CLUSTER_ADMIN_ACCOUNT?}
  controlPlane:
    local:
      nodeCount: 1
      # Replace ${NODE_LOCATION?} with the machine zone location
      nodeLocation: ${NODE_LOCATION?}
      sharedDeploymentPolicy: ALLOWED
  # Replace ${EXTERNAL_LOAD_BALANCER_IPV4_CIDR?} with cluster external load balancer IPV4 CIDR
  externalLoadBalancerIpv4AddressPools:
    - ${EXTERNAL_LOAD_BALANCER_IPV4_CIDR?}

EdgeContainerCluster Remote Control Plane

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: edgecontainer.cnrm.cloud.google.com/v1beta1
kind: EdgeContainerCluster
metadata:
  name: edgecontainercluster-remote-control-plane-sample
  labels:
    label-one: "value-one"
spec:
  projectRef:
    # Replace ${PROJECT_ID?} with your Google Cloud project id
    external: ${PROJECT_ID?}
  location: us-central1
  networking:
    clusterIpv4CidrBlocks: ["10.0.0.0/16"]
    servicesIpv4CidrBlocks: ["10.1.0.0/16"]
  fleet:
    projectRef:
      # Replace ${PROJECT_NUMBER?} with your Google Cloud project number
      external: projects/${PROJECT_NUMBER?}
  authorization:
    adminUsers:
      usernameRef:
        # Replace ${CLUSTER_ADMIN_ACCOUNT?} with your user account or service account
        external: ${CLUSTER_ADMIN_ACCOUNT?}
  maintenancePolicy:
    window:
      recurringWindow:
        window:
          startTime: "2023-01-01T08:00:00Z"
          endTime: "2023-01-01T17:00:00Z"
        recurrence: "FREQ=WEEKLY;BYDAY=SA"