콘텐츠로 이동

MySQL 배포

소개

MySQL은 가장 널리 사용되는 관계형 데이터베이스 관리 시스템이며, 웹 애플리케이션 분야에서 MySQL은 최고의 RDBMS(관계형 데이터베이스 관리 시스템) 애플리케이션 중 하나입니다.

전제 조건

  • Kubernetes 클러스터가 배포되어 있어야 합니다. 배포되지 않은 경우 Kubernetes 배포를 참조하세요.
  • nfs-subdir-external-provisioner가 배포되어 있어야 합니다. 배포되지 않은 경우 Kubernetes Storage를 참조하세요.

기본 정보 및 호환성

이름 설명
MySQL 버전 8.0
지원 클러스터 버전 1.18+
오프라인 설치 지원 여부 지원
지원 아키텍처 amd64/arm64

배포 기본 설정 정보

기본 주소 mysql.middleware
기본 포트 3306
기본 계정 root/rootPassw0rd

설치

주의

관리자 계정 생성 (반드시 관리자 계정이어야 하며, 이후 설치 초기화 시 이 계정을 사용하여 각 애플리케이션 DB를 생성하고 초기화합니다. 원격 연결이 필요한 경우 직접 활성화해야 함)

배포가 실패하는 경우 docker를 사용하여 mysql을 배포하는 방식으로 진행할 수 있음

강조 표시된 부분의 storageClassName은 실제 상황에 따라 설정해야 함

MySQL 관리자 계정은 반드시 변경하세요.

mysql.yaml을 저장하고 배포합니다.

mysql.yaml(클릭하여 펼치기)
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    volume.beta.kubernetes.io/storage-provisioner: "kubernetes.io/nfs"
  #  volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
  name: mysql-data
  namespace: middleware
spec:
  accessModes:
  - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 10Gi
  storageClassName:  standard-nfs-storage ## 실제 존재하는 StorageClass 지정 #


---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: middleware
  labels:
    app: mysql
data:
  mysqld.cnf: |-
        [mysqld]
        pid-file        = /var/run/mysqld/mysqld.pid
        socket          = /var/run/mysqld/mysqld.sock
        datadir         = /var/lib/mysql
        symbolic-links=0
        max_connections=5000



---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
  namespace: middleware
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: mysql
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - env:
        - name: MYSQL_ROOT_PASSWORD
          value: rootPassw0rd
        - name: MYSQL_DATABASE
          value: FT2.0
        - name: MYSQL_USER
          value: admin
        - name: MYSQL_PASSWORD
          value: admin@123
        image: pubrepo.guance.com/googleimages/mysql:8.0
        imagePullPolicy: IfNotPresent
        name: mysql
        resources:
           limits:
             cpu: '4'
             memory: 4Gi
           requests:
             cpu: 100m
             memory: 512Mi                   
        ports:
        - containerPort: 3306
          name: dbport
          protocol: TCP
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: db
          subPath: data
        - mountPath: /etc/mysql/conf.d/mysqld.cnf
          name: config
          subPath: mysqld.cnf
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}

      terminationGracePeriodSeconds: 30
      volumes:
      - name: db
        persistentVolumeClaim:
          claimName: mysql-data
      - name: config
        configMap:
          name: mysql-config
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: middleware
spec:
  ports:
  - name: mysqlport
    nodePort: 32306
    port: 3306
    protocol: TCP
    targetPort: dbport
  selector:
    app: mysql
  sessionAffinity: None
  type: NodePort

다음 명령을 실행하여 설치합니다:

kubectl create namespace middleware
kubectl apply -f mysql.yaml

배포 확인

  • pod 상태 확인
kubectl get pods -n middleware | grep mysql

제거 방법

kubectl delete -f mysql.yaml

문서 평가

이 페이지가 도움이 되었나요?