GNU/Linux >> Linux の 問題 >  >> Linux

MySQLをKubernetesにデプロイする{ガイド}

はじめに

コンテナ化された環境に機能データベースをデプロイすることは、困難な作業になる可能性があります。その理由は、データベースの可用性、状態、および冗長性を維持する上でデータベースが存在する一連の特定の課題にあります。ただし、多くの開発者は、Kubernetesなどのプラットフォームが提供するのと同じ高速展開と自動化の原則に基づいてアプリケーションスタックとデータレイヤーを整理することを好みます。

この記事では、永続ボリュームを使用してMySQLデータベースインスタンスをKubernetesにデプロイする方法を説明します。この機能により、ステートフルアプリはK8sポッドに固有の一時性を克服できます。

前提条件

  • kubectlがインストールされたKubernetesクラスター
  • システムへの管理アクセス

KubernetesでのMySQLのデプロイ

MySQLインスタンスをKubernetesに正常にデプロイするには、次のKubernetesオブジェクトを定義するために使用する一連のYAMLファイルを作成します。

  • データベースパスワードを保存するためのKubernetesシークレット。
  • データベースにストレージスペースを割り当てるための永続ボリューム(PV)。
  • 展開のPVを要求する永続ボリューム要求(PVC)。
  • 展開自体。
  • Kubernetesサービス。

ステップ1:Kubernetesシークレットを作成する

Nanoなどのテキストエディタを使用して、シークレットファイルを作成します。

nano mysql-secret.yaml

ファイルは秘密を定義します。ルートMySQLアカウントのパスワードをstringDataに入力します YAMLのセクション。

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: kubernetes.io/basic-auth
stringData:
  password: test1234

ファイルを保存して終了します。 kubectlを使用して、変更をクラスターに適用します。

kubectl apply -f mysql-secret.yaml

システムは、シークレットの作成が成功したことを確認します:

ステップ2:永続的なボリュームとボリュームクレームを作成する

ストレージ構成ファイルを作成します:

nano mysql-storage.yaml

このファイルは2つの部分で構成されています:

  • 最初の部分は永続ボリュームを定義します。 spec.capacity.storageで割り当てられたストレージの量をカスタマイズします spec.hostPath ボリュームのマウントポイントを指定します。
  • ファイルの2番目の部分はPVCを定義します。
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

ファイルを保存して終了します。

次に、 kubectlを使用してストレージ構成を適用します

kubectl apply -f mysql-storage.yaml

システムはPVとPVCの作成を確認します。

ステップ3:MySQLデプロイメントを作成する

  1. デプロイメントファイルを作成します。デプロイメントファイルは、MySQLデプロイメントが使用するリソースを定義します。
nano mysql-deployment.yaml

2. spec.template.spec.containers セクションで、MySQLイメージを指定します:

containers:
- image: mysql:5.6
  name: mysql

3. MYSQL_ROOT_PASSWORDの値を割り当てます ステップ1からシークレットで指定したパスワードに対する環境変数 。

env:
- name: MYSQL_ROOT_PASSWORD
  valueFrom:
    secretKeyRef:
      name: mysql-secret
      key: password

4.ステップ2からPVCを接続します 展開に。

volumes:
- name: mysql-persistent-storage
  persistentVolumeClaim:
    claimName: mysql-pv-claim

5.ファイルの別のセクションで、サービス名とポートを定義します。

YAML全体は次の例のようになります:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql

ファイルを保存して終了します。 kubectlを使用してファイルを適用することにより、デプロイメントを作成します

kubectl apply -f mysql-deployment.yaml

システムは、デプロイメントとサービスの両方が正常に作成されたことを確認します。

MySQLインスタンスにアクセスする

MySQLインスタンスにアクセスするには、デプロイメントによって作成されたポッドにアクセスします。

  1. ポッドを一覧表示します:
kubectl get pod

2. MySQLポッドを見つけ、それを選択して Ctrl + Shift + C を押して、その名前をコピーします。 :

3.次のコマンドを実行して、ポッドのシェルを取得します。

kubectl exec --stdin --tty mysql-694d95668d-w7lv5 -- /bin/bash

ポッドシェルがメインシェルに置き換わります:

4.次のコマンドを入力して、MySQLシェルにアクセスします。

mysql -p

5.プロンプトが表示されたら、Kubernetesシークレットで定義したパスワードを入力します。

MySQLシェルが表示されます。

MySQLデプロイメントを更新する

関連するYAMLファイルを編集して、デプロイの任意の部分を更新します。次のコマンドで変更を適用します:

kubectl apply -f [filename]

ただし、次の2つの制限に注意してください。

  • この特定のデプロイメントは、単一インスタンス用です MySQLの展開。これは、デプロイメントをスケーリングできないことを意味します。つまり、1つのポッドでのみ機能します。
  • この展開はローリングアップデートをサポートしていません。したがって、 spec.strategy.type 常に再作成に設定する必要があります 。

MySQLインスタンスを削除する

デプロイメント全体を削除する場合は、 kubectlを使用します 関連する各Kubernetesオブジェクトを削除するには:

kubectl delete deployment,svc mysql
kubectl delete pvc mysql-pv-claim
kubectl delete pv mysql-pv-volume
kubectl delete secret mysql-secret

この一連のコマンドは、展開、サービス、PV、PVC、および作成したシークレットを削除します。システムは削除が成功したことを確認します:


Linux
  1. LinuxにMariaDBまたはMySQLをインストールする

  2. Kubernetesデプロイメントを削除する方法[K8sのクイックヒント]

  3. Kubernetesでサービスを削除する方法

  1. MySQLデプロイメントFAQ

  2. MySQLイベントスケジューラ

  3. MySQL バックアップ 1.1

  1. Kubernetesでカナリアをデプロイする方法

  2. MySQLInnoDBデータベースの修復

  3. mysql データベースの回復 - mysql/mysqldump がテーブル <database>.<tablename> を指定します (1146)