実例: Laravelアプリを構成してみよう
Contents
実例: Laravelアプリを構成してみよう#
前期(AS構築Ⅰ)にて作ったメモアプリを実際に構成してみましょう。 ソース一式は以下のリンクに存在しますが、ここから作ったイメージを走らせるということにします。
なお、下記のマニフェストは docker-compose.yml
ファイルをベースに構築しています。
バックエンド#
データベース部分を考えます。データベースは普通にMySQL/MariaDBとなります。 まずは「とりあえず動かす」とします、セキュリティ部分はちょっと後回し。
ストレージの確保#
ストレージはPVCで確保しておきます、512MiBとでもしておきましょうか。
# mariadbのDBストレージ部分
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: db-store
spec:
resources:
requests:
storage: 512Mi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
データベース部分#
続いてデータベースですが、この時点ではまだsecretを使わない形にしておきます。
# バックエンド(mariadb)
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
spec:
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: backend
image: mariadb:10.9.4
resources:
limits:
memory: "128Mi"
cpu: "500m"
# 現時点では環境変数渡し
env:
- name: MARIADB_RANDOM_ROOT_PASSWORD
value: "1"
- name: MARIADB_DATABASE
value: sample
- name: MARIADB_USER
value: memoadmin
- name: MARIADB_PASSWORD
value: admin
volumeMounts:
- mountPath: /var/lib/mysql
name: db-store
ports:
- containerPort: 3306
readinessProbe:
exec:
command:
- mysqladmin
- ping
- "-u"
- memoadmin
- "--password=admin"
- "-h"
- "127.0.0.1"
volumes:
- name: db-store
persistentVolumeClaim:
claimName: db-store
ここまででいちど適用して、データベースが起動できるかをみておきます。
サービス公開#
今回はフロントエンド(Web/PHP)だけで見えれば良いので、ClusterIPでいいでしょう。
# クラスタ内でbackendを見せる
apiVersion: v1
kind: Service
metadata:
name: backend
spec:
selector:
app: backend
ports:
- port: 3306
targetPort: 3306
type: ClusterIP
アクセスできるかのテストに関しては、alpineのイメージでシェルを建てて確認するぐらいで良いかと思います。
PS> kubectl run --rm --image=alpine -it alpine -- sh
/ # nslookup backend
Server: 10.96.0.10
Address: 10.96.0.10:53 # アドレスが取得できていればOK
... 以下略
/ # exit
フロントエンド#
フロントエンドはLaravelによるコードの入ったイメージを作っているので、それを呼び出しましょう。
# Laravelでのアプリ(frontend)
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
image: densukest/hello-laravel
resources:
limits:
memory: "256Mi"
cpu: "500m"
ports:
- containerPort: 80
command:
- php
- artisan
- serve
- "--port=80"
- "--host=0.0.0.0"
initContainers:
- name: init
image: densukest/hello-laravel
command:
- php
- artisan
- migrate
サービスも設定しましょう。 こちらはNodePortで設定し、外側とも接点を作っておきます。
apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
selector:
app: frontend
ports:
- port: 80
targetPort: 80
type: NodePort
両者を適用後、minikube service
でホスト側と接続してあげてみてください。