- tocdepth
2
Создание StatefulSets
StatefulSets — это тип рабочих нагрузок, данные или состояние которых сохраняются во время их выполнения. Например, для MySQL используют StatefulSet, потому что необходимо записывать и хранить новые данные.
Контейнер можно мигрировать между разными хостами, но данные не сохраняются на хостах. Для постоянного хранения данных StatefulSet подключите к контейнеру тома облачных хранилищ данных.
В этой инструкции описано, как создать рабочую нагрузку StatefulSets.
Перед началом работы
Создайте кластер и проверьте, что он находится в статусе «Running».
Для обеспечения публичного доступа к рабочей нагрузке проверьте, что EIP или балансировщик нагрузки привязан хотя бы к одному узлу в кластере.
Если в состав пода входят несколько контейнеров, проверьте, что используемые порты не конфликтуют друг с другом.
Создание рабочей нагрузки в консоли ССЕ
Чтобы создать рабочую нагрузку:
Войдите в консоль управления Advanced:
В списке сервисов выберите Cloud Container Engine.
В консоли управления CCE выберите Clusters.
Нажмите на название созданного кластера.
В левом меню выберите Workloads.
Перейдите на вкладку StatefulSets.
Нажмите Create Workload.
Заполните поле Basic Info:
Параметр
Описание
Workload Type
Выберите тип рабочей нагрузки StatefulSet.
Workload Name
Укажите название рабочей нагрузки.
Namespace
Выберите пространство имен рабочей нагрузки.
По умолчанию — default. Чтобы создать новое, нажмите Create Namespace.
Pods
Укажите количество подов в рабочей нагрузке.
Time Zone Synchronization
Синхронизация времени. Позволяет контейнерам и узлам работать в одном часовом поясе. Эта функция зависит от локального диска, подключенного к контейнеру. Не изменяйте и не удаляйте часовой пояс.
Активируйте этот параметр при необходимости.
Cluster Name
Название кластера указано по умолчанию.
(Опционально) Description
Описание рабочей нагрузки.
Добавьте при необходимости.
Заполните поле Container Settings согласно таблице ниже. Чтобы настроить несколько контейнеров в поде, нажмите Add Container.
Параметр
Описание
Basic Info
Выполните базовые настройки контейнера.
Lifecycle
Настройте параметры жизненного цикла контейнера.
Health Check
Настройте Health Check контейнера.
Environment Variables
Настройте окружение.
Data Storage
Настройте хранение данных.
Примечание
StatefulSets поддерживают динамически монтируемые тома EVS.
Динамическое монтирование достигается с помощью параметра volumeClaimTemplates и зависит от возможности динамического создания StorageClass. StatefulSet связывает каждый под с уникальным PVC с помощью параметра volumeClaimTemplates, а PVC привязываются к соответствующим PV. Таким образом, после изменения расписания пода исходные данные могут быть смонтированы с помощью PVC.
После создания рабочей нагрузки динамически монтируемое хранилище не может быть обновлено.
Security Context
Защита системы и контейнеров от воздействия.
Чтобы установить разрешения контейнера и предотвратить воздействие на системы и другие контейнеры, введите ID-пользователя.
Logging
Настройте сбор логов контейнера.
Image Access Credential
Укажите учетные данные, используемые для доступа к хранилищу образов.
По умолчанию — default-secret. Этот секрет можно использовать для доступа к образам в SWR. Чтобы создать новый, нажмите Create Secret.
GPU
Инстанс рабочей нагрузки будет запланирован для узла с указанным типом графической карты GPU.
По умолчанию — All.
Заполните параметры для Headless Service в поле Headless Service Parameters.
Headless Service используется для решения проблем взаимного доступа между подами в StatefulSet, а также предоставляет доменное имя с фиксированным доступом для каждого пода.
Заполните параметры для создания сервиса в поле Service Settings.
Сервис (Service) используется для доступа к поду. Сервис с фиксированным IP-адресом сервис перенаправляет трафик доступа к подам и выполняет балансировку нагрузки для этих подов.
Вы можете создать сервис после создания рабочей нагрузки.
Заполните поле Advanced Settings:
Параметр
Описание
Upgrade
Настройте политику обновления рабочей нагрузки.
Pod Management Policies
Для некоторых распределенных систем последовательность StatefulSet не нужна и/или не должна встречаться. Эти системы требуют только уникальности и идентификаторов.
Выберите:
OrderedReady — StatefulSet будет разворачивать, удалять или масштабировать поды в определенной последовательности (StatefulSet продолжается только после того, как предыдущий под будет готов или удален). Эта политика выбрана по умолчанию.
Parallel — StatefulSet будет создавать поды параллельно и удалять их сразу.
Scheduling
Toleration
Настройте допуски.
Labels and Annotations
Настройте метки и аннотации.
DNS
Настройте DNS.
Нажмите Create Workload.
После успешного создания рабочая нагрузка появится со статусом «Running» на вкладке StatefulSets.
Создание рабочей нагрузки через kubectl
В этом примере используется рабочая нагрузка nginx, и том EVS динамически монтируется к ней с помощью параметра volumeClaimTemplates.
Используйте kubectl для подключения к кластеру.
Создайте и измените файл
nginx-statefulset.yaml
.«nginx-statefulset.yaml» — это пример названия файла.
vi nginx-statefulset.yaml
Пример YAML-файла:
apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: container-1 image: nginx:latest imagePullPolicy: IfNotPresent resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi volumeMounts: - name: test readOnly: false mountPath: /usr/share/nginx/html subPath: '' imagePullSecrets: - name: default-secret dnsPolicy: ClusterFirst volumes: [] serviceName: nginx-svc replicas: 2 volumeClaimTemplates: # Dynamically mounts the EVS volume to the workload. - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test namespace: default annotations: everest.io/disk-volume-type: SAS # SAS EVS volume type. labels: failure-domain.beta.kubernetes.io/region: ru-moscow-1 # region where the EVS volume is created. failure-domain.beta.kubernetes.io/zone: # AZ where the EVS volume is created. It must be the same as the AZ of the node. spec: accessModes: - ReadWriteOnce # The value must be ReadWriteOnce for the EVS volume. resources: requests: storage: 10Gi storageClassName: csi-disk # Storage class name. The value is csi-disk for the EVS volume. updateStrategy: type: RollingUpdate
Создайте и измените файл
nginx-headless.yaml
.«nginx-headless.yaml» — это пример названия файла.
vi nginx-headless.yaml
apiVersion: v1 kind: Service metadata: name: nginx-svc namespace: default labels: app: nginx spec: selector: app: nginx version: v1 clusterIP: None ports: - name: nginx targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: ClusterIP
Чтобы создать развертывание, введите:
kubectl create -f nginx-statefulset.yaml
В выводе команды появится:
statefulset.apps/nginx created
Чтобы создать headless service, введите:
kubectl create -f nginx-headless.yaml
В выводе команды появится:
service/nginx-svc created
Примечание
Если доступ к развертыванию будет осуществляться через сервисы ClusterIP или NodePort, добавьте соответствующий сервис. Подробнее об этом — в разделе Сети.
для Dev & Test