Creating a Cluster

You can create managed Kubernetes clusters for the deployment of your containerized applications. OKS enables you to start Kubernetes clusters with a predefined configuration and pre-installed essential services, so that you do not have to manage unnecessary deployments.

Creating a Cluster Using OKS CLI

Before you begin:

To create a cluster, use the cluster create command following this syntax:

Request sample: Creating a single Subregion cluster
$ oks-cli cluster create \
    --cluster-name NAME_OF_CLUSTER \
    --project-name NAME_OF_PROJECT \
    --admin "1.2.3.4/32,5.6.7.8/32" \
    --version VERSION_NUMBER \
    --control-plane "cp.3.masters.small" \
    --zone 2b
Request sample: Creating a multi-Subregion cluster
$ oks-cli cluster create \
    --cluster-name NAME_OF_CLUSTER \
    --project-name NAME_OF_PROJECT \
    --admin "1.2.3.4/32,5.6.7.8/32" \
    --version VERSION_NUMBER \
    --control-plane "cp.3.masters.small" \
    --cp-multi-az

This command contains the following options that you need to specify:

  • cluster-name: The name of the cluster, with a maximum length of 40 alphanumeric characters and dashes (-). This name must start with a lowercase letter and must not end with a dash. It must be unique within the project.

  • (optional) description: The description of the cluster you want to create.

  • (optional) project-name: The name of the project in which you want to create the cluster.

  • admin: The IPs to be whitelisted, in CIDR notation and separated by commas. This range of one or multiple IPs is empty by default, and should be specified in order to manage the cluster after creation.

  • (optional) cidr-pods: The /16 CIDR to be used internally for pods. The project’s CIDR, the pods' CIDRs and the services' CIDR’s should not overlap.

  • (optional) cidr-service: The /16 CIDR to be used internally for services. The project’s CIDR, the pods' CIDRs and the services' CIDR’s should not overlap.

  • (optional) control-plane: The desired control plane sizing. For more information, see Control Planes.

  • (optional) cp-multi-az: Enables the multi-Subregion control plane option, to create a multi-Subregion cluster.

    • When using this option, the control plane is deployed on three different Subregions to provide high availability.

    • Only high availability control planes can be deployed in a multi-Subregion cluster.

  • (optional) enable-admission-plugins: The list of additional admission plugins you want to enable on the cluster. For more information about the admissions plugins, see the Kubernetes documentation.

  • (optional) disable-admission-plugins: The list of admission plugins from the default list that you want to disable.

  • (optional) disable-api-termination: The ability to delete the cluster through the API. If true, cluster deletion is disabled. If false, it is enabled.

  • (optional) dryrun: Provides an overview of the operations performed by the command without actually running it. You can use this as a safety measure to review the impact of a command before executing it.

  • (optional) filename: The name of the definition file that you want to create the cluster from.

  • (optional) output: The output format for the response (json | yaml). By default, the response format is JSON. The file generated with the cluster definition can be edited and applied by using the -f --filename …​ command.

  • (optional) quirk: Advanced keys and parameters to pass to the control panel of the project. This option is required for feature requests.

  • (optional) tags: The tags that you want to apply to cluster nodes.

  • (optional) version: One of the supported versions of Kubernetes. For more information about the supported versions, see About OKS > Kubernetes Versions Support.

  • (optional) zone: The Subregion in which you want to deploy the cluster’s control plane.

You can display all the available options using the cluster create command following this syntax:

$ oks-cli cluster create --help

The CreateCluster command returns the following elements:

  • project_id: The ID of the project this cluster belongs to.

  • id: The Universally Unique Identifier (UUID) of the cluster.

  • name: A unique name for the cluster within the project.

  • description: An optional description of the cluster.

  • cp_multi_az: If true, multi-Subregion deployment is enabled for the control plane. If false, it is disabled.

  • cp_subregions: The Subregions on which the control plane components are deployed.

  • version: The Kubernetes version deployed for the cluster. For more information, see GetKubernetesVersions.

  • cni: The Container Network Interface (CNI) used in the cluster.

  • admin_lbu: If true, load balancer administration is enabled for cluster management. If false, it is disabled.

  • admission_flags: The configuration of the Kubernetes admission controllers.

    • disable_admission_plugins: The list of admission plugins that are disabled.

    • enable_admission_plugins: The list of admission plugins that are enabled.

    • applied_admission_plugins: The list of admission plugins that are currently applied to the cluster.

  • cidr_pods: The CIDR block of the Kubernetes pods' network.

  • cidr_service: The CIDR block of the Kubernetes services' network.

  • cluster_dns: The IP of the cluster’s DNS service.

  • tags: The tags that are applied to cluster nodes.

  • auto_maintenances: The configuration of the automated maintenance windows.

    • minor_upgrade_maintenance: The maintenance window configuration for minor Kubernetes upgrades.

      • enabled: If true, a maintenance window is enabled.

      • duration_hours: The duration of the maintenance window, in hours.

      • start_hour: The starting time of the maintenance window, in hours.

      • week_day: The weekday on which the maintenance window begins.

      • tz: The timezone for the maintenance window.

    • patch_upgrade_maintenance: The maintenance window configuration for patch Kubernetes upgrades.

      • enabled: If true, a maintenance window is enabled.

      • duration_hours: The duration of the maintenance window, in hours.

      • start_hour: The starting time of the maintenance window, in hours.

      • week_day: The weekday on which the maintenance window begins.

      • tz: The timezone for the maintenance window.

  • control_planes: The control plane sizing of the cluster.

  • admin_whitelist: The list of CIDR blocks or IP addresses allowed to access the cluster via the Kubernetes API.

  • statuses: The status information of the cluster.

    • created_at: The timestamp when the cluster was created.

    • deleted_at: The timestamp when the cluster was deleted (if applicable).

    • updated_at: The timestamp when the cluster was last updated.

    • status: The status of the cluster.

    • available_upgrade: Any available version of Kubernetes for upgrade (if applicable).

  • disable_api_termination: If true, cluster deletion through the API is disabled. If false, it is enabled.

Result sample
{
    "project_id": "877295ad-171c-4f9a-86c5-d45c8b2321fe",
    "id": "5e5b232c-b7de-4cc0-9296-faa006b8bd25",
    "name": "NAME_OF_CLUSTER",
    "description": "",
    "cp_multi_az": false,
    "cp_subregions": [
        "2a"
    ],
    "version": "1.32",
    "cni": "cilium",
    "admin_lbu": false,
    "admission_flags": {
        "disable_admission_plugins": [],
        "enable_admission_plugins": [],
        "applied_admission_plugins": [
            "ClusterTrustBundleAttest",
            "LimitRanger",
            "RuntimeClass",
            "ServiceAccount",
            "CertificateApproval",
            "ResourceQuota",
            "PodSecurity",
            "Priority",
            "NamespaceLifecycle",
            "DefaultIngressClass",
            "PersistentVolumeClaimResize",
            "ValidatingAdmissionPolicy",
            "StorageObjectInUseProtection",
            "CertificateSigning",
            "DefaultStorageClass",
            "MutatingAdmissionWebhook",
            "CertificateSubjectRestriction",
            "TaintNodesByCondition",
            "DefaultTolerationSeconds",
            "ValidatingAdmissionWebhook"
        ]
    },
    "cidr_pods": "10.91.0.0/16",
    "cidr_service": "10.92.0.0/16",
    "cluster_dns": "10.92.0.10",
    "tags": {},
    "auto_maintenances": {
        "minor_upgrade_maintenance": {
            "enabled": true,
            "duration_hours": 1,
            "start_hour": 12,
            "week_day": "Tue",
            "tz": "UTC"
        },
        "patch_upgrade_maintenance": {
            "enabled": true,
            "duration_hours": 1,
            "start_hour": 12,
            "week_day": "Tue",
            "tz": "UTC"
        }
    },
    "control_planes": "cp.mono.master",
    "admin_whitelist": [
        "1.2.3.4/32",
        "5.6.7.8/32"
    ],
    "statuses": {
        "created_at": "2025-01-01T00:02:00.000000Z",
        "updated_at": "2025-01-01T00:02:00.000001Z",
        "status": "pending",
        "available_upgrade": ""
    },
    "disable_api_termination": false
}

You can use the cluster list command to check the cluster’s status. Your cluster is created when its status changes to ready.

Related Pages

Corresponding API Method