コンテンツにスキップ

MySQL デプロイ

概要

MySQL は最も広く使われているリレーショナルデータベース管理システムであり、WEB アプリケーションにおいては最適な RDBMS(Relational Database Management System:リレーショナルデータベース管理システム)の一つです。

前提条件

  • Kubernetes クラスターがデプロイ済みであること。未デプロイの場合は Kubernetes デプロイ を参照してください。
  • nfs-subdir-external-provisioner がデプロイ済みであること。未デプロイの場合は Kubernetes Storage を参照してください。

基本情報と互換性

名称 説明
MySQL バージョン 8.0
対応クラスター 1.18+
オフラインインストール対応 はい
対応アーキテクチャ amd64/arm64

デフォルト設定

デフォルトアドレス mysql.middleware
デフォルトポート 3306
デフォルトアカウント root/rootPassw0rd

インストール

注意

管理者アカウントを作成してください(管理者アカウントである必要があります。後続のインストール初期化でこのアカウントを使用して各アプリケーション DB を作成、初期化します。リモート接続が必要な場合は、ご自身で有効化してください)。

デプロイが成功しない場合は、Docker を使用して mysql をデプロイする方法で行ってください。

ハイライト部分の storageClassName は実際の状況に応じて設定してください。

MySQL の管理者アカウントは必ず変更してください。

mysql.yaml を保存し、デプロイします。

mysql.yaml(クリックして展開)
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    volume.beta.kubernetes.io/storage-provisioner: "kubernetes.io/nfs"
  #  volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
  name: mysql-data
  namespace: middleware
spec:
  accessModes:
  - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 10Gi
  storageClassName:  standard-nfs-storage ## 実際に存在する StorageClass を指定してください #


---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: middleware
  labels:
    app: mysql
data:
  mysqld.cnf: |-
        [mysqld]
        pid-file        = /var/run/mysqld/mysqld.pid
        socket          = /var/run/mysqld/mysqld.sock
        datadir         = /var/lib/mysql
        symbolic-links=0
        max_connections=5000



---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
  namespace: middleware
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: mysql
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - env:
        - name: MYSQL_ROOT_PASSWORD
          value: rootPassw0rd
        - name: MYSQL_DATABASE
          value: FT2.0
        - name: MYSQL_USER
          value: admin
        - name: MYSQL_PASSWORD
          value: admin@123
        image: pubrepo.guance.com/googleimages/mysql:8.0
        imagePullPolicy: IfNotPresent
        name: mysql
        resources:
           limits:
             cpu: '4'
             memory: 4Gi
           requests:
             cpu: 100m
             memory: 512Mi
        ports:
        - containerPort: 3306
          name: dbport
          protocol: TCP
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: db
          subPath: data
        - mountPath: /etc/mysql/conf.d/mysqld.cnf
          name: config
          subPath: mysqld.cnf
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}

      terminationGracePeriodSeconds: 30
      volumes:
      - name: db
        persistentVolumeClaim:
          claimName: mysql-data
      - name: config
        configMap:
          name: mysql-config
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: middleware
spec:
  ports:
  - name: mysqlport
    nodePort: 32306
    port: 3306
    protocol: TCP
    targetPort: dbport
  selector:
    app: mysql
  sessionAffinity: None
  type: NodePort

次のコマンドを実行してインストールします。

kubectl create namespace middleware
kubectl apply -f mysql.yaml

デプロイの確認

  • Pod の状態を確認します。
kubectl get pods -n middleware | grep mysql

アンインストール方法

kubectl delete -f mysql.yaml

フィードバック

このページは役に立ちましたか?