3
0

More than 5 years have passed since last update.

kubernetesでwordpress環境を構築する

Posted at

以前の
apacheとphpの環境をkubernetesで構築する
からの続きです。

ディレクトリ構成

$ workspace .
├── app
|   └── wordpressのパッケージ
└── docker
    ├── db
    │   ├── create_schema.sql(新規)
    │   └── Dockerfile(新規)
    ├── apache-php
    │   ├── vhost.conf
    │   └── Dockerfile
    ├── templates
    |   ├── mysql-deploy.yaml(新規)
    |   ├── mysql-pv.yaml(新規)
    |   ├── mysql-pvc-claim.yaml(新規)
    |   ├── mysql-service.yaml(新規)
    |   ├── secret.yaml(新規)
    |   ├── strageclass.yaml(新規)
    |   └── main.yaml
    └── skaffold.yaml

StorageClass

ストレージの種類を示すオブジェクト

kubernetes.io/gce-pd
kubernetes.io/aws-ebs
kubernetes.io/glusterfs

など

  • Provisioner

    • クラウド環境のAPIを呼び出すなどして動的にPersistentVolumeの準備を行う仕組み。
  • Dynamic Provisioningとは

    • Persistent Volume Claimを作成した際に、自動的にPersistent Volumeが作成され、またPVCを削除した際にも自動的にPVが削除されるようになります

PersistentVolumeとは

永続化領域として確保されるVolume

PersistentVolumeClaimとは

永続化領域の要求を行うリソースで、前述のPersistentVolumeは、PersistentVolumeClaim経由で利用する形になります。

pv-fig.jpg

Database作成用のスキーマを準備

create_schema.sql
create database `wordpress`;
use `wordpress`;

MySQLのDockerを準備

MySQLのDockerfileを作成

FROM mysql:5.7.22
COPY ./create_schema.sql /docker-entrypoint-initdb.d/

mysqlのmanifestを作成

mysql-service.yaml
apiVersion: v1
kind: Service # リソースの種類
metadata:
  name: mysql # Serviceリソース名
  labels:
    app: dev # Serviceリソースmのラベル名
spec:
  ports:
    - port: 3306 # ServiceのPort
  selector:
    app: dev
    tier: db
  type: NodePort
mysql-deploy.yaml
apiVersion: apps/v1beta2
kind: Deployment # リソースの種類
metadata:
  name: mysql # Deploymentリソース名
  labels:
    app: dev # Deploymentリソースのラベル名
spec:
  selector:
    matchLabels: # 等価比較
      app: dev # app=devのpodを指定
      tier: db # tire=dbのpodを指定
  strategy: # Podを置き換えるときの戦略
    type: Recreate #一度すべてのPodを削除してから新たなPodを起動
  template: # Pod Templateを指定
    metadata:
      labels:
        app: dev
        tier: db
    spec:
      containers:
      - image: k8sdemo/db:latest # コンテナイメージ
        name: mysql # コンテナ名
        env: # 環境
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef: # 環境変数としてSeacretを取り込む
              name: mysql-secret # 環境変数として取り込みたい secret の名前
              key: rootPassword  # 環境変数として取り込みたい値の名前、この場合 rootPassword
        ports:
        - containerPort: 3306 # ContainerのPort番号
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql # Pod内のmount位置
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pvc-claim

mysqlのパスワード情報を管理するmanifestを作成

secret.yaml
apiVersion: v1
kind: Secret # リソースの種類
metadata:
  name: mysql-secret # リソース名
type: Opaque # 通常のパスワード管理で指定するtype
data:
  rootPassword: c29waGlhd2ViZGV2 # password(Base64エンコード)

mysqlのストレージ情報を管理するmanifestを作成

strageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass # リソースの種類
metadata:
  name: ss-db # リソース名
provisioner: kubernetes.io/no-provisioner # Dynamic Provisioningが非サポートとのため、kubernetes.io/no-provisionerを指定
mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume # リソースの種類
metadata:
  name: demo-local-pv # PersistentVolumeリソース名
  labels:
    type: local # Docker for macを使用しているためlocalを指定
spec:
  storageClassName: ss-db # storageClassを指定
  capacity:
    storage: 20Gi # strage容量
  accessModes:
    - ReadWriteOnce # 単一Nodeで読み書きが可能
  hostPath:
    path: "/Users/ytada/Documents/k8sdemo/docker/db/data" # ローカルPCの適当なパスを指定
mysql-pvc-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim # リソースの種類
metadata:
  name: mysql-pvc-claim # リソース名
  labels:
    app: dev
spec:
  storageClassName: ss-db # 使用するStrageClass
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

skaffoldを編集してクラスタにデプロイ

skaffold.yaml
apiVersion: skaffold/v1alpha2
kind: Config
build:
  tagPolicy:
    sha256: {} #コンテナのTagをハッシュ
  artifacts:
  - imageName: k8sdemo/php-apache # apache-phpのコンテナ
    workspace: ./docker/apache-php # apache-phpのworkSpace
  - imageName: k8sdemo/db # dbのコンテナ
    workspace: ./docker/db # dbのworkSpace
  local:
deploy:
  kubectl:
    manifests: # 監視対象のyamlファイルを指定
      - ./templates/main.yaml
      - ./templates/mysql-deploy.yaml
      - ./templates/mysql-pv.yaml
      - ./templates/mysql-pvc-claim.yaml
      - ./templates/mysql-service.yaml
      - ./templates/secret.yaml
      - ./templates/strageclass.yaml

※skaffoldについては「開発環境のkubernetesにskaffoldを使って自動デプロイ」を参照ください。

WordPressをインストール

  1. WordPressをダウンロード
  2. ダウンロードしたファイルをapp/ディレクトリに格納
  3. wp-config.sample.phpをwp-config.phpにリネーム
  4. 各環境の設定を変更
    • DB_NAME:wordpress
    • DB_USER:root
    • DB_PASSWORD:password
    • DB_HOST:mysqlpodのIPを指定

サービスを確認する。

wp-login.png

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0