2018年2月13日火曜日

Docker For Mac で Kubernetes を試してEC-CUBEを動かしてみる(その3)

SYSTEM_KDです。


その1その2 とアプリ側の環境を整えてきましたが、今回はDB側を準備していきたいと思います。


Volume は 前回と同じくホスト側をマウントするようにして、サンプルでものっているMySQLの環境を作りたいと思います。


では早速。


MySQL(単品)用のVolumeを用意する


前回、ドキュメントルートにマウントする Volume を用意した時と同様に、「PersistentVolume」と「PersistentVolumeClaims」を用意します。

内容は、前回とほぼ同じです。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-volume
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: mysql-storage
  hostPath:
    path: /ホストのパスフルパスで指定


作成します。

kubectl create -f mysql-volume.yml


確認してみます。

kubectl get pv


NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                           STORAGECLASS      REASON    AGE
centos7-volume   1Gi        RWO            Retain           Bound       default/centos7-volume-claims   centos7-storage             15h
mysql-volume     5Gi        RWO            Retain           Available                                   mysql-storage               2s


mysql-volume が追加されています。

サイズを少し大きくしてみましたが、上手くできたようです。


次、PersistentVolumeClaims を用意します。


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-volume-claims
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: mysql-storage


作成します。

kubectl create -f mysql-volume-climes.yml


確認してみます。

kubectl get pvc


NAME                    STATUS    VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS      AGE
centos7-volume-claims   Bound     centos7-volume   1Gi        RWO            centos7-storage   15h
mysql-volume-claims     Bound     mysql-volume     5Gi        RWO            mysql-storage     3s


mysql-volume-climes が追加されています。

こちらも上手くできたようです。



MySQL(単品)を用意する


ここまでは、前回と同じなのですんなり進みました。

次は、MySQL部分です。


Docker 開発環境では、5.6を利用しているので、MySQL 5.6環境を用意したいと思います。
(まぁ、イメージをもってくるだけですが)


さっそくYAMLファイルを用意しようと思いましたが、ドキュメントをみてみると、パスワードを格納しておくためのオブジェクトを先に生成しておく必要があるようです。


kubectl create secret generic mysql-pass --from-literal=password=YOUR_PASSWORD

YOUR_PASSWORDを実際のパスワードを設定するみたいです。

とりあえず、言われるがままに作成してみます。

確認は、 kubectl get secret で行えるようです。

NAME                  TYPE                                  DATA      AGE
default-token-9k2rv   kubernetes.io/service-account-token   3         1d
mysql-pass            Opaque                                1         5s

とりあえず作成できたみたいです。


では、YAMLファイルの用意に移ります。


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


前回作成した、WEBサーバー用のYAMLをベースに MySQL用に書き換えていきました。


基本的には、docker-compose で MySQL用意するときと同じ感じですが、パスワードの部分が作成した secret と連動させるといった雰囲気かな・・(うーんよく分かってない)


とりあえず、実行して、結果確認。

apply , get は割愛


NAME                            READY     STATUS    RESTARTS   AGE
mycentos7-c775ff877-7wc6c       1/1       Running   0          15h
mysql-server-5b9788cc57-2wvmq   1/1       Running   0          0s


とりあえず、上手く作成できたようなので、OK.


次は、サービスの用意です。


MySQL 用のサービスを用意する


WEBサーバー用の、サービスをコピーして作成しようかと思ったのですが、きっと外からは見えないような設定にしないといけないですよね。

(開発環境としてはGUIからつなぎたいので、それで良いのですが)


とりあえず、アクセスできるか手っ取り早く確認したいので、まずは前回と同じ方法で作成してみたいと思います。


※この時点で、マウントされているホスト側のディレクトリには MySQL のデータが入ってますので、動いてはいそうです。


<見れる版>
apiVersion: v1
kind: Service
metadata:
  name: mysql-server
  labels:
    app: mysql-server
spec:
  ports:
    - port: 3306
  selector:
    app: mysql-server
  type: NodePort


create, get してみます。
 
NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes     ClusterIP   10.96.0.1        <none>        443/TCP          1d
mycentos7      NodePort    10.109.140.222   <none>        80:30462/TCP     1d
mysql-server   NodePort    10.101.181.26    <none>        3306:32637/TCP   0s


確認したポートで、MySQLにアクセスしてみると、無事アクセスできました。

上手くいったみたいです。


開発環境としては、この状態が楽そうですが、外から見れない版を試してみたいと思います。

まず、作成したサービスを削除しておきます。

kubectl delete -f mysql-service.yml


<見れない版>

apiVersion: v1
kind: Service
metadata:
  name: mysql-server
  labels:
    app: mysql-server
spec:
  ports:
    - port: 3306
  selector:
    app: mysql-server
  clusterIP: None



ドキュメントにあるサンプルに従って、clusterIP に None をセットしましたが、よくわかっておりません。
Headless services が作成できるとありましたが、、現状ではギブアップです・・^^;

(見れない版だと、 mysql-server で参照できそうでした)


とりあえず、MySQLの用意ができました。



MySQL 用のサービスをもう少しさわってみる


サービスを2パターンためして、内部的につなぎやすいものと外からアクセスしやすいものができましたが、せっかくなのでもう少しさわってみて両方使えるようにしたいと思います。


ということで、外から見れる版の設定を調整します。


apiVersion: v1
kind: Service
metadata:
  name: mysql-server-open
  labels:
    app: mysql-server
spec:
  ports:
    - port: 3306
  selector:
    app: mysql-server 
  type: NodePort


調整といっても、 name を変えただけです ^^;

これで、作成してあげれば


NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes          ClusterIP   10.96.0.1        <none>        443/TCP          1d
mycentos7           NodePort    10.109.140.222   <none>        80:30462/TCP     1d
mysql-server        ClusterIP   None             <none>        3306/TCP         37m
mysql-server-open   NodePort    10.108.82.64     <none>        3306:31342/TCP   9m


もう一個サービスが追加されます。


Endpoints (kubectl get endpoints)をみてみると、

NAME                ENDPOINTS           AGE
kubernetes          192.168.65.3:6443   1d
mycentos7           10.1.0.15:80        1d
mysql-server        10.1.0.16:3306      40m
mysql-server-open   10.1.0.16:3306      12m

外からも内側からもつなげそうな雰囲気です。


WEB側のコンテナに docker exec -it xxx /bin/bash でつないで mysql-server に ping してみると、ちゃんと反応あるし、ホスト側から GUI で MySQLにつなげるので良さそうな感じです。


ここまでくれば、あとはEC-CUBEを配置してインストールでいけそうな気がする!

(ということで、ようやく次回は EC-CUBE3をインストールしてみたいと思います)


以上、Docker For Mac で Kubernetes を試してEC-CUBEを動かしてみる(その3)でした。

0 件のコメント:

コメントを投稿