Rumah  >  Artikel  >  pangkalan data  >  Cara menggunakan statefulset untuk membina kluster MySQL dalam kubernetes

Cara menggunakan statefulset untuk membina kluster MySQL dalam kubernetes

WBOY
WBOYke hadapan
2023-05-27 21:10:27863semak imbas

Langkah pelaksanaan

  • Buat objek StatefulSet dalam gugusan Kubernetes.

  • Buat perkhidmatan tanpa kepala untuk menyediakan penemuan perkhidmatan dan pengimbangan beban untuk StatefulSet.

  • Tentukan tiga bekas MySQL dalam StatefulSet dan konfigurasikannya dalam mod replikasi induk-hamba.

  • Gunakan Kubernetes ConfigMap dan Secret untuk menyimpan maklumat konfigurasi dan maklumat pengesahan bekas.

  • Semak sama ada kluster berfungsi dengan betul.

Kod khusus

Mula-mula, buat ruang nama bernama mysql dalam kelompok Kubernetes:

kubectl create namespace mysql

Kemudian, cipta Peta Konfig untuk Menyimpan konfigurasi maklumat bekas MySQL, seperti fail konfigurasi MySQL my.cnf:

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: mysql
data:
  my.cnf: |
    [mysqld]
    server-id=1
    log-bin=mysql-bin
    binlog_format=row
    innodb_flush_log_at_trx_commit=1

Seterusnya, cipta Rahsia untuk menyimpan maklumat pengesahan bekas MySQL, seperti nama pengguna dan kata laluan:

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
  namespace: mysql
type: Opaque
data:
  username: dXNlcm5hbWU=
  password: cGFzc3dvcmQ=

di mana, username dan password ialah nama pengguna dan kata laluan berkod base64 masing-masing.

Buat objek StatefulSet untuk mentakrif MySQL

Kemudian, cipta objek StatefulSet untuk menentukan konfigurasi dan bilangan replika bekas MySQL:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
  namespace: mysql
spec:
  replicas: 3
  serviceName: mysql-headless
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: password
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
        - name: mysql-config
          mountPath: /etc/mysql/conf.d/my.cnf
          subPath: my.cnf
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-data
      - name: mysql-config
        configMap:
          name: mysql-config
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi

Dalam fail YAML di atas , kami Objek StatefulSet bernama mysql ditakrifkan, yang mengandungi tiga bekas MySQL. Setiap bekas mempunyai volum yang berterusan untuk menyimpan data MySQL dan memasang fail konfigurasi MySQL yang disimpan oleh ConfigMap.

Buat perkhidmatan tanpa kepala

Seterusnya, kita perlu mencipta perkhidmatan tanpa kepala Perkhidmatan ini tidak akan menetapkan ClusterIP, tetapi akan mencipta berbilang Titik Akhir, setiap Titik Akhir sepadan dengan alamat IP Pod , boleh digunakan untuk mengakses Pod secara terus:

apiVersion: v1
kind: Service
metadata:
  name: mysql-headless
  namespace: mysql
spec:
  ports:
  - name: mysql
    port: 3306
  clusterIP: None
  selector:
    app: mysql

Akhir sekali, kita perlu menyemak sama ada replikasi tuan-hamba MySQL berfungsi dengan betul. Gunakan alat baris arahan kubectl untuk memasukkan bekas dalam Kubernetes dan laksanakan arahan yang sepadan. Jika anda ingin pergi ke pod dan menyambung ke nod induk bekas MySQL untuk mencipta jadual, anda boleh melakukan ini dengan menjalankan arahan berikut:

kubectl exec -it mysql-0 --namespace=mysql -- /bin/bash
mysql -u root -p
create database testdb;
use testdb;
create table testtable (id int, name varchar(255));
insert into testtable values (1, 'test');
exit;

Atas ialah kandungan terperinci Cara menggunakan statefulset untuk membina kluster MySQL dalam kubernetes. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam