@pulumiverse/scaleway
Version:
A Pulumi package for creating and managing Scaleway cloud resources.
542 lines • 22 kB
TypeScript
import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
* The `scaleway.kubernetes.Pool` resource allows you to create and manage Scaleway Kubernetes cluster pools.
*
* Refer to the Kubernetes [documentation](https://www.scaleway.com/en/docs/compute/kubernetes/) and [API documentation](https://www.scaleway.com/en/developers/api/kubernetes/) for more information.
*
* ## Placement Group
*
* If you are working with cluster type `multicloud` please set the `zone` where your placement group is e.g:
*
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as scaleway from "@pulumiverse/scaleway";
*
* const placementGroup = new scaleway.instance.PlacementGroup("placement_group", {
* name: "pool-placement-group",
* policyType: "max_availability",
* policyMode: "optional",
* zone: "nl-ams-1",
* });
* const cluster = new scaleway.kubernetes.Cluster("cluster", {
* name: "placement_group",
* cni: "kilo",
* version: "1.35.3",
* tags: [
* "terraform-test",
* "scaleway_k8s_cluster",
* "placement_group",
* ],
* region: "fr-par",
* type: "multicloud",
* });
* const pool = new scaleway.kubernetes.Pool("pool", {
* name: "placement_group",
* clusterId: cluster.id,
* version: cluster.version,
* nodeType: "gp1_xs",
* placementGroupId: placementGroup.id,
* size: 1,
* region: cluster.region,
* zone: placementGroup.zone,
* });
* ```
*
* ## Changing the node-type of a pool
*
* As your needs evolve, you can migrate your workflow from one pool to another.
* Pools have a unique name, and they also have an immutable node type.
* Just changing the pool node type will recreate a new pool which could lead to service disruption.
* To migrate your application with as little downtime as possible we recommend using the following workflow:
*
* ### General workflow to upgrade a pool
*
* - Create a new pool with a different name and the type you target.
* - Use [`kubectl drain`](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#drain) on nodes composing your old pool to drain the remaining workflows of this pool.
* Normally it should transfer your workflows to the new pool. Check out the official documentation about [how to safely drain your nodes](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/).
* - Delete the old pool from your terraform configuration.
*
* ### Using a composite name to force creation of a new pool when a variable updates
*
* If you want to have a new pool created when a variable changes, you can use a name derived from node type such as:
*
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as scaleway from "@pulumiverse/scaleway";
*
* const kubernetesClusterWorkers1 = new scaleway.kubernetes.Pool("kubernetes_cluster_workers_1", {
* clusterId: kubernetesCluster.id,
* name: `${kubernetesClusterId}_${nodeType}_1`,
* nodeType: nodeType,
* autoscaling: true,
* autohealing: true,
* size: 5,
* minSize: 5,
* maxSize: 10,
* waitForPoolReady: true,
* });
* ```
*
* Thanks to [@deimosfr](https://github.com/deimosfr) for the contribution.
*
* ## Import
*
* Kubernetes pools can be imported using the `{region}/{id}`, e.g.
*
* ```sh
* $ pulumi import scaleway:kubernetes/pool:Pool mypool fr-par/11111111-1111-1111-1111-111111111111
* ```
*/
export declare class Pool extends pulumi.CustomResource {
/**
* Get an existing Pool resource's state with the given name, ID, and optional extra
* properties used to qualify the lookup.
*
* @param name The _unique_ name of the resulting resource.
* @param id The _unique_ provider ID of the resource to lookup.
* @param state Any extra arguments used during the lookup.
* @param opts Optional settings to control the behavior of the CustomResource.
*/
static get(name: string, id: pulumi.Input<pulumi.ID>, state?: PoolState, opts?: pulumi.CustomResourceOptions): Pool;
/**
* Returns true if the given object is an instance of Pool. This is designed to work even
* when multiple copies of the Pulumi SDK have been loaded into the same process.
*/
static isInstance(obj: any): obj is Pool;
/**
* Enables the autohealing feature for this pool.
*/
readonly autohealing: pulumi.Output<boolean | undefined>;
/**
* Enables the autoscaling feature for this pool.
*
* > **Important:** When enabled, an update of the `size` will not be taken into account.
*/
readonly autoscaling: pulumi.Output<boolean | undefined>;
/**
* The ID of the Kubernetes cluster on which this pool will be created.
*/
readonly clusterId: pulumi.Output<string>;
/**
* The container runtime of the pool.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
readonly containerRuntime: pulumi.Output<string | undefined>;
/**
* The creation date of the pool.
*/
readonly createdAt: pulumi.Output<string>;
/**
* The size of the pool at the time the terraform state was updated.
*/
readonly currentSize: pulumi.Output<number>;
/**
* The Kubelet arguments to be used by this pool
*/
readonly kubeletArgs: pulumi.Output<{
[key: string]: string;
} | undefined>;
/**
* The list of Kubernetes labels applied and reconciled on the nodes.
*/
readonly labels: pulumi.Output<{
[key: string]: string;
} | undefined>;
/**
* The maximum size of the pool, used by the autoscaling feature.
*/
readonly maxSize: pulumi.Output<number>;
/**
* The minimum size of the pool, used by the autoscaling feature.
*/
readonly minSize: pulumi.Output<number>;
/**
* The name for the pool. If not provided it will be generated.
*
* > **Important:** Updates to this field will recreate a new resource.
*
* > Note: In order to use the `createBeforeDestroy` option of the `lifecycle` field, `name` has to be generated, otherwise Terraform will try to create the new pool with the same name and the API does not allow that.
*/
readonly name: pulumi.Output<string>;
/**
* The commercial type of the pool instances. Instances with insufficient memory are not eligible (DEV1-S, PLAY2-PICO, STARDUST). `external` is a special node type used to provision from other Cloud providers.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
readonly nodeType: pulumi.Output<string>;
/**
* (List of) The nodes in the default pool.
*/
readonly nodes: pulumi.Output<outputs.kubernetes.PoolNode[]>;
/**
* The [placement group](https://www.scaleway.com/en/developers/api/instance/#path-placement-groups-create-a-placement-group) the nodes of the pool will be attached to.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
readonly placementGroupId: pulumi.Output<string | undefined>;
/**
* Defines if the public IP should be removed from Nodes. To use this feature, your Cluster must have an attached Private Network set up with a Public Gateway.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
readonly publicIpDisabled: pulumi.Output<boolean | undefined>;
/**
* `region`) The region in which the pool should be created.
*/
readonly region: pulumi.Output<string | undefined>;
/**
* The size of the system volume of the nodes in gigabyte
*
* > Note: The minimal volume size of a node is 20GB.
*/
readonly rootVolumeSizeInGb: pulumi.Output<number>;
/**
* System volume type of the nodes composing the pool
*/
readonly rootVolumeType: pulumi.Output<string>;
/**
* The ID of the security group
*/
readonly securityGroupId: pulumi.Output<string>;
/**
* The size of the pool.
*
* > **Important:** This field will only be used at creation if autoscaling is enabled.
*/
readonly size: pulumi.Output<number>;
/**
* The list of Kubernetes taints applied at node creation but not reconciled afterward.
*/
readonly startupTaints: pulumi.Output<outputs.kubernetes.PoolStartupTaint[] | undefined>;
/**
* The status of the node.
*/
readonly status: pulumi.Output<string>;
/**
* The tags associated with the pool.
*
* > Note: As mentioned in [this document](https://github.com/scaleway/scaleway-cloud-controller-manager/blob/master/docs/tags.md#taints), taints of a pool's nodes are applied using tags. (e.g.: `"taint=taintName=taintValue:Effect"`)
*/
readonly tags: pulumi.Output<string[] | undefined>;
/**
* The list of Kubernetes taints applied and reconciled on the nodes.
*/
readonly taints: pulumi.Output<outputs.kubernetes.PoolTaint[] | undefined>;
/**
* The last update date of the pool.
*/
readonly updatedAt: pulumi.Output<string>;
/**
* The Pool upgrade policy
*/
readonly upgradePolicy: pulumi.Output<outputs.kubernetes.PoolUpgradePolicy>;
/**
* The version of the pool. If not explicitly set, the version of the pool will be equal to the version of the cluster.
* For the field to be properly taken into account, the `upgradePools` field of the cluster must be set to `false` in order to decouple the version of the pool from the cluster.
*
* > **Important:** This field is only taken into account when updating/upgrading the resource. At creation, the pool's version is always the cluster's version.
*/
readonly version: pulumi.Output<string>;
/**
* Whether to wait for the pool to be ready.
*/
readonly waitForPoolReady: pulumi.Output<boolean | undefined>;
/**
* `zone`) The zone in which the pool should be created.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
readonly zone: pulumi.Output<string | undefined>;
/**
* Create a Pool resource with the given unique name, arguments, and options.
*
* @param name The _unique_ name of the resource.
* @param args The arguments to use to populate this resource's properties.
* @param opts A bag of options that control this resource's behavior.
*/
constructor(name: string, args: PoolArgs, opts?: pulumi.CustomResourceOptions);
}
/**
* Input properties used for looking up and filtering Pool resources.
*/
export interface PoolState {
/**
* Enables the autohealing feature for this pool.
*/
autohealing?: pulumi.Input<boolean | undefined>;
/**
* Enables the autoscaling feature for this pool.
*
* > **Important:** When enabled, an update of the `size` will not be taken into account.
*/
autoscaling?: pulumi.Input<boolean | undefined>;
/**
* The ID of the Kubernetes cluster on which this pool will be created.
*/
clusterId?: pulumi.Input<string | undefined>;
/**
* The container runtime of the pool.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
containerRuntime?: pulumi.Input<string | undefined>;
/**
* The creation date of the pool.
*/
createdAt?: pulumi.Input<string | undefined>;
/**
* The size of the pool at the time the terraform state was updated.
*/
currentSize?: pulumi.Input<number | undefined>;
/**
* The Kubelet arguments to be used by this pool
*/
kubeletArgs?: pulumi.Input<{
[key: string]: pulumi.Input<string>;
} | undefined>;
/**
* The list of Kubernetes labels applied and reconciled on the nodes.
*/
labels?: pulumi.Input<{
[key: string]: pulumi.Input<string>;
} | undefined>;
/**
* The maximum size of the pool, used by the autoscaling feature.
*/
maxSize?: pulumi.Input<number | undefined>;
/**
* The minimum size of the pool, used by the autoscaling feature.
*/
minSize?: pulumi.Input<number | undefined>;
/**
* The name for the pool. If not provided it will be generated.
*
* > **Important:** Updates to this field will recreate a new resource.
*
* > Note: In order to use the `createBeforeDestroy` option of the `lifecycle` field, `name` has to be generated, otherwise Terraform will try to create the new pool with the same name and the API does not allow that.
*/
name?: pulumi.Input<string | undefined>;
/**
* The commercial type of the pool instances. Instances with insufficient memory are not eligible (DEV1-S, PLAY2-PICO, STARDUST). `external` is a special node type used to provision from other Cloud providers.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
nodeType?: pulumi.Input<string | undefined>;
/**
* (List of) The nodes in the default pool.
*/
nodes?: pulumi.Input<pulumi.Input<inputs.kubernetes.PoolNode>[] | undefined>;
/**
* The [placement group](https://www.scaleway.com/en/developers/api/instance/#path-placement-groups-create-a-placement-group) the nodes of the pool will be attached to.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
placementGroupId?: pulumi.Input<string | undefined>;
/**
* Defines if the public IP should be removed from Nodes. To use this feature, your Cluster must have an attached Private Network set up with a Public Gateway.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
publicIpDisabled?: pulumi.Input<boolean | undefined>;
/**
* `region`) The region in which the pool should be created.
*/
region?: pulumi.Input<string | undefined>;
/**
* The size of the system volume of the nodes in gigabyte
*
* > Note: The minimal volume size of a node is 20GB.
*/
rootVolumeSizeInGb?: pulumi.Input<number | undefined>;
/**
* System volume type of the nodes composing the pool
*/
rootVolumeType?: pulumi.Input<string | undefined>;
/**
* The ID of the security group
*/
securityGroupId?: pulumi.Input<string | undefined>;
/**
* The size of the pool.
*
* > **Important:** This field will only be used at creation if autoscaling is enabled.
*/
size?: pulumi.Input<number | undefined>;
/**
* The list of Kubernetes taints applied at node creation but not reconciled afterward.
*/
startupTaints?: pulumi.Input<pulumi.Input<inputs.kubernetes.PoolStartupTaint>[] | undefined>;
/**
* The status of the node.
*/
status?: pulumi.Input<string | undefined>;
/**
* The tags associated with the pool.
*
* > Note: As mentioned in [this document](https://github.com/scaleway/scaleway-cloud-controller-manager/blob/master/docs/tags.md#taints), taints of a pool's nodes are applied using tags. (e.g.: `"taint=taintName=taintValue:Effect"`)
*/
tags?: pulumi.Input<pulumi.Input<string>[] | undefined>;
/**
* The list of Kubernetes taints applied and reconciled on the nodes.
*/
taints?: pulumi.Input<pulumi.Input<inputs.kubernetes.PoolTaint>[] | undefined>;
/**
* The last update date of the pool.
*/
updatedAt?: pulumi.Input<string | undefined>;
/**
* The Pool upgrade policy
*/
upgradePolicy?: pulumi.Input<inputs.kubernetes.PoolUpgradePolicy | undefined>;
/**
* The version of the pool. If not explicitly set, the version of the pool will be equal to the version of the cluster.
* For the field to be properly taken into account, the `upgradePools` field of the cluster must be set to `false` in order to decouple the version of the pool from the cluster.
*
* > **Important:** This field is only taken into account when updating/upgrading the resource. At creation, the pool's version is always the cluster's version.
*/
version?: pulumi.Input<string | undefined>;
/**
* Whether to wait for the pool to be ready.
*/
waitForPoolReady?: pulumi.Input<boolean | undefined>;
/**
* `zone`) The zone in which the pool should be created.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
zone?: pulumi.Input<string | undefined>;
}
/**
* The set of arguments for constructing a Pool resource.
*/
export interface PoolArgs {
/**
* Enables the autohealing feature for this pool.
*/
autohealing?: pulumi.Input<boolean | undefined>;
/**
* Enables the autoscaling feature for this pool.
*
* > **Important:** When enabled, an update of the `size` will not be taken into account.
*/
autoscaling?: pulumi.Input<boolean | undefined>;
/**
* The ID of the Kubernetes cluster on which this pool will be created.
*/
clusterId: pulumi.Input<string>;
/**
* The container runtime of the pool.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
containerRuntime?: pulumi.Input<string | undefined>;
/**
* The Kubelet arguments to be used by this pool
*/
kubeletArgs?: pulumi.Input<{
[key: string]: pulumi.Input<string>;
} | undefined>;
/**
* The list of Kubernetes labels applied and reconciled on the nodes.
*/
labels?: pulumi.Input<{
[key: string]: pulumi.Input<string>;
} | undefined>;
/**
* The maximum size of the pool, used by the autoscaling feature.
*/
maxSize?: pulumi.Input<number | undefined>;
/**
* The minimum size of the pool, used by the autoscaling feature.
*/
minSize?: pulumi.Input<number | undefined>;
/**
* The name for the pool. If not provided it will be generated.
*
* > **Important:** Updates to this field will recreate a new resource.
*
* > Note: In order to use the `createBeforeDestroy` option of the `lifecycle` field, `name` has to be generated, otherwise Terraform will try to create the new pool with the same name and the API does not allow that.
*/
name?: pulumi.Input<string | undefined>;
/**
* The commercial type of the pool instances. Instances with insufficient memory are not eligible (DEV1-S, PLAY2-PICO, STARDUST). `external` is a special node type used to provision from other Cloud providers.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
nodeType: pulumi.Input<string>;
/**
* The [placement group](https://www.scaleway.com/en/developers/api/instance/#path-placement-groups-create-a-placement-group) the nodes of the pool will be attached to.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
placementGroupId?: pulumi.Input<string | undefined>;
/**
* Defines if the public IP should be removed from Nodes. To use this feature, your Cluster must have an attached Private Network set up with a Public Gateway.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
publicIpDisabled?: pulumi.Input<boolean | undefined>;
/**
* `region`) The region in which the pool should be created.
*/
region?: pulumi.Input<string | undefined>;
/**
* The size of the system volume of the nodes in gigabyte
*
* > Note: The minimal volume size of a node is 20GB.
*/
rootVolumeSizeInGb?: pulumi.Input<number | undefined>;
/**
* System volume type of the nodes composing the pool
*/
rootVolumeType?: pulumi.Input<string | undefined>;
/**
* The ID of the security group
*/
securityGroupId?: pulumi.Input<string | undefined>;
/**
* The size of the pool.
*
* > **Important:** This field will only be used at creation if autoscaling is enabled.
*/
size: pulumi.Input<number>;
/**
* The list of Kubernetes taints applied at node creation but not reconciled afterward.
*/
startupTaints?: pulumi.Input<pulumi.Input<inputs.kubernetes.PoolStartupTaint>[] | undefined>;
/**
* The tags associated with the pool.
*
* > Note: As mentioned in [this document](https://github.com/scaleway/scaleway-cloud-controller-manager/blob/master/docs/tags.md#taints), taints of a pool's nodes are applied using tags. (e.g.: `"taint=taintName=taintValue:Effect"`)
*/
tags?: pulumi.Input<pulumi.Input<string>[] | undefined>;
/**
* The list of Kubernetes taints applied and reconciled on the nodes.
*/
taints?: pulumi.Input<pulumi.Input<inputs.kubernetes.PoolTaint>[] | undefined>;
/**
* The Pool upgrade policy
*/
upgradePolicy?: pulumi.Input<inputs.kubernetes.PoolUpgradePolicy | undefined>;
/**
* The version of the pool. If not explicitly set, the version of the pool will be equal to the version of the cluster.
* For the field to be properly taken into account, the `upgradePools` field of the cluster must be set to `false` in order to decouple the version of the pool from the cluster.
*
* > **Important:** This field is only taken into account when updating/upgrading the resource. At creation, the pool's version is always the cluster's version.
*/
version?: pulumi.Input<string | undefined>;
/**
* Whether to wait for the pool to be ready.
*/
waitForPoolReady?: pulumi.Input<boolean | undefined>;
/**
* `zone`) The zone in which the pool should be created.
*
* > **Important:** Updates to this field will recreate a new resource.
*/
zone?: pulumi.Input<string | undefined>;
}
//# sourceMappingURL=pool.d.ts.map