[k8s] kubernetes 로 mysql 띄우기

Woong·2025년 3월 7일
0

Docker, k8s

목록 보기
14/16

yaml 파일 작성

  • namespace 명시
    • current 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
  • yaml 파일로 띄우기

kubectl apply -f mysql-statefulset.yaml

  • db 접근 확인

kubectl exec -it mysql-0 -- mysql -u root -p

시행착오

  • yaml 시행착오

    • apiVersion 에서 . 은 지원 X
    • metadata 에서 namespace 도 같이 정의해줘야함.
      • 정의하지 않으면 default 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 에 어떤 값이 있는지 먼저 체크하고 맞는 값을 입력해야함
    • pod pending -> pvc 확인하니 storageClass 설정 잘못해서 ProvisioningFailed 발생하는 것을 확인할 수 있었음
      • 오류는 kubectl describe pod <pod명>, kubectl describe pvc <pvc명> 으로 추적
      • pod 오류 메시지 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.
      • pvc 오류 메시지 ProvisioningFailed
    • kubectl delete pvc <pvc명> 으로 삭제하고, pod 도 삭제하고 다시 올리니 동작 OK

0개의 댓글