はじめに
世界で最も人気のあるコンテンツ管理システムとして、WordPressはコンテンツの量とWebトラフィックの両方の点でさまざまなサイズのWebサイトを運営しています。 WordPressをKubernetesにデプロイすることは、ウェブサイトの水平スケーリングを可能にし、ウェブサイトのトラフィックの急増にうまく対処するための効率的な方法です。
このチュートリアルでは、WordPressをKubernetesにデプロイする2つの方法、つまりHelmチャートを使用する方法と、デプロイメントを最初から作成する方法について説明します。
前提条件
- kubectlを使用したKubernetesクラスター
- ヘルム3
- システムの管理者権限
ヘルムチャートを使用してKubernetesにWordPressをデプロイする
ヘルムチャートには、いくつかの簡単なコマンドで展開できる事前構成済みのアプリインストールが付属しています。
- デプロイするWordPressHelmチャートを含むリポジトリを追加します:
helm repo add [repo-name] [repo-address]
システムは、リポジトリが正常に追加されたことを確認します。この例では、Bitnamiチャートを使用しています。
2.ローカルHelmリポジトリを更新します:
helm repo update
3.helminstallコマンドを使用してチャートをインストールします。
helm install [release-name] [repo-address]
チャートが展開されるのを待ちます。
4. WordPressサービスは、サービスを公開する方法としてLoadBalancerを使用します。 minikubeを使用している場合は、別のターミナルウィンドウを開き、次のコマンドを入力してLoadBalancerをエミュレートします。
minikube tunnel
5.minikubeが実行中を表示したとき ステータス、ウィンドウを最小化して前のウィンドウに戻ります。
6.次のように入力して、展開の準備ができていることを確認します。
kubectl get all
このコマンドは、ポッド、サービス、およびデプロイメントのステータスを一覧表示して表示します。
7.ポッドとデプロイメントの準備ができたら、次のコマンドを使用して SERVICE_IP
をエクスポートします。 環境変数:
export SERVICE_IP=$(kubectl get svc --namespace default wp-test-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
8.次に、echoコマンドを使用して、サービスのIPアドレスを表示します。
echo "WordPress URL: http://$SERVICE_IP/"
9.ブラウザのアドレスバーにアドレスを入力します。 WordPressのインストールが開始されます。
永続的なボリュームを持つKubernetesへのWordPressのデプロイ
カスタム構成を使用してWordPressをデプロイする場合は、WordPress用の一連のYAMLファイルと、アプリが使用するデータベースを作成する必要があります。以下の例ではMySQLを使用していますが、MariaDBを選択することもできます。
1.テキストエディタを使用してYAMLファイルを作成し、MySQLデータベースのストレージをプロビジョニングします。
nano mysql-storage.yaml
このファイルは、永続ストレージボリューム(PV)を定義し、PersistentVolumeClaim(PVC)を使用したストレージを要求します。この例では、次の構成を使用しています。
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
ファイルを保存して終了します。
2.MySQLデプロイメント構成YAMLを作成します。
nano mysql-deployment.yaml
デプロイメントファイルには、コンテナイメージとストレージに関連するデータが含まれています。 claimName
下部の宣言は、ステップ1で作成したPVCの名前に対応している必要があります 。
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
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
ファイルを保存して終了します。
3.データベースのサービス構成YAMLを作成します。
nano mysql-service.yaml
このファイルは、WordPressがサービスに接続するために使用するポートを指定します:
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
ファイルを保存して終了します。
4.ここで、WordPress自体に同じYAMLファイルを作成します。ストレージの割り当てから始めます:
nano wordpress-storage.yaml
この例では、次の構成を使用しています。
apiVersion: v1
kind: PersistentVolume
metadata:
name: wp-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
ファイルを保存して終了します。
5.デプロイメントファイルを作成します:
nano wordpress-deployment.yaml
このファイルはDockerイメージを提供し、WordPressデプロイメントをPVCに接続します:
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:5.8-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim
ファイルを保存して終了します。
6.サービスYAMLを作成します:
nano wordpress-service.yaml
この例では、LoadBalancerを使用してサービスを公開しています:
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
type: LoadBalancer
ファイルを保存して終了します。
7.構成を簡単に適用するために使用されるkustomization.yamlファイルを作成します。
nano kustomization.yaml
ファイルには2つの部分が含まれています:
-
secretGenerator
ログイン情報をコンテナに渡すKubernetesシークレットを生成します。 resources
セクションには、構成に参加するすべてのファイルがリストされています。前の手順で作成したファイルを一覧表示します。
secretGenerator:
- name: mysql-pass
literals:
- password=test123
resources:
- mysql-storage.yaml
- mysql-deployment.yaml
- mysql-service.yaml
- wordpress-storage.yaml
- wordpress-deployment.yaml
- wordpress-service.yaml
ファイルを保存して終了します。
8. kustomization.yamlにリストされているファイルを適用します 次のコマンドを使用します:
kubectl apply -k ./
システムは、シークレット、サービス、PV、PVC、およびデプロイメントが正常に作成されたことを確認します。
9.ポッドと展開の準備ができているかどうかを確認します。
kubectl get all
10. minikubeを使用している場合は、別のターミナルウィンドウを開いて、minikubeトンネルを開始します。 負荷分散エミュレーションを提供するには:
minikube tunnel
エミュレーションが実行されたら、ウィンドウを最小化して前のウィンドウに戻ります。
11.次のコマンドを入力して、デプロイされたWordPressインスタンスへのアクセスに使用するサービスURLを公開します。
minikube service wordpress-service --url
URLはコマンド出力として表示されます:
12. URLをコピーして、Webブラウザに貼り付けます。 WordPressのインストールが開始されます。