Вот несколько методов развертывания 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.