Поиск по сайту:

Как создать StatefulSet в Kubernetes


StatefulSets содержит набор модулей с уникальными постоянными идентификаторами и стабильными именами хостов. Шаблон пода используется в Statefulset, который содержит спецификацию для своих подов, поды создаются с использованием этой спецификации. Мы можем развертывать приложения с отслеживанием состояния и кластерные приложения, используя наборы состояний в Kubernetes. StatefulSet можно обновить, внеся изменения в его спецификацию Pod, которая включает образы и тома его контейнеров.

StatefulSets можно использовать, когда приложения требуют любого из следующих свойств.

  • Стабильные уникальные сетевые идентификаторы.
  • Стабильное постоянное хранилище.
  • Упорядоченное, плавное развертывание и масштабирование.
  • Заказные автоматические последовательные обновления.

Для StatefulSet с N репликами при развертывании модулей они создаются последовательно, в порядке от {0..N-1}. Когда поды удаляются, они завершаются в обратном порядке, начиная с {N-1..0}.

Чтобы узнать больше о Statefulset, нажмите здесь.

В этой статье мы создадим Statefulset с репликами модулей Nginx. Мы будем выполнять операции над модулями, чтобы увидеть, как они удаляются и создаются.

Предпосылки

  1. Кластер Kubernetes с хотя бы 1 рабочим узлом.
    Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на экземплярах AWS Ubuntu 18l04 EC2.

Что мы будем делать

  1. Создание набора состояний

Создать набор состояний

Создайте файл и добавьте в него следующее определение Statefulset.

vim statefulset.yml

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:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web

В этом примере

  • Безголовая служба с именем nginx используется для управления сетью.
  • StatefulSet с именем web содержит 3 реплики контейнера nginx, которые будут запускаться в уникальных модулях.
  • Образ nginx версии slim:0.8 используется для развертывания Nginx.

Чтобы создать Statefulset, выполните следующие команды.

kubectl get statefulset

kubectl create -f statefulset.yml

Выполните следующие 2 команды, чтобы получить список Statefulset и Service, созданных на предыдущем шаге.

kubectl get statefulset

kubectl get service

Получите модули, используя следующую команду, и увидите, что модули имеют номера в качестве суффикса в имени модуля.

kubectl get pods

Чтобы получить полную информацию о Statefulset, выполните следующие команды.

kubectl get statefulset

kubectl describe statefulset web

Теперь давайте удалим модули и посмотрим, как сохраняются имена даже после создания новых модулей.

Мы удаляем 2 модуля, чтобы увидеть, какие имена будут присвоены новым модулям при создании.

kubectl get pods

kubectl delete pods web-0 web-2

kubectl get pods

На приведенном выше снимке экрана видно, что даже после удаления модулей вновь созданные модули получают то же имя.

Заключение

В этой статье мы создали Statefulset и выполнили над ним операции, чтобы проверить его детали. Мы также удалили модули, чтобы увидеть, как сохраняется имя модуля, и то же самое назначается вновь созданным модулям после его удаления.