2026年9月1日

2026年9月1日

WordPressのAKS(Azure Kubernetes Service)へのデプロイ

はじめに

ここでは、Azure Kubernetes Service (AKS) を使用して WordPress をデプロイする方法を紹介します。高度なスケーラビリティと可用性が要求される大規模なWordPressサイトやアプリケーションには特に適しています。

症状・背景

この記事が必要になる主な場面:

  • サイトのトラフィック増加によるパフォーマンス問題
  • クラスタリングやロードバランシングを必要とする高可用性要件
  • CI/CDパイプラインの統合
  • データベースとアプリケーションの分離

手順・設定方法

ステップ1: AKSクラスターの作成

# Azure CLI を使用して新しいクラスターを作成します。
az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 3 --enable-addons monitoring --generate-ssh-keys

ステップ2: Kubernetes ネームスペースとサービスアカウントの作成

# デプロイメント用にネームスペースを作成します。
kubectl create namespace wordpress

# WordPressのためのServiceAccountを生成します。
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: wordpress
  namespace: wordpress
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: wordpress-full-access
subjects:
- kind: ServiceAccount
  name: wordpress
  namespace: wordpress
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
EOF

ステップ3: MySQLのPersistentVolumeとPersistentVolumeClaimを設定

# MySQL用のPersistentVolumeとPersistentVolumeClaimを定義します。
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  namespace: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data
EOF

ステップ4: WordPressとMySQLのデプロイメントファイルを作成

# MySQLとWordPressのPodを定義します。
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
          - name: MYSQL_ROOT_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysql-credentials
                key: root-password
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: mysql-persistent-storage
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: wordpress
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wp-deployment
  namespace: wordpress
spec:
  replicas: 2
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - image: wordpress:latest
        name: wordpress
        env:
          - name: WORDPRESS_DB_HOST
            value: mysql:3306
          - name: WORDPRESS_DB_USER
            valueFrom:
              secretKeyRef:
                name: wp-credentials
                key: user
          - name: WORDPRESS_DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: wp-credentials
                key: password
        ports:
        - containerPort: 80
EOF

ステップ5: WordPressのロードバランサーサービスを作成

# ロードバランサーとして外部にアクセス可能なWordPressサービスを定義します。
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
  name: wordpress-loadbalancer
  namespace: wordpress
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: wordpress
EOF

注意事項

  • デプロイメントの前に、必ずKubernetesクラスターが正常に動作していることを確認してください。
  • MySQLのPersistentVolumeClaimとPersistentVolumeはテスト環境でのみ使用可能です。生産環境ではネットワークディスクを使用することを検討してください。
  • WordPressとMySQL用のSecretsファイルを作成し、それらを適切な場所に配置します。

まとめ

1. AKSクラスターの作成: AKSクラスターはAzure CLIを使用して迅速に作成できます。

2. ネームスペースとServiceAccountの設定: Kubernetesのリソース隔離とアクセス制御のために、必要なネームスペースとServiceAccountを事前に準備します。

3. PersistentVolumeの設定: MySQLデータベース用に永続的なストレージを確保し、その上でPersistentVolumeClaimを作成します。

4. MySQLとWordPressのデプロイメント: データベースとアプリケーションのPodは、定義された環境変数を使用して実行されます。

5. ロードバランサーサービスの作成: WordPressサービスを外部からアクセス可能にするために、LoadBalancerタイプのKubernetes Serviceを作成します。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ