Maison  >  Article  >  base de données  >  Comment utiliser statefulset pour créer un cluster MySQL dans Kubernetes

Comment utiliser statefulset pour créer un cluster MySQL dans Kubernetes

WBOY
WBOYavant
2023-05-27 21:10:27812parcourir

Étapes de mise en œuvre

  • Créez un objet StatefulSet dans le cluster Kubernetes.

  • Créez un service sans tête pour fournir la découverte de services et l'équilibrage de charge pour StatefulSet.

  • Définissez trois conteneurs MySQL dans StatefulSet et configurez-les en mode de réplication maître-esclave.

  • Utilisez Kubernetes ConfigMap et Secret pour stocker les informations de configuration et les informations d'authentification du conteneur.

  • Vérifiez si le cluster fonctionne correctement.

Code spécifique

Tout d'abord, créez un espace de noms nommé mysql dans le cluster Kubernetes : #🎜 🎜#

kubectl create namespace mysql
mysql 的命名空间:

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

然后,创建一个 ConfigMap 来存储 MySQL 容器的配置信息,例如 MySQL 配置文件 my.cnf

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

接下来,创建一个 Secret 来存储 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

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

创建一个 StatefulSet 对象来定义MySQL

然后,创建一个 StatefulSet 对象来定义 MySQL 容器的配置和副本数:

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

在上面的 YAML 文件中,我们定义了一个名为 mysqlEnsuite, créez un ConfigMap pour stocker les informations de configuration du conteneur MySQL, telles que le fichier de configuration MySQL 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;

Ensuite, créez un secret Pour stocker les informations d'authentification du conteneur MySQL, telles que le nom d'utilisateur et le mot de passe :

rrreee

Parmi eux, username et password sont les fichiers codés en base64 nom d'utilisateur et mot de passe respectivement.

Créez un objet StatefulSet pour définir MySQL

#🎜🎜#Ensuite, créez un objet StatefulSet pour définir la configuration et le nombre de réplicas du conteneur MySQL : #🎜🎜#rrreee#🎜🎜 #En haut Dans le fichier YAML, nous définissons un objet StatefulSet nommé mysql, qui contient trois conteneurs MySQL. Chaque conteneur dispose d'un volume persistant pour stocker les données MySQL et le fichier de configuration MySQL stocké par ConfigMap est monté. #🎜🎜##🎜🎜#Créer un service sans tête#🎜🎜##🎜🎜#Ensuite, nous devons créer un service sans tête. Ce service n'attribuera pas ClusterIP, mais créera plusieurs points de terminaison, chaque point de terminaison correspondant à un IP. L'adresse du Pod peut être utilisée pour accéder directement au Pod : #🎜🎜#rrreee#🎜🎜#Enfin, nous devons vérifier si la réplication maître-esclave MySQL fonctionne correctement. Utilisez l'outil de ligne de commande kubectl pour saisir le conteneur dans Kubernetes et exécuter les commandes correspondantes. Si vous souhaitez accéder au pod et vous connecter au nœud maître du conteneur MySQL pour créer la table, vous pouvez le faire en exécutant la commande suivante : #🎜🎜#rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer