안녕하세요 저는 k8s 및 조타 생태계를 처음 접했습니다.
저는 EC2와 함께 kubespray를 사용하여 자체 k8s 클러스터를 구축했고(EKS를 사용할 수 있지만 연습 목적으로) 다음 단계는 helm을 사용하는 것입니다.
k8s 클러스터에 mysql 차트를 배포하려고 합니다.
내 환경
- 마스터 1개와 노드 3개가 있는 k8s 클러스터(모두 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
kubernetes.io/no-provisioner
PVC가 내 저장소 클래스의 플러그인을 사용할 수 없는 이유를 모르겠습니다 local-storage
. 누구든지 이 문제에 대해 도움을 줄 수 있나요?
답변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