Что такое StateFullSets в Kubernetes, как их создавать и работать.
Создание StateFullSets
В кубере можно развернуть deployments, в котором описаны какие создать pod (поды), в каком количестве, на каких нодах, с какими параметрами.
Существуют такие понятия для разворачивания подов:
pods
statefulsets
deployments
Плюсы statefulsets.
- запускает поды с упорядоченной нумерацией (пример названий: nginx-1, nginx-2, nginx-N)
- сохраняет состояние пода. При падении пода он снова поднимется в последнем состоянии и с данными
- имеет много настроек для развертывания подов
Минусы statefulsets.
- нельзя откатить билды ( версии подов )
- более тяжелый нежели deployments, для каждого пода создается свой том на жестком диске, куда записываются все состояния / данные пода
Файл конфигураций.
Statefulset можно использоваться например для баз данных, для таких объектов, у которых нужно сохранять данные / состояние.
Создадим файл с названием statefulset_nginx.yaml. В официальной документации приведен пример с созданием service:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
Как видим здесь подключается еще ТОМ с названием www, режим доступа стоит ReadWriteOne и выделенным местом в 1Gb. Папка подключается в под по пути /usr/share/nginx/html.
Чтобы применить нужно выполнить команду:
- kubectl apply -f statefulset_nginx.yaml
Проверить что у нас получилось:
- kubectl get pods
- kubectl get statefulsets
Удаление statefulsets.
Удалить можно двумя способами:
- можно удалить сам deployment по имени
--- kubectl delete statefulset web
После этой команды удалится deployment и все поды, которые к нему относятся.
- можно удалить с помощью файла конфигураций, который мы применяли:
--- kubectl delete -f statefulset_nginx.yaml
Произойдет все тоже самое, что и в первом варианте.
Если удалить сам под:
--- kubectl delete pod nginx-N
то ничего не произойдет, под будет просто перезапущен, причем будет перезапущен со всеми данными, которые были в последнем его состоянии.
Есть еще третий вариант, но его юзать не рекомендую - можно удалить namespace, в котором находится statefullset, НО! при удалении namespace удаляются все объекты, которые в нем находятся.
docker
kubernetes
k8s
statefullset
программирование
deployment