[k8s 구축] 10. MySQL 구축

어려운 일은 앞에서 다 했으니 이젠 쉬운 일밖에 없다.
MySQL 서버를 만들 때 docker 대비 한 가지 달라진 점은 비밀번호를 평문으로 저장할 수 없다는 점이다.
secret을 통해서 base64 인코딩된 비밀번호를 사용해야 한다.
그 점만 제외하면 다른 것이 없다.

1. MySQL 구축

필자는 기존에 구축한 NFS 기반 PV를 이용해 MySQL을 구축할 것이다.
매니페스트 파일 내용은 다음과 같다.

---
# Secret 생성 (패스워드 base64 인코딩 필요)
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
  namespace: db
type: Opaque
data:
  root-password: UGFzc3dvcmQxMjM=  # 사용할 PW를 base64로 인코딩해서 넣기

---
# PVC 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: db
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-csi
  resources:
    requests:
      storage: 10Gi

---
# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  namespace: db
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: root-password
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-storage
        persistentVolumeClaim:
          claimName: mysql-pvc
---
# Service (LoadBalancer)
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  namespace: db
spec:
  type: LoadBalancer
  # loadBalancerIP: 필요하다면 IP 고정
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    app: mysql

끝이다.
이제 사용하면 된다.

필자는 loadBalancer 형태로 고정 IP를 부여해 사용했지만 당연히 ClusterIP나 NodePort를 사용해도 무방하다.

Series Navigation<< [k8s 구축] 9. NFS 동적 프로바이저를 이용한 네트워크 PV 설정[k8s 구축] 11. nextcloud 구축 >>

댓글 남기기