Hola, soy nuevo en k8s y en el ecosistema helm.
Construí mi propio clúster k8s usando kubespray con EC2 (puedo usar EKS pero para practicar) y el siguiente paso es usar helm.
Estoy intentando implementar un gráfico mysql en mi clúster k8s.
mi entorno
- Clúster k8s con 1 maestro y 3 nodos (todos ellos son instancias ec2 t2.small)
- usando el gráfico mysql dehttps://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: {}
...
Problema
Hay un error en el pvc. A continuación se muestran los registros relacionados.
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
No tengo idea de por qué PVC no puede usar kubernetes.io/no-provisioner
un complemento de mi propia local-storage
clase de almacenamiento. ¿Alguien puede ayudar con este tema?
Respuesta1
Este error significa que, dado que no está utilizando el aprovisionador de volumen dinámico (que crearía automáticamente un volumen para usted), debe crear este volumen usted mismo.
Consulte los documentos de k8s para ver ejemplos de cómo hacerlo: https://kubernetes.io/docs/concepts/storage/volumes/#local
Sólo para probar rápidamente y comprobar si este es el problema, puede aplicar el siguiente 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