Проблемы с Kubernetes PersistentVolumeClaim в AWS с использованием volumeClaimTemplates в состоянии ожидания
Мы успешно создаем модули, службы и контроллеры репликации в соответствии с требованиями нашего проекта. Теперь мы планируем настроить постоянное хранилище в AWS с использованием Kubernetes. Я создал файл YAML для создания тома EBS в AWS, он работает нормально, как и ожидалось. Я могу требовать объем и успешно смонтировать на мой модуль (это только для одной реплики).
Я могу успешно создать файл. Объем также создается, но мои модули находятся в состоянии ожидания, объем по-прежнему показывает доступное состояние в aws. Я не могу видеть какие-либо журналы ошибок там.
Хранение файла:
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: mongo-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
Основной файл:
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: web2
spec:
selector:
matchLabels:
app: mongodb
serviceName: "mongodb"
replicas: 2
template:
metadata:
labels:
app: mongodb
annotations:
pod.alpha.kubernetes.io/initialized: "true"
spec:
containers:
- image: mongo
name: mongodb
ports:
- name: web2
containerPort: 27017
hostPort: 27017
volumeMounts:
- mountPath: "/opt/couchbase/var"
name: mypd1
volumeClaimTemplates:
- metadata:
name: mypd1
annotations:
volume.alpha.kubernetes.io/storage-class: mongo-ssd
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
Kubectl версия:
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T10:09:24Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.6", GitCommit:"6260bb08c46c31eea6cb538b34a9ceb3e406689c", GitTreeState:"clean", BuildDate:"2017-12-21T06:23:29Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
1 ответ
Я вижу, что вы использовали hostPort
в вашем контейнере. В этом случае, если у вас нет более одного узла в кластере, One Pod останется в ожидании. Потому что он не подойдет ни одному узлу.
containers:
- image: mongo
name: mongodb
ports:
- name: web2
containerPort: 27017
hostPort: 27017
Я получаю эту ошибку, когда я описываю свой ожидающий Pod
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 27s (x7 over 58s) default-scheduler No nodes are available that match all of the predicates: PodFitsHostPorts (1).
HostPort
в вашем контейнере будет привязан ваш узел. Предположим, вы используете HostPort 10733, но другой модуль уже использует этот порт, теперь вы не можете использовать его. Так что это будет в состоянии ожидания. И если у вас есть реплика 2, и оба модуля развернуты в одном и том же узле, они также не могут быть запущены.
Итак, вам нужно использовать порт в качестве HostPort, что вы можете с уверенностью сказать, что никто другой не использует.