GNU/Linux >> Belajar Linux >  >> Linux

Menerapkan MySQL di Kubernetes {Guide}

Pendahuluan

Menyebarkan database fungsional dalam lingkungan kemas bisa menjadi tugas yang menuntut. Alasannya terletak pada serangkaian tantangan spesifik yang ada di database dalam mempertahankan ketersediaan, status, dan redundansinya. Namun, banyak pengembang lebih memilih agar tumpukan aplikasi dan lapisan data mereka diatur pada prinsip penerapan dan otomatisasi cepat yang sama yang ditawarkan oleh platform seperti Kubernetes.

Artikel ini akan menunjukkan cara men-deploy instance database MySQL di Kubernetes menggunakan volume persisten. Fitur ini memungkinkan aplikasi stateful mengatasi kefanaan yang melekat pada pod K8s.

Prasyarat

  • Cluster Kubernetes dengan kubectl terinstal
  • Akses administratif ke sistem Anda

Penerapan MySQL di Kubernetes

Agar berhasil men-deploy instance MySQL di Kubernetes, buat serangkaian file YAML yang akan Anda gunakan untuk mendefinisikan objek Kubernetes berikut:

  • Rahasia Kubernetes untuk menyimpan sandi database.
  • Volume Persisten (PV) untuk mengalokasikan ruang penyimpanan untuk database.
  • Klaim Volume Persisten (PVC) yang akan mengklaim PV untuk penerapan .
  • Penerapan itu sendiri.
  • Layanan Kubernetes.

Langkah 1:Buat Rahasia Kubernetes

Gunakan editor teks seperti Nano untuk membuat file Rahasia.

nano mysql-secret.yaml

File mendefinisikan rahasia. Masukkan kata sandi untuk akun MySQL root di stringData bagian YAML.

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: kubernetes.io/basic-auth
stringData:
  password: test1234

Simpan file dan keluar. Gunakan kubectl untuk menerapkan perubahan ke cluster.

kubectl apply -f mysql-secret.yaml

Sistem mengonfirmasi keberhasilan pembuatan rahasia:

Langkah 2:Buat Volume Persisten dan Klaim Volume

Buat file konfigurasi penyimpanan:

nano mysql-storage.yaml

File ini terdiri dari dua bagian:

  • Bagian pertama mendefinisikan Volume Persisten. Sesuaikan jumlah penyimpanan yang dialokasikan di spec.capacity.storage . Di spec.hostPath tentukan titik pemasangan volume.
  • Bagian kedua dari file mendefinisikan PVC.
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

Simpan file dan keluar.

Kemudian, terapkan konfigurasi penyimpanan dengan kubectl .

kubectl apply -f mysql-storage.yaml

Sistem mengkonfirmasi pembuatan PV dan PVC.

Langkah 3:Buat Penerapan MySQL

  1. Buat file penerapan. File penerapan mendefinisikan sumber daya yang akan digunakan penerapan MySQL.
nano mysql-deployment.yaml

2. Dalam spec.template.spec.containers bagian, tentukan gambar MySQL:

containers:
- image: mysql:5.6
  name: mysql

3. Tetapkan nilai MYSQL_ROOT_PASSWORD variabel lingkungan ke kata sandi yang Anda tentukan di Rahasia dari Langkah 1 .

env:
- name: MYSQL_ROOT_PASSWORD
  valueFrom:
    secretKeyRef:
      name: mysql-secret
      key: password

4. Hubungkan PVC dari Langkah 2 untuk penerapan.

volumes:
- name: mysql-persistent-storage
  persistentVolumeClaim:
    claimName: mysql-pv-claim

5. Di bagian file yang terpisah, tentukan nama dan port layanan.

Seluruh YAML akan terlihat seperti pada contoh di bawah ini:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: 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-secret
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql

Simpan file dan keluar. Buat penerapan dengan menerapkan file dengan kubectl :

kubectl apply -f mysql-deployment.yaml

Sistem mengonfirmasi keberhasilan pembuatan penerapan dan layanan.

Akses Instans MySQL Anda

Untuk mengakses instance MySQL, akses pod yang dibuat oleh penerapan.

  1. Mencantumkan pod:
kubectl get pod

2. Temukan pod MySQL dan salin namanya dengan memilihnya dan menekan Ctrl+Shift+C :

3. Dapatkan shell untuk pod dengan menjalankan perintah berikut:

kubectl exec --stdin --tty mysql-694d95668d-w7lv5 -- /bin/bash

Cangkang pod menggantikan cangkang utama:

4. Ketik perintah berikut untuk mengakses shell MySQL:

mysql -p

5. Saat diminta, masukkan kata sandi yang Anda tentukan di rahasia Kubernetes.

Shell MySQL muncul.

Perbarui Penerapan MySQL Anda

Edit file YAML yang relevan untuk memperbarui bagian mana pun dari penerapan. Terapkan perubahan dengan:

kubectl apply -f [filename]

Namun, ingatlah dua batasan berikut:

  • Penerapan khusus ini untuk contoh tunggal penyebaran MySQL. Artinya, penerapan tidak dapat diskalakan - ia bekerja tepat pada satu Pod.
  • Penerapan ini tidak mendukung pembaruan berkelanjutan. Oleh karena itu, spec.strategy.type harus selalu disetel ke Buat Ulang .

Hapus Instance MySQL Anda

Jika Anda ingin menghapus seluruh penerapan, gunakan kubectl untuk menghapus setiap objek Kubernetes yang terkait dengannya:

kubectl delete deployment,svc mysql
kubectl delete pvc mysql-pv-claim
kubectl delete pv mysql-pv-volume
kubectl delete secret mysql-secret

Serangkaian perintah ini menghapus penerapan, layanan, PV, PVC, dan rahasia yang Anda buat. Sistem mengonfirmasi penghapusan yang berhasil:


Linux
  1. Instal MariaDB atau MySQL di Linux

  2. Cara Menghapus Layanan di Kubernetes

  3. Pulihkan database mysql - mysql/mysqldump memberikan tabel <database>.<tablename> tidak ada (1146)

  1. FAQ Penerapan MySQL

  2. Memperbaiki database MySQL InnoDB

  3. Cara Menghapus Deployment Kubernetes [Tips Cepat K8s]

  1. Bagaimana melakukan Deployment Canary di Kubernetes

  2. Penjadwal Acara MySQL

  3. Pencadangan MySQL 1.1