Trang chủGiới thiệuLiên hệ
Cài đặt database MySQL trên Kubernetes

Bài viết này sẽ trình bày cách deploy database MySQL trên Kubernetes cluster mà mình sử dụng trong môi trường DEV, không nên sử dụng cho môi trường production. Ddataabase sẽ sử dụng phương thức lưu trữ NFS.

MySQL Volume

Trong ví dụ của mình dùng Persistent Volume NFS, các bạn có thể dùng loại PV khác cũng được. Trong đó:

  • 10.110.0.101: là IP của NFS server
  • /mnt/nfsdata/database/mysql: là folder lưu data của MySQL trên NFS server.

Xem thêm bài viết Thiết lập và dụng NFS Persistent Volume trên Kubernetes để hiểu rõ hơn về NFS PVC.

mysql-volume.yaml:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: database-mysql-pv
  namespace: database
  labels:
    app: mysql
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  persistentVolumeReclaimPolicy: Recycle
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    server: 10.110.0.101
    path: "/mnt/nfsdata/database/mysql"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: database-mysql-pvc
  namespace: database
  labels:
    app: mysql
spec:
  selector:
    matchLabels:
      app: database-mysql
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  volumeMode: Filesystem
  volumeName: database-mysql-pv

MySQL Deployment

mysql-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: database-mysql
  namespace: database
  labels:
    app: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql
              key: password
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: mysql
              key: db_name
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: mysql
              key: db_user
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql
              key: db_pass
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql
        persistentVolumeClaim:
          claimName: database-mysql-pvc

Với cấu hình này:

  • MYSQL_ROOT_PASSWORD: là mật khẩu của root trong mysql
  • MYSQL_DATABASE: tên của database được khởi tạo ban đầu.
  • MYSQL_USER: tên của user được khởi tạo ban đầu, user này là owner của databse ở trên.
  • MYSQL_PASSWORD: Mật khẩu của user ở trên.

Các thông tin ở trên được lưu trong secrets tên mysql nhằm tránh hiển thị thông tin nhạy cảm ở dạng plain text.

MySQL Secrets

secrets.yaml

Các giá trị db_pass, db_name, … là các chuỗi ký tự được encode bằng base64

apiVersion: v1
kind: Secret
metadata:
  name: mysql
  namespace: database
  labels:
    app: mysql
type: Opaque
data:
  db_name: ZGVtbw== # demo
  db_user: ZGVtby11c2Vy # demo-user
  db_pass: ZGVtby1wYXNz # demo-pass
  password: bXlwYXNz # mypass

MySQL Service

mysql-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: database-mysql
  namespace: database
  labels:
    app: mysql
spec:
  ports:
    - port: 3306
  selector:
    app: mysql

Sau khi đã tạo hết các file đó, chúng ta chạy kubectl để cài đặt và thiết lập trang web wordpress lên Kubernetes cluster

kubectl create namespace website
kubectl apply -f .\secrets.yaml
kubectl apply -f .\mysql-volume.yaml
kubectl apply -f .\mysql-deployment.yaml
kubectl apply -f .\mysql-service.yaml

Sau khi database được triển khai thì mọi pod trong cluster đề có thể truy cập vào MySQL server qua hosts mysql.database (service.namespace)


Anh Nguyễn

Anh Nguyễn

DIGITAL SOLUTIONS ARCHITECT

Mục lục

1

MySQL Volume

2

MySQL Deployment

3

MySQL Secrets

4

MySQL Service

Bài viết tương tự

Thiết lập Kubernetes NFS Subdir External Provisioner
Anh Nguyễn
19/10/2021
1 phút
© 2021, Giữ mọi bản quyền

Thông tin

Hợp tácGiới thiệuLiên hệ

Mạng xã hội