2018年2月17日土曜日

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

SYSTEM_KDです。

その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


毎回アクセスするポートが変わるのも面倒だったので、こっそり固定にしてます。
ついでに、MySQLの方もはっておきます

# 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)でした。


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)でした。

2018年2月12日月曜日

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

SYSTEM_KDです。


前回の続きになります。

前回は、Kubernetes にて CentOS7 + Apache + PHP7.0 の環境を用意して、Apacheを確認する部分まで進みましたので、その続きとして PHP の動作を確認してみたいと思います。

とりあえず、phpinfo でPHPの設定情報でも表示してみようと思ったのですが、イメージファイル内には phpのファイルを含めていませんでしたので表示できません。

イメージに PHP ファイルを含めるようにして再作成すれば確認できる状態になると思いますが、ファイルを変更するごとに再作成を行うのも面倒&開発環境ですので、ホストをマウントするようにしたいと思います。

※ Kubernetes 1.9.2 で試してます

ホストをマウントするボリュームを用意


ホストをマウントしようとは決めましたが、ググってもいまいちどれが良いのか分からない、、というかバージョンのせいなのか、どれも書き方が違っている・・・。


仕方がないので、公式ドキュメント + 翻訳 で頑張ってみることにします。


まず、Volume といっても 普通の Volume と 永続的なVolume でわかれているようです。


消えても良いかどうかと言われると、開発のソースコードは消えない方が良いので、永続的な Volume (PersistentVolume)を利用するようにします。


ざっくりと、説明をみてみると、「PersistentVolume」と「PersistentVolumeClaims」が必要みたいです。

うーん・・さっぱり意味がわかりません・・ ^^;



とりあえず、言われるがままに用意します。


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


実態としてはフルパスで指定したホストのパスの場所。

サイズとして、1Gi を確保


とりあえず作成してみる。


kubectl create -f centos7-volume.yml


kubectl get vp でエラーなく作成できているか確認。

NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS      REASON    AGE
centos7-volume   1Gi        RWO            Retain           Available             centos7-storage             5s


次に、PersistentVolumeClaims を用意。


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


storageClassName を PersistentVolume と合わせてあげれば上手くつながってくれるみたいです。

こっちも作成してみる。

kubectl create -f centos7-volume-claims.yml

kubectl get vpc で STATUS が Bound になってれば成功です。


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


ボリュームが作成できたので、PODと紐付けてみます。


POD と Volume を紐付け


前回しようした、「centos7.yml」に Volume について追記します。


apiVersion: apps/v1
kind: Deployment
metadata:
  name: mycentos7
  labels:
    app: mycentos7
spec:
  selector:
    matchLabels:
      app: mycentos7
  template:
    metadata:
      labels:
        app: mycentos7
    spec:
      containers:
      - name: mycentos7
        image: localhost:5000/web/mycentos7:1
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /var/www
          name: docroot
      volumes:
      - name: docroot
        persistentVolumeClaim:
          claimName: centos7-volume-claims


先程作った Volume を /var/www にマウントします。

マウントされるホスト側のディレクトリには、html ディレクトリと、phpinfo() を書いたPHPファイルを用意してます。

前回同様、

kubectl apply -f centos7.yml


で動かしてあげると、phpinfo が表示されるはず。

(サービスは前と同じです)




でました!!


とりあえず、Apache + PHP まではできたようですので、次はデーターベースに進みたいと思います。


タイトルに含めてたけど、EC-CUBEにたどり着けるのはまだ先になりそう。。


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



2018年2月10日土曜日

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

SYSTEM_KDです。

ブログを放置しまくっていますが、久々に書きたいと思います。
(もう2月というのに今年初投稿とは、、もっと適当に頑張ろっと)

Docker for mac で Kubernetes (Beta版) が利用できるようになったらしいので、試してみます。

Docker の使い方を教えてもらってから、開発環境は Docker を利用しており、Kubernetes も試してみたかったというか、興味があったものの、よく分からず手が出せておりませんでした。。 ^^;

ということで、基本よく分からない状態でゴニョゴニョやってみたいと思います。

最終的には、EC-CUBEが動く状態の環境を作りたいという趣旨です。

Edge版をインストール


さっそく使ってみたいと思いますが、Docker For Mac の Stable 版ではまだ利用できず、Edge版を利用しないといけないので、インストールします。



 (と思ったのですが、一度Stable版をアンインストールしてEdge版が再インストールされるので、開発環境(主に Volume)のエクスポートを行いました)


インストールが完了して、起動したら設定を表示して、kubernetes を有効化します。



有効化できたら、利用できるようになっているはずです。
(miniKubeとかを使ってたら設定を変更する必要がありますが、そこらへんはスキップで)



インストールはできたので、さっそく何か動かしてみたいと思います。


つくる環境を考える


ゴールは、EC-CUBEを動作させるということで、LAMP環境(できればMySQLではなくPostgreSQLが良い)を作りたいと思います。


・・ググる

・・・ググる

・・・・ググる


色々と検索をしてみましたが、よくあるサンプルは nginx と WordPress あたりですね。

(まぁ、並行的に動かして・・・と考えると nginx ですよね)


EC-CUBEのシステム要件としては、WebServer は Apache なので、(というか公開を前提とした本気の環境でも無いので)とりあえず Apache を動かしてたい。。


Apache のイメージを持ってきて動かせば、とりあえず起動させるのは問題ないかと思いますが、今の開発環境をベースに試したいと思いますので、謎の縛り状態でやってみたいと思います。


[ 環境 ]
CentOS 7
Apache 2.4
PHP 7.0
MySQL ( と PostgreSQL )


まずは Apache


目指す環境が決まりましたので、順に進んでいきたいと思います。

まずはこれを用意
CentOS7 + Apache 2.4 + PHP7.0


普段は、Dockerfile を用意しておいて、docker-compose で組み立ててますが、Kubernetes でやるには、イメージをもってくるような状態にしないといけないようですので、普段の Dockerfile をもとにイメージを用意したいと思います。


・・・

プライベートなレジストリ持ってないです。はい。
(DockerHub のアカウント作ってないです ^^;


まずは、Apache と言いながら、いきなり別のことになりそうです。。


ということで、Dockerを使って自前で用意します。


version: "3"
services:
  myregistry:
    image: registry:2.6
    volumes:
      - ./myregistry:/var/lib/registry
    ports:
      - "5000:5000"


実行します
docker-compose -f docker-compose-registry.yml up -d

レジストリが用意できたら、CentOS7 +  Apache2.4 + PHP7.0 の環境のイメージを登録します。

別ディレクトリを作成して、イメージを作るためのファイルを用意します。
(別途用意ではなく、開発環境用に利用しているものを使いまわしてます)


FROM centos:7

RUN yum -y install httpd

RUN yum -y install epel-release

RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

RUN yum -y install --enablerepo=remi,remi-php70 php php-mbstring php-pdo php-gd php-xml php-zip php-mcrypt php-mysql php-pgsql

RUN yum -y update

COPY ./myconf.conf /etc/httpd/conf.d/myconf.conf

CMD [ "/usr/sbin/httpd", "-D", "FOREGROUND" ]


<VirtualHost *:80>
DocumentRoot /var/www/html

<Directory "/var/www/html">
  Require all granted
  AllowOverride All
  AddDefaultCharset utf-8
</Directory>

</VirtualHost>


version: "3"
services:
  web:
    build: .
    ports:
      - "80:80"


イメージを作成します
docker-compose -f docker-compose-web.yml build



イメージの作成が完了したら、レジストリに登録します。

イメージの名前を変えないといけないようなので、変更して登録します。
(登録したことないから、ググってコピペ状態です。。^^;


docker tag image_web:latest localhost:5000/web/mycentos7:1

で名前を変更して


docker push localhost:5000/web/mycentos7:1

で push します。


登録できたので、これをもとにようやくKubernetes に進みたいと思います。

pod 作成のために、deployment のファイルを用意します。



apiVersion: apps/v1
kind: Deployment
metadata:
  name: mycentos7
  labels:
    app: mycentos7
spec:
  selector:
    matchLabels:
      app: mycentos7
  template:
    metadata:
      labels:
        app: mycentos7
    spec:
      containers:
      - name: mycentos7
        image: localhost:5000/web/mycentos7:1
        ports:
        - containerPort: 80


では、pod を作成してみます。

kubectl apply -f centos7.yml

先程用意したファイルで作成


kubectl get pod

で pod を確認してみます。


NAME                         READY     STATUS    RESTARTS   AGE
mycentos7-6b9db6df94-xwt7q   1/1       Running   0          14s


できてるっぽいです。

Apache のテストページがみたいので、アクセスしてみたいと思います。


アクセスするには、サービスが必要みたいなので、用意します。


apiVersion: v1
kind: Service
metadata:
  name: mycentos7
  labels:
    app: mycentos7
spec:
  ports:
    - port: 80
  selector:
    app: mycentos7
  type: NodePort


サービスを作成します。

kubectl create -f centos7-service.yml


作成したサービスを確認してみます。


kubectl get svc


NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        19h
mycentos7    NodePort    10.109.140.222   <none>        80:30462/TCP   2m


できたみたいです。

では、ブラウザからアクセスしてみます。

作成したサービスのポート番号にアクセスします。

http://localhost:30462/



 表示できました。

なかなか大変だった。。


ひとまず、CentOS7 + Apache + PHP7.0 まできましたが、PHPが本当に動くのか部分は未確認なので、次回は PHP の動作確認から行いたいと思います。


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