その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 件のコメント:
コメントを投稿