その1、その2、その3 とやってきて、ようやくEC-CUBEをインストールするところにたどりつきました。
Kubernetes な環境に EC-CUBE3 をインストール
インストールに利用する EC-CUBEは 3.0.15 になります。
ここからは楽勝ですね。
いままで作ってきたものを全て起動させた状態にします。
WEBサーバー側で、マウントしているホストのディレクトリに、EC-CUBE3 のソースを配置します。
そして、ポート指定して localhostにアクセスすれば、ようこそページが表示されました。
流れにそって進んでいきます。
EC-CUBEをインストールするには、事前にDBを作成しておく必要があるので、GUI等にてアクセスを行って、事前に作成しておきます。
接続情報の設定
データベースの種類で、 MySQLを選択
データベースのホスト名に、mysql-server を設定
データベース名は、事前に作成したもの
ユーザ名は root
パスワードは 「その2」の先に作成したものです。
・・・ インストール中 ・・・
無事インストールできました!!
PODを増やして 複数台っぽくしてみる
EC-CUBE3のインストールに成功しましたので、Kubernetes っぽく PODの数を増やしてみたいと思います。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mycentos7
labels:
app: mycentos7
spec:
replicas: 2
selector:
matchLabels:
app: mycentos7
template:
metadata:
labels:
app: mycentos7
spec:
containers:
- name: mycentos7
image: localhost:5000/web/mycentos7:2
ports:
- containerPort: 80
volumeMounts:
- mountPath: /var/www
name: docroot
volumes:
- name: docroot
persistentVolumeClaim:
claimName: centos7-volume-claims
replicas を 指定してあげることにより、PODを増やすことができます。
デプロイします。
kubectl apply -f centos7.yml
確認してみます。
NAME READY STATUS RESTARTS AGE mycentos7-884464574-m5952 1/1 Running 0 58s mycentos7-884464574-qb99x 1/1 Running 0 14h mysql-server-5b9788cc57-2wvmq 1/1 Running 0 18h
増えました。
どっちの POD も Volume が共通で、ホストのものをみているので、複数台状態でも一応動きました。
(※EC-CUBEは複数台構成で動くことが想定されていません)
速度てきな問題への対応
ここまで動かしてみると重大な問題があることがわかりました。
それは、動作が遅いということです。
Docker For Mac でホスト側をマウントして普通に動かした場合も同様に遅いので、ある程度は想定しておりましたが、やはり遅いみたいです。
ぱっと思いつく問題点は、Volume 周りかなと思いますので、確認していみたいと思います。
Docker Image にパックしてみる
ソースコード全体についてホスト側をマウントしているようにしていましたが、イメージ内にパックしてみます完全に全体をイメージに入れてしまうと、ログとかキャッシュ用にファイルを作成する部分がエラーになるので、app の配下だけはホスト側のディレクトリをマウントするようにしました。
結果は、
ソースコード全体をマウントした場合
TOP画面 ・・・ 平均 5.15秒
商品一覧 ・・・ 平均 4.86秒
一部のみマウントした状態
TOP画面 ・・・ 平均 1.34秒
商品一覧 ・・・ 平均 1.04秒
早くなりました!
ファイルが分かれて個別に作成するのが面倒な問題に対応
設定ファイルを個別に作成してきましたが、個別に create するのが面倒になってきましたので、1ファイルにまとめたいと思います。
と言ってもまとめるのは簡単です。
それぞれの設定ファイルを一箇所に集めて、「---」で区切るだけです。
(ついでに全体、ソースをはる)
# Volume
apiVersion: v1
kind: PersistentVolume
metadata:
name: centos7-volume
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: centos7-storage
hostPath:
path: /ホスト側フルパス
---
# Volume Caims
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: centos7-volume-claims
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: centos7-storage
---
# deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: mycentos7
labels:
app: mycentos7
spec:
replicas: 1
selector:
matchLabels:
app: mycentos7
template:
metadata:
labels:
app: mycentos7
spec:
containers:
- name: mycentos7
image: localhost:5000/web/mycentos7:3
ports:
- containerPort: 80
volumeMounts:
- mountPath: /var/www/app
name: docroot
volumes:
- name: docroot
persistentVolumeClaim:
claimName: centos7-volume-claims
---
# Service
apiVersion: v1
kind: Service
metadata:
name: mycentos7
labels:
app: mycentos7
spec:
ports:
- port: 80
nodePort: 31000
selector:
app: mycentos7
type: NodePort
毎回アクセスするポートが変わるのも面倒だったので、こっそり固定にしてます。
# Secret
apiVersion: v1
kind: Secret
metadata:
name: mysql-pass
type: Opaque
data:
password: XXXXX # echo -n "pass" | base64 # base64した値を設定
---
# Volume
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-volume
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mysql-storage
hostPath:
path: /ホスト側のフルパス
---
# Volume Claims
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-volume-claims
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: mysql-storage
---
# Deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-server
labels:
app: mysql-server
spec:
selector:
matchLabels:
app: mysql-server
template:
metadata:
labels:
app: mysql-server
spec:
containers:
- name: mysql-server
image: mysql:5.6
ports:
- containerPort: 3306
volumeMounts:
- mountPath: /var/lib/mysql
name: mysql-storage
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-volume-claims
---
# Service 外部用
apiVersion: v1
kind: Service
metadata:
name: mysql-server-open
labels:
app: mysql-server
spec:
ports:
- port: 3306
nodePort: 31001
selector:
app: mysql-server
type: NodePort
---
#Service 内部用
apiVersion: v1
kind: Service
metadata:
name: mysql-server
labels:
app: mysql-server
spec:
ports:
- port: 3306
selector:
app: mysql-server
clusterIP: None
Secret 部分のパスワードは、パスワードをbase64した値を設定します。
ということで、 Docker For Mac で Kubernetesを試しながらEC-CUBEをインストールするところまでできました。
よくわからないまま進んできましたが、Kubernetes の情報がのっているページ(GKEのドキュメントとか)の内容がなんとなく理解できるようになったのは収穫だったかなとおもっています。
その4は切りが悪いので、その5を書こうかなと思いつつ、以上、Docker For Mac で Kubernetes を試してEC-CUBEを動かしてみる(その4)でした。






