1. HOME
  2. ブログ
  3. BLOG
  4. kubernetesでwordpress環境を構築する

BLOG

BLOG

kubernetesでwordpress環境を構築する

以前の
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を指定

サービスを確認する。

http://localhost/

wp-login.png

  • コメント ( 0 )

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

関連記事