Привет, я новичок в экосистеме K8S и Helm.
Я построил свой собственный кластер k8s, используя kubespray с EC2 (я могу использовать EKS, но в целях практики), и следующим шагом будет использование Helm.
Я пытаюсь развернуть диаграмму MySQL в своем кластере K8s.
Мое окружение
- Кластер k8s с 1 главным и 3 узлами (все они являются экземплярами ec2 t2.small)
- используя mysql диаграмму изhttps://github.com/helm/charts/tree/master/stable/mysql
# storage class manifest
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
#volumeBindingMode: WaitForFirstConsumer
# values.yaml from mysql chart
## Persist data to a persistent volume
persistence:
enabled: true
## database data Persistent Volume Storage Class
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner. (gp2 on AWS, standard on
## GKE, AWS & OpenStack)
##
storageClass: "local-storage" # <-- Changed this to use my own storage class
accessMode: ReadWriteOnce
size: 1Gi # <-- Changed this since only 2.5GB is available on each node
annotations: {}
...
Проблема
Ошибка на pvc. Ниже приведены соответствующие журналы.
ubuntu@nodec1:~/charts/stable/mysql$ kubectl describe pvc/mysqlserver
Name: mysqlserver
Namespace: default
StorageClass: local-storage
Status: Pending
Volume:
Labels: app=mysqlserver
app.kubernetes.io/managed-by=Helm
chart=mysql-1.6.9
heritage=Helm
release=mysqlserver
Annotations: meta.helm.sh/release-name: mysqlserver
meta.helm.sh/release-namespace: default
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Mounted By: mysqlserver-5d5cfcd5f8-922k4
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ProvisioningFailed 6s (x3 over 21s) persistentvolume-controller no volume plugin matched name: kubernetes.io/no-provisioner
Я понятия не имею, почему pvc не может использовать kubernetes.io/no-provisioner
плагин из моего собственного local-storage
storageclass. Может ли кто-нибудь помочь с этой проблемой?
решение1
Эта ошибка означает, что поскольку вы не используете средство динамического создания томов (которое автоматически создаст том для вас), вам необходимо создать этот том самостоятельно.
Примеры того, как это сделать, можно найти в документации k8s: https://kubernetes.io/docs/concepts/storage/volumes/#local
Чтобы быстро протестировать и проверить, является ли это проблемой, вы можете применить следующий yaml-файл:
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-pv
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: /mnt/asd
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: Exist