import * as pulumi from "@pulumi/pulumi"; import * as inputs from "../../types/input"; import * as outputs from "../../types/output"; /** * StatefulSet represents a set of pods with consistent identities. Identities are defined as: * - Network: A single stable DNS and hostname. * - Storage: As many VolumeClaims as requested. * * The StatefulSet guarantees that a given network identity will always map to the same storage identity. * * This resource waits until its status is ready before registering success * for create/update, and populating output properties from the current state of the resource. * The following conditions are used to determine whether the resource creation has * succeeded or failed: * * 1. The value of 'spec.replicas' matches '.status.replicas', '.status.currentReplicas', * and '.status.readyReplicas'. * 2. The value of '.status.updateRevision' matches '.status.currentRevision'. * * If the StatefulSet has not reached a Ready state after 10 minutes, it will * time out and mark the resource update as Failed. You can override the default timeout value * by setting the 'customTimeouts' option on the resource. * * ## Example Usage * ### Create a StatefulSet with auto-naming * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as kubernetes from "@pulumi/kubernetes"; * * const service = new kubernetes.core.v1.Service("service", { * metadata: { * labels: { * app: "nginx", * }, * }, * spec: { * clusterIP: "None", * ports: [{ * name: "web", * port: 80, * }], * selector: { * app: "nginx", * }, * }, * }); * const statefulset = new kubernetes.apps.v1.StatefulSet("statefulset", {spec: { * replicas: 3, * selector: { * matchLabels: { * app: "nginx", * }, * }, * serviceName: service.metadata.apply(metadata => metadata?.name), * template: { * metadata: { * labels: { * app: "nginx", * }, * }, * spec: { * containers: [{ * image: "nginx:stable-alpine3.17-slim", * name: "nginx", * ports: [{ * containerPort: 80, * name: "web", * }], * volumeMounts: [{ * mountPath: "/usr/share/nginx/html", * name: "www", * }], * }], * terminationGracePeriodSeconds: 10, * }, * }, * volumeClaimTemplates: [{ * metadata: { * name: "www", * }, * spec: { * accessModes: ["ReadWriteOnce"], * resources: { * requests: { * storage: "1Gi", * }, * }, * }, * }], * }}); * ``` * ### Create a StatefulSet with a user-specified name * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as kubernetes from "@pulumi/kubernetes"; * * const service = new kubernetes.core.v1.Service("service", { * metadata: { * labels: { * app: "nginx", * }, * name: "nginx", * }, * spec: { * clusterIP: "None", * ports: [{ * name: "web", * port: 80, * }], * selector: { * app: "nginx", * }, * }, * }); * const statefulset = new kubernetes.apps.v1.StatefulSet("statefulset", { * metadata: { * name: "web", * }, * spec: { * replicas: 3, * selector: { * matchLabels: { * app: "nginx", * }, * }, * serviceName: service.metadata.apply(metadata => metadata?.name), * template: { * metadata: { * labels: { * app: "nginx", * }, * }, * spec: { * containers: [{ * image: "nginx:stable-alpine3.17-slim", * name: "nginx", * ports: [{ * containerPort: 80, * name: "web", * }], * volumeMounts: [{ * mountPath: "/usr/share/nginx/html", * name: "www", * }], * }], * terminationGracePeriodSeconds: 10, * }, * }, * volumeClaimTemplates: [{ * metadata: { * name: "www", * }, * spec: { * accessModes: ["ReadWriteOnce"], * resources: { * requests: { * storage: "1Gi", * }, * }, * }, * }], * }, * }); * ``` */ export declare class StatefulSet extends pulumi.CustomResource { /** * Get an existing StatefulSet 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 opts Optional settings to control the behavior of the CustomResource. */ static get(name: string, id: pulumi.Input, opts?: pulumi.CustomResourceOptions): StatefulSet; /** * Returns true if the given object is an instance of StatefulSet. 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 StatefulSet; /** * APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */ readonly apiVersion: pulumi.Output<"apps/v1">; /** * Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */ readonly kind: pulumi.Output<"StatefulSet">; /** * Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */ readonly metadata: pulumi.Output; /** * Spec defines the desired identities of pods in this set. */ readonly spec: pulumi.Output; /** * Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time. */ readonly status: pulumi.Output; /** * Create a StatefulSet 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?: StatefulSetArgs, opts?: pulumi.CustomResourceOptions); } /** * The set of arguments for constructing a StatefulSet resource. */ export interface StatefulSetArgs { /** * APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */ apiVersion?: pulumi.Input<"apps/v1">; /** * Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */ kind?: pulumi.Input<"StatefulSet">; /** * Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */ metadata?: pulumi.Input; /** * Spec defines the desired identities of pods in this set. */ spec?: pulumi.Input; }