pieter 2130a9a5d3
All checks were successful
Helm Chart Release / release-chart (push) Successful in 11s
定期バックアップ機能の追加
2026-02-06 23:21:32 +00:00
2025-11-20 07:17:19 +00:00

phpMyAdmin with nginx Helm Chart

このHelmチャートは、nginx をリバースプロキシとして使用する phpMyAdmin をKubernetes上にデプロイします。

機能

  • nginx (1.29.3-alpine-perl) + phpMyAdmin (5.2.3-fpm-alpine) のマルチコンテナ構成
  • 本番環境対応のセキュリティ設定
  • 自動バックアップ機能CronJob
    • 定期的なMySQLデータベースバックアップ
    • PVCまたは外部NFSへの保存対応
    • 圧縮・世代管理機能
  • Horizontal Pod Autoscaler (HPA) サポート
  • Pod Disruption Budget (PDB) による高可用性
  • Network Policy によるネットワーク分離
  • セッション永続化のための PersistentVolume サポート
  • Ingress サポート (TLS対応)
  • リソース制限の設定
  • Liveness/Readiness プローブ
  • Security Context による権限制御

前提条件

  • Kubernetes 1.19+
  • Helm 3.0+
  • MySQL/MariaDB サーバー

インストール

基本的なインストール

helm install phpmyadmin ./phpmyadmin-nginx

カスタム設定でのインストール

helm install phpmyadmin ./phpmyadmin-nginx \
  --set phpmyadmin.hosts[0].host=mysql.default.svc.cluster.local \
  --set phpmyadmin.hosts[0].port=3306 \
  --set ingress.enabled=true \
  --set ingress.hosts[0].host=phpmyadmin.example.com

values.yaml を使用したインストール

helm install phpmyadmin ./phpmyadmin-nginx -f custom-values.yaml

設定例

1. 複数のMySQLサーバーへの接続

phpmyadmin:
  hosts:
    - host: mysql-primary.default.svc.cluster.local
      port: 3306
    - host: mysql-secondary.default.svc.cluster.local
      port: 3306

2. Ingress の有効化 (TLS対応)

ingress:
  enabled: true
  className: nginx
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/rate-limit: "10"
  hosts:
    - host: phpmyadmin.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: phpmyadmin-tls
      hosts:
        - phpmyadmin.example.com

3. オートスケーリングの有効化

autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 80
  targetMemoryUtilizationPercentage: 80

4. Network Policy の有効化

networkPolicy:
  enabled: true
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
      - namespaceSelector:
          matchLabels:
            name: ingress-nginx
      ports:
      - protocol: TCP
        port: 8080
  egress:
    - to:
      - podSelector:
          matchLabels:
            app: mysql
      ports:
      - protocol: TCP
        port: 3306

5. セッション永続化

persistence:
  enabled: true
  storageClass: "standard"
  accessMode: ReadWriteMany
  size: 1Gi

6. 自動バックアップの有効化PVC使用

backup:
  enabled: true
  # 毎日午前2時にバックアップ
  schedule: "0 2 * * *"
  
  # MySQL接続情報はphpmyadmin.hostsから自動取得
  mysql:
    user: "backup_user"
    password: "your-backup-password"
  
  # 特定のデータベースのみバックアップ
  databases:
    - myapp_db
    - analytics_db
  
  # バックアップの圧縮
  compression:
    enabled: true
    level: 6
  
  # 30日以上古いバックアップを自動削除
  retention:
    enabled: true
    days: 30
  
  # PVCストレージ設定
  persistence:
    storageClass: "standard"
    accessMode: ReadWriteMany
    size: 50Gi

7. 自動バックアップの有効化NFS使用

backup:
  enabled: true
  schedule: "0 2 * * *"
  
  # MySQL接続情報はphpmyadmin.hostsから自動取得
  mysql:
    existingSecret: "mysql-backup-credentials"
  
  # NFSストレージ設定
  nfs:
    enabled: true
    server: "nfs-server.example.com"
    path: "/exports/mysql-backups"

8. 既存のSecretを使用したバックアップ

backup:
  enabled: true
  mysql:
    existingSecret: "mysql-backup-secret"
    userKey: "username"
    passwordKey: "password"

パラメータ

グローバル設定

パラメータ 説明 デフォルト値
replicaCount レプリカ数 2
image.nginx.registry nginx イメージレジストリ docker.io
image.nginx.repository nginx リポジトリ nginx
image.nginx.tag nginx イメージタグ 1.29.3-alpine-perl
image.phpmyadmin.registry phpMyAdmin イメージレジストリ docker.io
image.phpmyadmin.repository phpMyAdmin リポジトリ phpmyadmin
image.phpmyadmin.tag phpMyAdmin イメージタグ 5.2.3-fpm-alpine

サービス設定

パラメータ 説明 デフォルト値
service.type Serviceタイプ ClusterIP
service.port Serviceポート 80
service.targetPort ターゲットポート 8080

phpMyAdmin 設定

パラメータ 説明 デフォルト値
phpmyadmin.hosts[0].host MySQLホスト mysql.default.svc.cluster.local
phpmyadmin.hosts[0].port MySQLポート 3306
phpmyadmin.env.PMA_ARBITRARY 任意サーバー接続許可 "0"
phpmyadmin.env.UPLOAD_LIMIT アップロード制限 "128M"
phpmyadmin.env.MEMORY_LIMIT メモリ制限 "512M"
phpmyadmin.blowfishSecret Blowfish暗号化キー "" (自動生成)

リソース設定

パラメータ 説明 デフォルト値
resources.nginx.requests.cpu nginx CPU要求 100m
resources.nginx.requests.memory nginx メモリ要求 64Mi
resources.phpmyadmin.requests.cpu phpMyAdmin CPU要求 250m
resources.phpmyadmin.requests.memory phpMyAdmin メモリ要求 256Mi

バックアップ設定

パラメータ 説明 デフォルト値
backup.enabled バックアップ機能の有効化 false
backup.schedule Cronスケジュール "0 2 * * *"
backup.mysql.user MySQLバックアップユーザー ""
backup.mysql.password MySQLパスワード ""
backup.mysql.existingSecret 既存Secret使用 ""
backup.databases バックアップ対象DB空=全DB []
backup.compression.enabled 圧縮有効化 true
backup.compression.level 圧縮レベル (1-9) 6
backup.retention.enabled 世代管理有効化 true
backup.retention.days 保持日数 30
backup.persistence.size バックアップPVCサイズ 50Gi
backup.nfs.enabled NFS使用 false
backup.nfs.server NFSサーバー ""
backup.nfs.path NFSパス ""

注意: MySQL接続情報host、portphpmyadmin.hosts[0] から自動的に取得されます。

アンインストール

helm uninstall phpmyadmin

セキュリティに関する注意事項

  1. Blowfish Secret: 本番環境では必ず独自の blowfish secret を設定してください
  2. Network Policy: 本番環境では Network Policy を有効にしてアクセスを制限してください
  3. Ingress: 外部公開する場合は必ず TLS を有効にしてください
  4. 認証: phpMyAdmin への直接アクセスを制限し、VPN経由でのアクセスを推奨します

トラブルシューティング

Podが起動しない場合

kubectl describe pod -l app.kubernetes.io/name=phpmyadmin-nginx
kubectl logs -l app.kubernetes.io/name=phpmyadmin-nginx -c nginx
kubectl logs -l app.kubernetes.io/name=phpmyadmin-nginx -c phpmyadmin

MySQLに接続できない場合

  1. MySQLサーバーのホスト名とポートを確認
  2. Network Policyの設定を確認
  3. MySQLサーバーがリッスンしているか確認
kubectl exec -it <pod-name> -c phpmyadmin -- nc -zv mysql.default.svc.cluster.local 3306

バックアップジョブの確認

# CronJobの確認
kubectl get cronjob

# 実行されたJobの確認
kubectl get jobs -l app.kubernetes.io/component=backup

# バックアップジョブのログ確認
kubectl logs job/<job-name>

# バックアップファイルの確認PVC使用時
kubectl exec -it <backup-pod-name> -- ls -lh /backup/

# 手動でバックアップジョブを実行
kubectl create job --from=cronjob/<cronjob-name> manual-backup-$(date +%s)

バックアップの復元方法

# バックアップPodに接続
kubectl exec -it <pod-name> -c phpmyadmin -- /bin/bash

# バックアップファイルの確認
ls -lh /backup/

# 復元実行(例)
gunzip -c /backup/20241120/mydb_20241120_020001.sql.gz | \
  mysql -h mysql.default.svc.cluster.local -u root -p mydb

ライセンス

このHelmチャートはMITライセンスの下で公開されています。

サポート

問題が発生した場合は、GitHubのIssuesページで報告してください。

Description
Alpine based PHPmyAdmin
Readme 84 KiB
v5.2.3 Latest
2026-02-09 03:00:29 +00:00
Languages
Smarty 100%