Как создать StatefulSet в Kubernetes
StatefulSets содержит набор модулей с уникальными постоянными идентификаторами и стабильными именами хостов. Шаблон пода используется в Statefulset, который содержит спецификацию для своих подов, поды создаются с использованием этой спецификации. Мы можем развертывать приложения с отслеживанием состояния и кластерные приложения, используя наборы состояний в Kubernetes. StatefulSet можно обновить, внеся изменения в его спецификацию Pod, которая включает образы и тома его контейнеров.
StatefulSets можно использовать, когда приложения требуют любого из следующих свойств.
- Стабильные уникальные сетевые идентификаторы.
- Стабильное постоянное хранилище.
- Упорядоченное, плавное развертывание и масштабирование.
- Заказные автоматические последовательные обновления.
Для StatefulSet с N репликами при развертывании модулей они создаются последовательно, в порядке от {0..N-1}. Когда поды удаляются, они завершаются в обратном порядке, начиная с {N-1..0}.
Чтобы узнать больше о Statefulset, нажмите здесь.
В этой статье мы создадим Statefulset с репликами модулей Nginx. Мы будем выполнять операции над модулями, чтобы увидеть, как они удаляются и создаются.
Предпосылки
- Кластер Kubernetes с хотя бы 1 рабочим узлом.
Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на экземплярах AWS Ubuntu 18l04 EC2.
Что мы будем делать
- Создание набора состояний
Создать набор состояний
Создайте файл и добавьте в него следующее определение 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 и выполнили над ним операции, чтобы проверить его детали. Мы также удалили модули, чтобы увидеть, как сохраняется имя модуля, и то же самое назначается вновь созданным модулям после его удаления.