#docker #kubernetes #persistent-volumes #kubernetes-statefulset #persistent-volume-claims
Вопрос:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: cp1
spec:
selector:
matchLabels:
app: mysql
serviceName: mysql
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mysql
image: mysql:latest
env:
- name: MYSQL_ROOT_HOST
value: '%'
- name: MYSQL_LOG_CONSOLE
value: "true"
- name: MYSQL_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
key: MYSQL_PASSWORD
name: env-map-service
ports:
- containerPort: 3306
name: mysql
resources:
requests:
cpu: 500m
memory: 1Gi
volumeMounts:
- name: mysql-vol
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-vol
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
storageClassName: test-sc
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: cp1
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
ports:
- port: 3306
name: mysql
targetPort: 3306
clusterIP: None
selector:
app: mysql
Это файл yaml для развертывания моего приложения. которые отлично работают,
apiVersion: apps/v1
kind: Deployment
metadata:
name: kube-child-app
labels:
app: kube-child-app
namespace: cp1
spec:
replicas: 1
template:
metadata:
name: kube-child-app
labels:
app: kube-child-app
spec:
containers:
- name: kube-child-app
image: jahadulrakib/kube-child-app:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8081
restartPolicy: Always
selector:
matchLabels:
app: kube-child-app
Я хочу развернуть приложение базы данных в своем локальном кластере kubernetes. Но он выдает следующую ошибку и не запускает модуль. здесь я прикрепляю свой файл yaml для pod up. я создаю для этого класса StroageClass, PV.
Ошибка: Ошибка с сервера (плохой запрос): pod mysql-0 не назначил хост
ОБНОВЛЕНИЕ 1:
Предупреждение Не удалось запланировать 5 часов 40 минут по умолчанию-планировщик доступен 0/1 узлов: 1 модуль имеет несвязанные немедленные требования PersistentVolumeClaims
пвх и фотоэлектрические материалы находятся в состоянии ожидания
ОБНОВЛЕНИЕ 2:
ПВХ в pending
статусе, потому что класс хранения не может создать необходимый PV
15m Предупреждение о сбое при планировании pod/mysql-0 доступны узлы 0/1: 1 pod имеет несвязанные немедленные требования к постоянному объему. 4m12s Обычное внешнее разрешение persistentvolumeclaim/mysql-vol-mysql-0 ожидает создания тома либо внешним поставщиком «docker.io/hostpath» или создан вручную системным администратором
ОБНОВЛЕНИЕ 3:
проблема, по-видимому, связана с различием между доступными метками PV и конфигурацией, которую мы хотим использовать, и теми, которые заданы в наборе состояний volumeClaimTemplates
Комментарии:
1. у вас есть какое-то другое приложение или модуль, запущенный в
cp1
пространстве имен? если нет, это может быть проблемой конфигурации селектора узлов2. нет, другое развертывание и модуль хорошо работают с использованием пространства имен cp1
3. это единственное доступное событие или журнал? есть ли у вас еще какие-то конфигурации выбора узлов в тех, которые работают? можете ли вы добавить рабочий пример, например, развертывание? Какова ваша кластерная архитектура (рабочие,главные, инфра-узлы)?
4. apiVersion: приложения/v1 вид: Метаданные развертывания: имя: метки приложений-дочерних приложений: приложение: пространство имен приложений-дочерних приложений: cp1 спецификация: реплики: 1 шаблон: метаданные: имя: метки приложений-дочерних приложений: приложение: спецификация приложений-дочерних приложений: контейнеры:-имя: изображение приложения-дочернего приложения: jahadulrakib/kube-дочернее приложение:последняя версия imagePullPolicy: Если нет портов:-Порт контейнера: 8081 Политика обновления: Всегда выбор: Метки соответствия: приложение: kube — детское приложение
5. добавлен мой рабочий файл развертывания, о котором идет речь.
Ответ №1:
Похоже, ПВХ не был удовлетворен необходимым PV, потому что класс хранения не создал новый PV, а существующий PV не соответствовал Pending
ПВХ, поэтому они не могли быть связаны вместе. после изменения соответствующих полей они связываются вместе.
Хотя он использует только одну реплику, набор состояний по-прежнему является лучшим вариантом по сравнению с использованием развертывания с пвх, в основном из-за того, что целью приложения является масштабирование БД с высоты птичьего полета проекта.Объясните, что приложение имеет смысл лучше при использовании набора состояний, так как оно отслеживает состояние и в будущем может превратиться в набор модулей вместо одного.
ознакомьтесь со статьей kubernetes о нем, когда он был впервые популяризирован и приведен в полезное состояние, а также с их текущими документами по нему