StatefulSet
apiVersion: apps/v1
import "k8s.io/api/apps/v1"
StatefulSet
StatefulSet представляє набір Podʼів з постійною ідентичністю. Ідентичність визначається як:
- Мережа: єдине стабільне DNS та імʼя хосту.
- Сховище: Стільки VolumeClaims, скільки потрібно.
StatefulSet гарантує, що вказана мережева ідентичність завжди буде зіставлятись з вказаним сховищем.
apiVersion: apps/v1
kind: StatefulSet
metadata (ObjectMeta)
Стандартні метадані обʼєкта. Додаткова інформація: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (StatefulSetSpec)
Spec визначає бажані ідентичності Podʼів у цьому наборі.
status (StatefulSetStatus)
Status — це поточний стан Podʼів у цьому StatefulSet. Ці дані можуть бути застарілими на певний проміжок часу.
StatefulSetSpec
StatefulSetSpec — це специфікація StatefulSet.
serviceName (string), обовʼязково
serviceName — це назва Service, який керує цим StatefulSet. Цей сервіс повинен існувати до створення StatefulSet і відповідає за мережеву ідентичність набору. Podʼи отримують DNS/hostnames, які відповідають шаблону: pod-specific-string.serviceName.default.svc.cluster.local, де "pod-specific-string" управляється контролером StatefulSet.
selector (LabelSelector), обовʼязково
selector — це запит міток для Podʼів, які повинні відповідати кількості реплік. Він повинен відповідати міткам шаблону Podʼа. Додаткова інформація: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
template (PodTemplateSpec), обовʼязково
template — це обʼєкт, який описує Pod, що буде створений у випадку недостатньої кількості реплік. Кожен Pod, створений StatefulSet, буде відповідати цьому шаблону, але матиме унікальну ідентичність у порівнянні з іншими Podʼами StatefulSet. Кожен Pod буде названий за форматом <statefulsetname>-<podindex>. Наприклад, Pod у StatefulSet з імʼям "web" з індексом номер "3" буде називатися "web-3". Єдине дозволене значення для template.spec.restartPolicy — "Always".
replicas (int32)
replicas — це бажана кількість реплік даного шаблону. Це репліки в тому сенсі, що вони є екземплярами одного і того ж шаблону, але кожна репліка також має постійну ідентичність. Якщо не вказано, стандартне значення — 1.
updateStrategy (StatefulSetUpdateStrategy)
updateStrategy вказує на StatefulSetUpdateStrategy, яка буде використовуватися для оновлення Podʼів у StatefulSet при внесенні змін до шаблону.
StatefulSetUpdateStrategy вказує стратегію, яку контролер StatefulSet буде використовувати для виконання оновлень. Вона включає будь-які додаткові параметри, необхідні для виконання оновлення для зазначеної стратегії.
updateStrategy.type (string)
Type вказує тип StatefulSetUpdateStrategy. Стандартне значення — RollingUpdate.
updateStrategy.rollingUpdate (RollingUpdateStatefulSetStrategy)
RollingUpdate використовується для передачі параметрів, коли Type є RollingUpdateStatefulSetStrategyType.
RollingUpdateStatefulSetStrategy використовується для передачі параметрів для RollingUpdateStatefulSetStrategyType.
updateStrategy.rollingUpdate.maxUnavailable (IntOrString)
Максимальна кількість Podʼів, які можуть бути недоступні під час оновлення. Значення може бути абсолютним числом (наприклад, 5) або відсотком від бажаної кількості Podʼів (наприклад, 10%). Абсолютна кількість розраховується від відсотків шляхом округлення в більшу сторону. Це не може бути 0. Стандартне значення — 1. Це поле є альфа-рівнем і враховується лише серверами, які підтримують функцію MaxUnavailableStatefulSet. Поле застосовується до всіх Podʼів у діапазоні від 0 до Replicas-1. Це означає, що якщо будь-який Pod у діапазоні від 0 до Replicas-1 недоступний, він буде враховуватися як MaxUnavailable.
IntOrString — це тип, який може містити int32 або рядок. Під час перетворення з/у JSON або YAML він створює або споживає внутрішній тип. Це дозволяє мати, наприклад, поле JSON, яке може приймати назву або номер.
updateStrategy.rollingUpdate.partition (int32)
Partition вказує порядковий номер, на якому StatefulSet повинен бути розділений для оновлень. Під час rolling update всі Podʼи від порядкового номера Replicas-1 до Partition оновлюються. Всі Podʼи від порядкового номера Partition-1 до 0 залишаються незмінними. Це корисно для проведення канаркового розгортання. Стандартне значення — 0.
podManagementPolicy (string)
podManagementPolicy контролює, як Podʼи створюються під час початкового масштабування, при заміні Podʼів на вузлах або при масштабуванні вниз. Стандартне значення —
OrderedReady
, коли Podʼи створюються в порядку зростання (pod-0, потім pod-1 і т.д.), і контролер чекатиме, поки кожен Pod буде готовий, перш ніж продовжити. При масштабуванні вниз Podʼи видаляються у зворотному порядку. Альтернативною політикою єParallel
, яка створює Podʼи паралельно для досягнення бажаного масштабу без очікування, а при масштабуванні вниз видаляє всі Podʼи одночасно.revisionHistoryLimit (int32)
revisionHistoryLimit — це максимальна кількість ревізій, які будуть зберігатися в історії ревізій StatefulSet. Історія ревізій складається з усіх ревізій, які не представлені поточною застосованою версією StatefulSetSpec. Стандартне значення — 10.
volumeClaimTemplates ([]PersistentVolumeClaim)
Atomic: буде замінено під час злиття
volumeClaimTemplates — це список запитів, до яких Podʼи можуть звертатися. Контролер StatefulSet відповідає за призначення мережевих ідентичностей запитам таким чином, щоб зберігати ідентичність Podʼа. Кожен запит у цьому списку повинен мати принаймні один відповідний (за імʼям) volumeMount в одному з контейнерів в шаблоні. Запит у цьому списку має пріоритет над будь-якими volumes у шаблоні з таким самим імʼям.
minReadySeconds (int32)
Мінімальна кількість секунд, протягом яких новий створений Pod повинен бути готовим без збоїв жодного з його контейнерів, щоб його вважати доступним. Стандартне значення — 0 (Pod буде вважатися доступним, як тільки він буде готовий)
persistentVolumeClaimRetentionPolicy (StatefulSetPersistentVolumeClaimRetentionPolicy)
persistentVolumeClaimRetentionPolicy описує життєвий цикл запитів на постійні томи, створених з volumeClaimTemplates. Стандартно усі запити на постійні томи створюються за необхідності та зберігаються до ручного видалення. Ця політика дозволяє змінювати життєвий цикл, наприклад, видаляючи запити на постійні томи під час видалення їх StatefulSet або при масштабуванні вниз Podʼів. Для цього потрібно включити функцію StatefulSetAutoDeletePVC, яка є бета-рівнем.
StatefulSetPersistentVolumeClaimRetentionPolicy описує політику, яка використовується для PVC, створених з VolumeClaimTemplates StatefulSet.
persistentVolumeClaimRetentionPolicy.whenDeleted (string)
WhenDeleted визначає, що відбувається з PVC, створеними з VolumeClaimTemplates StatefulSet, коли StatefulSet видаляється. Стандартна політика
Retain
призводить до того, що на PVC не впливає видалення StatefulSet. ПолітикаDelete
призводить до видалення таких PVC.persistentVolumeClaimRetentionPolicy.whenScaled (string)
WhenScaled визначає, що відбувається з PVC, створеними з VolumeClaimTemplates StatefulSet, коли StatefulSet масштабується вниз. Стандартна політика
Retain
призводить до того, що на PVC не впливає масштабування вниз. ПолітикаDelete
призводить до видалення відповідних PVC для будь-яких зайвих Podʼів, що перевищують кількість реплік.
ordinals (StatefulSetOrdinals)
ordinals контролює нумерацію індексів реплік у StatefulSet. Стандартна поведінка ordinals призначає індекс "0" першій репліці та збільшує індекс на одиницю для кожної додаткової запитаної репліки.
StatefulSetOrdinals описує політику, яка використовується для призначення порядкових номерів реплік у цьому StatefulSet.
ordinals.start (int32)
start — це число, що представляє індекс першої репліки. Його можна використовувати для нумерації реплік з альтернативного індексу (наприклад, з 1) замість стандартної індексації з 0, або для організації поступового переміщення реплік з одного StatefulSet до іншого. Якщо встановлено, індекси реплік будуть у діапазоні:
- [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas].
Якщо не встановлено, стандартне значення — 0. Індекси реплік будуть у діапазоні:
- [0, .spec.replicas].
StatefulSetStatus
StatefulSetStatus представляє поточний стан StatefulSet.
replicas (int32), обовʼязково
replicas — це кількість Podʼів, створених контролером StatefulSet.
readyReplicas (int32)
readyReplicas — це кількість Podʼів, створених для цього StatefulSet, які мають стан Ready.
currentReplicas (int32)
currentReplicas — це кількість Podʼів, створених контролером StatefulSet з версії StatefulSet, зазначеної в currentRevision.
updatedReplicas (int32)
updatedReplicas — це кількість Podʼів, створених контролером StatefulSet з версії StatefulSet, зазначеної в updateRevision.
availableReplicas (int32)
Загальна кількість доступних Podʼів (готових принаймні minReadySeconds), на які спрямований цей statefulset.
collisionCount (int32)
collisionCount — це кількість хеш-колізій для StatefulSet. Контролер StatefulSet використовує це поле як механізм уникнення колізій при створенні імені для найновішого ControllerRevision.
conditions ([]StatefulSetCondition)
Patch strategy: злиття за ключем
type
Map: унікальні значення ключа type будуть збережені під час злиття
Представляє останні доступні спостереження поточного стану StatefulSet.
StatefulSetCondition описує стан StatefulSet у певний момент часу.
conditions.status (string), обовʼязково
Статус стану, один з True, False, Unknown.
conditions.type (string), обовʼязково
Тип стану StatefulSet.
conditions.lastTransitionTime (Time)
Останній час, коли стан переходив з одного статусу в інший.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
conditions.message (string)
Повідомлення, зрозуміле людині, із зазначенням деталей про перехід.
conditions.reason (string)
Причина останнього переходу умови.
currentRevision (string)
currentRevision, якщо не порожній, вказує версію StatefulSet, яка використовується для створення Podʼів у послідовності [0,currentReplicas].
updateRevision (string)
updateRevision, якщо не порожній, вказує версію StatefulSet, яка використовується для створення Podʼів у послідовності [replicas-updatedReplicas,replicas]
observedGeneration (int64)
observedGeneration — останнє покоління, яке спостерігалося для цього StatefulSet. Воно відповідає поколінню StatefulSet, яке оновлюється при зміні сервером API.
StatefulSetList
StatefulSetList — це колекція StatefulSet.
apiVersion: apps/v1
kind: StatefulSetList
metadata (ListMeta)
Стандартні метадані списку. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
items ([]StatefulSet), обовʼязково
Items — це список StatefulSet.
Операції
get
отримати вказаний StatefulSet
HTTP-запит
GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}
Параметри
name (в шляху): string, обовʼязково
назва StatefulSet
namespace (в шляху): string, обовʼязково
pretty (в запиті): string
Відповідь
200 (StatefulSet): OK
401: Unauthorized
get
отримати статус вказаного StatefulSet
HTTP-запит
GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status
Параметри
name (в шляху): string, обовʼязково
назва StatefulSet
namespace (в шляху): string, обовʼязково
pretty (в запиті): string
Відповідь
200 (StatefulSet): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу StatefulSet
HTTP-запит
GET /apis/apps/v1/namespaces/{namespace}/statefulsets
Параметри
namespace (в шляху): string, обовʼязково
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (StatefulSetList): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу StatefulSet
HTTP-запит
GET /apis/apps/v1/statefulsets
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (StatefulSetList): OK
401: Unauthorized
create
створення StatefulSet
HTTP-запит
POST /apis/apps/v1/namespaces/{namespace}/statefulsets
Параметри
namespace (в шляху): string, обовʼязково
body: StatefulSet, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (StatefulSet): OK
201 (StatefulSet): Created
202 (StatefulSet): Accepted
401: Unauthorized
update
заміна вказаного StatefulSet
HTTP-запит
PUT /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}
Параметри
name (в шляху): string, обовʼязково
назва StatefulSet
namespace (в шляху): string, обовʼязково
body: StatefulSet, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (StatefulSet): OK
201 (StatefulSet): Created
401: Unauthorized
update
заміна статусу вказаного StatefulSet
HTTP-запит
PUT /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status
Параметри
name (в шляху): string, обовʼязково
назва StatefulSet
namespace (в шляху): string, обовʼязково
body: StatefulSet, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (StatefulSet): OK
201 (StatefulSet): Created
401: Unauthorized
patch
часткове оновлення вказаного StatefulSet
HTTP-запит
PATCH /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}
Параметри
name (в шляху): string, обовʼязково
назва StatefulSet
namespace (в шляху): string, обовʼязково
body: patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (StatefulSet): OK
201 (StatefulSet): Created
401: Unauthorized
patch
часткове оновлення статусу вказакного StatefulSet
HTTP-запит
PATCH /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status
Параметри
name (в запиті): string, обовʼязково
назва StatefulSet
namespace (в запиті): string, обовʼязково
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (StatefulSet): OK
201 (StatefulSet): Created
401: Unauthorized
delete
видалення StatefulSet
HTTP-запит
DELETE /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}
Параметри
name (в шляху): string, обовʼязково
назва StatefulSet
namespace (в шляху): string, обовʼязково
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
видалення колекції StatefulSet
HTTP-запит
DELETE /apis/apps/v1/namespaces/{namespace}/statefulsets
Параметри
namespace (в шляху): string, обовʼязково
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
limit в запиті): integer
pretty в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized