본문 바로가기
쿠버네티스

[Kubernetes] Mysql 구축하기

by 알 수 없는 사용자 2023. 8. 11.
반응형

Mysql을 Pod로 구축하기


기본셋팅


 

[Kubernetes] 쿠버네티스 클러스터 구축

마스터노드 1개 워커노드 3개 구조로 쿠버네티스 클러스터를 구축하는 방법에 대해 포스팅하겠다. 우선 쿠버네티스는 container runtime과 kubernetes가 설치되어있어야하기 때문에 아래의 링크로 들어

librat.kr

 

[Kubernetes] Dynamic-provisioning NFS 구축

쿠버네티스에서는 Container를 생성할때 PV를 마운트할 수 있는데 PV를 일일이 만들어서 할당하는것이 아닌 NFS에서 동적으로 할당 받을수 있다. 아래의 yaml 파일을 순서대로 apply 시켜준다 #class.yaml

librat.kr

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

로그도 확인하여 정상작동하는지 확인한다.

반응형