Heim  >  Artikel  >  Datenbank  >  So verwenden Sie Statefulset zum Erstellen eines MySQL-Clusters in Kubernetes

So verwenden Sie Statefulset zum Erstellen eines MySQL-Clusters in Kubernetes

WBOY
WBOYnach vorne
2023-05-27 21:10:27868Durchsuche

Implementierungsschritte

  • Erstellen Sie ein StatefulSet-Objekt im Kubernetes-Cluster.

  • Erstellen Sie einen Headless-Dienst, um Diensterkennung und Lastausgleich für StatefulSet bereitzustellen.

  • Definieren Sie drei MySQL-Container in StatefulSet und konfigurieren Sie sie im Master-Slave-Replikationsmodus.

  • Verwenden Sie Kubernetes ConfigMap und Secret, um die Konfigurationsinformationen und Authentifizierungsinformationen des Containers zu speichern.

  • Überprüfen Sie, ob der Cluster ordnungsgemäß funktioniert.

Spezifischer Code

Erstellen Sie zunächst einen Namespace mit dem Namen mysql im Kubernetes-Cluster: mysql 的命名空间:

kubectl create namespace mysql

然后,创建一个 ConfigMap 来存储 MySQL 容器的配置信息,例如 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

接下来,创建一个 Secret 来存储 MySQL 容器的认证信息,例如用户名和密码:

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

其中,usernamepassword 分别是 base64 编码后的用户名和密码。

创建一个 StatefulSet 对象来定义MySQL

然后,创建一个 StatefulSet 对象来定义 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

在上面的 YAML 文件中,我们定义了一个名为 mysql

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

Erstellen Sie dann eine ConfigMap, um die Konfigurationsinformationen des MySQL-Containers zu speichern, z. B. die MySQL-Konfiguration Datei my.cnf:

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;

Als nächstes erstellen Sie ein Geheimnis, um die Authentifizierungsinformationen des MySQL-Containers zu speichern, wie Benutzername und Passwort:

rrreee

Darunter Benutzername und passwort sind der Base64-codierte Benutzername bzw. das Passwort.

Erstellen Sie ein StatefulSet-Objekt, um MySQL zu definieren.🎜🎜Dann erstellen Sie ein StatefulSet-Objekt, um die Konfiguration und Anzahl der Replikate des MySQL-Containers zu definieren: 🎜rrreee🎜In der obigen YAML-Datei haben wir eine Datei mit dem Namen mysql definiert. Code > StatefulSet-Objekt, das drei MySQL-Container enthält. Jeder Container verfügt über ein persistentes Volume zum Speichern von MySQL-Daten und stellt die von ConfigMap gespeicherte MySQL-Konfigurationsdatei bereit. 🎜🎜Erstellen Sie einen Headless-Dienst.🎜🎜Als Nächstes müssen wir einen Headless-Dienst erstellen. Dieser Dienst weist keine ClusterIP zu, sondern erstellt mehrere Endpunkte, die der IP-Adresse eines Pods entsprechen und für den direkten Zugriff auf den Pod verwendet werden können : 🎜rrreee🎜Abschließend müssen wir überprüfen, ob die MySQL-Master-Slave-Replikation ordnungsgemäß funktioniert. Verwenden Sie das Befehlszeilentool kubectl, um den Container in Kubernetes einzugeben und die entsprechenden Befehle auszuführen. Wenn Sie in den Pod gehen und eine Verbindung zum Masterknoten des MySQL-Containers herstellen möchten, um die Tabelle zu erstellen, können Sie dies tun, indem Sie den folgenden Befehl ausführen: 🎜rrreee

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Statefulset zum Erstellen eines MySQL-Clusters in Kubernetes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen