Files
phpmyadmin/README.md
pieter c17fbc9fd4
Some checks failed
Helm Chart Release / release-chart (push) Failing after 10s
定期バックアップ機能の追加
2026-02-06 23:11:49 +00:00

331 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 サーバー
## インストール
### 基本的なインストール
```bash
helm install phpmyadmin ./phpmyadmin-nginx
```
### カスタム設定でのインストール
```bash
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 を使用したインストール
```bash
helm install phpmyadmin ./phpmyadmin-nginx -f custom-values.yaml
```
## 設定例
### 1. 複数のMySQLサーバーへの接続
```yaml
phpmyadmin:
hosts:
- host: mysql-primary.default.svc.cluster.local
port: 3306
- host: mysql-secondary.default.svc.cluster.local
port: 3306
```
### 2. Ingress の有効化 (TLS対応)
```yaml
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. オートスケーリングの有効化
```yaml
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 80
targetMemoryUtilizationPercentage: 80
```
### 4. Network Policy の有効化
```yaml
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. セッション永続化
```yaml
persistence:
enabled: true
storageClass: "standard"
accessMode: ReadWriteMany
size: 1Gi
```
### 6. 自動バックアップの有効化PVC使用
```yaml
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使用
```yaml
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を使用したバックアップ
```yaml
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、port`phpmyadmin.hosts[0]` から自動的に取得されます。
## アンインストール
```bash
helm uninstall phpmyadmin
```
## セキュリティに関する注意事項
1. **Blowfish Secret**: 本番環境では必ず独自の blowfish secret を設定してください
2. **Network Policy**: 本番環境では Network Policy を有効にしてアクセスを制限してください
3. **Ingress**: 外部公開する場合は必ず TLS を有効にしてください
4. **認証**: phpMyAdmin への直接アクセスを制限し、VPN経由でのアクセスを推奨します
## トラブルシューティング
### Podが起動しない場合
```bash
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サーバーがリッスンしているか確認
```bash
kubectl exec -it <pod-name> -c phpmyadmin -- nc -zv mysql.default.svc.cluster.local 3306
```
### バックアップジョブの確認
```bash
# 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)
```
### バックアップの復元方法
```bash
# バックアップ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ページで報告してください。