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.
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=
其中,username
和 password
分别是 base64 编码后的用户名和密码。
然后,创建一个 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: mysqlErstellen 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;
rrreee
DarunterBenutzername
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!