namespace
명시default
namespace 에 생성된다.apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: mlops-anjinwoong
spec:
serviceName: "mysql"
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
ports:
- containerPort: 3306
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: <my_password> # 예제이므로 적당한 passwd 사용. secret 쓰는 것을 권장
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "csi-rbd-sc" # storageclass 확인 후 맞춰서 적기
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: mlops-anjinwoong
spec:
ports:
- port: 3306
targetPort: 3306
protocol: TCP
name: mysql
selector:
app: mysql
clusterIP: None
kubectl apply -f mysql-statefulset.yaml
kubectl exec -it mysql-0 -- mysql -u root -p
yaml 시행착오
.
은 지원 Xdefault
namespace 에 생성되어버림pvc 시행착오
% kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
csi-rbd-sc (default) rbd.csi.ceph.com Delete Immediate true 429d
storageClassName
은 storageclass 에 어떤 값이 있는지 먼저 체크하고 맞는 값을 입력해야함ProvisioningFailed
발생하는 것을 확인할 수 있었음kubectl describe pod <pod명>
, kubectl describe pvc <pvc명>
으로 추적 Warning FailedScheduling 12m default-scheduler 0/4 nodes are available: 4 pod has unbound immediate PersistentVolumeClaims. preemption: 0/4 nodes are available: 4 Preemption is not helpful for scheduling.
ProvisioningFailed
kubectl delete pvc <pvc명>
으로 삭제하고, pod 도 삭제하고 다시 올리니 동작 OK