Методы развертывания наборов StatefulSet в Kubernetes: YAML-манифесты, API-клиенты и инструменты развертывания

Вот несколько методов развертывания StatefulSets в Kubernetes, а также примеры кода:

Метод 1: использование манифестов YAML
Вы можете определить StatefulSet с помощью манифестов YAML. Вот пример:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-statefulset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:tag
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Метод 2. Использование клиентов API Kubernetes
Вы можете использовать клиенты API Kubernetes, такие как клиент Python kubernetes-client, для программного развертывания StatefulSets. Вот пример использования Python:

from kubernetes import client, config
config.load_kube_config()
api_instance = client.AppsV1Api()
body = client.V1StatefulSet(
    api_version="apps/v1",
    kind="StatefulSet",
    metadata=client.V1ObjectMeta(name="my-statefulset"),
    spec=client.V1StatefulSetSpec(
        replicas=3,
        selector=client.V1LabelSelector(
            match_labels={"app": "my-app"}
        ),
        template=client.V1PodTemplateSpec(
            metadata=client.V1ObjectMeta(
                labels={"app": "my-app"}
            ),
            spec=client.V1PodSpec(
                containers=[
                    client.V1Container(
                        name="my-container",
                        image="my-image:tag",
                        ports=[client.V1ContainerPort(container_port=8080)],
                        volume_mounts=[client.V1VolumeMount(name="data", mount_path="/data")]
                    )
                ],
                volumes=[
                    client.V1Volume(
                        name="data",
                        persistent_volume_claim=client.V1PersistentVolumeClaimVolumeSource(
                            claim_name="data"
                        )
                    )
                ]
            )
        ),
        volume_claim_templates=[
            client.V1PersistentVolumeClaim(
                metadata=client.V1ObjectMeta(name="data"),
                spec=client.V1PersistentVolumeClaimSpec(
                    access_modes=["ReadWriteOnce"],
                    resources=client.V1ResourceRequirements(
                        requests={"storage": "1Gi"}
                    )
                )
            )
        ]
    )
)
api_instance.create_namespaced_stateful_set(namespace="default", body=body)

Метод 3: использование инструментов развертывания
Вы можете использовать такие инструменты развертывания, как Helm или Kustomize, для управления развертываниями StatefulSet более декларативным и масштабируемым способом. Эти инструменты предоставляют функции создания шаблонов, управления версиями и управления развертыванием, специфичные для Kubernetes.