>  기사  >  데이터 베이스  >  Statefulset을 사용하여 Kubernetes에서 MySQL 클러스터를 구축하는 방법

Statefulset을 사용하여 Kubernetes에서 MySQL 클러스터를 구축하는 방법

WBOY
WBOY앞으로
2023-05-27 21:10:27813검색

구현 단계

  • Kubernetes 클러스터에 StatefulSet 객체를 생성합니다.

  • StatefulSet에 대한 서비스 검색 및 로드 밸런싱을 제공하는 헤드리스 서비스를 만듭니다.

  • StatefulSet에서 3개의 MySQL 컨테이너를 정의하고 마스터-슬레이브 복제 모드에서 구성합니다.

  • Kubernetes ConfigMap과 Secret을 사용하여 컨테이너의 구성 정보와 인증 정보를 저장합니다.

  • 클러스터가 제대로 작동하는지 확인하세요.

특정 코드

먼저 Kubernetes 클러스터에 mysql라는 네임스페이스를 생성합니다. 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

그런 다음 ConfigMap을 생성하여 MySQL 구성과 같은 MySQL 컨테이너의 구성 정보를 저장합니다. file 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;

다음으로 사용자 이름, 비밀번호 등 MySQL 컨테이너의 인증 정보를 저장하기 위한 Secret을 만듭니다.

rrreee

그 중 사용자 이름 비밀번호는 각각 base64로 인코딩된 사용자 이름과 비밀번호입니다.

MySQL을 정의하기 위한 StatefulSet 객체 생성🎜🎜그런 다음 StatefulSet 객체를 생성하여 MySQL 컨테이너의 구성 및 복제본 수를 정의합니다. 🎜rrreee🎜위 YAML 파일에서 mysql이라는 파일을 정의했습니다. code > 3개의 MySQL 컨테이너가 포함된 StatefulSet 객체입니다. 각 컨테이너에는 MySQL 데이터를 저장하기 위한 영구 볼륨이 있으며 ConfigMap에 저장된 MySQL 구성 파일을 마운트합니다. 🎜🎜헤드리스 서비스 생성🎜🎜다음으로 헤드리스 서비스를 생성해야 합니다. 이 서비스는 ClusterIP를 할당하지 않지만 여러 엔드포인트를 생성합니다. 각 엔드포인트는 포드의 IP 주소에 해당하며 포드에 직접 액세스하는 데 사용할 수 있습니다. : 🎜rrreee🎜마지막으로 MySQL 마스터-슬레이브 복제가 제대로 작동하는지 확인해야 합니다. kubectl 명령줄 도구를 사용하여 Kubernetes에 컨테이너를 입력하고 해당 명령을 실행합니다. 포드로 이동하여 MySQL 컨테이너의 마스터 노드에 연결하여 테이블을 생성하려면 다음 명령을 실행하면 됩니다. 🎜rrreee

위 내용은 Statefulset을 사용하여 Kubernetes에서 MySQL 클러스터를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제