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
다음 명령을 실행하여 설치합니다:
배포 확인¶
- pod 상태 확인