반응형
Mysql을 Pod로 구축하기
기본셋팅
- 클러스터 구축
https://librat.kr/entry/Kubernetes-쿠버네티스-클러스터-구축 - nfs-dynamic-provisioner 배포되어있어야함
https://librat.kr/entry/Kubernetes-Dynamic-provisioning-NFS-구축https://librat.kr/entry/Kubernetes-Dynamic-provisioning-NFS-구축
Mysql 배포하기 전
mysql을 배포하기전 pvc와 configmap을 배포한다.
- pvc.yamlpvc.yaml 파일을 위와같이 작성후 배포 후 pv가 생성되었는지 확인한다.
kubectl apply -f pvc.yaml kubectl get pv -A
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-mysql-pv-claim namespace: test spec: storageClassName: nfs-client accessModes: - ReadWriteOnce resources: requests: storage: 5Gi
- configmap.yaml마찬가지로 배포 해준다.
apiVersion: v1 kind: ConfigMap metadata: name: mysql-config namespace: bangbaesa data: custom.cnf: |+ [mysqld] ft_min_word_len=2 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci lower_case_table_names=1 innodb_ft_min_token_size=2 log_output=FILE general_log general_log_file=/var/log/mysql/mariadb.log log_error=/var/log/mysql/mariadb.err log_warnings=9 slow_query_log slow_query_log_file=/var/log/mysql/mariadb-slow.log long_query_time=1.0
Mysql 배포
pvc 와 configmap의 배포가 끝나면 deployment.yaml을 작성해준뒤 배포한다.
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: mysql
namespace: test
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mariadb:10.5.8
env:
# Use secret in real usage
- name: MYSQL_ROOT_PASSWORD
value: test
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
- name: time-zone
mountPath: /etc/localtime
- name: config-volume
mountPath: /etc/mysql/mariadb.conf.d/custom.cnf
subPath: custom.cnf
- name: mysqllog
mountPath: /var/log/mysql
- name: mysql-err-log
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/mysql/mariadb.err']
volumeMounts:
- name: mysqllog
mountPath: /var/log/mysql
- name: mysql-slow-log
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/mysql/mariadb-slow.log']
volumeMounts:
- name: mysqllog
mountPath: /var/log/mysql
- name: mysql-gen-log
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/mysql/mariadb.log']
volumeMounts:
- name: mysqllog
mountPath: /var/log/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: test-mysql-pv-claim
- name: time-zone
hostPath:
path: /usr/share/zoneinfo/Asia/Seoul
- name: config-volume
configMap:
name: mysql-config
optional: true
- name: mysqllog
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: mysql-in
namespace: test
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
위 파일을 분석해보면 pvc와 configmap 볼륨이 마운트 되어있는것이다. 저 두가지가 마운트가 되지않으면 동작하지 않으니 잘 확인한 후 배포한다.
kubectl apply -f deployment.yaml
kubectl logs -n test mysql
로그도 확인하여 정상작동하는지 확인한다.
반응형
'쿠버네티스' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 PV, PVC 생성 및 마운트 (0) | 2023.08.30 |
---|---|
[Kubernetes] Mysql 덤프 (0) | 2023.08.07 |
[Kubernetes] HA-Cluster (고가용성 클러스터) 구축 - 3 (0) | 2023.08.01 |
[Kubernetes] HA-Cluster (고가용성 클러스터) 구축 - 2 (0) | 2023.07.28 |
[Kubernetes] HA-Cluster (고가용성 클러스터) 구축 - 1 (0) | 2023.07.26 |