StatefulSet — это приложение, которому необходимо сохранять данные или состояние во время работы. StatefulSet подходят для приложений с сохранением состояния, таких как базы данных, кеш‑сервисы и очереди сообщений. В отличие от Deployments, у StatefulSet есть следующие возможности:
Параметр | Описание |
|---|---|
Workload Type | Выберите StatefulSet. Для получения подробной информации о различных типах рабочих нагрузок см. Workload Overview. |
Workload Name | Введите имя для workload. Введите от 1 до 63 символов, начинающихся со строчной буквы и заканчивающихся строчной буквой или цифрой. Разрешены только строчные буквы, цифры и дефисы (-). |
Namespace | Выберите пространство имён для workload. Значение по умолчанию — default. Вы также можете нажать Create Namespace, чтобы создать его. Для получения подробной информации см. Creating a Namespace. |
Pods | Введите количество pods workload. |
Container Runtime | Стандартный кластер CCE использует общий runtime по умолчанию, тогда как кластер CCE Turbo поддерживает как общий, так и защищённый runtime. Для получения подробной информации об их различиях см. Secure Runtime and Common Runtime. |
Time Zone Synchronization | Настройте, включить ли синхронизацию часового пояса. После включения этой функции контейнер и узел будут использовать один и тот же часовой пояс. Синхронизация часового пояса опирается на локальный диск, смонтированный в контейнере. Не изменяйте и не удаляйте локальный диск. Подробнее см. Configuring Time Zone Synchronization. |
Если вы настроили несколько контейнеров для pod, убедитесь, что порты, используемые каждым контейнером, не конфликтуют друг с другом, иначе рабочая нагрузка не может быть развернута.
Параметр | Описание |
|---|---|
Имя контейнера | Введите имя контейнера. |
Политика получения | Политика обновления или получения образа. Если выбрать Always, образ будет загружаться из репозитория образов каждый раз. Если не выбрать Always, предпочтительно будет использоваться существующий образ узла. Если образ отсутствует, он будет загружен из репозитория образов. |
Имя образа | Нажмите Select Image и выберите образ, используемый контейнером. To use a third-party image, directly enter image path. Ensure that the image access credential can be used to access the image repository. For details, see Using Third-Party Images. |
Тег образа | Выберите image tag для развертывания. |
CPU Quota |
Если Request и Limit не указаны, квота не ограничивается. Для получения дополнительной информации и рекомендаций по Request и Limit см. Configuring Container Specifications. |
Memory Quota |
Если Request и Limit не указаны, квота не ограничивается. Для получения дополнительной информации и рекомендаций по Request и Limit см. Configuring Container Specifications. |
(Optional) GPU Quota | Настраивается только при наличии в кластере узлов GPU и установленном дополнении CCE AI Suite (NVIDIA GPU).
Подробную информацию о том, как использовать GPU в кластере, см. Default GPU Scheduling in Kubernetes. |
(Optional) Privileged Container | Программы в привилегированном контейнере обладают определёнными привилегиями. Если эта опция включена, контейнеру будут назначены привилегии. Например, привилегированные контейнеры могут управлять сетевыми устройствами на хост‑машине, изменять параметры ядра, получать доступ ко всем устройствам узла. Для получения дополнительной информации см. Pod Security Standards. |
(Optional) Init Container | Определяет, использовать ли контейнер в качестве init‑контейнера. Init‑контейнер не поддерживает проверку состояния. Init‑контейнер — это специальный контейнер, который запускается до того, как будут запущены другие контейнеры приложений в pod. Каждый pod может содержать несколько контейнеров. Кроме того, pod может включать один или несколько init‑контейнеров. Контейнеры приложений в pod запускаются и работают только после завершения работы всех init‑контейнеров. Подробности см. в Init Containers. |
(Optional) Run Option | Add run options for the container. For details, see Pod. CCE supports the following run options:
|
Динамическое монтирование достигается с помощью поля volumeClaimTemplates и зависит от возможности динамического создания StorageClass. StatefulSet связывает каждый pod с PVC, используя поле volumeClaimTemplates, а PVC привязывается к соответствующему PV. Поэтому после пересоздания pod оригинальные данные могут быть смонтированы на основе имени PVC.
Чтобы отключить сбор журналов стандартного вывода текущей рабочей нагрузки, добавьте аннотацию kubernetes.AOM.log.stdout: [] в Labels and Annotations в области Advanced Settings. Для получения подробной информации о том, как использовать эту аннотацию, см. Table 1.
Headless Service предоставляет фиксированное доменное имя доступа для каждого pod в StatefulSet для взаимного доступа pod‑ов. Для получения подробной информации см. Headless Services.
Service обеспечивает внешний доступ к pod‑ам. При статическом IP-адресе Service перенаправляет трафик доступа к pod‑ам и автоматически балансирует нагрузку для этих pod‑ов.
Вы также можете создать Service после создания рабочей нагрузки. Для получения подробной информации о Service разных типов см. Service Overview.
Параметр | Description |
|---|---|
Upgrade | Укажите режим обновления и параметры рабочей нагрузки. Rolling upgrade и Replace upgrade доступны. Для получения подробной информации см. Upgrading and Rolling Back a Workload. |
Pod Management Policies | Для некоторых распределённых систем гарантии упорядочения StatefulSet не нужны и/или нежелательны. Такие системы требуют только уникальности и идентификаторов.
|
Scheduling | Настройте политики аффинности и анти‑аффинности для гибкого планирования рабочей нагрузки. Предоставляются политики Load affinity и Node affinity.
|
Толерантность | Использование как taints, так и tolerations позволяет (не принудительно) планировать pod на узел с соответствующими taints и управлять политиками выселения pod после того, как узел, на котором находится pod, будет помечен taint. Подробнее см. Configuring Tolerance Policies. |
Метки и аннотации | Добавьте метки или аннотации для pod, используя пары ключ‑значение. После настройки нажмите Confirm. Подробнее о метках и аннотациях см. Configuring Labels and Annotations. |
DNS | Настройте отдельную политику DNS для рабочей нагрузки. Подробнее см. DNS Configuration. |
Конфигурация сети |
|
В этом примере используется workload Nginx, и том EVS динамически монтируется к нему с помощью поля volumeClaimTemplates.
nginx-statefulset.yaml — пример имени файла, и вы можете изменить его по необходимости.
vi nginx-statefulset.yaml
Ниже приведённый контент является лишь примером. Подробнее о StatefulSets см. в Kubernetes official documentation.
apiVersion: apps/v1kind: StatefulSetmetadata:name: nginxspec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: container-1image: nginx:latestimagePullPolicy: IfNotPresentresources:requests:cpu: 250mmemory: 512Milimits:cpu: 250mmemory: 512MivolumeMounts:- name: testreadOnly: falsemountPath: /usr/share/nginx/htmlsubPath: ''imagePullSecrets:- name: default-secretdnsPolicy: ClusterFirstvolumes: []serviceName: nginx-svcreplicas: 2volumeClaimTemplates: # Dynamically mounts the EVS volume to the workload.- apiVersion: v1kind: PersistentVolumeClaimmetadata:name: testnamespace: defaultannotations: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: ru-moscow-1a # 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: 10GistorageClassName: csi-disk # StorageClass name. The value is csi-disk for the EVS volume.updateStrategy:type: RollingUpdate
Создайте файл nginx-headless.yaml.
vi nginx-headless.yaml
Содержимое файла:
apiVersion: v1kind: Servicemetadata:name: nginx-svcnamespace: defaultlabels:app: nginxspec:selector:app: nginxversion: v1clusterIP: Noneports:- name: nginxtargetPort: 80nodePort: 0port: 80protocol: TCPtype: ClusterIP
kubectl create -f nginx-statefulset.yaml
Если отображается информация, аналогичная следующей, StatefulSet был создан:
statefulset.apps/nginx created
Создайте headless Service.
kubectl create -f nginx-headless.yaml
Если отображается следующая информация, headless service успешно создан.
service/nginx-svc created